Kotlinに関する世界観です。Javaの世界観C(各種言語)も参照のこと。
Java仮想マシンで動作する、静的型付けのオブジェクト指向言語。
Javaプログラマの大いなる時間と手間が、null参照において費やされてきました。
null参照とは、「変数がnullであるにも関わらず参照」することで、NullPointerExceptionがでる、という問題です。
この問題は、たとえば引数にnullが渡され、関数の中でその引数を参照した場合にも発生しますが、関数の実装者がnullが与えられることを想定していない場合、たとえ実装者とは別のプログラマが間違えてその関数にnullを渡した場合であっても、nullではないかどうかをきちんとif文などで比較してチェックしなければなりません。
その結果、参照型変数がnullではないかどうか、プログラマは常に神経質に怯えながらコードを書かなければならないのです。
しかしながら、nullという値を意味があって代入したり、与えたりする場合もあります。この場合は、nullを変数の値として許容するのは当然です。
この、nullが与えられることを想定している場合としていない場合がある、というのがポイントで、すなわち「nullを許容する型とnullを許容しない型で別の型にしてしまえばいい」というのがKotlinの言語的なnull安全の前提となる考え方です。
Kotlinでは、単なるStringにはnullを代入することは最初からできません。nullを許容するには、String?という別の型を使用します。すなわち、「nullが必要のない部分ではnullを許容しない文字列型(String)を使い、nullが必要な時にだけnullを許容する文字列型(String?)を使う」という発想です。
この「nullを代入できる参照の方が特別なのだ」という逆転の発想で、KotlinではString型を使う範囲において、nullチェックをする必要がないのです。どうでしょうか、この解放感は。
詳しくは以下のページにコードとともに記述されています。
後日注記:ちなみに、Rustにはnullそのものが存在しない。Rustでnullを使うには、Option型(任意の型のほかにNoneを持てる型)か、unsafeを使う必要がある。また、SwiftやTypeScript 2もnull安全。Java 8ではOptionalクラスが導入された。TypeScriptでnullを使うにはUnion型でstring | nullのようにしなければならない。ほかにもPythonなどでもnull安全がある。null安全の言語一覧は以下を参照のこと。
並列処理も参照のこと。
最近のJava界ではKotlinが流行っている。GoogleがAndroidアプリを開発するのにも使われている。
ネットを見ていると、Kotlinがとても流行っています。「Kotlinを触るとJavaには戻れない」とも。
JetBrains社(IntelliJ IDEAで知られるとてもJava界では有名な会社)のロシアの研究所で生まれ、オープンソース化されたKotlinは、Androidの公式開発言語としても知られる。
行末がセミコロン無しとか型宣言を「変数名 : 型名」で行うとか、あるいは「静的なNull安全の保証」という出来るエンジニアには嬉しい機能があり、Javaの開発中の機能やScalaなどから取り入れた機能などを盛り込んでいる。
見ていると、本当に次に来るべき言語となることが分かる。「Railsを捨ててKotlinへ」と言う人も多い中、ハーウェイへのAurora OS提供などでも取り出さされる「ロシアのIT技術」に期待がかかる。
ロシアも参照のこと。
最近のAndroidアプリ開発では、Android Studioを用いてKotlinでプログラミングを行うのが普通になりました。
Kotlinを作ったのも、Android StudioのベースになったIntelliJ IDEAも、JetBrains社の製品です。
言ってしまえば、今のIT業界は「JetBrains社の時代」であると言えます。
僕は、Androidアプリの開発を、XULや2ちゃんねる専用ブラウザとよく似ていると思います。それは「リッチなモバイルインターフェースからネットワークサーバーに接続してクライアントから利用する」からです。XULや2ch専用ブラウザがやっていたことを、再度真似しているように思えてしまいます。日本のガラパゴスインターネット界が昔歩んだ道を、アメリカやロシアも同じように歩んでいるのです。
AndroidやIntelliJ IDEAも参照のこと。
Ktor + ExposedはKotlinによるフレームワーク。
2023.08.23
IntelliJ IDEAで有名なJetBrains社のロシアの研究所が開発したロシア製のAltJava言語で、Androidアプリ開発の標準。