Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationEventAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
1
Help us understand the problem. What are the problem?

posted at

updated at

Organization

DartのtryParseの引数にnullを渡すとnullが返らないので注意しよう

3行で

  • tryParseは内部でparseを呼んでおり、 型変換に失敗するとparseは例外(FormatException)を返し、tryParseは例外の代わりにnullを返す
  • tryParseの引数にnullを渡すと、ArgumentError(Invalid argument)が発生するが、 FormatExceptionではないので、tryParsenullを返さない
  • 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');
}

参考

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
1
Help us understand the problem. What are the problem?