このすみノート

Webエンジニアが技術や趣味を書くブログです。

PHP8の名前付き引数を使い始めたら、プログラムがわかりやすくなった

業務でPHP8を使ったサービスを開発しているのですが、PHP8の名前付き引数を使ってます。 もともと先輩が書いていたコードに名前付き引数があったので、見様見真似で使い始めたのですが、プログラムが格段にわかりやすくなりました。

名前付き引数はPHP8から追加された機能なのですが、かなり便利であることがわかったので、紹介します。 

qiita.com

基本的な使い方

関数の引数が受け取る変数名を、名前付き引数として指定します。 基本的な使い方はこれだけであり、とても簡単です。

<?php
function test(int $a, int $b, int $c = 3) {
    return $a + $b + $c;
}

echo test(a: 1, b: 2);

なお、特別な準備は必要なく、PHP8であれば使えます。

名前付き引数のメリット

名前付き引数のメリットはいくつもありそうですが、ここでは3点ほど紹介します。

リーダブルコードのテクニックが不要になる

リーダブルコードには、関数の引数に、コメントを付けて補足するテクニックがありました。 ハードコードされた10やfalseが、何を示すのかコメントするほうがわかりやすいからです。

// 引数にコメントをつけて関数を呼び出す
Connect(/ timeout_ms = / 10, / use_encryption = / false);
引用: https://msyksphinz.hatenablog.com/entry/2017/11/21/020000

名前付き引数の登場によって、リーダブルコードのテクニックなしで、各引数の正体をプログラムに記述できるようになりました。

引数の順番に左右されない

今までのPHPでは、引数の順番が重要でした。 ところが、名前付き引数は順番に左右されないため、cから先に書くこともできます。

<?php
function test(int $a, int $b, int $c = 3) {
    return $a + $b + $c;
}


echo test(c: 1, b: 2, a: 1);

連想配列(ハッシュ)が展開できる

連想配列を、名前付き引数として展開できます。

<?php
function test(int $a, int $b, int $c = 3) {
    return $a + $b + $c;
}

$hash = ['a' => 1, 'b' => 2];
echo test(...$hash);

注意点はいくつかあるものの、展開後に任意の引き数を追加することも可能です。

<?php
function test(int $a, int $b, int $c = 3) {
    return $a + $b + $c;
}

$hash = ['a' => 1, 'b' => 2];
echo test(...$hash, c: 6);

まとめ

関数呼び出しで引数の正体を書けるようになったため、関数を使ったプログラミングが格段にわかりやすくなりました。

私は特に、リーダブルコードのテクニックがひとつ不要になった点が気に入っているので、今後も活用していきたいです。