言語ごとに書き方が若干異なる部分を中心にまとめています。
特徴
Kotlinは、JetBrainsによって開発されたプログラミング言語です。その特徴は以下の通りです。
- Javaとの互換性が高いこと
- Null安全性を持っていること
- 関数型プログラミングに対応していること
- Extension functionやLambdaなどの高機能な機能を持っていること
- Androidアプリ開発に適していること
Kotlinは、Java言語と互換性が高いため、Javaで書かれた既存のコードをKotlinに簡単に移植することができます。
また、KotlinはNull安全性を持っているため、NullPointerExceptionを防ぐことができます。
Kotlinは関数型プログラミングにも対応しており、LambdaやExtension functionなどの高機能な機能を持っています。
特にAndroidアプリ開発には適しているため、Googleが推奨言語として採用しています。
お試し実行環境

ブラウザでプログラミング・実行ができる「オンライン実行環境」| paiza.IO
paiza.IOはオンラインですぐにプログラミングが始められる、オンライン実行環境です。Java,Ruby,Python,PHP,Perlなど主要32言語に対応。プログラミング学習にも。
参考サイト

404 | Page Not Found | Android Developers
次の機能は、他の言語で使用されている機能とKotlinで異なる場合があります。 Kotlin型は暗黙的に変換できません。キャストを使用してください。 val で宣言された変数は、一度しか割り当てることができません。 Kotlin変数は、デフォルトでは null にできません。 ? 変数をヌル可能にするために使用します。 Kotlinを使用すると、ループ内で配列のインデックスと要素を同時にforループできます。 次のKotlinプログラミング構造は、他の言語のものと似ています。 配列とリストには、単一のタイプまたは混合タイプを含めることができます。 配列とリストはネストできます。 ループを作成することができ、 for 、 while 、 do/while 、と repeat が使えます。 when は switch のKotlinバージョンであるが、 when の方がより柔軟です。

Android Basics with Compose course | Android Developers
The official site for Android developers. Provides the Android SDK and documentation for app developers and designers.

Android Basics with Compose course | Android Developers
The official site for Android developers. Provides the Android SDK and documentation for app developers and designers.
ログだし
println("Hello world")
コメント
// 1行コメント /* 複数行コメント */
変数宣言
var hoge = "HOGE" // varは再代入可能な変数 val fuga = "FUGA" // valは再代入不可な変数(他の言語でいうconstやfinalと同じイメージ) //val piyo // valは初期値無しで宣言できない hoge = "HOGEHOGE" //fuga = "FUGAFUGA" // 再代入不可なのでエラーとなる
比較演算子
| 演算子 | 説明 |
| == | 等しい |
| != | 等しくない |
| > | より大きい |
| >= | 以上 |
| < | より小さい |
| <= | 以下 |
| === | 同一オブジェクト |
| !== | 異なるオブジェクト |
論理演算子
| 演算子 | 説明 |
| && | And |
| || | Or |
| ! | Not |
if (true && true) {
println("true")
}
if (true || false) {
println("true")
}
if (!false) {
println("true")
}
繰り返し
for (i in 1..10) {
println(i);
}
for (i in 1..10 step 2) {
println(i);
}
for (i in 1..5) print(i) for (i in 5 downTo 1) print(i) for (i in 3..6 step 2) print(i) for (i in 'd'..'g') print(i)
val school = arrayOf("shark", "salmon", "minnow")
for (element in school) {
print(element + " ")
}
for ((index, element) in school.withIndex()) {
println("Item at $index is $element\n")
}
var bubbles = 0
while (bubbles < 50) {
bubbles++
}
println("$bubbles bubbles in the water\n")
do {
bubbles--
} while (bubbles > 50)
println("$bubbles bubbles in the water\n")
repeat(2) {
println("A fish is swimming")
}
配列
val array = arrayOf(1, 2, 3, 4, 5)
for (i in array) {
println(i)
}
val array = arrayOf(1, 2, 3, 4, 5)
array.forEach { i ->
println(i)
}
val array = arrayOf(1, 2, 3, 4, 5)
array.forEach {
println(it) //暗黙的な書き方、itに要素が代入される
}
val school = listOf("mackerel", "trout", "halibut")
println(school)
val myList = mutableListOf("tuna", "salmon", "shark")
myList.remove("shark")
val school = arrayOf("shark", "salmon", "minnow")
println(java.util.Arrays.toString(school))
val mix = arrayOf("fish", 2)
val numbers = intArrayOf(1,2,3) val numbers3 = intArrayOf(4,5,6) val foo2 = numbers3 + numbers println(foo2[5])
val array = Array (5) { it * 2 }
println(java.util.Arrays.toString(array))
条件式
val numberOfFish = 50
val numberOfPlants = 23
if (numberOfFish > numberOfPlants) {
println("Good ratio!")
} else {
println("Unhealthy ratio")
}
if (numberOfFish == 0) {
println("Empty tank")
} else if (numberOfFish < 40) {
println("Got fish!")
} else {
println("That's a lot of fish!")
}
when (numberOfFish) {
0 -> println("Empty tank")
in 1..39 -> println("Got fish!")
else -> println("That's a lot of fish!")
}
val fish = 50
if (fish in 1..100) {
println(fish)
}
文字列操作
val numberOfFish = 5
val numberOfPlants = 12
"I have $numberOfFish fish" + " and $numberOfPlants plants"
"I have ${numberOfFish + numberOfPlants} fish and plants"
ヌル可能性
var marbles: Int? = null
var fishFoodTreats = 6
if (fishFoodTreats != null) {
fishFoodTreats = fishFoodTreats.dec()
}
fishFoodTreats = fishFoodTreats?.dec() ?: 0
val len = s!!.length // throws NullPointerException if s is null


