孤独プログラマー譚

孤独死が近い。

PHP 引数の多いメソッド対策

以下のように、同じような引数が羅列されているソースコードをよく見る。

<?php
$this->getMemberAddress('秋元真夏', '乃木坂46', 'ソニーミュージック');
$this->getMemberAddress('白石麻衣', '乃木坂46', 'ソニーミュージック');
$this->getMemberAddress('山下美月', '乃木坂46', 'ソニーミュージック');

乃木坂46ソニーミュージック
の部分が重複しており、大変見苦しい。

そういう時は、カリー化して、引数の数を減らしてやる。

<?php
$curryingFunc = function($group, $company) {
    return function($name) use($group, $company) {
        return $this->getMemberAddress($name, $group, $company);
    };
}

$getMemberAddressByName = $curryingFunc('乃木坂46', 'ソニーミュージック');

echo $getMemberAddressByName('秋元真夏'); // 東京都…
echo $getMemberAddressByName('白石麻衣'); // 東京都…
echo $getMemberAddressByName('山下美月'); // 東京都…

重複部分が無くなった。

以下のように、部分適用としても良い。

<?php
$getMemberAddressByName = function($name) {
    return $this->getMemberAddress($name, '乃木坂46', 'ソニーミュージック');
};
echo $getMemberAddressByName('秋元真夏'); // 東京都…
echo $getMemberAddressByName('白石麻衣'); // 東京都…
echo $getMemberAddressByName('山下美月'); // 東京都…

引数が10個くらいあるメソッドを見てると、気が滅入ってくるよ。