Goでは、数値を次の関係演算子と等値演算子で比較できます。
| 比較 | 演算子 |
|---|---|
| 等しい | == |
| 等しくない | != |
| より小さい | < |
| 以下 | <= |
| より大きい | > |
| 以上 | >= |
比較の結果は常に真偽値で、trueかfalseのどちらかになります。
a := 3
a != 4 // true
a > 5 // false
上記の比較演算子は、文字列の比較にも使えます。 その場合は、辞書順(辞書の並び順)で比較されます。 たとえば次のとおりです。
"apple" < "banana" // true
"apple" > "banana" // false
if文Goの条件分岐は、他の言語の条件分岐とよく似ています。
条件を判定する演算の結果はbool型になり、trueかfalseの値を持ちます。
条件分岐は、さまざまな条件を確認して処理の流れを制御するためによく使われます。
ある条件を確認するにはif文を使います。条件がtrueのときに、そのコードが実行されます。
var value string
if value == "val" {
return "was val"
}
複数の条件を扱う場面では、else if文とelse文を使って、複数のif文をつなげることができます。
var number int
result := "This number is "
if number > 0 {
result += "positive"
} else if number < 0 {
result += "negative"
} else {
result += "zero"
}
if文には、短い初期化文を書くこともできます。これは、if文で使う変数を1つ以上初期化するために使えます。
たとえば次のとおりです。
num := 7
if v := 2 * num; v > 10 {
fmt.Println(v)
} else {
fmt.Println(num)
}
// Output: 14
注意:初期化文で作られた変数は、
if文の終わりでスコープから外れます。
この演習では、乗り物を買う準備を手伝うコードを書きます。
タスクは3つあります。1つは運転免許証が必要かどうかを判断すること、1つは2つの乗り物から選ぶ手助けをすること、もう1つは中古の乗り物の妥当な価格を見積もることです。
乗り物の種類によっては、運転するのに運転免許証が必要です。
種類が"car"と"truck"の場合だけ免許証が必要で、それ以外は免許証なしで運転できると仮定します。
乗り物の種類を引数に取り、その種類に運転免許証が必要かどうかを示す真偽値を返すNeedsLicense(kind)関数を実装します。
needLicense := NeedsLicense("car")
// => true
needLicense = NeedsLicense("bike")
// => false
needLicense = NeedsLicense("truck")
// => true
購入できる乗り物の選択肢を検討します。
2つの候補まで絞り込めましたが、最終的な決定には助けが必要です。
そのために、2つの乗り物を引数に取り、辞書順で先に来る方を含む判断を返すChooseVehicle(option1, option2)関数を実装します。
vehicle := ChooseVehicle("Wuling Hongguang", "Toyota Corolla")
// => "Toyota Corolla is clearly the better choice."
ChooseVehicle("Volkswagen Beetle", "Volkswagen Golf")
// => "Volkswagen Beetle is clearly the better choice."
購入する乗り物が決まったので、ディーラーで妥当な価格で買えるようにしたいところです。 中古の乗り物を買うとなると、価格はその乗り物がどれくらい古いかによって変わります。 おおよその見積もりとして、乗り物が3年未満なら、新品だったときの価格の80%になるとします。 10年以上なら50%です。 3年以上10年未満なら、元の価格の70%です。
この条件をif、else if、elseを使って処理するCalculateResellPrice(originalPrice, age)関数を実装します(練習したい場合は別の書き方でもかまいません)。
元の価格と乗り物の経過年数を引数に取り、ディーラーでの見積もり価格を返します。
CalculateResellPrice(1000, 1)
// => 800
CalculateResellPrice(1000, 5)
// => 700
CalculateResellPrice(1000, 15)
// => 500
注意:戻り値はfloat64です。