0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

if null(??) と 三項演算子(ternary operator, ?:)を併用したときエラーが出た件

Last updated at Posted at 2024-04-10

問題

?? と ?:を併用したときに、
conditions must have a static type of bool
というエラーが出てしまう
例えば、

sample.dart

 int? nullOrInt() {
     return 0;
 }

void main() {
final a = nullOrInt();
 print(a ?? 0 > 10 ? 'isTrue' : 'isFalse');
}
 

エラー表示である赤線の範囲から、staticではない、ということなのか……? と思いつつ

解決

a ?? 0の式に対して()でくくる

sample.dart

 int? nullOrInt() {
     return 0;
 }

void main() {
final a = nullOrInt();
 print((a ?? 0) > 10 ? 'isTrue' : 'isFalse');
}
 

原因はどうやら式のなかの評価の順序が意図していないものになっていたらしく、
具体的には > が先に評価されることで

    a ?? false ? 'isTrue' : 'isFalse'

と認識されてしまい、三項演算子の評価にboolではないint aがそのまま乗ってしまっていたということでした

insideで変な使用があるとかではなかった様……お恥ずかしい

最初は即時関数 (){}() とか使用していましたが、普通に () 使えばいいや、と気づきました

参考になれば幸いです

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?