{ }codelper

배우기 › Craykon

흐름 제어 · 05

조건문

조건에 따라 다른 일을 해요: if · else if · else, 그리고 switch.

조건문은 "만약 ~라면"을 코드로 쓴 거예요.
위에서부터 조건을 하나씩 보고, 처음으로 참인 갈래 하나만 실행해요.
아래 예제는 점수로 학점을 매기고 짝수인지도 알려 줘요.

score = 콘솔.줄읽기().수로변환();만약 (score >= 90){    콘솔.쓰기("A");}아니면 만약 (score >= 80){    콘솔.쓰기("B");}아니면 만약 (score >= 70){    콘솔.쓰기("C");}아니면{    콘솔.쓰기("F");}콘솔.쓰기(score % 2 == 0 ? "even" : "odd");
stdin
75
stdout
C
odd

핵심

  • 조건은 위에서부터 봐요.
    그래서 큰 기준부터 써야 해요.
    score >= 70을 먼저 쓰면 95점도 C가 돼요.
  • 모두 거짓이면 else 갈래를 실행해요.
    else는 없어도 돼요.
  • 조건을 잇는 논리 연산자: 그리고 &&, 또는 ||, 아니다 !.
    Python은 and, or, not이에요.
    앞에서 답이 정해지면 뒤는 계산하지 않아요(x != 0 && 10 / x > 1은 안전해요).
  • 값 하나를 여러 경우와 견줄 때는 switch가 더 읽기 쉬워요.
    언어마다 "다음 경우로 이어 내려가는지"가 달라요.
  • 짧은 둘 중 하나는 삼항 연산자로: 조건 ? 참일 때 : 거짓일 때 (Python은 A if 조건 else B).

언어별로 쓰는 법

Pythonif 조건: / elif 조건: / else: — 괄호 대신 :와 들여쓰기.
switch는 3.10부터 match x: + case 1 | 2: + case _:
JavaScriptif (조건) { } else if (조건) { } else { } — switch는 case마다 break가 없으면 다음 case로 이어져요.
값은 ===로 비교
TypeScriptJavaScript와 같아요.
타입이 다른 값끼리 비교하면 컴파일할 때 알려 줘요
Javaif (조건) { } else if (조건) { } else { } — switch는 break 필요.
Java 14부터 case 1, 2 -> …는 이어지지 않아요
C#if (조건) { } else if (조건) { } else { } — switch는 내용 있는 case마다 break(또는 return)가 꼭 있어야 해요(빠뜨리면 컴파일 오류)
C++if (조건) { } else if (조건) { } else { } — switch는 정수(문자 포함)만, break가 없으면 다음 case로 이어져요
CC++와 같아요.
참·거짓은 0과 0 아닌 수예요
Craykon만약 (조건) { } 아니면 만약 (조건) { } 아니면 { } — 선택 (x) { 경우 1, 2: … 그밖에: … }는 맞는 경우 하나만 실행하고 이어지지 않아요

자주 하는 실수

1 < x < 10처럼 이어 썼어요JavaScript · C · C++ · Craykon

let x = 50;
console.log(1 < x < 10);

→ true — (1 < x)가 먼저 true가 되고, true < 10이 참

1 < x && x < 10으로 나눠 써요.
Python에서만 수학처럼 이어 쓸 수 있어요(TypeScript·Java·C#은 컴파일 오류).

== 대신 =를 썼어요C · C++ · JavaScript · TypeScript

if (x = 5) {
    printf("다섯");
}

→ x에 5가 들어가고 조건은 늘 참이에요

비교는 ==.
Java·C#·Python·크레이콘은 이 실수를 오류로 알려 줘요.

switch에서 break를 빠뜨렸어요C · C++ · Java · JavaScript

switch (n) {
    case 1: puts("하나");
    case 2: puts("둘");
}

→ n이 1이면 "하나"와 "둘"이 모두 나와요

case마다 break;.
C#은 컴파일 오류로, 크레이콘 선택은 처음부터 이어지지 않게 막아요.

언어마다 다른 점
같은지 비교할 때 JavaScript·TypeScript는 ===를 써요.
==는 타입을 바꿔 가며 비교해서 "1" == 1도 true, "" == 0도 true예요.
크레이콘의 ==는 ===처럼 엄격해서 "1" == 1이 거짓이에요.

연습 문제