型システムの利点
型の利点とは、バグを入り込ませないためのものだといえるでしょう。つまり、制約をつけて保持できる状態や機能を絞るということです。だからこそ、単一責務など、そういう設計になり保守性も上がるということが期待されるわけです。
null 参照の問題も関連
null とは参照先がないことです。参照元の型はあるでしょうが、参照先自体がないので実体がなく型がない、これが問題となります。正しく参照されている場合とそうでない場合がそれぞれ生まれる、それは極端に言えば、型を2つ持っているような状態です。だから、null チェックが必要になったりする。じゃ、いっそのこと null 自体をなくしてしまおう、という方向に進むわけです。
型システムがうまく働かない場合とは?
以前にも書いた EF についての問題点 に引き続いて、Entity Framework の問題点をまた書いてしまいますが、EF Core においては顕著です。リレーションシップによって別オブジェクトとの関連を持たせることが EF としての醍醐味なのですが、EF Core では、元祖初代 EF v1 のように遅延読み込みをしなくなりました。つまり、最初にデータベースから取得するときに Include メソッドによって、他テーブルから情報を取るかどうかを決めてしまうのです。ということは? エンティティー モデル自体には参照があるのに、Include つけて呼ばれないと、ずっと null だということです。そうなのです。Include をつけるか否かで別の型のようになってしまうのです。同じ型なのに。もはや実質同じ型であるとは言えないような扱いになります。
もちろん EF でなくても起こりうる
EF は一つの例として挙げましたが、型というのは安全性が担保されてこそ活かされるものです。設計の仕方によってそれは安全にも危険にもなります。大抵の言語は型を自作するようにできていると思います。結局、そこで大切なのは私たちが造り上げていく設計なのです。 だから、後々のためにも、どうすれば安全になるかを考えて開発したいものです。