いろんな言語で以下の処理を書いてみた
- 1から5までの配列を作り
- それぞれ2倍にした配列を作る
Pythonリスト内包表記
[i * 2 for i in range(1,6)]
Python map
list(map(lambda x: x * 2 ,range(1,6)))
Perl
map { $_ * 2 } (1 .. 5);
JavaScript
Array.from({length: 5}, (_, i) => i + 1).map(x => x * 2);
PHP
array_map( function($x) { return $x * 2;}, range(1, 5));
Ruby
(1..5).map{|i| i * 2}
まとめ
意外と「1から5までの配列を作れ」ができる子とできない子に別れる。Pythonは1から5をrange(1,6)と書かざるをえないのがつらい。Perl、Ruby、PHPが「1から5」で人間から見れば素直。機械側に寄り添うのか人間様に寄り添うのかの思想の違い。
mapは後ろから前に持っていく子たち、関数として第一引数に無名関数を入れる子たちに別れる。Rubyのブロックが異彩を放つ。前から順に読めばいい。Rubyからプログラムを覚えた人は、他の言語でブロックではなく引数にコールバック関数を入れるという発想に慣れずに半日うろたえる。