10장: 함수, procedure
1. 프로시저 개요
TCL의 프로시저는 재사용 가능한 코드 블록을 정의하는 방법입니다. 함수나 서브루틴과 유사한 개념입니다.
2. 프로시저 정의
2.1 기본 구문
proc 프로시저이름 {인자리스트} {
프로시저 본문
}
2.2 간단한 예시
proc greet {name} {
puts "Hello, $name!"
}
greet "Chase" # 출력: Hello, Chase!
3. 인자 처리
3.1 기본 인자
proc add {a b} {
return [expr {$a + $b}]
}
puts [add 3 4] # 출력: 7
3.2 인자 기본값 설정
proc greet {name {greeting "Hello"}} {
puts "$greeting, $name!"
}
greet "World" # 출력: Hello, World!
greet "TCL" "Welcome" # 출력: Welcome, TCL!
4. 반환
4.1 return 명령어 사용
proc multiply {a b} {
return [expr {$a * $b}]
}
puts [multiply 6 7] # 출력: 42
4.2 암시적 반환
프로시저의 마지막 명령의 결과가 자동으로 반환됩니다.
proc last_element {list} {
lindex $list end
}
puts [last_element {1 2 3 4 5}] # 출력: 5
5. 변수 스코프
5.1 지역 변수
프로시저 내에서 선언된 변수는 기본적으로 지역 변수입니다.
기본적으로, 전역 스코프 -> proc 변수에 접근할 수 없습니다.
proc local_var_example {} {
set x 10
puts $x
}
local_var_example # 출력: 10
puts $x # 오류: x는 정의되지 않음
5.2 전역 변수 사용
global 키워드를 사용하면, proc -> 전역 변수에 접근할 수 있습니다.
set global_var 100
proc global_var_example {} {
global global_var
puts $global_var
}
global_var_example # 출력: 100
5.3 upvar 사용
상위 스코프의 변수를 참조할 수 있습니다.
proc modify_var {var_name new_value} {
upvar $var_name local_var
set local_var $new_value
}
set x 5
modify_var x 10
puts $x # 출력: 10
6. 프로시저 정보 얻기
6.1 info 명령어 사용
proc example {a {b 10} args} {
# 프로시저 본문
}
puts [info args example] # 출력: a b args
puts [info body example] # 프로시저 본문 출력
puts [info default example b default_value] # 출력: 1 10
7. 재귀 함수
TCL은 재귀 프로시저를 지원합니다.
proc factorial {n} {
if {$n <= 1} {
return 1
} else {
return [expr {$n * [factorial [expr {$n - 1}]]}]
}
}
puts [factorial 5] # 출력: 120
8. 성능 고려사항 🚀
프로시저 호출에는 약간의 오버헤드가 있습니다. 인라인 코드가 더 빠릅니다.
자주 호출되는 프로시저의 경우, 인자 검사와 기본값 처리를 최소화하는 것이 좋습니다.
10. 팁과 요령 💡
프로시저 이름은 의미있고 설명적으로 짓습니다.
복잡한 프로시저는 주석을 통해 목적과 사용법을 설명합니다.
프로시저가 예상치 못한 상황에서 오류를 발생시키려면
error
명령을 사용합니다. 그렇지 않으면 디버그가 매우 어렵습니다.
Last updated