8장: 반환, return

1. break 명령어

break는 현재의 루프나 switch 문을 즉시 종료합니다.

1.1 사용 예시

for {set i 0} {$i < 10} {incr i} {
    if {$i == 5} {
        break
    }
    puts $i
}
puts "Loop ended"

1.2 주의사항 ⚠️

  • 가장 안쪽의 루프만 종료합니다. 중첩된 루프에서 외부 루프를 종료하려면 추가 로직이 필요합니다.

2. continue 명령어

continue는 현재 루프 반복을 중단하고 다음 반복으로 건너뜁니다.

2.1 사용 예시

for {set i 0} {$i < 5} {incr i} {
    if {$i == 2} {
        continue
    }
    puts $i
}

2.2 주의사항 ⚠️

  • while 루프에서 사용 시, 증감식이 실행되지 않을 수 있으므로 주의가 필요합니다.

3. catch 명령어

catch는 명령 실행 중 발생하는 오류를 캐치합니다.

3.1 기본 구문

catch {스크립트} [결과변수] [옵션]

3.2 사용 예시

if {[catch {open "nonexistent.txt" r} fid]} {
    puts "Couldn't open the file: $fid"
} else {
    puts "File opened successfully"
    close $fid
}

4. return 명령어

return은 현재 프로시저에서 값을 반환하고 실행을 종료합니다.

4.1 기본 구문

return [값]

4.2 사용 예시

proc add {a b} {
    return [expr {$a + $b}]
}
puts [add 3 4]  # 출력: 7

4.3 주의사항 ⚠️

  • 전역 스코프에서 사용 시 스크립트 전체 실행을 종료합니다.

5. error 명령어

error는 오류를 발생시키고 스크립트 실행을 중단합니다.

5.1 기본 구문

error 메시지 [정보] [코드]

5.2 사용 예시

proc divide {a b} {
    if {$b == 0} {
        error "Division by zero" "in divide function" DIVIDE_BY_ZERO
    }
    return [expr {$a / $b}]
}

if {[catch {divide 10 0} result options]} {
    puts "Error: $result"
    puts "Info: [dict get $options -errorinfo]"
    puts "Code: [dict get $options -errorcode]"
}

6. 제어 흐름 명령어 조합 사용

proc process_data {data} {
    foreach item $data {
        if {[catch {process_item $item} result]} {
            puts "Error processing item $item: $result"
            continue
        }
        if {$result eq "STOP"} {
            break
        }
    }
    return "Processing complete"
}

7. 팁과 요령 💡

  • catch를 과도하게 사용하면 디버깅이 어려워질 수 있습니다. 필요한 곳에만 사용하세요.

  • return -code error를 사용하여 error 명령어와 유사한 효과를 낼 수 있습니다.

Last updated