これに似た構造に出くわしたとき、私はいくつかの古いコードをリファクタリングしていました:
// function bar() returns a value
// if the value is an instance of customException class, terminate with error code
// else process the regular data
$foo = bar();
checkForException($foo) && exit($foo->errorCode());
process($foo);
奇妙に思えるかもしれませんが、これははるかに短いです
$foo=bar();
if(checkForException($foo)) {
exit($foo->errorCode();
}
else {
process($foo);
}
そして、いくらか読みやすくなります(少なくとも最初の驚きの後)
$foo=bar();
(checkForException($foo)) ? exit($foo->errorCode()) : process($foo);
コードが短いからといって必ずしも読みやすいコードであるとは限りませんが、これは上記の2つの「標準的な」方法の中間にあると思います。
言い換えれば、代わりに
if($foo) {
bar();
}
else {
// there is no real reason for this to exist, since
// I have nothing to write here, but I want to conform
// to the general coding practices and my coding OCD
}
簡単に書くことができます
$foo && bar();
では、これがあまり使用されていない理由は何ですか?「車輪の再発明をしないで、もっと読みやすいif / elseを書いてください。本当に短くしたいのなら、それが三項演算子の目的です」のように簡単にできますか?
編集:上記のコードは元のコードからすぐに派生したものであり、「短絡」コードの使用例にすぎないことに注意してください。可能であれば、コードの改善を提案することは控えてください。それは質問の望ましい結果ではなかったからです。
例2
userCheckedTheBox($user) && displayAppropriateInfo();