JavaA2Z

KAB-studio > プログラミング > JavaA2Z > forとは

for

日本語 ~のあいだ
英語 for
ふりがな ふぉー
フリガナ フォー

解説

一定回数の繰り返しをうための予約語
forステートメントで使用する。
 
繰り返し処理、つまり「ループ」をうための予約語
「for( 初期化; 評価; 更新 ){ 繰り返しう処理 }」という書式で「繰り返しう処理」を複数回実することができる。
詳しい書式については「forステートメント」の項目を参照
また、J2SE 5.0から「拡張for」という、配列コレクションの走査に特化した構文が追加された。こちらについては「拡張for」の項目を参照のこと。

forはまず「初期化」を実する。
通常、ここでは「カウンター」に当たる変数宣言い、変数宣言及び初期化う。
 
次に「評価式」を実する。
この「評価式」内の処理は必ずbooleanの結果を戻り値として返す必要があるため、==演算子といった評価演算子や、boolean戻り値を持つメソッド呼び出しを記述する。
通常、この「評価式」では「初期化」で初期化したカウンターの値が「繰り返し回数」未満かどうかチェックする。つまり「カウンター < 繰り返し回数」と記述する。
 
評価式」内の式から返された値がtrueの場合、「繰り返しう処理」、つまりfor直後のブロック内が実される。
falseの場合、ブロックへは入らず、その次の処理へと移る。
 
評価式」の結果がtrueでありブロック内が処理されると、今度は「更新」が実される。
通常、「更新」ではカウンターの値を1増やす(インクリメントする)。
 
「更新」後、再び「評価式」が処理される。
カウンターが「更新」で増やされ、それが「評価式」で「繰り返し回数未満」かどうかチェックされ、繰り返し回数未満であれば再びブロック内が処理され、超えていればブロック内を処理せず次の処理へと移る、つまり「forループから抜ける」ことになる。
 
流れとしては「初期化」→「評価式」→「繰り返しう処理」→「更新」→「評価式」→「繰り返しう処理」→「評価式」→...→「評価式」→「繰り返しう処理」→「更新」→「評価式」という
順番となる。
 
上記の説明で「通常」と記述した例は、forを使用する上での「よく使われるパターン」である。
「for( int iF1 = 0; iF1 < 繰り返し回数; ++iF1 ){ 繰り返しう処理 }」をパターンとして使用するのがいいだろう。
 
この「通常」でない方法で使用することも可能である。
たとえば、イテレーターを使用する場合には「評価式」ではhasNext()メソッド呼び出し、「更新」は空にし、ブロックの先頭でnext()メソッド呼び出し要素を取り出す。
 
ただし、このイテレーターの使用例も「よく使われるパターン」がありそれを使用することが多い。
forは自由度が高いため様々な記述方法ができるが、そういった「イレギュラーな使用方法」はプログラムの理解を難しくするため可読性が低くなる。
たとえば、forは上記の例で言うところの「カウンター」が、ブロック内で増減するような処理には向いていない。forはあくまで「一定回数」の繰り返し処理をうためのものであり、回数が不定の場合にはwhileを使用した方が良い。

参考サイト


(KAB-studioからのおしらせです)

サンプルプログラム(とか)サンプルを別ウィンドウで表示サンプルをクリップボードへコピー(WindowsでIEの場合のみ)

// Sample.java
import java.util.ArrayList;
import java.util.Iterator;

public class Sample
{
    public static void main( String[] args )
    {
        // forを使って3回同じ処理をします。
        forint iF1 = 0; iF1 < 3; iF1++ )
        {
            // この中に記述した処理が、「繰り返し行う処理」です。
            // この例ではiF1を出力しています。
            System.out.println( iF1 );
        }
        // 0
        // 1
        // 2

        // これが基本的な「一定回数繰り返し」のパターンです。
        // 「3」の所を「繰り返す回数」に置き換えればいいだけなので簡単です。

        // イテレーターでの使用例。
        ArrayList arylst = new ArrayList();
        arylst.add( new Integer( 100 ) );
        arylst.add( new Integer( 200 ) );
        arylst.add( new Integer( 300 ) );
        for( Iterator iter = arylst.iterator(); iter.hasNext(); )
        {
            Integer integer = (Integer)iter.next();
            System.out.println( integer );
        }
        // 100
        // 200
        // 300

        // これが基本的な「イテレーター」のパターンです。
        // ブロックの最初で行っている変数の宣言と、
        // キャストするクラスだけ修正すればいいだけなので簡単です。

        // for( 初期化; 評価式; 更新 )の初期化・評価式・更新が
        // どのように呼ばれるのか試してみます。
        ForFor forFor = new ForFor();
        for( forFor.init(); forFor.isMax() == false; forFor.next() )
        {
            System.out.println( forFor.getCounter() );
        }
        // ForFor#init()
        // ForFor#isMax()
        // 0
        // ForFor#next()
        // ForFor#isMax()
        // 1
        // ForFor#next()
        // ForFor#isMax()
        // 2
        // ForFor#next()
        // ForFor#isMax()

