Kotlin ( / ˈ k ɒ t l ɪ n / ) [ 3 ]は、クロスプラットフォームで静的型付けされた汎用高水準プログラミング言語であり、型推論を備えています。Kotlin はJavaと完全に相互運用できるように設計されており、Kotlin の標準ライブラリのJava 仮想マシン(JVM) バージョンはJava クラス ライブラリに依存しています。型推論により Java よりも簡潔な構文が可能になり、null 安全機能により一般的なランタイム エラーが軽減されます。Kotlin は主に JVM を対象としていますが、JavaScript (たとえば、 Reactを使用するフロントエンド Web アプリケーション用) [ 4 ]やLLVMを介したネイティブ コード(たとえば、Androidアプリとビジネス ロジックを共有するネイティブiOSアプリ用) [ 5 ]にもコンパイルされます。JetBrainsが言語開発コストを負担し、Kotlin Foundation が Kotlin の商標を保護しています。[ 6 ] [ 7 ]
2019 年 5 月 7 日、Google は Kotlin がAndroidアプリ開発者向けの推奨言語になったと発表しました。[ 8 ] 2024 年現在、Google Play の上位 1,000 の Android アプリの 95% 以上が Kotlin コードを使用しています。2024 年 5 月、JetBrains は、新しい K2 コンパイラを搭載した Kotlin 2.0 をリリースしました。これは、以前のコンパイラの最大 2 倍のコンパイル速度を提供する完全な書き直しであり、Kotlin Multiplatform の安定したサポートも含まれています。[ 9 ]同じ月、Google はGoogle I/O 2024 で Kotlin Multiplatform を正式に支持し、Android、iOS、その他のプラットフォーム間でビジネス ロジックを共有するためのアプローチとして推奨しました。[ 10 ]


