無名関数、アロー関数

PHP
スポンサーリンク

普通の関数

function triple($n) {
    return $n * 3;
}

$numbers = [1, 2, 3];
$result = array_map('triple', $numbers);

array_map
「配列の 1つ1つ に関数を適用する」

[1,2,3] → [3,6,9]

無名関数(名前のない関数)

$result = array_map(function($n) {
    return $n * 3;
}, $numbers);
  • function($n) { ... }これ自体が「関数」
  • 関数名がないだけ
  • 「triple という名前をわざわざ作らなくていい」function triple($n)
array_map(
    「この場で作った処理」,
    $numbers
);

1回しか使わないときなど、名前つけない方がラクなため

アロー関数(無名関数の省略形)

$result = array_map(fn($n) => $n * 3, $numbers);

これは、②の短縮版 で、

  • return は書かない(1行だけ)
  • {} いらない
  • 中身は 式1つだけ
function($n) {
    return $n * 3;
}

省略すると↓

fn($n) => $n * 3

3つの書き方を比較

// 普通の関数
function triple($n) {
    return $n * 3;
}

// 無名関数
function($n) {
    return $n * 3;
}

// アロー関数
fn($n) => $n * 3;

なぜ混乱するか

array_map('triple', $numbers);
array_map(fn($n) => $n * 3, $numbers);
  • 'triple'
  • fn($n) => $n * 3

「処理そのもの」を渡している

アロー関数が向いてるとき

  • 1行で終わる処理
  • 処理内容がパッと見てわかる
array_map(fn($n) => $n * 3, $numbers);

普通の無名関数が向いてるとき

array_map(function ($n) {
    if ($n % 2 === 0) {
        return $n * 2;
    }
    return $n;
}, $numbers);
  • 処理が複数行
  • 条件分岐がある