-
Notifications
You must be signed in to change notification settings - Fork 2
lambda
ab25cq edited this page Jan 28, 2018
·
3 revisions
English page is here >> English page
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
- ローカル変数の宣言
- メモリーセーフなポインタ
- 例外演算子
- 糖衣構文