条件判定と分岐

この章では、javascriptで条件を判定し、処理する内容を分岐させる方法として、if-else文を紹介します。

真偽値

条件判定の基準となるものは真偽値であり、truefalseのどちらかを取ります。

晴れていて涼しくなければプールに行こう

といった処理分岐もtruefalseによって行われます。

  • 晴れている? : true
  • 涼しい? : false
  • 晴れていて涼しくない? : true && !falsetrue
  • → よしプールに行こう

といった感じですね。

さらに晴れているかどうかも、内部的にはお天気センサーから取った実測値と、設定された「晴れ閾値」を数値として比較してturefalseかを判断しています。

比較演算子

数値を比較する方法としては次のようなものがあります。

1 == 1
// true
1 == 100
// false

1 != 1
// false
1 != 100
// true

100 < 100
// false
100 <= 100
// true
  • ==は「等しいかどうか」を意味します
  • !=は「等しくないかどうか」を意味します
  • <は「未満」を意味します
  • <=は「以下」を意味します

また数値以外のタイプ、例えば文字列も次のように比較することができます。

"わん" == "わん"
// true

"わん" == "にゃー"
// false

論理演算子

条件式を記述するために、論理演算子を使うことができます。

  • ! : 否定(直後の真偽値を反転させる)
  • && : 論理積(AかつB)
  • || : 論理和(AまたはB)

例えば「xは10以上20未満の数値ではない」という条件式は次のように書きます。

!(10 <= x && x < 20)

別解としてこれは「xは10未満または20以上の数値である」と等価なので、次のようにも書くことができます。

x < 10 || 20 <= x

これらの式は評価の結果truefalseのどちらかに置き換えられます。

if-else文

条件によって処理を分岐させるにはif-else文を使います。文法はこうです。

if (条件式) {
  // 真のときの処理
} else {
  // 偽のときの処理
}

例題として次の問題を考えます。

数値x=100が3で割り切れるかどうかを出力してください

コードは次のようになります。

var x = 100
if (x % 3 == 0) {
  console.log("割り切れます")
} else {
  console.log("割り切れません")
}

また、少し発展した問題を考えます。

数値x=100が3または5で割り切れるかどうかを出力してください

これは3で割り切れなかった時に5で割り切れるかどうかをチェックすれば答えられます。

var x = 100
if (x % 3 == 0) {
  console.log("割り切れます")
} else {
  if (x % 5 == 0) {
    console.log("割り切れます")
  } else {
    console.log("割り切れません")
  }
}

else節の中にさらにif-else文が入った構造になっています。 ちょっと見た目がごちゃごちゃしていますね。 if-else文は中身が1つの文しかないときは{}で囲わなくてよいので、次のように省略することができます。

// 省略形①
var x = 100
if (x % 3 == 0) {
  console.log("割り切れます")
} else if (x % 5 == 0) {
  console.log("割り切れます")
} else {
  console.log("割り切れません")
}

さらに省略して次のようにも書けます。

// 省略形②
var x = 100
if (x % 3 == 0)
  console.log("割り切れます")
else if (x % 5 == 0)
  console.log("割り切れます")
else
  console.log("割り切れません")

いずれも正しいプログラムですが、省略形②で書くと逆に読みにくくなってしまうことが多いので、省略形①が好まれる傾向があります。

別解としては「3または5で割り切れる」という条件を1つの式で表し、次のように書くのも良い方法です。

// 別解
var x = 100
if (x % 3 == 0 || x % 5 == 0) {
  console.log("割り切れます")
} else {
  console.log("割り切れません")
}
© 2018 set0gut1