3行で
-
tryParseは内部でparseを呼んでおり、 型変換に失敗するとparseは例外(FormatException)を返し、tryParseは例外の代わりにnullを返す -
tryParseの引数にnullを渡すと、ArgumentError(Invalid argument)が発生するが、FormatExceptionではないので、tryParseはnullを返さない -
tryParseで例外処理してるので失敗ならnullが必ず来るはずだと思い込み実装すると危険なので、null safetyが有効になるまでは注意したい
検証
- DartPadで検証した結果は以下のとおり
- null safetyだとコンパイルで気づく可能性があるので安心です
| ❌ null safety | ✅ null safety |
|---|---|
![]() |
![]() |
コメントに注意書きはあるけど...
-
int.tryParseのコメントには注意書きがあるけど、DateTime.tryParseには注意書きがなく、DateTime.parseの方にしかなかったりする - 一度誤って
nullを渡して痛い目をみないと気づかない可能性が高い
int.tryParse コメント有り |
DateTime.tryParse コメント無し |
|---|---|
![]() |
![]() |
どうする?
- null safetyは来年の春ごろらしいので今から有効にするのは時期尚早でいろいろと対応が大変です
- とりあえず、下記のような応急処置になりそう
空文字にする
final result = int.tryParse(v ?? '');
特定の型で制御する
try {
final result = int.parse(null);
print(result);
} on ArgumentError catch (e, s) {
print('✅ $e $s');
} on FormatException catch (e, s) {
print('✅ $e $s');
}
全部キャッチする
try {
final result = int.parse(null);
print(result);
} catch (e, s) {
print('✅ $e $s');
}



