タイトルが一般的すぎたり誤解を招いたりしないことを願っています。
var blah;
if(a > 10) blah = 'large';
if(a <= 10 && a > 5) blah = 'medium';
if(a <= 5 && a >= 0) blah = 'small';
範囲チェックを実装するためのよりエレガントで簡潔な方法はありませんか?
タイトルが一般的すぎたり誤解を招いたりしないことを願っています。
var blah;
if(a > 10) blah = 'large';
if(a <= 10 && a > 5) blah = 'medium';
if(a <= 5 && a >= 0) blah = 'small';
範囲チェックを実装するためのよりエレガントで簡潔な方法はありませんか?
はい、else
句を使用します。
var blah;
if(a > 10){
blah = 'large';
}else if(a > 5){
blah = 'medium';
}else if(a >= 0){
blah = 'small';
}
各ステートメントで単純な割り当てを行っているため、三項式を使用することもエレガントな場合がありますが、これは読みにくいと多くの人が主張します。
var blah =
a > 10 ? 'large' :
a > 5 ? 'medium' :
a >= 0 ? 'small' :
undefined; // May want to choose a better default value for a < 0
使用できますternary operators
var blah;
blah = a > 10 ? 'large' : (a > 5 ? 'medium' : 'small' ) ;
範囲間隔が多い場合は、次のようなものを使用できます。
var ranges = [[10, 'large'],
[5, 'medium'],
[0, 'small']];
function range(n) {
for (var i = 0; i < ranges.length; i++) {
if (n > ranges[i][0]) {
return ranges[i][1];
}
}
return 'default value';
}
<
使用するかどうかをケースごとに指定できないため、これはそれほど柔軟ではありませんが<=
、範囲がたくさんある場合は、このようなものを書くかもしれません。他の答えは素晴らしいです。これをアイデアとして追加すると思いました。
範囲が一定の場合は、switch ステートメントと modulo を組み合わせて使用できます。例えば。
var blah;
switch(a-(a % 5)) {
case 10:
blah = 'large';
break;
case 5:
blah = 'medium';
break;
case 0:
blah = 'small';
break;
default:
blah = 'large';
}
もちろん、各範囲の差が等しい場合にのみ使用できます。