[Dart] 3. 흐름 제어문
※ https://dart-ko.dev/language, https://dart-ko.dev/language/loops, https://dart-ko.dev/language/branches, https://dart-ko.dev/language/error-handling#assert 을 참고하여 작성하였습니다.
Loops
For
활용 1
- StringBuffer 클래스: 문자열을 동적으로 추가, 수정할 수 있는 메서드 제공
1 2 3 4 5
var message = StringBuffer('Dart is fun'); for (var i = 0; i < 5; i++) { message.write('!'); } print(message); // Dart is fun!!!!!
활용 2: () => print(i)를 클로저 함수로 활용
1 2 3 4 5 6 7 8
var callbacks = []; for (var i = 0; i < 2; i++) { callbacks.add(() => print(i)); } for (final c in callbacks) { c(); }
활용 3: 클래스의 인스턴스를 for문으로
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
class Candidate { final String name; final int yearsExperience; Candidate(this.name, this.yearsExperience); } void main() { var candidates = [ Candidate('Alice', 5), Candidate('Bob', 3), Candidate('Charlie', 7), ]; for (final Candidate(:name, :yearsExperience) in candidates) { print('$name has $yearsExperience of experience.'); } }
활용 4: forEach
1 2
var collections= [1, 2, 3]; colelction.forEach(print); // 1 2 3
While, do-while
break-continue
- break: while에서 분기문을 exit하고 싶을 때
- continue: for문에서 다음 분기문으로 pass하고 싶을 때
where(): 특정 조건을 만족하는 요소들만 선택적으로 추출
1 2 3 4 5 6 7
void main() { List<int> numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]; var evenNumbers = numbers.where((number) => number % 2 == 0); print(evenNumbers); // (2, 4, 6, 8, 10) }
Branching(분기)
switch-case
활용 1: case에 연산자 사용 가능(<, >, ≤, ≥, , &&, …) 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
var grade= 'C'; switch(grade){ case 'A' || 'B': print('best'); break; case 'C' || 'D': print('good'); break; case 'E' || 'F': print('bad'); break; default: print('worst'); break; }
활용 2: 두 개의 값도 활용 가능
1 2 3 4 5 6 7
var pair= (1, 3); switch (pair) { case (int a, int b) when a > b: print('First element greater'); case (int a, int b): print('First element not greater'); }
Exceptions(에러 핸들링)
Explanation
- Exception과 Error 타입 제공
- Exception과 Error 객체 이외에도 non-null 객체를 예외로 발생시킬 수 있음
- 원하는 예외 정의 가능
- Exception과 Error 타입 제공
예외
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
void misbehave() { try { dynamic foo = true; print(foo++); // 런타임 에러 } catch (e) { print('misbehave() partially handled ${e.runtimeType}.'); rethrow; // 호출자가 예외를 확인 할 수 있도록 허락 } } void main() { try { misbehave(); } catch (e) { print('main() finished handling ${e.runtimeType}.'); } }
- Throw: 예외를 throwing 또는 raising하는 코드
- Catch: 예외 처리문
- 예외가 발생한 타입에 따라 예외 처리를 진행할 수도 있고,
- 별도로 예외 타입을 명시해주지 않으면 모든 타입의 예외를 처리할 수 있음
- Finally: 예외 발생 여부와 상관 없이 실행하고 싶은 코드를 적는 곳
Assert
- assert(~)
- ~가 참이면 pass
- ~가 거짓이면 error 메시지. 즉, 예외 처리
- 예제
- assert(text != null);
- assert(5>3);
- assert(~)
This post is licensed under CC BY 4.0 by the author.