Skip to main content

無名関数(ラムダ、Lambda、Closure、クロージャ)

Python

py
lambda a, b :

改行するときどうするんだろう?

Swift

swift
{ (a: Int, b: Int) -> Int in
return a + b
}

名前つきの引数にはならない

  • 省略について
    • 入れる先の型が決まっていれば、戻り値/引数は省略できる
    • 結果が1行なら return も省略可
    • というのは、クロージャを関数の引数で渡す場合に使われる
    • 引数で渡したあと、別の場所で使うようなケース(非同期で呼びたいケースなど)は @escaping をつける

引数のない場合

swift
let x: Int = {
return 3 * 5
}

引数のある場合

swift
let x: (Int, Int) -> Int = {
return $0 * $1
}
swift
let x: (Int, Int) -> Int = { $0 * $1 }
  • トレイリングクロージャ:
    • 関数の最後の引数がクロージャの場合は、クロージャを () の外に書くことができる。
    • そのとき、引数名は省略することができる

こう書くのと

swift
Button(action: {
..
}, label: {
...
})

こう書くので同じ

swift
Button(action: {
..
}) {
...
}

マルチトレイリングクロージャといって、こうも書ける。

swift
Button() {
..
} label: {
...
}

TypeScript

ts
(a: number, b: number): number => {
return a + b;
}

式が1個なら、{}return も省略可

ts
(a: number, b: number): number => a + b

PowerShell

powershell
{ ... }.Invoke()

ちょっと違うものかも「スクリプトブロック」と呼ばれてる。

以下の違いはなんだろうか。.& はスコープの違いだとか。bash と同じ感じか

powershell
$f = { ... }

$f.Invoke()
. $f
& $f