今回からプログラマに優しい現実指向JVM言語 Kotlinを紹介します。最終的なゴールとしてはKotlinを使ったAndroidアプリケーション開発を解説します。今回は導入として、
Kotlinとは
Kotlin
IntelliJ IDEAなどのIDE
Kotlinで書かれたコードはJVM
Kotlinは型推論やラムダ式、
なぜKotlinなのか
世の中には、
まず言えることは、
JVM言語だけでもその数は非常に多いです。有名なものでは、
- Java互換
- 少なくともJavaと同等のコンパイル速度
- Javaよりも安全:nullポインタの逆参照
[1] のようなありふれた落とし穴のための静的チェックなど - Javaよりも簡潔:型変数の推論、
高階関数 (クロージャ)、 拡張関数、 ミックスインや第一級デリゲーションなどをサポート - Scalaよりもシンプルな方法で、
表現力を実用的なレベルに維持する
特徴的なのは、NullPointerException
が起こり得ないようなしくみ
Kotlinの特徴
簡潔、
簡潔であること
Kotlinはコード自体のシンプルさはもとより、
package sample
fun main(args: Array<String>) {
val message = "Hello, world!"
println(message)
}
CLIの黒い画面から挨拶文が表示されるだけのプログラムですが、fun
キーワードが関数定義のために必要なキーワードです。そしてmain
という名前で、Array<String>
型の引数を取る関数がKotlinプログラムのエントリポイントです。変数の型を、
表示するメッセージを変数message
に代入しています。Kotlinではvalキーワードなどを使って変数を宣言します。message
はString
型ですが、
println
は引数の値を標準出力に書き出す関数です。;
安全であること
前述のとおり、null
の扱いが厳格です。たとえばKotlinではキャストやnull
の逆参照による実行時例外が起こることは非常にまれです。
Kotlin ではnull
が代入され得る変数と、b
へnull
を代入しようとしている個所でコンパイルエラーとなります。通常の型String
)null
は代入できないのです。
val a: String = "Kotlin" // OK
val b: String = null // NG!!
少し変更を加えたリスト3はコンパイルに成功します。変数とd
の型がString?
になっています。
null
を代入できるval c: String? = "Kotlin" // OK
val d: String? = null // OK
このような?
が末尾に付く型の変数はnull
を代入可能です。しかし、NullPointerException
を防ぎNULL
安全を貫くためです。NULL
安全については、
JavaバイトコードとJavaScriptへコンパイル可能であること
すでに紹介したようにKotlinはJVM言語であり、
import java.nio.file.Files
import java.nio.file.Paths
fun main(args: Array<String>) {
val path = Paths.get("/memo.txt")
val lines = Files.readAllLines(path)
for (line in lines) {
println(line)
}
}
また、
静的型付けであること
Kotlinはコンパイラ言語です。これは単にインタプリタ言語よりも実行速度が速いことを意味するだけではありません。コンパイラは、
オブジェクト指向であること
Kotlinはクラスベースのオブジェクト指向言語です。Javaのように、
// Userクラスの定義
class User {
// プロパティ
var id: Long = 0
var name: String = ""
// メソッドのオーバライド
override fun toString(): String {
return "name=" + name
}
}
fun main(args: Array<String>) {
// Userインスタンス生成
// newのようなキーワードは不要
val user = User()
user.id = 12345
user.name = "Taro"
println(user.toString()) // => name=Taro
}
KotlinにはJavaと異なりプリミティブ型はなく、
クロージャの例
Kotlinには第一級オブジェクトとしての関数があります。つまり関数をほかの値と同じように関数の引数として渡したり、
Kotlinの標準ライブラリが提供するコレクション操作APIの例をリスト6に示します。
// 整数のリストを生成
val list = listOf(3, 5, 2, 7, 4)
println(list) // => [3, 5, 2, 7, 4]
// 各要素を2倍にしたリストを生成
val twice = list.map { e -> e * 2 }
println(twice) // => [6, 10, 4, 14, 8]
// 偶数の要素のみにフィルタリングしたリストを生成
val even = list.filter { e -> e % 2 == 0 }
println(even) // => [2, 4]
また、
まとめ
今回はKotlinの紹介として、
次回は開発環境の準備と、
本誌最新号をチェック!
Software Design 2022年9月号
2022年8月18日発売
B5判/
定価1,342円
- 第1特集
MySQL アプリ開発者の必修5科目
不意なトラブルに困らないためのRDB基礎知識 - 第2特集
「知りたい」 「使いたい」 「発信したい」 をかなえる
OSSソースコードリーディングのススメ - 特別企画
企業のシステムを支えるOSとエコシステムの全貌
[特別企画] Red Hat Enterprise Linux 9最新ガイド - 短期連載
今さら聞けないSSH
[前編] リモートログインとコマンドの実行 - 短期連載
MySQLで学ぶ文字コード
[最終回] 文字コードのハマりどころTips集 - 短期連載
新生「Ansible」 徹底解説
[4] Playbookの実行環境 (基礎編)