Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationEventAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
3
Help us understand the problem. What are the problem?

More than 5 years have passed since last update.

@sys9kdr

Haxeでラムダ式を手短に描く

Haxeとショートラムダ

Haxeは関数型プログラミング言語の影響下にあることを多くの点で指摘される言語ですが、シンプルなラムダ式(ショートラムダ)がありません。作者のNicolas Cannasseが可読性の低下などいくつかの理由から導入に前向きではないためです。

ライブラリで解決する

言語自体はサポートしていませんが、サードパーティーライブラリを使えばさくっとショートラムダで書くことができます。Haxeでショートラムダを実現するためのライブラリとしてはslambda, tink_langの2つが選択肢に上がります。今回はシンプルなライブラリの前者を使ってショートラムダを書きます。

Slambdaとは

Haxeでショートラムダを書くための小さめのライブラリ。スラムダと読みます。

Slambdaのインストールとhxmlの設定

こんな感じ。ここでは出力先にJavaScriptを指定していますが、特に出力先を限定するライブラリではありません。

haxelib install slambda
build.hxml
-main Lambdashiki.hx
-js Lambdashiki.js
-lib slambda

ショートラムダを書く

下記のようにショートラムダを書くことができるようになります。

Lambdashiki.hx
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では言語自体はサポートしていないものの、ライブラリを使えば簡単に出力を限定せずショートラムダが使えます。functionreturnにつかれたときは思い出してください。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
3
Help us understand the problem. What are the problem?