ルール
使用 named 引数 明示 明瞭さ
名前付き 引数 明瞭化 コード 自己文書化
し 防止 パラメータ 順序 ミスを
使用 名前付き 引数 関数 関数 より
以上の 2-3 以上の または ブール値 フラグ。
サポート言語: Python、 PHPはじめに
複数のパラメータを持つ関数は、呼び出し箇所を見ると不明瞭になる。読み取り sendEmail('user@example.com', true, false, 30) 関数のシグネチャを調べて理解する必要がある 真の, 擬似そして 30 つまり。名前付き引数は、呼び出し元で各パラメータの目的を明示的にすることでこの問題を解決します。また、関数のシグネチャが変更された際にパラメータの順序が入れ替わることで発生するバグも防止します。
なぜそれが重要なのか
コードの保守性: 名前付き引数は、呼び出し元で引数の意図を明示し、定数参照チェックを不要にします。 sendEmail(宛先: $email, 再試行: true, 非同期: false, タイムアウト: 30)各値が何を制御しているかを正確に理解できます。これによりコードレビュー時の混乱が解消され、位置引数をパラメータ名に頭の中で対応付ける必要がなくなるため、デバッグが迅速化されます。
セキュリティーへの影響: セキュリティ上重要な関数におけるパラメータ順序の誤りは脆弱性を生み出す可能性がある。 $username そして $password パラメータ、あるいはハッシュ化されたパスワードが指定されるべき場所に平文パスワードを誤って渡した場合、位置引数では黙って失敗します。名前付き引数は、どの値がどこに属するかを明示的に記述することを強制するため、こうした危険なミスを防ぎます。
リファクタリングの安全性:既存関数にオプション引数を追加すると、位置引数を使用する呼び出し箇所はすべて破綻します(末尾に追加する場合を除く)。名前付き引数を使用すれば、パラメータ名の一貫性を保つ限り、既存コードを破綻させることなくパラメータの追加・再配置・変更が可能です。これによりAPIの安定性が向上し、進化に伴うリスクが軽減されます。
コード例
非準拠:
function createUser($email, $password, $role, $verified, $sendEmail, $retryCount) {
$hashedPassword = password_hash($password, PASSWORD_BCRYPT);
$user = User::create([
'email' => $email,
'password' => $hashedPassword,
'role' => $role,
'verified' => $verified
]);
if ($sendEmail) {
sendWelcomeEmail($user->email, $retryCount);
}
return $user;
}
// Unclear what each parameter means
createUser('user@example.com', 'secret123', 'admin', true, false, 3);
なぜそれが間違っているのか: 呼び出し箇所は、何が真であるかについての文脈を提供しない。 擬似、そして3は、関数のシグネチャへの絶え間ない参照を必要とする。入れ替え $role そして $password または $verified そして $sendEmail 静かに失敗し、セキュリティ上の問題を引き起こす可能性がある。
✅ 準拠:
function createUser(
string $email,
string $password,
string $role = 'user',
bool $verified = false,
bool $sendEmail = true,
int $retryCount = 3
) {
$hashedPassword = password_hash($password, PASSWORD_BCRYPT);
$user = User::create([
'email' => $email,
'password' => $hashedPassword,
'role' => $role,
'verified' => $verified
]);
if ($sendEmail) {
sendWelcomeEmail($user->email, $retryCount);
}
return $user;
}
// Self-documenting call site
createUser(
email: 'user@example.com',
password: 'secret123',
role: 'admin',
verified: true,
sendEmail: false,
retryCount: 3
);
これが重要な理由:各パラメータの目的は呼び出し元で明示されるため、コードが自己文書化されます。引数を明示的に命名するためパラメータ順の誤りが不可能であり、新しいオプションパラメータを追加しても既存コードは壊れません。
結論
2~3個を超えるパラメータ、ブールフラグ、または類似の型が連続して現れる関数には名前付き引数を使用する。呼び出し箇所のわずかな冗長性は、明瞭さ、安全性、保守性において十分に報われる。パラメータ順序が明白で変更の可能性が低い単純な関数にのみ位置指定引数を留保する。
.avif)