        // このように、まず「初期化」が処理され、次に「評価式」が評価されます。
        // 「評価式」がtrueの場合、ブロック内が処理されます。
        // 1周して戻ってきたら、「更新」を処理した後、再び「評価式」を評価します。
        // これを繰り返し、「評価式」がfalseの場合に、ブロックを処理せず
        // ブロックの次へと処理が移ります。
    }
}

/**
*   テスト用ForForクラス。
*/
class ForFor
{
    // カウンター。
    private int counter = 0;

    /**
    *   「初期化」時に呼び出すメソッド。
    */
    public void init()
    {
        System.out.println( "ForFor#init()" );
        counter = 0;
    }

    /**
    *   「評価式」時に呼び出すメソッド。
    *   counterが3未満であればfalse、それ以外はtrueを返します。
    */
    public boolean isMax()
    {
        System.out.println( "ForFor#isMax()" );
        if( counter < 3 )
        {
            return false;
        }
        return true;
    }

    /**
    *   「更新」時に呼び出すメソッド。
    *   カウンターを1増やします。
    */
    public void next()
    {
        System.out.println( "ForFor#next()" );
        ++counter;
    }

    /**
    *   カウンターを取得するメソッド。
    */
    public int getCounter()
    {
        return counter;
    }
}
// Sample.java
import java.util.ArrayList;
import java.util.Iterator;

public class Sample
{
    public static void main( String[] args )
    {
        // forを使って3回同じ処理をします。
        for( int iF1 = 0; iF1 < 3; iF1++ )
        {
            // この中に記述した処理が、「繰り返し行う処理」です。
            // この例ではiF1を出力しています。
            System.out.println( iF1 );
        }
        // 0
        // 1
        // 2

        // これが基本的な「一定回数繰り返し」のパターンです。
        // 「3」の所を「繰り返す回数」に置き換えればいいだけなので簡単です。

        // イテレーターでの使用例。
        ArrayList arylst = new ArrayList();
        arylst.add( new Integer( 100 ) );
        arylst.add( new Integer( 200 ) );
        arylst.add( new Integer( 300 ) );
        for( Iterator iter = arylst.iterator(); iter.hasNext(); )
        {
            Integer integer = (Integer)iter.next();
            System.out.println( integer );
        }
        // 100
        // 200
        // 300

        // これが基本的な「イテレーター」のパターンです。
        // ブロックの最初で行っている変数の宣言と、
        // キャストするクラスだけ修正すればいいだけなので簡単です。

        // for( 初期化; 評価式; 更新 )の初期化・評価式・更新が
        // どのように呼ばれるのか試してみます。
        ForFor forFor = new ForFor();
        for( forFor.init(); forFor.isMax() == false; forFor.next() )
        {
            System.out.println( forFor.getCounter() );
        }
        // ForFor#init()
        // ForFor#isMax()
        // 0
        // ForFor#next()
        // ForFor#isMax()
        // 1
        // ForFor#next()
        // ForFor#isMax()
        // 2
        // ForFor#next()
        // ForFor#isMax()

        // このように、まず「初期化」が処理され、次に「評価式」が評価されます。
        // 「評価式」がtrueの場合、ブロック内が処理されます。
        // 1周して戻ってきたら、「更新」を処理した後、再び「評価式」を評価します。
        // これを繰り返し、「評価式」がfalseの場合に、ブロックを処理せず
        // ブロックの次へと処理が移ります。
    }
}

/**
*   テスト用ForForクラス。
*/
class ForFor
{
    // カウンター。
    private int counter = 0;

    /**
    *   「初期化」時に呼び出すメソッド。
    */
    public void init()
    {
        System.out.println( "ForFor#init()" );
        counter = 0;
    }

    /**
    *   「評価式」時に呼び出すメソッド。
    *   counterが3未満であればfalse、それ以外はtrueを返します。
    */
    public boolean isMax()
    {
        System.out.println( "ForFor#isMax()" );
        if( counter < 3 )
        {
            return false;
        }
        return true;
    }

    /**
    *   「更新」時に呼び出すメソッド。
    *   カウンターを1増やします。
    */
    public void next()
    {
        System.out.println( "ForFor#next()" );
        ++counter;
    }

    /**
    *   カウンターを取得するメソッド。
    */
    public int getCounter()
    {
        return counter;
    }
}

この単語を含むページ

「サンプルプログラムとか」に含まれているページ

はてなブックマーク 詳細を表示 はてなブックマーク ブックマーク数
livedoorクリップ 詳細を表示 livedoorクリップ ブックマーク数
Yahoo!ブックマーク 詳細を表示 users
del.icio.us 登録する RSSに登録
サンプルを別ウィンドウで表示
サンプルをクリップボードへコピー(WindowsでIEの場合のみ)
update:2009/06/03
このページは、Javaプログラミング言語についての用語を網羅した辞書「JavaA2Z」の一ページです。
詳しくは「JavaA2Z」表紙の説明をご覧ください。