Bye Bye Moore

猫マンション建築の野望を胸に零細事業主として資本主義の荒波に漕ぎ出したアラサー男の技術メモ

Rubyにおけるレアケースfor文による繰り返し表現について

コードリーディング中に久々にforを見かけたのでメモします。

Rubyにもfor文による繰り返し表現があります。
たとえば、多重配列を弄るには以下のようにします。

for first, second, third in [[1,2,3],[4,5,6],[7,8,9]]
  puts first, second, third
end  

これをeachで書き直すと

 [[1,2,3],[4,5,6],[7,8,9]].each {|first, second, third| puts first, second, third}
#=> 6
#=> 15
#=> 24

となります。
完全に同じモノというわけでもなく

do ... endまたは{ }による ブロックは新しいローカル変数の有効範囲を導入するのに対し、 for文はローカル変数のスコープに影響を及ぼさない点が異なる

と、なんと内部で使った変数を後で呼び出す事ができます

first = 5
#=> 5

for first, second, third in [[1,2,3],[4,5,6],[7,8,9]]
  p first, second, third
end  
#1
#2
# ...
#7
#8
#9
#=> [[1, 2, 3], [4, 5, 6], [7, 8, 9]]

first
#=> 7

下手に別のローカル変数なんぞを指定するとエラい事になります。

なるべく使わない

Ruby文化圏でforを使うケースは稀です。
自分でスクリプトを各場合には極力使わないようにしましょう。

参考もと