foreachってfor+eachですよね。当たり前ですよね。うちは、本日までfor+reachでforeachだと思ってました。配列の要素をひとつづつたどって、最後の要素に「たどり着くまで」っていうイメージだったんですよ。ショック。こうなりゃ、各言語で配列やリストをイテレートしてみようじゃないか!
C言語
とりあえず、静的言語の代表でC。この言語での配列をたどるイメージが私を、まちがいへと追い込んだのだ。
#include <stdio.h> int main (int argc, char *argv[]) { char *yukari[] = {"Happy", "fancy", "baby", "doll"}; int i; for (i = 0; i < 4; i++) { printf("%s!\n", yukari[i]); } return 0; }
Perl
foreachをつかうPerl。だまされました。
my @yukari = qw(Happy fancy baby doll); foreach (@yukari) { print "$_!\n"; }
Python
Pythonはきれいで良いね。
yukari = ['Happy', 'fancy', 'baby', 'doll'] for call in yukari: print "%s!" % call
Ruby
Rubyはブロックを使うのでほかとちょっと雰囲気がちがいます。ブロックはいろいろできてたのしい。
yukari = ['Happy', 'fancy', 'baby', 'doll'] yukari.each do |call| puts "#{call}!" end
Scheme
なんか、勢いで書いてみた。ほんとにかじった程度なのでまとなコードなのかさえ不明。
(define yukari '("Happy" "fancy" "baby" "doll")) (define (printcall l) (print (string-append (car l) "!")) (call (cdr l))) (define (call l) (if (null? l) '() (printcall l))) (call yukari)
イテレートしてると言っていいのかこれ。
まとめ
というわけで、いろんな言語でイテレートしてみました。いろんな言語で書いてみるとおもしろい。RubyやPythonはきれいで好きです。Rubyなんかはもうeachっていうメソッドだしね。reachとか全く関係ないです。
さて、念のためそれぞれのコードの実行結果をのせておきます。どれも同じ出力ですね。メッセージを改行区切りで表示します。
$ ./fancy Happy! fancy! baby! doll!
Happy! fancy baby doll!! てなことで、明日、田村ゆかり Concert Tour 2006 * fancy baby doll *に行ってきますよ!せいいっぱい楽しむぞ!
- アーティスト: 田村ゆかり
- 出版社/メーカー: コナミデジタルエンタテインメント
- 発売日: 2006/04/19
- メディア: CD
- 購入: 1人 クリック: 117回
- この商品を含むブログ (272件) を見る