В Dart нет способа пометить функцию как потенциально выбрасываемую.
Предполагается, что все функции потенциально могут выбрасывать (если не по какой-либо другой причине, то из-за нехватки памяти или стека) ситуация переполнения).
Если вы посмотрите на Swift, throws
составляет около исключений , а не ошибок. Дарт не различает guish два, вы можете бросить все, что угодно. Swift поставил себя в положение между Java («должны объявить все брошенные исключения») и Dart или C# («не может объявить исключения»).
Пометка функции как «throwing» не помогает компилятору в любом случае, потому что он должен предполагать, что все остальные функции тоже могут. Подход Swift призван гарантировать, что четко обозначенные исключения не будут проигнорированы. Если вы не хотите, то вы можете try!
их и превратить исключение в ошибку.
Если функция выдает как часть обычного использования, вы должны document в функции документация.
Дарт также имеет проблему с функцией types . Является ли функция от int
до int
того же типа, что и другая функция от int
до int
, если последняя может выдавать? Разделение типов функций на бросание и не бросание быстро усложняются. Тем более, если вы хотите указать что выдает. Это не невозможно, но это еще одно осложнение.
Единственное, что вы получите с обновлением безопасности Dart null (в настоящее время над ним работаете), это способ заявить, что функция всегда броски. Если вы сделаете тип возврата Never
в нулевом безопасном коде, то система типов не позволит вам вернуть любое значение, и, поскольку функция завершается либо возвратом значения, либо бросая, вызов функции с типом возврата Never
может только закончиться броском.