3. 条件分岐
ブール式 (boolean expression) とは、結果が true か false のいずれかになる式のことです。
julia> t = truetrue
julia> f = falsefalseブール変数の型は typeof 関数で確認できます。
julia> typeof(true)Bool
julia> typeof(false)Bool比較演算子は値どうしを比較して、ブール値を返します。
a = 1、b = 2 としたとき、比較演算子は次のように使えます。
julia> a, b = 1, 2(1, 2)
julia> a == b # equal tofalse
julia> a != b # not equal totrue
julia> a < b # less thantrue
julia> a >= b # greater than or equal tofalse1 == 2が返す結果の型は何でしょうか?==と===の違いは何でしょうか?"Hello world"[i:j] == "o wo"がtrueを返すように、iとjを選んでみましょう。
論理演算子は、ブール値に対する論理演算を行うための演算子です。
Julia には 3 つの論理演算子があります: && (AND), || (OR), ! (NOT)。
論理演算子はブール式を組み合わせるために使います。
julia> t && f # logical ANDfalse
julia> t || f # logical ORtrue
julia> !t # logical NOTfalse複雑な式では、括弧を使って演算順序をグループ化できます。
julia> (a < b) && (b > 0) # truetrue-
x = 5、y = 10のとき、次の式の値は何になるでしょうか?!(x > 0) && y < 0
if 文を使うと、ブール式の結果に応じて条件付きでコードを実行できます。
たとえば、ある数が 0 より大きいかどうかを if で調べられます。
x = 5if x > 0 println("x is positive")endx は 0 より大きいので、このコードは “x is positive” を出力します。
もし x が 0 以下なら、if ブロックの中のコードは実行されず、何も起こりません。
通常は条件が偽の場合にも何かしらの処理を行いたいので、else を使って代替のコードブロックを指定できます。
x = -5if x > 0 println("x is positive")else println("x is not positive")end3 つ目の選択肢として elseif があり、複数の条件をチェックできます。
これを使って、数が正・負・0 のいずれかを判定してみましょう。
x = 0if x > 0 println("x is positive")elseif x < 0 println("x is negative")else println("x is zero")end-
気温に応じてメッセージを表示するプログラムを書いてみましょう。たとえば次のようなものです。
0 未満: “It’s freezing!”
0 〜 20: “It’s cold.”
20 〜 30: “It’s warm.”
30 より上: “It’s hot!”
論理演算子 && と || は 短絡評価 (short-circuit evaluation) を行います。結果を決めるために必要な分だけ評価し、不要な式は評価しません。これはコンパクトな if の代わりとしてよく使われます。
x = 5x > 0 && println("x is positive") # x > 0 のときだけ実行されるx > 0 || println("x is not positive") # x <= 0 のときだけ実行されるJulia でよく見かけるパターンです。
三項演算子 ? : は、値を返す 1 行の if/else です。
x = 5sign = x > 0 ? "positive" : "non-positive"短い条件式に便利です。ロジックが長くなる場合は、通常の if/else ブロックを使うほうが読みやすくなります。
in 演算子
Section titled “in 演算子”in 演算子は、ある値がコレクションや範囲に含まれるかを調べます。
julia> 3 in 1:10true
julia> 5 in [1, 2, 3]false
julia> 'a' in "banana"true比較演算子を連ねた範囲チェックよりも読みやすく書けることが多くあります。
-
次のプログラムを完成させ、1 から 10 までの偶数のうち 4 で割り切れないものだけを表示しましょう。
for i in 1:10if # Your code here. This should return `true`.println(i)endend -
次の条件分岐のロジックを修正してみましょう。
xが 10 以上 20 以下かどうかを判定したいプログラムです。 元のコードがなぜ期待通りに動かないのか、考えてみましょう。x = 15if x > 10 || x < 20println("x is between 10 and 20")elseprintln("x is not between 10 and 20")end -
波長
λ(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₂ レーザー) などで試してみましょう。