JavaScript は、Webデザイナーのための簡易言語だと言われたり、まつもとゆきひろ氏には「人類のためにJavaScriptは何とかしたほうがいい(出典:エンジニアライフ)」と言われたりしたプログラム言語ですが、ECMAScript 2015 が承認されたことでモダンな言語に変身しつつあります。
2ヶ月ほど前の話ですが、PHP Advent Calendar 2015 の「PHPを使いもせずDISってる君達へ」という記事をみて、JavaScript は、PHP より遙かにモダンな言語になると思ったのでメモしておきます。
その記事では例を、Ruby で書いてありますが、JavaScript の場合はどうなるかというと、ECMAScript 5.1(ES5)では以下のように記述できます。IE8 は対応していませんが、それ以外の普通に使っているブラウザーは対応しています。
var a = [2,4,6,8,10]
.filter(function(num){return num <= 8})
.map(function(num){return num * num})
.filter(function(num){return num >= 20})
.reduce(function(previous, current, index, array){return previous * current});
また、ECMAScript 2015(ES6)では、アロー関数式が使えるので、Ruby と同様に以下のように簡潔に記述できます。
var a = [2,4,6,8,10]
.filter((num) => num <= 8)
.map((num) => num * num)
.filter((num) => num >= 20)
.reduce((previous, current) => previous * current);
やはり、PHP の配列処理はやはり不便です。PHP も配列などのコレクションの処理をするときには、高階関数を使って処理できるようになってほしいと思います。
JavaScript の ECMAScript 2015 への対応状況ですが、ECMAScript Compatibility Tableというサイトで調べると、Edge13 83%、Firefox45 85%、Chrome49 91%、Safari9 54% という状況で対応が進んできていますす。
ブラウザーではIE11が全く対応していないので、直接使うことは厳しい状況ですが、TypeScript を使えば、ソースコードとして使えるし、Node.jsだと、近いうちに直接書くことができるようになると思います。
JavaScript は Node.js を使えばサーバー側でも動くし、PHP では動かないブラウザー上でも動作します。これからは、Webをしたいのであれば、PHP だけでなく JavaScript を使った方がいいと思っています。
参考までに、C#の場合は、LINQを使って以下のように書けます。C#は、以前は Ruby の方が効率的にプログラムが書けると思っていましたが、C# 3.0 で LINQが使えるようになり、C# 5.0では async/await で非同期処理ができるようになって Ruby に追いついたと思います。配列処理のことについては、C# やるなら LINQ を使おうに詳しい解説があるので、ここでは説明を省略します。
var a = new int[] { 2, 4, 6, 8, 10 }
.Where((num) => num <= 8)
.Select((num) => num * num)
.Where((num) => num >= 20)
.Aggregate((previous, current) => previous * current);