포스팅 환경
- Dart 2.18.2
개요
Dart 에서도 당연히 분기와 반복 문법이 있습니다.
이를 간단한 코드 예제와 함께 살펴 보겠습니다.
코드를 실행해서 테스트하고 싶은신 분들은 아래 사이트에서
실행할 수 있습니다 :)
if / else 문
if else 분기처리는 거의 모든 언어에서 기본이라
딱히 설명할 것은 없을 것 같네요
Dart 도 다르지 않습니다.
아래 코드를 보겠습니다.
void main() {
String text = "hello";
if (text is int) {
print("정수");
} else if (text is double) {
print("실수");
} else if (text is String) {
print("문자열");
} else {
print("정수, 실수, 문자열도 아닙니다.");
}
}
다만 Dart 에서는 Kotlin 처럼 if/else 문을 표현식으로 사용할 수 없는데요.
이 부분은 좀 아쉽습니다.
삼항연산자
삼항연산자는 Dart 에도 있습니다.
삼항연산자 문법을 살펴보면 아래와 같습니다.
condition ? expressions1 : expressions2;
조건을 만족하는 결과가 true 면 expressions1 결과를 return
조건을 만족하는 결과가 false 면 expressions2 결과를 return
아래 코드를 보겠습니다.
void main() {
var isPublic = false;
var visibility = isPublic ? "public" : "private";
print(visibility);
}
// 결과
private
앨비스 연산자
Kotlin 에서 자주 사용하는 ?: 연산자와 동일한 연산자가 Dart 에도 있습니다.
바로 ?? 키워드 인데요.
Dart 공식문서에는 단순히 조건 표현식이라고만 해둬서 따로 칭하는 명칭은 없는 것 같습니다.
그래서 일단 앨비스 연산자라고 글을 작성하였습니다.
앨비스 연산자 문법을 살펴보면 아래와 같습니다.
expressions1 ?? expressions2;
null 체크를 하는 용도로 사용할 수 있습니다.
expressions1 이 null 일 경우 expressions2 를 결과 값으로 return 합니다.
expression1 이 null 이 아닐 경우 expression1 을 결과 값으로 return 합니다.
사용법은 아래코드를 보겠습니다.
void main() {
var isPublic = null;
var visibility = isPublic ?? "private";
print(visibility);
}
// 결과
private
switch case 문
switch case 문은 딱 Java 로 생각하면 될 것 같아요
문법도 동일하고 로직도 완전 동일합니다.
void main() {
var command = "OPEN";
switch (command) {
case "CLOSED":
print("CLOSED");
break;
case "PENDING":
print("PENDING");
break;
case "APPROVED":
print("APPROVED");
break;
case "DENIED":
print("DENIED");
break;
case "OPEN":
print("OPEN");
break;
default:
print("UNKNOWN");
}
}
당연 break; 키워드가 없으면 에러가 발생합니다.
void main() {
var command = "OPEN";
switch (command) {
case "CLOSED":
print("CLOSED");
break;
case "PENDING":
print("PENDING");
break;
case "APPROVED":
print("APPROVED");
break;
case "DENIED":
print("DENIED");
break;
case "OPEN":
print("OPEN");
// break; 컴파일 에러 발생
default:
print("UNKNOWN");
}
}
여러 조건에 해당하는 case 를 만드려면
break; 를 없애고 case 를 아래위로 붙여주면 됩니다.
void main() {
var command = "CLOSED";
switch (command) {
case "CLOSED":
case "PENDING":
print("PENDING");
break;
case "APPROVED":
print("APPROVED");
break;
case "DENIED":
print("DENIED");
break;
case "OPEN":
print("OPEN");
break;
default:
print("UNKNOWN");
}
}
그리고 Java 처럼 Label 을 사용하여 흐름을 처리할 수도 있습니다.
아래 코드는 CLOSED, PENDING 에 걸리면 denied label 로 이동하고
DENIED 가 print 됩니다.
void main() {
var command = "CLOSED";
switch (command) {
case "CLOSED":
case "PENDING":
print("PENDING");
continue denied;
case "APPROVED":
print("APPROVED");
break;
denied:
case "DENIED":
print("DENIED");
break;
case "OPEN":
print("OPEN");
break;
default:
print("UNKNOWN");
}
}
// 결과
PENDING
DENIED
다만 Kotlin 에 Modern 한 when 문을 쓰다가
다시 switch/case 문을 쓰려니 적응을 하기 힘든부분이 있네요 ㅋㅋ
for 문
요소를 반복하는 루프입니다.
for 문의 문법도 Java 와 동일합니다.
void main() {
var message = StringBuffer('Dart is fun');
for (int i = 0; i < 5; i++) {
message.write('!');
}
print(message.toString());
}
다음은 요소를 반복하는 코드입니다.
callbacks 라는 배열을 만들고 요소로 람다식을 추가해주고 있습니다.
그리고 for 문을 돌면서 람다식을 호출해주는 코드입니다.
한가지 주의할점은 final 키워드를 붙여주지 않을 경우 컴파일 에러가 발생합니다.
void main() {
var callbacks = [];
for (int i = 0; i < 2; i++) {
callbacks.add(() => print(i));
}
for (final c in callbacks) {
c();
}
}
while / do 문
while 문의 문법도 Java 와 동일합니다.
while 만 썻을 때
void main() {
int i = 0;
while (i < 5) {
print("i: $i");
i++;
}
}
do 구문과 같이 썻을 때
void main() {
int i = 0;
do {
print("i: $i");
i++;
} while(i < 5);
}
여기까지 Dart 에서 흐름을 여러가지 문법을 사용하여
분기처리하거나 반복하는 코드를 살펴보았습니다.
이상으로 포스팅을 마치겠습니다.
감사합니다 :)
https://linitial.tistory.com/48?category=1050635
'Develop > Flutter' 카테고리의 다른 글
[Dart] 배우기 - 5. 객체지향 프로그래밍 (0) | 2022.11.05 |
---|---|
[Dart] 배우기 - 4. 컬렉션 (0) | 2022.10.26 |
[Dart] 배우기 - 2. 함수 정의와 호출 (0) | 2022.10.25 |
[Dart] 배우기 - 1. 기본 문법 (0) | 2022.10.24 |
[Flutter] - 앱 실행 도중 멈춤 현상(IOS, 신뢰하지 않는 개발자) (0) | 2022.10.24 |