https://kotlinlang.org/docs/reference/basic-syntax.html
上記ページを読み、Dartと明らかに違う点についてKotlinの文法をまとめる。
間違った記述がある可能性があります。ご指摘いただけるとありがたいです笑
Contents
In Kotlin, if can also be used as an expression:
if文は式としても使える、と。
ということで、if-expressions.
If Expression
Kotlinでは、ifは式(expression)です。つまりifは値を返します。それゆえに、三項演算子(condition ? then : else)はありません。なぜなら、ifを使えばよいからです。
fun main(){ val a=12 val b=10 var max = a if (a < b) { //←普通にif文として使っている。 max = b } print(max); } //12
↑上記のように普通にif文として使うこともできる。
fun main(){ val a=20 val b=4 var max: Int if (a > b) { max = a } else { max = b } print(max); } //20
↑普通にif-else文として使っている。
fun main(){ val x=2 val y=6 var max=if(x>y) x else y //値を返している。 print(max) print("\n") //←改行は\n val a=4 val b=400 //↓この書き方でもOK max = if (a > b){ a }else{ b } print(max); } //6 //400
fun main(){ val a=20 val b=30 val max = if (a > b) { //こういうふうにブロックにすることもできますよと。 print("Choose a\n") a //ブロックの最後がそのブロックの値となる。returnは無くてもよい。 } else { print("Choose b\n") b } print(max) } /* Choose b 30 */
ifを式として使う場合(つまり値を返したり、その値を変数に代入したりする場合)、else節が必要ですよと。必ず何らかの値を返すように、ということ。
control flowのページは別にやるとして、とりあえず戻る。
Nullable values and null checks
↑これはDartでもnull安全の話は出てきている。もしかしたら結局同じような話なのかもしれないが、とりあえずまとめる。
工事中🏗
Type checks and automatic casts
あまり違和感は無い。↓
fun main(){ fun getStringLength(obj: Any): Int? { if (obj is String) { // この時点で自動的にobjをString型にキャストするようです。 return obj.length } // if文のブロック外ではobjはAny型、ということです。 return null } println("${getStringLength("aaaaa")}\n"); println("${getStringLength(34)}"); } /* 5 null */
ちなみにDartで同じことやったら同じ結果になったので、同様に自動的にキャストしている模様。あまり考えたこともなかった。
//Dartのコードです。 void main(){ int getSL(dynamic obj){ if(obj is String){ return obj.length; } return null; } int x=getSL("abcdefg"); print("$x"); var y=getSL(45); print("$y"); } /* 7 null */
for loop
Dartとほぼ同じ。特に無い。
fun main(){ val items = listOf("apple", "banana", "kiwifruit") for (index in items.indices) { println("item at $index is ${items[index]}") } } /* item at 0 is apple item at 1 is banana item at 2 is kiwifruit */
while loop
特に無し。
when expression
Dart(など)のswitch-case文にあたるもの、らしい。Dartと明確に違う。個別のページでまとめる。
Range
range。Dartでもあったような気がするが、うろ覚え。うろ覚えって結局それほど使わない、ということのような気もするが、一応見ておく必要はある。
後でまとめる。
Collections
for-in文でイテレート。Dartと同じ。
fun main() { val items = setOf("apple", "banana", "kiwifruit") when { "orange" in items -> println("juicy") "apple" in items -> println("apple is fine too") } } //apple is fine too
“orange” in items
これでitemsの中に”orange”があるか調べられる模様。
Dartには書き方無いっぽい。
Dartwやるなら以下のように
void main(){ List items=["apple", "banana", "kiwifruit"]; if(items.contains("appl")){ print("applがあります。"); }else{ print("applがありません。"); } } //applがありません。
containsメソッドを使えばできる。Kotlinにもあるんじゃなかろうか、知らないが。
とりあえず後でCollections overview.を見てみる。
Creating basic classes and their instances
クラス。該当ページを見る。
文法知識がほぼゼロなのでざっと目を通して行くしかない。
参考