Scala-for-loop

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

Scala-forループ

*for* ループは、特定の回数実行する必要があるループを効率的に記述することができる繰り返し制御構造です。 Scalaにはforループのさまざまな形式があり、以下で説明します-

構文-範囲を持つforループ

Scalaの範囲を持つforループの最も単純な構文は-

for( var x <- Range ){
   statement(s);
}

ここで、 Range は数値の範囲で、 iからj 、または iからj までのように表現されます。 左矢印←演算子は_generator_と呼ばれ、範囲から個々の値を生成しているため名前が付けられています。

次のプログラム例を試して、Scalaプログラミング言語のループ制御ステートメント(forステートメント)を理解してください。

object Demo {
   def main(args: Array[String]) {
      var a = 0;

     //for loop execution with a range
      for( a <- 1 to 10){
         println( "Value of a: " + a );
      }
   }
}

上記のプログラムを Demo.scala に保存します。 このプログラムをコンパイルして実行するには、次のコマンドを使用します。

コマンド

\>scalac Demo.scala
\>scala Demo

出力

value of a: 1
value of a: 2
value of a: 3
value of a: 4
value of a: 5
value of a: 6
value of a: 7
value of a: 8
value of a: 9
value of a: 10

次のサンプルプログラムを試して、ループ制御ステートメント(forステートメント)を理解し、Scalaプログラミング言語で iからj までの範囲のループを出力してください。

object Demo {
   def main(args: Array[String]) {
      var a = 0;

     //for loop execution with a range
      for( a <- 1 until 10){
         println( "Value of a: " &plus; a );
      }
   }
}

上記のプログラムを Demo.scala に保存します。 このプログラムをコンパイルして実行するには、次のコマンドを使用します。

コマンド

\>scalac Demo.scala
\>scala Demo

出力

value of a: 1
value of a: 2
value of a: 3
value of a: 4
value of a: 5
value of a: 6
value of a: 7
value of a: 8
value of a: 9
  • forループ内でセミコロン(;)で区切られた複数の範囲を使用できます。その場合、ループは指定された範囲のすべての可能な計算を繰り返します。 次の例では、2つの範囲のみを使用していますが、3つ以上の範囲を使用することもできます。

object Demo {
   def main(args: Array[String]) {
      var a = 0;
      var b = 0;

     //for loop execution with a range
      for( a <- 1 to 3; b <- 1 to 3){
         println( "Value of a: " &plus; a );
         println( "Value of b: " &plus; b );
      }
   }
}

上記のプログラムを Demo.scala に保存します。 このプログラムをコンパイルして実行するには、次のコマンドを使用します。

コマンド

\>scalac Demo.scala
\>scala Demo

出力

Value of a: 1
Value of b: 1
Value of a: 1
Value of b: 2
Value of a: 1
Value of b: 3
Value of a: 2
Value of b: 1
Value of a: 2
Value of b: 2
Value of a: 2
Value of b: 3
Value of a: 3
Value of b: 1
Value of a: 3
Value of b: 2
Value of a: 3
Value of b: 3

構文-コレクションを含むforループ

コレクションを使用したループの次の構文。

for( var x <- List ){
   statement(s);
}

ここで、 List 変数は要素のリストを持つコレクション型で、_for loop_はすべての要素を繰り返し処理し、x変数の1つの要素を一度に返します。

次のサンプルプログラムを試して、数字のコレクションでループを理解してください。 ここでは、_List()_を使用してこのコレクションを作成しました。 コレクションについては、別の章で学習します。 Scalaプログラミング言語のループ制御ステートメント(forステートメント)。

object Demo {
   def main(args: Array[String]) {
      var a = 0;
      val numList = List(1,2,3,4,5,6);

     //for loop execution with a collection
      for( a <- numList ){
         println( "Value of a: " &plus; a );
      }
   }
}

上記のプログラムを Demo.scala に保存します。 このプログラムをコンパイルして実行するには、次のコマンドを使用します。

コマンド

\>scalac Demo.scala
\>scala Demo

出力

value of a: 1
value of a: 2
value of a: 3
value of a: 4
value of a: 5
value of a: 6

構文-フィルター付きforループ

Scalaのforループでは、1つ以上の if ステートメントを使用していくつかの要素をフィルターで除外できます。 以下は、_for loop_の構文とフィルターです。 「for」式に複数のフィルターを追加するには、フィルターをセミコロン(;)で区切ります。

for( var x <- List
      if condition1; if condition2...
   ){
   statement(s);
}

次のサンプルプログラムを試して、フィルター付きのループを理解してください。

object Demo {
   def main(args: Array[String]) {
      var a = 0;
      val numList = List(1,2,3,4,5,6,7,8,9,10);

     //for loop execution with multiple filters
      for( a <- numList
           if a != 3; if a < 8 ){
         println( "Value of a: " &plus; a );
      }
   }
}

上記のプログラムを Demo.scala に保存します。 このプログラムをコンパイルして実行するには、次のコマンドを使用します。

コマンド

\>scalac Demo.scala
\>scala Demo

出力

value of a: 1
value of a: 2
value of a: 4
value of a: 5
value of a: 6
value of a: 7

構文-yield付きforループ

「for」ループからの戻り値を変数に格納するか、関数を介して戻ります。 そのためには、「for」式の本文の前にキーワード yield を付けます。 以下は構文です。

var retVal = for{ var x <- List
   if condition1; if condition2...
}
yield x

注意-変数と条件を保持するために中括弧が使用されており、_retVal_はxのすべての値がコレクションの形式で格納される変数です。

次のサンプルプログラムを試して、yieldのループを理解してください。

object Demo {
   def main(args: Array[String]) {
      var a = 0;
      val numList = List(1,2,3,4,5,6,7,8,9,10);

     //for loop execution with a yield
      var retVal = for{ a <- numList if a != 3; if a < 8 }yield a

     //Now print returned values using another loop.
      for( a <- retVal){
         println( "Value of a: " &plus; a );
      }
   }
}

上記のプログラムを Demo.scala に保存します。 このプログラムをコンパイルして実行するには、次のコマンドを使用します。

コマンド

\>scalac Demo.scala
\>scala Demo

出力

value of a: 1
value of a: 2
value of a: 4
value of a: 5
value of a: 6
value of a: 7