libro
www.tuyano.com
初心者のためのPlay Framework入門

30分でわかる(かも知れない)Scala超々入門! (4/8)

作成:2013-01-10 08:17
更新:2013-01-10 08:32

■繰り返しの「while」と「for」構文

●while構文について
繰り返しの基本となるのは、「while」を使った構文です。これはJavaでもおなじみですね。以下の2つの構文が用意されています。

・while構文
while ( 条件 )
    ……繰り返す処理……

・do-while構文
do
    ……繰り返す処理……
while ( 条件 )

前者はwhileの後の条件をチェックし、trueである間、その後の処理を繰り返します。後者はdoの後の処理を実行後、whileの条件をチェックして繰り返すかどうかを決めます。これは、基本的にJavaの構文と違いはありません。

簡単な利用例を挙げておきましょう。100までの整数の合計を計算する例です。この例を見ると、Javaとほとんど変わらない感じがしますね。
object myapp {

    def main(args: Array[String]) {
        var num:Int = 0
        var total:Int = 0
        while (num <= 100){
            total += num
            num += 1
        }
        println(total)
    }

}

●繰り返しの「for」構文
もう1つの繰り返しは、「for」構文です。これは、Javaのforとはかなり違っています。以下に基本形を整理しておきます。

・for構文
for ( ジェネレータ )
    ……繰り返す処理……
for ( ジェネレータ ; フィルター )
    ……繰り返す処理……

このforは、配列などのコレクションがわからないと説明しにくいんですが……()内に、次々と値を取り出して変数に渡す「ジェネレータ」と呼ばれるものを用意することで繰り返しを行います。これは、例えば配列にある値を次々取り出すようなものを想像するとよいでしょう。これにより、配列の要素を順番に取り出していく繰り返しが作られる、というわけです。
object myapp {

    def main(args: Array[String]) {
        var total:Int = 0
        for (n:Int <- Range(1,101))
            total += n
        println(total)
    }

}
この例では、先ほどの1~100の値を合計するサンプルを書き換えました。Range(1,101)というのは、1~100までの数字がずらっと入った配列のようなものを作っていると考えてください。ここで、
for ( 変数 <- 配列など )
というように記述することで、配列から順に値を取り出し変数に代入しながら繰り返しを行わせることができます。

ところで、ジェネレータの後に「フィルター」というオプションもありますが、これはジェネレータで生成された値をフィルター処理するためのものです。ここにifの条件文などを記述することで、指定の条件にあったケースだけ繰り返しが実行されるようにできます。例えば、このサンプルのfor文を、
for (n:Int <- Range(1,101); if (n % 2 == 0))
このように書き換えてみましょう。ここでは、if (n % 2 == 0)とフィルターを指定することで、偶数の値だけを繰り返し処理させています。

※プログラムリストが表示されない場合

AddBlockなどの広告ブロックツールがONになっていると、プログラムリスト等が表示されない場合があります。これらのツールをOFFにしてみてください。

●プログラム・リスト●

●リスト1
object myapp {

    def main(args: Array[String]) {
        var num:Int = 0
        var total:Int = 0
        while (num <= 100){
            total += num
            num += 1
        }
        println(total)
    }

}

●リスト2
object myapp {

    def main(args: Array[String]) {
        var total:Int = 0
        for (n:Int <- Range(1,101))
            total += n
        println(total)
    }

}
※関連コンテンツ

「初心者のためのPlay Framework入門」に戻る