Top

Up

흐름 제어문 (Control flow statements)

다음 중 하나를 사용하여 Dart 코드의 흐름을 제어 할 수 있습니다.

Exception에서 설명한대로 try-catchthrow를 사용하여 제어 흐름에 영향을 미칠 수 있습니다.

If 와 else

Dart는 다음 예제에서 볼 수 있듯이 else 이 선택적인 if 문을 지원합니다. conditional expression도 참조하세요.

if (isRaining()) {
  you.bringRainCoat();
} else if (isSnowing()) {
  you.wearJacket();
} else {
  car.putTopDown();
}

JavaScript와 달리 조건은 부울 값을 사용해야 하며 그 밖의 것은 없습니다. 자세한 내용은 Booleans를 참조하십시오.

For 루프

표준 for 루프로 반복 할 수 있습니다. 예 :

var message = StringBuffer('Dart is fun');
for (var i = 0; i < 5; i++) {
  message.write('!');
}

Dart의 for 루프의 클로저는 인덱스의 value를 포착하여 JavaScript에서 흔히 볼 수있는 함정을 피합니다. 예를 들어 다음을 보세요.

var callbacks = [];
for (var i = 0; i < 2; i++) {
  callbacks.add(() => print(i));
}
callbacks.forEach((c) => c());

예상대로 출력은 0이고 1입니다. 반대로 이 예제는 Dart에서 22를 출력합니다.

반복되는 객체가 반복 가능이라면 forEach() 메소드를 사용할 수 있습니다. forEach()를 사용하는 것은 현재 반복 카운터를 알 필요가 없는 경우에 좋은 옵션입니다 :

candidates.forEach((candidate) => candidate.interview());

리스트나 세트 같은 iterable 클래스는 for-in 형태의 iteration도 지원합니다 :

var collection = [0, 1, 2];
for (var x in collection) {
  print(x); // 0 1 2
}

While 과 do-while 루프

while 루프는 루프 앞에서 루프 조건을 평가합니다 :

while (!isDone()) {
  doSomething();
}

do-while 루프는 루프 뒤에서 루프 조건을 평가합니다:

do {
  printLine();
} while (!atEndOfPage());

Break 와 continue

루프를 중단하기 위해 break를 사용하십시오 :

while (true) {
  if (shutDownRequested()) break;
  processIncomingRequests();
}

다음 루프 이터레인션으로 건너 뛰려면 continue를 사용하십시오 :

for (int i = 0; i < candidates.length; i++) {
  var candidate = candidates[i];
  if (candidate.yearsExperience < 5) {
    continue;
  }
  candidate.interview();
}

리스트나 세트 같은 Iterable을 사용하는 경우 해당 예제를 다르게 작성할 수 있습니다.

candidates
    .where((c) => c.yearsExperience >= 5)
    .forEach((c) => c.interview());

Switch 와 case

Dart의 switch 문은 ==를 사용하여 정수, 문자열 또는 컴파일 타임 상수를 비교합니다. 비교된 객체는 모두 같은 클래스의 인스턴스가 되어야 하며 (그 하위 타입이 아닌) 클래스는 ==을 오버라이드해서는 안됩니다. Enumerated typesswitch 문에서 잘 작동합니다.

Note: Dart의 switch 문은 인터프리터나 스캐너와 같이 제한된 상황에서만 사용할 수 있습니다.

비어 있지 않은 case 절은 원칙적으로 break 문으로 끝납니다. 비어 있지 않은 case 절을 끝내는 다른 유효한 방법은 continue, throw 또는 return 문입니다.

case 절이 일치하지 않을 때 코드를 실행하려면 default 절을 사용하십시오 :

var command = 'OPEN';
switch (command) {
  case 'CLOSED':
    executeClosed();
    break;
  case 'PENDING':
    executePending();
    break;
  case 'APPROVED':
    executeApproved();
    break;
  case 'DENIED':
    executeDenied();
    break;
  case 'OPEN':
    executeOpen();
    break;
  default:
    executeUnknown();
}

다음 예제는 case 절의 break 문을 생략하여 오류를 생성합니다 :

var command = 'OPEN';
switch (command) {
  case 'OPEN':
    executeOpen();
    // ERROR: break를 빠뜨림.

  case 'CLOSED':
    executeClosed();
    break;
}

그러나 Dart는 빈 case 절을 지원하여 fall-through의 한 형태를 허용합니다.

var command = 'CLOSED';
switch (command) {
  case 'CLOSED': // 빈 cas는 falls through 함.
  case 'NOW_CLOSED':
    // CLOSED와 NOW_CLOSED case 둘다 실행됨.
    executeNowClosed();
    break;
}

fall-through를 정말로 원한다면, continue 문과 레이블을 사용할 수 있습니다 :

var command = 'CLOSED';
switch (command) {
  case 'CLOSED':
    executeClosed();
    continue nowClosed;
  // nowClosed 레이블로 계속 실행 됨.

  nowClosed:
  case 'NOW_CLOSED':
    // CLOSED 와 NOW_CLOSED 둘다 실행 됨.
    executeNowClosed();
    break;
}

case 절은 그 절의 범위 안에서만 볼 수있는 지역 변수를 가질 수 있습니다.

Assert

부울 조건이 거짓 인 경우 정상 실행을 중단 시키려면 assert 문을 사용하세요. 이 예제에서 assert 문구의 예를 찾을 수 있습니다. 여기에 더 많은 것들이 있습니다:

// Make sure the variable has a non-null value.
assert(text != null);

// Make sure the value is less than 100.
assert(number < 100);

// Make sure this is an https URL.
assert(urlString.startsWith('https'));

Note: Assert 문은 프로덕션 코드에 영향을주지 않습니다. 그들은 단지 개발 용입니다. Flutter는 debug mode에서 assertion 을 활성화합니다 dartdevc와 같은 개발 전용 도구는 일반적으로 기본적으로 어설션을 지원합니다. dartdart2js와 같은 일부 도구는 명령 줄 플래그를 통해 어설션을 지원합니다:--enable-asserts.

메시지를 어설션에 첨부하려면 문자열을 두 번째 인수로 추가하십시오.

assert(urlString.startsWith('https'),
    'URL ($urlString) should start with "https".');

assert의 첫 번째 인수는 부울 값으로 해석되는 모든 표현식이 될 수 있습니다. 표현식의 값이 true이면 어설션이 성공하고 실행이 계속됩니다. false 인 경우, 어설션이 실패하고 예외 (AssertionError)가 발생합니다.


이전: 연산자 (Operators)

다음: 예외 (Exceptions)

문서 변경 이력

2019년 5월 15일: 첫 작성.