[macOS][Kotlin]開発環境を用意する仕事でAndroidアプリケーションをKotlinで開発しているので、macOSでKotlinを試してみる。IDEAを使うことにする。Editionで大丈夫だ。IDEAが入手できたら、Java仮想マシンで動作するプログラムのプロジェクトを生成する。選択して、Kotlinファイルを生成する。worldを印字するコードを書く。[macOS][Kotlin]結果とエラー情報を持つデータJavaでは結果を関数の戻る値で、エラー情報は例外で、だったが、Androidは例外を勧めていないことは以前から感じていた。Kotlinでは、例外は復旧できない致命的な状況で利用とし、既存のJavaモジュールが投げてくる例外を包み込みResult型があったりしている。自分でKotlinでプログラミングする際、あえて例外を利用する必要はないと思うので、どんなやり方が合うのか調べてみて辿り着いたコードを紹介する。参考にしたのは、ここ。AndroidはActivityやFragmentが再生成されるということから、ActivityやFragmentのメンバー変数でModelを持たないだとか、再生成されてもModelが破棄されない。ModelはActivityやFragmentをメンバー変数で持っていると再生されると破棄されたものにアクセスしてしまう問題がある。それの解決策としてJetpackのViewModelやLiveDataがあるのだが、LiveDataではエラーを例外で渡せない。結果とエラー情報がLiveDataとなっているのが扱いやすいということがあるので、結果とエラー情報を持つ型を用意することにした。classは状態を定数で持つだけ。classを使えば値を持てる。サブクラスを用意することによって、状態を持てる。プライマリコンストラクタでそれぞれのプロパティのuserとnameを宣言している。この型を戻り値にした関数がこれ。FindUserResult.NotFound(name)}成功したらFoundを返している。失敗の場合はNotFoundを返している。処理の結果や、エラー情報はコンストラクタのパラメータで設定している。この戻り値を受け取った側のコードがこれ。${result.name}")}型で成功か失敗が分かり、プロパティで結果やエラー情報が取れる。nilは許容されるものでnilに対してメソッド呼び出しを行なってもアボートしないが、Javaだとnullアクセスは例外が投げられてしまう。そのような考えの違いが、null安全についても、SwiftとKotlinで差となっているのかな?JavaではC言語の基本的データ型に相当するのが基本型(プリミティブ型)で、C言語の構造体に相当するクラスはC言語のポインタ型に相当する参照型(リファレンス型)となる。C言語と同様に値渡しのみとなる。Kotlinでは全ての型はオブジェクトで、それは参照型(リファレンス型)となる。参照型だとJavaではnullを代入できるが、Kotlinではnullが代入できるnull許容(nullable)と、null非許容(non-nullable)がある。null許容は型名に?を付ける。nullnull非許容は型名に?を付けない。以下はコンパイルでエラーとなる。nullnull許容の変数は、nullの可能性があるので、そのまま利用するとコンパイルでエラーとなる。String?セーフコール演算子(?.)を使うと、nullでない場合は評価され、nullだと回避される。s?.lengthprint(n)セーフコール演算子を使う場合は、nullでないことの確認を行うことになると思うが、素直に書くと以下のようになる。print(n)}もっとスマートに書くために、セーフコール演算子と一緒に使えるlet関数が用意されている。operator)と呼ばれる演算子(!!.)がある。operator)、または、エルヴィス演算子と呼ばれる演算子(?:)がある。t!!.lengthprint(n)let関数とnull合体演算子を組み合わせると、以下のように書ける。null.")Kotlinで特徴的なのは、文法的にnullチェックされているのが分かっている場合は、コンパイラをnullチェック済みとするところだ。s.lengthprint(n)これは開発環境を提供している会社が作ったプログラミング言語だからなせる技か。Kotlinには似たような割り切りを感じる部分が他にもある。機会があれば後で取りあげたい。reserved.このページではJavaScriptを使用しています。1.8.7-p374。