dポイントプレゼントキャンペーン実施中!

for文とforeach文の違いがわかりません。どちらもループ文なのですがどう使い分けるのでしょうか?

A 回答 (6件)

forとforeachは使い方次第で同じ様な使い方はできますが、


それぞれで特性があります。
foreachの場合
 連想配列などのループに適している。
 readdirなどによるディレクトリ内ファイル表示で使う
 配列の内容でsortをかけたりするのが簡単

forの場合
 単純なループ(1を10回足すなど)に適しています。
 配列でループすると同時に、配列番号も取れる。

という感じでしょうか。

というように処理の内容によって使いわける事はできますが
同じような使い方もできます。

配列を総なめするような場合は
foreach $array ( @arrays ){
}
for($i=0;i<scalar(@arrays);$i++){
}
という様にループさせる事ができます。

私自身は、foreachをよく使いますが、処理の内容に
よってforも使います。
結局は特性にも書いたように、どちらのループが
処理に合っているかを考えて使えば問題無いと思います。

あと、while()の事も忘れないでくださいね(笑)
#使い方はすこし異なりますが、同じように使う事はできますから(^^;
    • good
    • 1
この回答へのお礼

配列の時はforeachを使うようにします。

お礼日時:2005/11/17 08:41

好みで。

    • good
    • 0
この回答へのお礼

一理ありますね。

お礼日時:2005/11/17 08:41

Effective Perlと言う本にはfor文とforeach文の機能は全く同じと書いています。

そう言う意味では#3の方の意見が正しいです。

実際私はforeach文は使いません。全てfor文を使っています。

同じ機能ならなくせばいいではないかと言われますが、この辺がPerlの良いところでもあり悪いところでもあるのだと思います。書き方に自由度があると言う点は良い所ですが、同一機能で2つの書き方があると言うことは可読性を悪くし、あまり良いとは言えません。

ただfor文はちゃんと終了条件を書かないと簡単に無限ループになりますが、foreachで配列の値を順番に取り出すループのさせ方では絶対に無限ループになりません。

後は適当にお好きな方を使えばいいと思います。
    • good
    • 0
この回答へのお礼

無限ループには気をつけないといけませんね。

お礼日時:2005/11/17 08:42

実は、foreach文はforでまかなうことができます。


つまり、
foreach $el (@list){
;#…
}
は、
for $el (@list){
;#…
}
と書けます。
そういう意味で言えば、foreach文を使う必要はありません。
いつもforを使えばいいのです。:-p
*
foreachを使う理由といえば、配列などをなめてアクセスするような場合に使います。
    • good
    • 0
この回答へのお礼

for使っていきます

お礼日時:2005/11/17 08:38

当たり前のことだが、foreachは配列の要素についてのループだから、


配列を使わないループには使うことができない。

例えば1から10までの数を足すといったループ
for($i=1;$i<=10;$i++){$sum+=$i;}
配列を使ってないのでforeachの使いようがない。
(もちろん適当な配列を作ってforeachを使うように書きなおすことはできるが
そんなややこしいことをする意味がない)

また、配列の添え字について何か計算を行いたいならforを使う必要がある。
例えば、0から10までの偶数を配列@evenに入れたい場合
for($i=0;$i<=5;$i++){$even[$i]=$i*2;}
foreachでは配列の添え字が参照できないので、自分でカウンタ変数を
入れてやらなければならないが、forならその手間が省ける。
    • good
    • 0
この回答へのお礼

ありがとうございました。

お礼日時:2005/11/17 08:44

ひとつの考え方としては、foreachが使える時はforeachを使う、と言うことでどうでしょうか。

    • good
    • 0
この回答へのお礼

ありがとうございました。

お礼日時:2005/11/17 08:45

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!