Kotlin-control-flow

提供:Dev Guides
移動先:案内検索

Kotlin-制御フロー

前の章では、Kotlinシステムで利用可能なさまざまなタイプのデータタイプについて学習しました。 この章では、Kotlinで利用可能なさまざまなタイプの制御フローメカニズムについて説明します。

If-その他

Kotlinは関数型言語であるため、Kotlinのすべての関数型言語のように*「if」は式であり、キーワードではありません。 式“ if” は、必要なときに値を返します。 他のプログラミング言語と同様に、“ if-else” *ブロックは、初期条件チェック演算子として使用されます。 次の例では、2つの変数を比較し、それに応じて必要な出力を提供します。

fun main(args: Array<String>) {
   val a:Int = 5
   val b:Int = 2
   var max: Int

   if (a > b) {
      max = a
   } else {
      max = b
   }
   print("Maximum of a or b is " +max)

  //As expression
  //val max = if (a > b) a else b
}

上記のコードは、ブラウザーでの結果として次の出力を生成します。 この例には、*“ If” *ステートメントを式として使用する方法を示す別のコード行も含まれています。

Maximum of a or b is 5

Whenの使用

他のプログラミング言語に精通している場合は、switchステートメントという用語を聞いたことがあるかもしれません。これは基本的に、特定の変数に複数の条件を適用できる場合の条件演算子です。 *「when」*演算子は、変数値を分岐条件と照合します。 分岐条件を満たしている場合、そのスコープ内でステートメントを実行します。 次の例では、Kotlinの「いつ」について詳しく学習します。

fun main(args: Array<String>) {
   val x:Int = 5
   when (x) {
      1 -> print("x = = 1")
      2 -> print("x = = 2")

      else -> {//Note the block
         print("x is neither 1 nor 2")
      }
   }
}

上記のコードは、ブラウザに次の出力を生成します。

x is neither 1 nor 2

上記の例では、Kotlinコンパイラーは x の値を特定のブランチと一致させます。 どのブランチとも一致しない場合、else部分を実行します。 実際には、whenは、複数のifブロックと同等です。 Kotlinは、開発者に別の柔軟性を提供します。開発者は、チェック内に「、」を提供することにより、同じ行に複数のチェックを提供できます。 上記の例を次のように変更します。

fun main(args: Array<String>) {
   val x:Int = 5
   when (x) {
      1,2 -> print(" Value of X either 1,2")

      else -> {//Note the block
         print("x is neither 1 nor 2")
      }
   }
}

ブラウザで同じことを実行すると、ブラウザで次の出力が生成されます。

x is neither 1 nor 2

ループ用

ループは、あらゆる種類のデータ構造を反復処理する柔軟性を提供するような発明です。 他のプログラミング言語と同様に、Kotlinも多くの種類のループ方法論を提供しますが、その中でも*「For」*は最も成功した方法です。 Forループの実装と使用は、概念的にはJava forループに似ています。 次の例は、実際の例で同じものを使用する方法を示しています。

fun main(args: Array<String>) {
   val items = listOf(1, 2, 3, 4)
   for (i in items) println("values of the array"+i)
}

上記のコードでは、「items」という名前のリストを1つ宣言し、forループを使用して、その定義済みリストを反復処理し、その値をブラウザーに出力しています。 出力は以下のとおりです。

values of the array1
values of the array2
values of the array3
values of the array4

コードの別の例を次に示します。ここでは、ライブラリ関数を使用して開発作業をこれまでになく簡単にします。

fun main(args: Array<String>) {
   val items = listOf(1, 22, 83, 4)

   for ((index, value) in items.withIndex()) {
      println("the element at $index is $value")
   }
}

コーディングの場で上記のコードをコンパイルして実行すると、ブラウザに次の出力が生成されます。

the element at 0 is 1
the element at 1 is 22
the element at 2 is 83
the element at 3 is 4

WhileループとDo-Whileループ

whileとDo-Whileは、他のプログラミング言語とまったく同じように機能します。 これら2つのループの唯一の違いは、Do-whileループの場合、ループの最後で条件がテストされることです。 次の例は、* Whileループ*の使用法を示しています。

fun main(args: Array<String>) {
   var x:Int = 0
   println("Example of While Loop--")

   while(x< = 10) {
      println(x)
      x++
   }
}

上記のコードは、ブラウザに次の出力を生成します。

Example of While Loop--
0
1
2
3
4
5
6
7
8
9
10

Kotlinには、Do-Whileループと呼ばれる別のループもあります。ループ本体は1回実行され、その後のみ条件がチェックされます。 次の例は、* Do-whileループ*の使用法を示しています。

fun main(args: Array<String>) {
   var x:Int = 0
   do {
      x = x + 10
      println("I am inside Do block---"+x)
   } while(x <= 50)
}

上記のコードは、ブラウザに次の出力を生成します。 上記のコードでは、KotlinコンパイラーがDOブロックを実行してから、whileブロックの条件チェックに進みます。

I am inside Do block---10
I am inside Do block---20
I am inside Do block---30
I am inside Do block---40
I am inside Do block---50
I am inside Do block---60

Return、Break、Continueの使用

プログラミング言語に精通している場合は、アプリケーションに適切な制御フローを実装するのに役立つさまざまなキーワードのアイデアが必要です。 以下は、ループまたはその他のタイプの制御フローを制御するために使用できるさまざまなキーワードです。

*Return* -Returnは、呼び出された関数から呼び出し元の関数に値を返すキーワードです。 次の例では、Kotlinコーディンググラウンドを使用してこのシナリオを実装します。
fun main(args: Array<String>) {
   var x:Int = 10
   println("The value of X is--"+doubleMe(x))
}
fun doubleMe(x:Int):Int {
   return 2*x;
}

上記のコードでは、別の関数を呼び出し、入力に2を掛けて、結果の値をメイン関数である呼び出された関数に返しています。 Kotlinは、次の章で説明する異なる方法で関数を定義します。 今のところ、上記のコードがブラウザに次の出力を生成することを理解するだけで十分です。

The value of X is--20

継続と中断-継続と中断は論理的な問題の最も重要な部分です。 「break」キーワードは、何らかの条件が失敗した場合にコントローラーフローを終了し、「continue」はその逆を行います。 この操作はすべて、即時の可視性で行われます。 Kotlinは他のプログラミング言語よりも賢く、開発者は可視性として複数のラベルを適用できます。 次のコードは、このラベルをKotlinに実装する方法を示しています。

fun main(args: Array<String>) {
   println("Example of Break and Continue")
   myLabel@ for(x in 1..10) {//appling the custom label
      if(x = = 5) {
         println("I am inside if block with value"+x+"\n-- hence it will close the operation")
         break@myLabel//specifing the label
      } else {
         println("I am inside else block with value"+x)
         continue@myLabel
      }
   }
}

上記のコードは、ブラウザに次の出力を生成します。

Example of Break and Continue
I am inside else block with value1
I am inside else block with value2
I am inside else block with value3
I am inside else block with value4
I am inside if block with value5
-- hence it will close the operation

ご覧のとおり、コントローラーは x の値が5になるまでループを続けます。 x の値が5に達すると、ifブロックの実行を開始し、breakステートメントに達すると、制御フロー全体がプログラムの実行を終了します。