- 
                Notifications
    
You must be signed in to change notification settings  - Fork 3
 
lambda
        Hiroshi Sakurai edited this page Nov 7, 2017 
        ·
        3 revisions
      
    lambdaとはコードの塊をオブジェクトして扱えるようにしたものです。関数型プログラミング言語ではおなじみの機能です。lambdaにはclosureというものもあり、lambdaは親の変数にアクセスできませんがclosureは親の変数にもアクセスできます。例を見たほうが早いと思います。
> a:lambda(int) = lambda(num:int) {
    for(i:=0; i<num; i++) {
        println("HO!");
    }
}
> a(3)
HO!
HO!
HO!
> n:int = 3;
> b:lambda() = closure() {
    for(i:=0; i<n; i++) {
        println("HO!");
    }
    n = 999;
}
> b()
HO!
HO!
HO!
> n
999
closureはlambdaの一種なので型名はlambdaで書くことになっています。closureのほうは親のnという変数にアクセスできています。また、親の変数を書き換えることも可能です。 戻り値も作ることができます。以下を見てください。
> a:lambda(int):int = lambda(n:int):int {
    return n * 2;
}
> a(123)
246
lambda(n:int):intでintをnを引数として戻り値がint型のlambdaを作っています。この場合中身は引数の2倍を返すlambdaなのでa(123)とすると246が返されています。
- フリーフォーマット
 - 変数と関数について
 - 条件分岐と演算子
 - 論理演算子
 - ビット演算子
 - ループ
 - ブロック
 - コメント
 - アノテーション
 - ナルエイブル
 - プリミティブクラス
 - 配列
 - クラス
 - クラスフィールドとクラスメソッド
 - dynamic_class
 - boxingとunboxing
 - プリミティブ型とスペシャルフィールド
 - スペシャルメソッド
 - インターフェース
 - 移譲
 - モジュール
 - ジェネリクス
 - メソッドジェネリクス
 - 関数
 - 列挙型(enum)
 - 自動setterとgetterの定義
 - when文
 - 変数の宣言の取り消し
 - 例外処理
 - 多重代入
 - 代入時の自動キャスト
 - C言語へのFFI
 - ローカル変数の宣言
 - メモリーセーフなポインタ
 - 例外演算子
 - 糖衣構文