Scala-for-loop
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: " + 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: " + a );
println( "Value of b: " + 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: " + 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: " + 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: " + 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