コンテンツにスキップ

3. 条件分岐

ブール式 (boolean expression) とは、結果が truefalse のいずれかになる式のことです。

julia> t = true
true
julia> f = false
false

ブール変数の型は typeof 関数で確認できます。

julia> typeof(true)
Bool
julia> typeof(false)
Bool

比較演算子は値どうしを比較して、ブール値を返します。 a = 1b = 2 としたとき、比較演算子は次のように使えます。

julia> a, b = 1, 2
(1, 2)
julia> a == b # equal to
false
julia> a != b # not equal to
true
julia> a < b # less than
true
julia> a >= b # greater than or equal to
false
  1. 1 == 2 が返す結果の型は何でしょうか?
  2. ===== の違いは何でしょうか?
  3. "Hello world"[i:j] == "o wo"true を返すように、ij を選んでみましょう。

論理演算子は、ブール値に対する論理演算を行うための演算子です。 Julia には 3 つの論理演算子があります: && (AND), || (OR), ! (NOT)。 論理演算子はブール式を組み合わせるために使います。

julia> t && f # logical AND
false
julia> t || f # logical OR
true
julia> !t # logical NOT
false

複雑な式では、括弧を使って演算順序をグループ化できます。

julia> (a < b) && (b > 0) # true
true
  1. x = 5y = 10 のとき、次の式の値は何になるでしょうか?

    !(x > 0) && y < 0

if 文を使うと、ブール式の結果に応じて条件付きでコードを実行できます。 たとえば、ある数が 0 より大きいかどうかを if で調べられます。

x = 5
if x > 0
println("x is positive")
end

x は 0 より大きいので、このコードは “x is positive” を出力します。 もし x が 0 以下なら、if ブロックの中のコードは実行されず、何も起こりません。 通常は条件が偽の場合にも何かしらの処理を行いたいので、else を使って代替のコードブロックを指定できます。

x = -5
if x > 0
println("x is positive")
else
println("x is not positive")
end

3 つ目の選択肢として elseif があり、複数の条件をチェックできます。 これを使って、数が正・負・0 のいずれかを判定してみましょう。

x = 0
if x > 0
println("x is positive")
elseif x < 0
println("x is negative")
else
println("x is zero")
end
  1. 気温に応じてメッセージを表示するプログラムを書いてみましょう。たとえば次のようなものです。

    0 未満: “It’s freezing!”
    0 〜 20: “It’s cold.”
    20 〜 30: “It’s warm.”
    30 より上: “It’s hot!”

論理演算子 &&||短絡評価 (short-circuit evaluation) を行います。結果を決めるために必要な分だけ評価し、不要な式は評価しません。これはコンパクトな if の代わりとしてよく使われます。

x = 5
x > 0 && println("x is positive") # x > 0 のときだけ実行される
x > 0 || println("x is not positive") # x <= 0 のときだけ実行される

Julia でよく見かけるパターンです。

三項演算子 ? : は、値を返す 1 行の if/else です。

x = 5
sign = x > 0 ? "positive" : "non-positive"

短い条件式に便利です。ロジックが長くなる場合は、通常の if/else ブロックを使うほうが読みやすくなります。

in 演算子は、ある値がコレクションや範囲に含まれるかを調べます。

julia> 3 in 1:10
true
julia> 5 in [1, 2, 3]
false
julia> 'a' in "banana"
true

比較演算子を連ねた範囲チェックよりも読みやすく書けることが多くあります。

  1. 次のプログラムを完成させ、1 から 10 までの偶数のうち 4 で割り切れないものだけを表示しましょう。

    for i in 1:10
    if # Your code here. This should return `true`.
    println(i)
    end
    end
  2. 次の条件分岐のロジックを修正してみましょう。x が 10 以上 20 以下かどうかを判定したいプログラムです。 元のコードがなぜ期待通りに動かないのか、考えてみましょう。

    x = 15
    if x > 10 || x < 20
    println("x is between 10 and 20")
    else
    println("x is not between 10 and 20")
    end
  3. 波長 λ (nm 単位) を受け取り、それが属するスペクトル領域を表示するプログラムを書きましょう。

    • 紫外 (UV): 10〜400 nm
    • 可視 (Visible): 400〜700 nm
    • 近赤外 (NIR): 700〜2500 nm
    • 中赤外 (MIR): 2500〜25000 nm
    • この範囲外: “out of range” と表示

    λ = 254 (殺菌 UV)、532 (緑色レーザー)、1550 (光通信)、10000 (CO₂ レーザー) などで試してみましょう。