Haxeとショートラムダ
Haxeは関数型プログラミング言語の影響下にあることを多くの点で指摘される言語ですが、シンプルなラムダ式(ショートラムダ)がありません。作者のNicolas Cannasseが可読性の低下などいくつかの理由から導入に前向きではないためです。
ライブラリで解決する
言語自体はサポートしていませんが、サードパーティーライブラリを使えばさくっとショートラムダで書くことができます。Haxeでショートラムダを実現するためのライブラリとしてはslambda
, tink_lang
の2つが選択肢に上がります。今回はシンプルなライブラリの前者を使ってショートラムダを書きます。
Slambdaとは
Haxeでショートラムダを書くための小さめのライブラリ。スラムダと読みます。
Slambdaのインストールとhxmlの設定
こんな感じ。ここでは出力先にJavaScriptを指定していますが、特に出力先を限定するライブラリではありません。
haxelib install slambda
-main Lambdashiki.hx
-js Lambdashiki.js
-lib slambda
ショートラムダを書く
下記のようにショートラムダを書くことができるようになります。
using Slambda;
class Lambdashiki{
static function main(){
var hoge:Array<Int>, piyo:Array<Int>, fuga:Array<Int>;
var arr = [1, 2, 3, 4, 5];
// arr.filter(function(x) { return x % 2 == 0 })と同じ
hoge = arr.filter.fn(_ % 2 == 0);
trace(hoge); // [2, 4]
// アロー関数もいける
piyo = arr.filter.fn(x => x % 2 == 0);
trace(piyo); // [2, 4]
// 連結できる
fuga = arr.map.fn(x => x * x).filter.fn(_ % 3 == 0);
trace(fuga); //[9]
}
}
using
ではなくimport
を使うと下記のように書けます。
import Slambda.fn;
class Lambdashiki {
static function main() {
var hoge = [1, 2, 3].filter(fn(_ % 2 == 0));
trace(hoge); // [2]
}
}
上述のレポジトリでもう少しちゃんとしたサンプルを確認できます。
まとめ
Haxeでは言語自体はサポートしていないものの、ライブラリを使えば簡単に出力を限定せずショートラムダが使えます。function
とreturn
につかれたときは思い出してください。