OK、あなたが本当にたくさんのif
sを持っていて、あなたt
のsが固定整数であり、主な目標があなたの多くの「ルール」の読みやすさであると仮定します。次に、次のことを試すことができます。
まず、すべてのsに有効な値があることを確認しt
、未定義のケースをスキップします。変数t
が数値ではなく実際の論理値である場合、明示的なルールのみを使用します(たとえば、t1 == 0
を使用する代わりに>, <, >=, <=
)、特に。if
実装するルールがステートメントで表現されているものと同じくらい多様である場合。
次に、読みやすさのために小数を使用するなど、数値システムを使用してロジックをエンコードできます。それぞれについてt
、ロジックをエンコードする新しい「ロジック番号」の小数点以下1桁を使用します。
111 means t1 == t2 == t1 == 1
201 means t1 == 2, t2 == 0, t3 == 1
etc.
番号は、、、および:から簡単に作成t1
できt2
ますt3
。
num = t1*100 + t2*10 + t3
以下のswitch-caseは、ロジックを実装します。それはあなたのif
ルールの展開されたバージョンです。(などを介して)複数値のチェックを許可しないことにより>=
、処理するすべての組み合わせに対してルールを指定する必要があります。これにより、指定する必要のあるルールの数が増える可能性がありますが、ロジックルールが読みやすく保守しやすくなる可能性もあります。
var getFadeInClass = function(t1,t2,t3) {
// for the sake of shortness I use ".b" instead of ".b_class" etc.
var num = t1*100 + t2*10 + t3
switch(logic_state){
case 100:; case 200:; case 300: return ".b"
case 10:; case 20:; case 30: return ".c"
case 1: return ".d"
case 110:; case 120:; case 130:;
case 210:; case 220:; case 230:;
case 310:; case 320:; case 330: return ".b.c"
case 101:; case 102:; case 103:;
case 201:; case 202:; case 203:;
case 301:; case 302:; case 303: return ".b.d"
}
return ""
}
また、数学や他の種類のテストを使用して、数値を推論することもできます。
var x = t1*100 + t2*10 + t3
if ( x != 0 && x%100 == 0) return "b"
if ( x != 0 && x%100%10 == 0) return "c"
if ( x == 1 ) return "d"
しかし、私はそれがよりよく読むのでスイッチケースを好むでしょう。これがあなたが達成したかったことだといいのですが。:)
このフィドルで、この10進ロジックの実行バージョンを確認できます。
乾杯、ユヴェントス