Dart : https://dart.dev/guides/language/language-tour
1. If and else
- if, else if 의 조건문은 boolean 값이어야 한다
if (isRaining()) {
you.bringRainCoat();
} else if (isSnowing()) {
you.wearJacket();
} else {
car.putTopDown();
}
여기서 잠깐, Collection if
- 조건으로 컬렉션의 값을 조정하고 싶을 때 아래처럼 사용한다
var nav = [
'Home',
'Furniture',
'Plants',
if (promoActive) 'Outlet'
];
2. For loops
var message = StringBuffer('Dart is fun');
// 기본적인 for loops
for (var i = 0; i < 5; i++) {
message.write('!');
}
// canditates 가 Iterable 이면 forEach 를 사용할 수 있다
candidates.forEach((candidate) => candidate.interview());
// for-in 으로도 사용할 수 있다
var collection = [0, 1, 2];
for (var x in collection) {
print(x); // 0 1 2
}
여기서 잠깐, Collection for
var listOfInts = [1, 2, 3];
var listOfStrings = [
'#0',
for (var i in listOfInts) '#$i'
];
assert(listOfStrings[1] == '#1');
3. While and do-while
// loop 를 돌기 전에 조건문을 체크한다
while (!isDone()) {
doSomething();
}
// loop 를 먼저 돌고 조건문을 체크한다
do {
printLine();
} while (!atEndOfPage());
4. Break and continue
// break 를 만나면 loop 를 멈추고 빠져나간다
while (true) {
if (shutDownRequested()) break;
processIncomingRequests();
}
// continue 를 만나면 다음 iteration 으로 넘긴다
for (int i = 0; i < candidates.length; i++) {
var candidate = candidates[i];
if (candidate.yearsExperience < 5) {
continue;
}
candidate.interview();
}
// List 또는 Set 의 경우 where() 를 사용하여 forEach 를 실행할 수 있다
candidates
.where((c) => c.yearsExperience >= 5)
.forEach((c) => c.interview());
5. Switch and case
// 기본 break 가 들어간 switch-case 구문
var command = 'OPEN';
switch (command) {
case 'CLOSED':
executeClosed();
break;
case 'OPEN':
executePending();
// break 없으면 Error
default:
executeUnknown();
}
// break 없이 비어있는 switch-case 구문
var command = 'CLOSED';
switch (command) {
case 'CLOSED': // 비어있는 경우 아래 case 의 excuteNowClosed() 를 실행한다
case 'NOW_CLOSED':
// Runs for both CLOSED and NOW_CLOSED.
executeNowClosed();
break;
}
// continue 를 사용한 switch-case 구문
var command = 'CLOSED';
switch (command) {
case 'CLOSED':
executeClosed();
continue nowClosed;
// nowClosed 라벨에서 계속 실행한다
nowClosed:
case 'NOW_CLOSED':
// Runs for both CLOSED and NOW_CLOSED.
executeNowClosed();
break;
}
6. Exceptions
- Java와 달리 Dart 의 모든 예외는 확인되지 않은 예외이다
- 메서드는 throw 할 수있는 예외를 선언하지 않으며 예외를 포착 할 필요가 없다
6-1. Throw
// 정의된 throws
throw FormatException('Expected at least 1 section');
// Custom throws
throw 'Out of llamas!';
// 표현식으로 throws
void distanceTo(Point other) => throw UnimplementedError();
6-2. Catch
- 아래 예제와 예외를 잡는다면 OutOfLlamasException 에는 앱이 죽지 않는다
// 하나의 예외를 처리 할 경우
try {
breedMoreLlamas();
} on OutOfLlamasException {
buyMoreLlamas();
}
/// 둘 이상의 예외 처리 할 경우 여러 catch 절을 지정할 수 있다
/// catch 절에 타입을 지정하지 않으면 모든 타입의 throw 된 객체를 처리 할 수 있다
try {
breedMoreLlamas();
} on OutOfLlamasException {
// A specific exception
buyMoreLlamas();
} on Exception catch (e) {
// Anything else that is an exception
print('Unknown exception: $e');
} catch (e) {
// No specified type, handles all
print('Something really unknown: $e');
}
- catch() 에 하나 또는 두 개의 매개 변수를 지정할 수 있다
- 첫 번째는 throw 된 예외이고 두 번째는 스택 추적 (StackTrace 객체) 이다.
try {
// ···
} on Exception catch (e) {
print('Exception details:\n $e');
} catch (e, s) {
print('Exception details:\n $e');
print('Stack trace:\n $s');
}
- 예외를 부분적으로 처리하고 전파를 허용하려면 rethrow 키워드를 사용한다
void misbehave() {
try {
dynamic foo = true;
print(foo++); // Runtime error
} catch (e) {
print('misbehave() partially handled ${e.runtimeType}.');
rethrow; // 해당 함수를 호출한 곳에서 exception 을 볼 수 있다
}
}
void main() {
try {
misbehave();
} catch (e) {
print('main() finished handling ${e.runtimeType}.');
}
}
6-3. Finally
- 예외 발생 여부에 관계없이 일부 코드가 실행되도록하려면 finally 절을 사용한다
- finally 절은 일치하는 catch 절 이후에 실행된다
- 예외와 일치하는 catch 절이 없으면 finally 절이 실행 된 후 예외가 전파된다
try {
breedMoreLlamas();
} finally {
// Always clean up, even if an exception is thrown.
cleanLlamaStalls();
}
try {
breedMoreLlamas();
} catch (e) {
print('Error: $e'); // Handle the exception first.
} finally {
cleanLlamaStalls(); // Then clean up.
}
'기타개발 > Flutter' 카테고리의 다른 글
Dart #6 : Abstract, Implicit interface, Extends (0) | 2020.08.28 |
---|---|
Dart #5 : Classes, Constructor (0) | 2020.08.28 |
Dart #3 : Operators (0) | 2020.08.27 |
Dart #2 : Functions (1) | 2020.08.27 |
Dart #1 : Type, Collections, Final, Const etc. (0) | 2020.08.26 |
댓글