Last active
August 29, 2015 14:00
-
-
Save cesare/11343808 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// http://qiita.com/t_uda/items/1969e09a970d71e4cfd6 | |
function hoge(x) { | |
switch (true) { | |
case x < 0: | |
console.log(x + " は自然数ではありません."); | |
break; | |
case x === 0: | |
console.log("ここでは 0 は自然数です."); | |
break; | |
case x > 0: | |
console.log(x + " は正の数です."); | |
break; | |
default: | |
console.log(x + " は数ではないようです."); | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/* | |
* switch-true-idiom-example.js にはリファクタリングの余地がある。 | |
* 最大の欠点は、せっかく計算した結果を標準出力に出す以外のことができないところだ。 | |
* たとえば、計算結果をファイルに書き出したいとか、もっと大きなデータ構造の一部に入れたいということは普通にあるだろう。 | |
* この欠点を改善するため、値を計算する部分と、標準出力に書き出す部分を分離する。 | |
*/ | |
function hoge(x) { | |
console.log(_hoge(x)); | |
} | |
function _hoge(x) { | |
var result; | |
switch (true) { | |
case x < 0: | |
result = x + " は自然数ではありません."; | |
break; | |
case x === 0: | |
result = "ここでは 0 は自然数です."; | |
break; | |
case x > 0: | |
result = x + " は正の数です."; | |
break; | |
default: | |
result = x + " は数ではないようです."; | |
} | |
return result; | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/* | |
* switch-true-idiom-example2.js はわざとダサいコードを書いた。 | |
* 本当は var result を冒頭で宣言する必要はない。 | |
* 条件に一致したところで直ちに return すれば、もっと簡潔になる。 | |
*/ | |
function hoge(x) { | |
console.log(_hoge(x)); | |
} | |
function _hoge(x) { | |
switch (true) { | |
case x < 0: | |
return x + " は自然数ではありません."; | |
case x === 0: | |
return "ここでは 0 は自然数です."; | |
case x > 0: | |
return x + " は正の数です."; | |
default: | |
return x + " は数ではないようです."; | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/* | |
* さて、switch-true-idiom-example3.js をよく見てみよう。 | |
* これは if で書くことができるのではないか? | |
* switch(true) をやめて、すべて if で書き直すとこうなる。 | |
*/ | |
function hoge(x) { | |
console.log(_hoge(x)); | |
} | |
function _hoge(x) { | |
if (x < 0) { | |
return x + " は自然数ではありません."; | |
} | |
if (x === 0) { | |
return "ここでは 0 は自然数です."; | |
} | |
if (x > 0) { | |
return x + " は正の数です."; | |
} | |
return x + " は数ではないようです."; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
http://qiita.com/t_uda/items/1969e09a970d71e4cfd6 を再読するに、switch(true) 肯定派の根拠の一つは、「条件式のアラインメントが揃う」という点にあるらしい。つまり
x < 0
とx === 0
x > 0
の位置が揃っているので読み下しやすい、ということなのだろうと思う。switch-true-idiom-example4.js を見ての通り、if でも同じことはできる。少なくとも、この例においてはそうだ。