サーチ…


構文

  • if cond;体;終わり
  • if cond;体; else;体;終わり
  • if cond;体; elseif cond;体; else;終わり
  • if cond;体; elseif cond;体;終わり
  • 条件? iftrue:iffalse
  • cond && iftrue
  • cond || iffalse
  • ifelse(cond、iftrue、iffalse)

備考

すべての条件演算子と関数にはブール条件( trueまたはfalse )を使用する必要があります。ジュリアでは、ブール値の型があるBool 。他の言語とは異なり、他の種類の数値( 10 )、文字列、配列などは条件文で直接使用することはできません

通常、条件演算子または関数の条件で述語関数( Boolを返す関数)または比較演算子のいずれかを使用します。

if ... else式

Juliaの最も一般的な条件はif ... else式です。たとえば、基本ケースを処理する条件を使用して、 最大公約数を計算するためのユークリッドアルゴリズムを実装します。

mygcd(a, b) = if a == 0
    abs(b)
else
    mygcd(b % a, a)
end

Juliaのif ... elseフォームは実際には式であり、値を持ちます。値は、実行されたブランチ上の末尾の式(つまり、最後の式)です。次のサンプル入力を考えてみましょう。

julia> mygcd(0, -10)
10

ここで、 a0あり、 b-10 。条件a == 0trueであるので、最初の分岐がとられます。戻り値はabs(b)です。これは10です。

julia> mygcd(2, 3)
1

ここで、 a2あり、 b3 。条件a == 0は偽であるため、2番目の分岐をとり、 mygcd(3 % 2, 2) mygcd(b % a, a)であるmygcd(b % a, a)を計算します。 %演算子は、 32で除算したときの剰余を返します。この場合1です。したがって、私たちはmygcd(1, 2)を計算し、今回はa1b2です。もう一度、 a == 0が偽であるので、2番目の枝をとり、 mygcd(b % a, a)を計算します。これはmygcd(0, 1)です。今回はa == 0abs(b)が返され、結果は1ます。

if ... elseステートメント

name = readline()
if startswith(name, "A")
    println("Your name begins with A.")
else
    println("Your name does not begin with A.")
end

if ... else式など、任意の式を文の位置に入れることができます。これはその値を無視しますが、その副作用のために式を実行します。

ifステートメント

他の式と同様に、 if ... else式の戻り値は無視できます(したがって廃棄されます)。これは一般に、式の本体にファイルへの書き込み、変数の変更、画面への印刷などの副作用がある場合にのみ有効です。

さらに、 if ... else式のelseブランチはオプションです。たとえば、特定の条件が満たされた場合にのみ、次のコードを出力して画面に出力することができます。

second = Dates.second(now())
if iseven(second)
    println("The current second, $second, is even.")
end

上記の例では、現在の秒を取得するためにtimeとdate関数を使用してます。たとえば、現在10:55:27の場合、変数second27を保持します。この番号が偶数の場合は、画面に行が印刷されます。それ以外の場合は、何も行われません。

三項条件演算子

pushunique!(A, x) = x in A ? A : push!(A, x)

三項条件演算子は、 if ... elseelse少ない単語if

具体的な構文は次のとおりです。

[condition] ? [execute if true] : [execute if false]

この例では、追加xコレクションにA場合にのみ、 xになっていないA 。それ以外の場合は、 A変更しないでください。

三項演算子参考文献:

短絡演算子:&&および||

分岐用

短絡条件演算子&&||次の構造体の軽量置換として使用できます。

  • x && yx && yと等価x ? y : x
  • x || yx ? x : yと等価x ? x : y

短絡オペレータの1つの用途は、条件をテストし、その条件に応じて特定のアクションを実行する、より簡潔な方法です。たとえば、次のコードでは、引数xが負の場合に&&演算子を使用してエラーをスローします。

function mysqrt(x)
    x < 0 && throw(DomainError("x is negative"))
    x ^ 0.5
end

||オペレータは、条件が成立するならば 、それは条件が成立しない限り、エラーをトリガし、代わりのことを除いて、エラーチェックのためにも使用することができます。

function halve(x::Integer)
    iseven(x) || throw(DomainError("cannot halve an odd number"))
    x ÷ 2
end

これのもう1つの有用なアプリケーションは、以前に定義されていない場合に限り、オブジェクトにデフォルト値を提供することです。

isdefined(:x) || (x = NEW_VALUE)

ここでは、シンボルxが定義されているかどうかをチェックします(つまり、オブジェクトx割り当てられている値がある場合)。もしそうなら、何も起こらない。しかし、そうでなければ、 xNEW_VALUEに割り当てられます。この例は、トップレベルのスコープでのみ機能することに注意してください。

条件

演算子は2つの条件をテストするために使用することができ、2つ目の条件は最初の条件の結果のみに基づいて評価されるため、演算子も便利です。ジュリアの文書から:

式ではa && b 、部分式b場合にのみ評価されますと評価されa true

a || b 、部分式b場合にのみ評価されますと評価されa false

このように、双方の間、 a & ba && b得られますtrueの両方の場合はabありtrue場合、彼らの行動であるa false異なっています。

たとえば、オブジェクトが正の数であるかどうかを確認したいとします。ここで、数でなくても可能性があります。試みられたこれらの2つの実装の違いを考えてみましょう。

CheckPositive1(x) = (typeof(x)<:Number) & (x > 0) ? true : false
CheckPositive2(x) = (typeof(x)<:Number) && (x > 0) ? true : false

CheckPositive1("a")
CheckPositive2("a")

CheckPositive1()は、数値以外の型が引数としてCheckPositive1()場合にエラーを生成します。これは、最初の式の結果に関係なく両方の式を評価するためで、2番目の式は数値以外の型の評価を試みるとエラーになります。

CheckPositive2()但し、生じるであろうfalse非数値タイプは、それに供給される場合は、最初である場合、第二の発現のみが評価されるので、(むしろ誤差より) true

2つ以上の短絡オペレータを一緒に張ることができます。例えば:

1 > 0 && 2 > 0 && 3 > 5

複数の分岐を持つif文

d = Dates.dayofweek(now())
if d == 7
    println("It is Sunday!")
elseif d == 6
    println("It is Saturday!")
elseif d == 5
    println("Almost the weekend!")
else
    println("Not the weekend yet...")
end

場合によっては最後のelseブランチの有無にかかわらず、任意の数のelseifブランチをifステートメントとともに使用することができます。後続の条件は、すべての前の条件がfalseことが判明した場合にのみ評価されfalse

ifelse関数

shift(x) = ifelse(x > 10, x + 1, x - 1)

使用法:

julia> shift(10)
9

julia> shift(11)
12

julia> shift(-1)
-2

ifelse関数は、選択されていない分岐もifelseて、両方の分岐を評価します。これは、ブランチが評価されなければならない副作用を有する場合、または両方のブランチ自体が安価である場合に高速化することができるので有用であり得る。



Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow