Branch란?
Branch는 다음과 같이 코드의 흐름이 조건에 따라 나누어 지는 것을 의미합니다.
(15년도 SKT T1은 월즈에 나온 모든 팀들에게 자연재해 그 자체였습니다. 대상혁..)
Dart에서는 크게 다음의 3가지 방식으로 Branch를 이용해 코드의 흐름을 제어합니다.
- If
- If case
- switch
본 글에서는 If 와 If case에 대해서 알아보도록 하겠습니다.
switch는 헷갈리는 용어들 정리(1)-statement & expression에 정리해두었으니 참고해주세요.
If
If문은 condition으로 bool값으로 평가될 수 있는 expression이 올 수 있습니다.
// bool isFakerDominating() {...}
if (isFakerDominating()) {
you.lose();
}
만약 여러 종류의 분기가 필요하다면 else 문을 이용해 여러 개의 분기점을 만들 수 있습니다.
if (isFakerDominating()) {
you.lose();
} else if (isMarineDominating()) {
you.lose();
} else if (isBangDominating()) {
you.lose();
} else if (isBengiUsingHand()) {
you.lose();
} else {
you.win();
}
만약 분기가 하나뿐이라면 conditional expression을 사용해 더 간단하게 표현할 수도 있습니다.
conditional expression은 다음과 같이 표현할 수 있습니다.
condition ? expression1 : expression2
만약 condition이 true라면 expression1의 값이 evaluate되고 false라면 expression2의 값이 evaluate됩니다.
다른 언어에서는 흔히 삼항연산자(ternary operation)으로도 많이 부릅니다.
String yourTeam = isBengUsingHand() ? "Lose" : "Win";
If case
If case 문은 pattern 문법과 함께 Dart 버전 3.0 이상부터 지원되는 문법입니다.
if case 문은 조건문에 pattern 을 이용한 pattern matching과 destructuring(구조 분해 할당)이 가능합니다.
만약 다음과 같이 특정 패턴을 파악해야 하는 경우가 있다고 가정해 봅시다.
bool isCartesian(pair) {...} // additional coding for pattern matching
bool isPolar(pair) {...}
var anonymousPair = [1, 2];
if (isCartesian(anonymousPair)) {
print("pair is cartesian");
print("${anonymousPair[0]} ${anonymousPair[0]}");
} else if (isPolar(anonymousPair)) {
print("pair is polar");
print("${anonymousPair[0]} ${anonymousPair[0]}");
} else {
// Not implemented.
}
if case 문을 이용하면 다음과 같이 바꿀 수 있습니다.
var anonymousPair = [1, 2];
if (anonymousPair case [int x, int y]) { // pattern matching and destructuring.
print("pair is cartesian");
print('$x $y');
} else {
print("pair is polar");
print('$x $y');
}
if case문은 위처럼 1가지 케이스에 대해 pattern matching하는 경우 유용한 문법입니다.
여러 개의 case에 대해 분기를 위해서는 switch문을 이용하는 것이 적절합니다.