その名前は、サンクトペテルブルク近郊のフィンランド湾にあるロシアの島、コトリン島に由来する。コトリンの元リードデザイナーであるアンドレイ・ブレスラフは、インドネシアのジャワ島と同じ名前を持つJavaプログラミング言語に倣って、島にちなんで名前を付けることにしたと述べている。[ 11 ]
Kotlin Gitリポジトリへの最初のコミットは2010年11月8日でした。[ 12 ]
2011 年 7 月、JetBrains は、1 年間開発が進められていた新しい JVM 言語である Project Kotlin を発表しました。[ 13 ] [ 14 ] JetBrains のリーダーである Dmitry Jemerov 氏は、 Scalaを除いて、ほとんどの言語には求めている機能が欠けていると述べました。しかし、Scala のコンパイル時間の遅さを欠点として挙げました。 [ 14 ] Kotlin の目標の 1 つは、Java と同じくらい速くコンパイルすることです。2012 年 2 月、JetBrains はApache 2 ライセンスの下でプロジェクトをオープンソース化しました。[ 15 ]
Kotlin 1.0は2016年2月15日にリリースされ、これが最初の公式安定版リリースとみなされており、JetBrainsはこのバージョンから長期的な後方互換性を約束している。[ 16 ]
Google I/O 2017で、GoogleはAndroidでのKotlinのファーストクラスサポートを発表しました。[ 6 ] 2019年5月7日、GoogleはKotlinがAndroidアプリ開発者向けの推奨言語になったと発表しました。[ 8 ]
2023 年 11 月、Kotlin/Native はバージョン 1.9.20 で安定版と宣言され、JVM なしで iOS、macOS、Linux、Windows 用のネイティブバイナリへの本番環境対応コンパイルが可能になりました。[ 17 ] [ 18 ]単一のコードベースから Android、iOS、サーバー、デスクトップ間でビジネスロジックを共有できる Kotlin Multiplatform (KMP) も、2023 年 11 月に安定版となりました。[ 19 ] [ 20 ] [ 21 ]
2024 年 5 月、JetBrains は KotlinConf 2024 で Kotlin 2.0 をリリースし、これは言語の歴史上最も重要なリリースとなりました。中心となるのは安定版の K2 コンパイラで、これはオリジナルのコンパイラ フロントエンドをゼロから完全に書き直したもので、すべてのターゲット プラットフォーム (JVM、JavaScript、WebAssembly、ネイティブ) を単一のパイプラインに統合します。[ 9 ] K2 コンパイラは、リリース前に 18,000 人以上の開発者によって 80,000 のプロジェクトにわたる 1,000 万行のコードに対して検証されました。[ 9 ]ベンチマークでは、一部のプロジェクトでコンパイル速度が最大 94% 向上し、分析フェーズは以前のコンパイラよりも最大 376% 高速化されました。[ 22 ]また、2024 年 5 月には、Google I/O 2024 で Google が Kotlin Multiplatform を正式に支持し、Android 上での KMP のファーストクラスのツールとライブラリのサポートを発表し、Google Workspace が Android、iOS、およびウェブ間で Google Docs の共有ビジネス ロジックに KMP を使用していることを明らかにしました。[ 23 ]
開発リーダーのアンドレイ・ブレスラフ氏は、KotlinはJavaよりも「優れた言語」であり、Javaコードとの完全な相互運用性も維持しつつ、企業がJavaからKotlinへ段階的に移行できるように設計された、産業レベルのオブジェクト指向言語であると述べている。 [ 24 ]
セミコロンは文の終端記号としては省略可能です。ほとんどの場合、改行だけでコンパイラは文が終了したと判断できます。 [ 25 ]
Kotlin の変数宣言とパラメータ リストでは、 Ada、BASIC、Pascal、TypeScript、Rustと同様に、データ型が変数名の後に配置されます(コロンで区切られます) 。現在のプロジェクト リーダーである Roman Elizarov 氏の記事によると、これにより変数名が整列し、特に変数宣言が連続して複数あり、1 つ以上の型が型推論するには複雑すぎる場合、または人間が理解できるように明示的に宣言する必要がある場合に、より見やすくなります。[ 26 ] [ 27 ]
KotlinにおけるScalaの影響は、オブジェクト指向プログラミングと関数型プログラミングの両方に対する広範なサポート[ 28 ]や、いくつかの具体的な機能に見られる。
Kotlin 1.3 では契約のサポートが追加されました[ 29 ]。これは標準ライブラリの宣言では安定していますが、ユーザー定義の宣言ではまだ実験段階です。契約は、契約による設計[ 30 ]プログラミング パラダイムに触発されています。
Scala.jsと同様に、Kotlin コードはJavaScriptにトランスパイルできるため、Kotlin と JavaScript の相互運用性が可能になり、Kotlin で完全な Web アプリケーションを作成したり、Kotlin バックエンドと JavaScript フロントエンド間でコードを共有したりすることが可能になります。[ 31 ]
Kotlin は、Java の静的メソッドと変数に関する制限を緩和し、クラス本体の外にそれらを存在できるようにします。静的オブジェクトと関数は、冗長なクラスレベルのスコープを必要とせずに、パッケージの最上位レベルで定義できます。Java との互換性のために、Kotlin は、JvmNameJava プロジェクトからパッケージを表示したときに使用されるクラス名を指定するアノテーションを提供します。たとえば、@file:JvmName("JavaClassName")。
C、C++、C#、Java、Goと同様に、Kotlinプログラムのエントリ ポイントは という名前の関数で、任意のコマンドライン引数を含む配列を渡すことができます。これは Kotlin 1.3 以降オプションです。[ 32 ] Perl、PHP、Unix シェルスタイルの文字列補間がサポートされています。型推論もサポートされています。main
// Hello, World! の例fun main () { val scope = "World" println ( "Hello, $ scope !" ) }fun main ( args : Array <String> ) { for ( arg in args ) { println ( arg ) } }Kotlin では、トップレベルの宣言 (クラスなど) およびクラス メンバーの可視性を制限するために、次のキーワードが提供されています: public、internal、protected、private。
クラスメンバーに適用する場合:
最上位宣言に適用する場合:
例:
// クラスは現在のモジュールからのみ可視ですinternal open class TalkativeButton { // メソッドは現在のクラスからのみ可視ですprivate fun yell () = println ( "Hey!" ) // メソッドは現在のクラスと派生クラスから可視ですprotected fun whisper () = println ( "Let's talk!" ) }internal class MyTalkativeButton : TalkativeButton () { fun utter () = super . whisper () } MyTalkativeButton (). utter ()Kotlin では、null 許容型と非許容型が区別されます。null 許容型のオブジェクトはすべて、型名の後に「?」を付けて宣言する必要があります。null 許容型のオブジェクトに対する操作には、開発者による特別な注意が必要です。値を使用する前に、明示的に、または Kotlin の null セーフ演算子を使用して、null チェックを実行する必要があります。
// 次の場合は null を返します。// - foo() が null を返す場合、// - または foo() が null ではないが bar() が null を返す場合、 // - または foo() と bar() が null ではないが baz() が null を返す場合。// 逆の場合、戻り値は foo()、bar()、baz() が null でない場合に限り null ではありません。foo () ?. bar () ?. baz ()
fun sayHello ( maybe : String? , neverNull : Int ) { // エルビス演算子の使用val name : String = maybe ?: "stranger" println ( "Hello $ name " ) }
Kotlinは高階関数と匿名関数(ラムダ式)をサポートしています。[ 33 ]
ラムダ式は中括弧{ }を使用して宣言します。ラムダ式がパラメータを取る場合は、中括弧内にパラメータを宣言し、その後に->演算子を記述します。
// 次のステートメントは、単一のパラメータを受け取り、それを println 関数に渡すラムダを定義します。val l = { c : Any? -> println ( c ) } // パラメータのないラムダは、{ } を使用して簡単に定義できます。val l2 = { print ( "no parameters" ) }Kotlin Multiplatform を使用すると、単一のコードベースでWindows、Linux、Web、Android、iOSなど複数のプラットフォームをターゲットにすることができます。[ 47 ] [ 48 ]
KMPは2023年11月に安定版となり、Google I/O 2024では、AndroidとiOS間でビジネスロジックを共有するための標準的なアプローチとしてGoogleが推奨し、Google WorkspaceがAndroid、iOS、Web上のGoogle Docsの共有レイヤーにKMPを使用していることも明らかにした。[ 10 ]
Compose Multiplatform は、Android、iOS、Web、デスクトップなど複数のプラットフォーム間で UI を共有するためのオープンソースの宣言型フレームワークです。Jetpack Compose と Kotlin Multiplatform をベースにしています。[ 49 ] [ 50 ] [ 51 ] Jetpack Compose は、Kotlin コンパイラ プラグインを使用して、構成可能な関数を UI 要素に変換します。[ 52 ] 例えば、Text 構成可能関数は、画面上にテキスト ラベルを表示します。
2018年、KotlinはGitHub上で最も急速に成長した言語であり、開発者数は2017年の2.6倍でした。[ 53 ] 2020年のStack Overflow開発者調査によると、Kotlinは4番目に人気のあるプログラミング言語です。[ 54 ] GitHubの2024年Octoverseレポートでは、Kotlinはプラットフォーム上で最も急速に成長しているプログラミング言語の中で5位にランクインしました。[ 55 ]
Kotlinは2019年のO'Reilly Open Source Software Conference Breakout Awardも受賞した。[ 56 ]
Google、 Amazon Web Services、Booking.com、McDonald'sなど、さまざまな業界の多数の企業がKotlinを使用しています。[ 57 ] KMPを本番環境で使用している組織には、 Forbes、Philips、McDonald's、Squareなどがあります。 [ 58 ]
2024年のStack Overflow開発者調査によると、Kotlinは最も高く評価されているプログラミング言語の1つにランクインし、前年にKotlinを使用した開発者の約57%が今後も使用したいと回答した。[ 59 ]世界中の23,000人以上の開発者を対象に実施されたJetBrains開発者エコシステム調査2024では、KotlinはScala、Go、Rustと並んで、世界で最も高給なプログラミング言語の1つにランクインした。[ 60 ]
2017年5月のGoogle I/OでKotlinが公式のAndroid開発言語として発表されたとき、JavaとC++に次いでAndroidで完全にサポートされる3番目の言語となった。[ 61 ] Android上のKotlinは、null安全性とコードを短く読みやすくする機能により有益であると見なされている。[ 62 ]
Ktor は、JetBrains の Kotlin ファーストのサーバーおよびクライアント アプリケーション構築用フレームワークです。[ 63 ] [ 64 ] Spring Framework は、2017 年 1 月 4 日にバージョン 5 で正式に Kotlin のサポートを追加しました。[ 65 ] Kotlin をさらにサポートするために、Spring はすべてのドキュメントを Kotlin に翻訳し、コルーチンなどの Kotlin 固有の多くの機能の組み込みサポートを追加しました。[ 66 ]
2020年にJetBrainsがKotlinを使用する開発者を対象に行った調査によると、56%がモバイルアプリに、47%がWebバックエンドにKotlinを使用していることが分かりました。Kotlin開発者の3分の1強が、他の言語から移行していると回答しました。ほとんどのKotlinユーザーはAndroid(またはJVM)をターゲットにしており、Kotlin Nativeを使用しているのはわずか6%でした。[ 67 ]
2024年現在、Google Playの上位1,000のAndroidアプリのうち95%以上がKotlinコードを含んでいます。[ 68 ]
2024年までにKotlin Multiplatformが安定版となり、状況は一変しました。2024年のKMP開発者コミュニティ調査では、回答者のほぼ4分の1が過去6か月以内にKMPを採用しており、最近の急成長が示されました。さらに21%は1~3年間使用していました。GoogleもKotlinConf 2024で、Google Docsの共有ビジネスロジックをKMPに移行し、Android、iOS、Webで本番環境で実行していると報告しました。[ 69 ]
DbCの完全なセマンティクスを実装し、それを改善します。