Dart2の仕様はたぶんC#やTypeScriptと同じだと思うけど、実際これよりガチガチにされるとそれはそれで面倒なんですよね。 int id で、今まではidがない時はnullだったのが、null不許可だから、int?とかにするか、0を入れましょうみたいにせざるを得なくなる。 前者の場合はほぼ全ての使用箇所はintなのに毎回nullチェックが必要になって逆に不便になって、後者の場合はぬるぽが出ないだけで違う不具合になる。 それを回避するためのnull!も潰したんじゃ、たぶんかなり面倒くさくなるよ。
外部データとの連携はどうやっているのだろう (スコア:1)
nullが許容されているDBのレコードやJSONは入力は0や''に変換して出力はnullに書き戻す?
いやそれだとnullだったという情報は保持しておかないといかんな。いっそnullを許容したほうが...。
Re:外部データとの連携はどうやっているのだろう (スコア:0)
null不許容なデータ型が全面的に使えるというだけで、null値が必要な場面ではnull許容なデータ型を使える。それぞれint(nullなし)とint?(nullあり)のように表記する。軽くググったところ、そういう感じらしい。
Re:外部データとの連携はどうやっているのだろう (スコア:2, 参考になる)
分かっていない人が相当に多い。窓の杜の説明も誤解を招く書き方だし。
基本的にはnullを許容しない型にはnullを一切許容しない、nullを許容する型にはnullが来たときの処理を必ず書かないといけない。書かないと編集時にエラーになるし、実行もできない。だから、実行時エラーにはならない。
Dart2でもnullの場合の処理を書かないといけないことがほとんどだったけど、!を使うことでnullが来る可能性があってもnullを許容しない型として扱うことができた。Dart3でそれはできない。
nullの代わりに適当なオブジェクト仕立てて誤魔化そう、という方向性のものではない。
Re: (スコア:0)
Dart2の仕様はたぶんC#やTypeScriptと同じだと思うけど、実際これよりガチガチにされるとそれはそれで面倒なんですよね。
int id で、今まではidがない時はnullだったのが、null不許可だから、int?とかにするか、0を入れましょうみたいにせざるを得なくなる。
前者の場合はほぼ全ての使用箇所はintなのに毎回nullチェックが必要になって逆に不便になって、後者の場合はぬるぽが出ないだけで違う不具合になる。
それを回避するためのnull!も潰したんじゃ、たぶんかなり面倒くさくなるよ。
Re: (スコア:0)
前者です。Dart2と実質的には変わっていません。チェックが必要な部分はIDEが教えてくれます。if文でnullの場合とそうでない場合の処理を書く、null合体演算子でnullのときの値を決める、ということが強制されます。
nullを扱える言語において、かつてはプログラマの判断で書いていましたが、IDEが必要なところ、不必要なところを教えてくれて、問題があれば実行ができない、というだけのこと。必要最低限で済むのでそうでない言語よりも楽ですよ。
最近の言語と言うと、私は他にKotlinくらいしか知りませんが、他の言語も似たようなものでしょう。