複数のチェックがある場合に単一の変数を設定する最良の方法は何ですか? これを行うには、効率的で、正確で、冗長性がなく、読みやすい方法が必要ですか?
Switch ステートメントは非常に冗長であるため、めったに使用しません。多くの場合、1 回のチェックで 3 ~ 4 行を要しますが、単純な 1 ~ 2 行のチェックで済ませることができます。
Switch ステートメントは if/elseif/else ブロックに比べて読みやすいということを読んでいたところですが、配置によって読みやすくなっていることがわかります。
冗長なコードを記述するのではなく、単一の変数宣言を使用できるため、三項ステートメントを使用することを楽しんでいますが、switch ステートメントは過度に冗長であり、そのコード (行消費) のオーバーヘッドがあるように見えます。
列挙型でハッキング
class eUserType
{
const Normal = 0;
const Admin = 1;
const Moderator = 2;
}
もしそうでなければ
if ($userType == eUserType::Normal)
$info = "Normal User";
elseif($userType == eUserType::Admin)
$info = "Admin User";
elseif($userType == eUserType::Moderator)
$info = "Moderator User";
else
$info = false;
スイッチ
switch($userType)
{
case eUserType::Normal:
$info = "Normal User";
break;
case eUserType::Admin:
$info = "Admin User";
break;
case eUserType::Moderator:
$info = "Moderator User";
break;
default:
$info = false;
}
三元
私はこれまでにこのような 3 進数を書いたことがなく、独自の空白を使用しました。正確で効率的ですが、「$userType == eUserType::」と非常に冗長であることがわかりました。さらに、私の場合 (PHPStorm) と同様に、ほとんどの IDE はコードの自動インデントをうまく処理できないと思います。
$info = $userType == eUserType::Normal ?
"Normal User" :
$userType == eUserType::Admin ?
"Admin User" :
$userType == eUserType::Moderator ?
"Moderator User" : false;
これを $info を返す関数/メソッドにラップする必要があると思いますが、関数の中にあるものは気にしませんか?
まだ見たことのない、このようなことを行うための素晴らしい方法があるかどうか疑問に思っています。
最終的に私が探していると思うのは、Ternary の単一変数設定と switch ステートメントの単一変数チェックのハイブリッドです。(存在するかどうかは疑わしいですが、尋ねてみませんか?)
編集: リフレクションを使用してこのコードを動的にする方法が確実にあることは知っていますが、 $info に設定されているデータは、作業している複雑なオブジェクトではなく、単純なサンプルデータとして使用しました。再利用の可能性を考えて、これらのチェックを User Class に入れることになると思います。