Kotlinのいろは2
今回は条件分岐と、ループ処理を記載しますね。
それが終わればようやくメソッドやら、クラスやら胆の部分に入っていけるかと。
条件分岐
if文
Kotlinのif文は以下のように書くことができます。
//基本の構文 if("条件1"){ //処理1 } else if("条件2"){ //処理2 } else { //処理3 }
では、実際に書いてみましょう。
//例1: 基本の書き方 var i = 1 if(i == 1){// Helloが出力される println("Hello") } else if(2){ println("World") } else { println("Fail") } //例2: {}を使わない方法も存在する。一行しか処理は書けない。 if(i == 1){ println("Hello")
Kotlin特有かなと思ったのは、if文での代入ができることでしょうか?
同じことができる言語はあるのかな?
//例3: if文での代入 var iftest = if(i == 1){ "Hello" } else if(i == 2) { "World" } else { "Fail" } println(iftest) // Helloが出力される
when文
所謂、switch文のKotlin版です。
ただ、微妙に構文が違うのと、一般的なswitch文よりも強力な機能も備えています。
when("比較対象"){ "条件1" -> "処理1" "条件2" -> "処理2" . . . //else文は必須 else -> { "該当条件がない場合の処理" } }
では実際に書いてみましょう。
//例1: 基本の書き方 var i = 1 when(i){ 1 -> { // Hello とdudeが出力される println("Hello ") println("dude") } 2 -> println("World") else -> { println("fail") } }
一般的なswitch文と違うところは、条件に定数以外、例えば関数を指定できること。
つまり、動的に条件を変更できるわけですね。
//例2: 条件に定数以外を指定 var i = 1 when(i){ 1 -> println("One") //ランダムで2か3が返ってくる関数 randomNumberTwoOrThree() -> println("Two or Three") //4から10のレンジで指定 in 4..10 -> println("Ranged 4 to 10") //それ以外 else -> { println("fail") } }
関数を条件にするのは使えるかわからないけど、
4..10のようなレンジ指定は便利ですね。
大量に条件分岐を書かずに済みます。
ループ制御
基本は普通のループですが、Kotlin特有の機能が盛り込まれているようですね。
そこを吸収しつつやっていきましょう。
while文
言わずと知れた、コンディショナルループ。
//一般的なwhile文 while("条件"){ "処理" } //do-while文 do{ "処理" } while ("条件")
では、実例をどうぞ(てきとう
// 基本のwhile文 var counter = 0 while (counter < 3){ println(counter) counter++ } //基本のdo-while //違いとして、do内部が最低一度は実行される。 counter = 0 do { println(counter) counter++ } while (counter == 0)
for文
for文は基本は同じですね。
ただ、continueとbreakには少し不思議な仕様がありますね。
for("ループ数に関する処理"){ "処理" }
では実例でを見ていきましょう。
// 作成したarrayの要素分だけループする for(x in arrayOf(1, 2, 3)){ println(x) // 1 2 3と出力される } // 事前に作っておいた配列でループする。 for(i in 1..10){ println(i) // 1から10まで順に出力される }
では、件のbreakとcontinueの件ですが、
break@ラベル名やcontinue@ラベル名を指定することにより、
ラベル名の位置まで、スーパーマリオ並みのジャンプをかますことができます。
個人的にはあんまり使わないほうがいい気もしますが・・・
この仕様、C言語のgoto文を彷彿とさせるため、
処理を追っていくのが極端に大変になりそうな予感がします。
start@ for (i in 1..10){ println("i=" + i) for(j in 1..10){ if(y == 5){ break@start } println("j=" + j) } } println("finish")
説明しずらいので、できれば実際に実行してみてください。
解釈としては、breakを通るとiのループネストでbreakした扱いになるので、
すぐにfinish!が出力されます。
試しに、breakをcontinueにするとまた違った出力結果になります。
まとめ
結構基本的、分岐とループ構文ですが、やはり言語的な特徴が出ていますね。
ただ、大きい意味での仕様は、一般的な構文と大差ないので、
そこまで気にする必要はないと思います。
参照
多くの情報は、この書籍を参考に記載しております。
Kotlinスタートブック -新しいAndroidプログラミング
- 作者: 長澤太郎
- 出版社/メーカー: リックテレコム
- 発売日: 2016/07/13
- メディア: 単行本(ソフトカバー)
- この商品を含むブログ (1件) を見る