JavaScriptでmap,filter,reduceなど
頑張ってHaskell, Pythonとの比較もしてみる。ちなみに自分は、Haskell、Python、JavaScriptと全てあまりレベルが高くないので、もっと簡潔に書ける可能性大いにあり。それほど大した例じゃないけれども。
ただ、出発点が
「Haskellで簡潔に書けるあれは、JavaScript(Python)だとどう書けるんだ?」
という疑問なので、Haskell版は大丈夫なはず。
map
1から7の整数のそれぞれを二乗する。
Haskell : map (^2) [1..7] Python : map( (lambda x: x**2), range(1,8) ) JavaScript: [1,2,3,4,5,6,7].map(Math.sqrt);
JavaScriptには、range関数ってないのかな?
D3.jsにはあったの確認してるけど。
filter
1から7の整数のうち、偶数を抜き出す
Haskell : filter (\x -> x `mod` 2 == 0) [1..7] Python : filter ( (lambda x: x % 2 == 0) , range(1,8) ) JavaScript : a = [1,2,3,4,5,6,7].filter( function(x){ return ! (x % 2); });
reduce
1から7の整数の和を求める
Haskell : foldr1 (+) [1..7] Python : reduce ( (lambda x, y: x+y), range(1,8)) JavaScript: [1,2,3,4,5,6,7].reduce( function(x,y){ return x+y; });
本当は、HaskellとPythonではsumが使える。
JavaScriptはどうなんだろう?
感想
JavaScriptは、即時関数を多用する割に、記法が冗長で困る。
HaxeやCoffeeScript、DartなどのaltJSでは改善されてるんだろうか?
読みたい本
- 作者: Michael Fogus,和田祐一郎
- 出版社/メーカー: オライリージャパン
- 発売日: 2014/01/18
- メディア: 単行本(ソフトカバー)
- この商品を含むブログを見る