2

私はJavaScriptで次のIFステートメントを持っています:

if ( !(cmd === 'JustifyLeft' || cmd === 'JustifyRight' || cmd === 'JustifyCenter' || cmd === 'JustifyFull') )

よりクリーンな方法で書く方法について何か提案はありますか?

ありがとう

4

4 に答える 4

17
if(!cmd.match(/^Justify(Left|Right|Center|Full)$/))

いくつかのコメントに応じて、小さな編集で厳密な比較を模倣することもできます。

if( typeof cmd != 'String' || !cmd.match(/^Justify(Left|Right|Center|Full)$/))

これは、現在のコードとまったく同じように反応し、文字列ではないものはすべて無視します。

個人的には、あなたがそれを必要とする可能性は非常に低いと思います.

于 2009-06-09T07:32:24.120 に答える
4

これは、スイッチを使用するのに適した状況のように思えます。スイッチは等価性チェック(==)のみを実行し、IDチェック()は実行しないことに注意して===ください。ただし、これは問題ありません。

switch (cmd) {
    case "JustifyLeft" :
    case "JustifyRight" :
    case "JustifyCenter" :
    case "JustifyFull" :
        // do something
    break;
    case "somethingElse" :
    default:
        // do something else
    break;
}
于 2009-06-09T07:36:44.483 に答える
1

IsJustifyCommand(s)メソッドを作成するか、IsJustifyCommand()メソッドを持つコマンド抽象クラスを作成します。次に、コードは、実行しようとしていることの説明のように読み取られます。

正規表現を使用するのは良いことかもしれませんが、ハードコアのJavaScriptプログラマーでない人がコードで作業しなければならない場合、メンテナンスの問題が発生します。ただし、正規表現が優れたソリューションである場合が多い場合は、それを使用してください。コードを見ている人はすぐにそれを理解するでしょう。

(ただし、私はJavaScriptプログラマーではなくC#プログラマーですが、ほとんどのプログラマーと同様に、JavaScriptコードを確認/編集する必要があります。ほとんどのJavaScriptは、JavaScriptプログラマーによって維持されていないと思います。)

于 2009-06-09T12:09:02.843 に答える
0

みたいなことを書かれたら嫌です。最初にコードを見て、「cmd が JustifyLeft または JustifyRight と等しい場合...それを反転し、...それが true の場合は実行する..つまり、JustifyLeft の場合...」と考えます。私にとってはかなりの時間がかかり、正しいことを確認するために行を読み直さなければなりません。

書いたほうがいいと思います。

if ((cmd !== 'JustifyLeft') && (cmd !== 'JustifyRight') && (cmd !== 'JustifyCenter') && (cmd !== 'JustifyFull'))

もう少し冗長かもしれませんが、従うのは簡単だと思います。「cmdはJustify-stringのいずれにもならない」と読みました。長いブール式をチェックしてから、答え全体を逆にするのはイライラします。

私はスクラガーの解決策が好きです。長いブール式を反転することについて私の考えを述べたかっただけです。

于 2009-06-10T15:21:20.197 に答える