先日、二重に腐った実装をしてしまって反省している。 (1) 仮引数が悪い function doSomethig($logLevel = PEAR_LOG_ERR) { ... } って関数があ...
先日、二重に腐った実装をしてしまって反省している。
(1) 仮引数が悪い
function doSomethig($logLevel = PEAR_LOG_ERR) { ... }
って関数があったとしましょうよ。
細かいログが必要なときは doSomething(PEAR_LOG_INFO) とか渡すんですよ。
っておかしいでしょ、これ。
1ヶ月前の自分は酔ってたのか?
だって、doSomething() がどういうときにどういうレベルのログを吐くかを
呼び出し側が知ってないと駄目なんですよ。
(2) 実引数が悪い
doSomething(PEAR_LOG_INFO) だとエラー出すぎだからなんとかしようと思ったとして
$logLevel = PEAR_LOG_ERR;
if (! 条件1) {
// ログ抑制のため
$logLevel = PEAR_LOG_INFO;
}
if (条件2) {
// ログ抑制のため
$logLevel = PEAR_LOG_ERR;
}
doSomethig($logLevel);
って意味わかります? なんでこんな実装をしたんですかね、先日の自分は。
ここはせめて
$logLevel = PEAR_LOG_INFO;
if (条件1 || 条件2) {
// この条件のときはログ出すぎなので抑制
$logLevel = PEAR_LOG_ERR;
}
doSomethig($logLevel);
と書くべきでしたね。
というかやっぱり(1)の仮引数が悪いのですよ。
デフォルトでは細かいログが必要、特定の条件のときには不要、
というニュアンスがif文や前後から伝わりますか?
コメントがなかったとして。
僕は無理だと思う。
function doSomethig($verboseLog = false) { ... }
$verboseLog = true;
if (条件1 || 条件2) {
$verboseLog = false;
}
doSomethig($verboseLog);
が落としどころかな。
説明のためにみんな知ってる定数を使ったので、なんでログレベルを渡すんだみたいなツッコミはなしで。
デフォルトがあって例外があって、
例外を指定する場合のデフォルトがあって、さらにその例外を指定する場合がある、
みたいな要件自体がおかしいという説もある。
(1) 仮引数が悪い
function doSomethig($logLevel = PEAR_LOG_ERR) { ... }
って関数があったとしましょうよ。
細かいログが必要なときは doSomething(PEAR_LOG_INFO) とか渡すんですよ。
っておかしいでしょ、これ。
1ヶ月前の自分は酔ってたのか?
だって、doSomething() がどういうときにどういうレベルのログを吐くかを
呼び出し側が知ってないと駄目なんですよ。
(2) 実引数が悪い
doSomething(PEAR_LOG_INFO) だとエラー出すぎだからなんとかしようと思ったとして
$logLevel = PEAR_LOG_ERR;
if (! 条件1) {
// ログ抑制のため
$logLevel = PEAR_LOG_INFO;
}
if (条件2) {
// ログ抑制のため
$logLevel = PEAR_LOG_ERR;
}
doSomethig($logLevel);
って意味わかります? なんでこんな実装をしたんですかね、先日の自分は。
ここはせめて
$logLevel = PEAR_LOG_INFO;
if (条件1 || 条件2) {
// この条件のときはログ出すぎなので抑制
$logLevel = PEAR_LOG_ERR;
}
doSomethig($logLevel);
と書くべきでしたね。
というかやっぱり(1)の仮引数が悪いのですよ。
デフォルトでは細かいログが必要、特定の条件のときには不要、
というニュアンスがif文や前後から伝わりますか?
コメントがなかったとして。
僕は無理だと思う。
function doSomethig($verboseLog = false) { ... }
$verboseLog = true;
if (条件1 || 条件2) {
$verboseLog = false;
}
doSomethig($verboseLog);
が落としどころかな。
説明のためにみんな知ってる定数を使ったので、なんでログレベルを渡すんだみたいなツッコミはなしで。
デフォルトがあって例外があって、
例外を指定する場合のデフォルトがあって、さらにその例外を指定する場合がある、
みたいな要件自体がおかしいという説もある。