수색…


통사론

  • if cond; 신체; 종료
  • if cond; 신체; 그밖에; 신체; 종료
  • if cond; 신체; elseif cond; 신체; 그밖에; 종료
  • if cond; 신체; elseif cond; 신체; 종료
  • 조건? iftrue : iffalse
  • cond && iftrue
  • cond || iffalse
  • ifelse (cond, iftrue, iffalse)

비고

모든 조건 연산자와 함수는 부울 조건 ( true 또는 false )을 사용합니다. Julia에서 부울 유형은 Bool 입니다. 다른 언어와 달리 다른 종류의 숫자 ( 1 이나 0 과 같은), 문자열, 배열 등 조건문에서 직접 사용할 수 없습니다 .

일반적으로 조건부 연산자 또는 함수의 조건에서 조건부 함수 ( 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 은 거짓이므로 두 번째 분기를 mygcd(3 % 2, 2) mygcd(b % a, a) 계산합니다. % 연산자는 32 로 나눈 나머지 (이 경우 1 반환합니다. 따라서 우리는 mygcd(1, 2) 계산하고,이 때 a1 이고 b2 입니다. 다시 한번, a == 0 은 거짓이므로 두 번째 분기를 mygcd(b % a, a) 계산합니다. 이것은 mygcd(0, 1) 입니다. 이번에는 a == 0 이어서 abs(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

위의 예제에서, 우리는 현재 시간 을 얻기 위해 시간과 날짜 함수를 사용 합니다 ; 예를 들어, 현재 10:55:27이면 변수 second27 을 유지합니다. 이 숫자가 짝수이면 화면에 선이 인쇄됩니다. 그렇지 않으면 아무것도 수행되지 않습니다.

삼항 조건부 연산자

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

삼항 조건 연산자는 덜 말의 인 if ... else 식입니다.

구문은 구체적으로 다음과 같습니다.

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

이 예에서는 추가 x 컬렉션에 경우에만 A x 에없는 . A 그렇지 않으면 A 변경하지 않고 그대로 둡니다.

삼항 연산자 참조 :

단락 연산자 : && 및 ||

분기 용

단락 조건 연산자 &&|| 다음 구조체의 경량 대체품으로 사용할 수 있습니다.

  • x && yx ? y : x 와 같습니다 x ? y : x
  • x || yx ? x : y 와 동일 x ? x : y

단락 회로 운영자의 한 가지 용도는 조건을 테스트하고 그 조건에 따라 특정 조치를 수행하는보다 간결한 방법입니다. 예를 들어, 다음 코드는 인수 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

이것의 또 다른 유용한 응용 프로그램은 이전에 정의되지 않은 경우에만 개체에 기본값을 제공하는 것입니다.

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

여기에서 기호 x가 정의되어 있는지 확인합니다 (즉, 객체 x 값이 할당 된 경우). 그렇다면 아무 일도 일어나지 않습니다. 그러나 그렇지 않으면 xNEW_VALUE 로 지정됩니다. 이 예제는 최상위 범위에서만 작동합니다.

조건 있음

연산자는 두 조건을 테스트하는 데 사용할 수 있기 때문에 유용합니다. 두 번째 조건은 첫 번째 조건의 결과에만 따라 평가됩니다. 줄리아 문서에서 :

표현식 a && b 에서 btrue 평가되면 부분 표현식 b 만 평가됩니다 a

표현식 a || b 가있는 경우 a bfalse 평가되면 부분 표현식 b 만 평가됩니다 a

모두 동안 따라서, a & ba && b 얻을 것 true 둘 경우 와 a b 있는 true , 경우 그들의 행동 a 이다 false 다르다.

예를 들어, 객체가 양수인지 여부를 확인하고자 할 때, 숫자가 아닐 수도 있습니다. 시도한 두 구현 간의 차이점을 고려하십시오.

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

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

CheckPositive1() 은 숫자가 아닌 유형이 인수로 제공되면 오류를 생성합니다. 첫 번째 결과에 상관없이 표현식을 모두 평가하고 두 번째 표현식이 숫자가 아닌 유형으로 평가하려고하면 오류가 발생하기 때문입니다.

그러나 두 번째 표현식은 첫 번째 표현식이 true 경우에만 평가되므로 CheckPositive2() 는 숫자가 아닌 유형이 제공된 경우 오류가 아닌 false 반환 true .

둘 이상의 단락 회로 운영자가 함께 연결될 수 있습니다. 예 :

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 분기가 있거나없는 if 문과 함께 elseif 분기가 여러 개 사용될 수 있습니다. 후속 조건은 모든 이전 조건이 false 으로 판명 된 경우에만 평가됩니다.

ifelse 함수

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

용법:

julia> shift(10)
9

julia> shift(11)
12

julia> shift(-1)
-2

ifelse 함수는 선택되지 않은 분기조차도 두 가지 분기를 평가합니다. 이것은 분기가 평가되어야하는 부작용이 있거나, 두 분기가 모두 저렴하면 더 빠를 수 있기 때문에 유용 할 수 있습니다.



Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow