質問: C() c.m() ``` --- ※タイトルを修正しました。
回答: 調べてみましたが簡単に見つからなかったので、私の個人的な見解を述べてみたいと思います。 (シンタックスハイライトがうまくいかなかったのでjavaで言語指定しています。) コード1 ``` var c: C? = null // cという変数は、Cのオプショナル型で定義し、メモリが確保され初期値はnullである。 c = C() // c参照しているメモリにオプショナルではないCのインスタンスを代入する。 c.m() ``` コード2 ``` var c: C? = C() // cという変数は、Cのオプショナル型で定義し、メモリが確保され初期値はCのインスタンスである。 c.m() ``` 違い コード1:cという変数はnullを許容し、これに**non-nullな値を代入**する。 コード2:cという変数はnullを許容し、**初期値がnon-null**である。 1ではnullを情報として初期に持っている変数に対して、途中から値が代入され、それがnon-nullだったという場合です。 2ではnull許容の型で定義された変数のあくまで初期値がnon-nullであり、そのあとでnullを含めた変数として変数を扱う可能性が十分にあります。 と述べてきましたが、私自身確信を持てるものではありません。他にもご意見などありましたら、是非とも伺いたいなと思います!