言語ごとに書き方が若干異なる部分を中心にまとめています。
特徴
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言語に対応。プログラミング学習にも。
参考サイト
Kotlin Bootcamp for Programmers | Training Courses | 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