プロシジャ名の規則は以下の様になっています。
proc max {a b} {
if {$a > $b} {
return $a
} else {
return $b
}
}
max 10 20
=> 20
max 20 10
=> 20
|
引数は、リスト形式で列挙します。
returnコマンドは、プロシジャから値を返す時に使います。
次の例は、引数で与えた3つの値の平均を求めています。
proc average {a b c} {
set sum [expr $a + $b + $c]
expr $sum / 3
}
average 10 20 30
=> 20
|
setコマンドで作成した変数sumは、プロシジャの外から参照できないローカル変数になります。
ここでは、returnコマンドを使っていませんが、
プロシジャ内で最後に実行したコマンドの結果は、
プロシジャの返り値になるので、returnコマンドを省略できます。
proc getdate {} {
set sec [clock seconds]
clock format $sec -format "%Y/%m/%d"
}
getdate
=> 2001/09/15
|
proc isI18N {} {
global tcl_version
expr $tcl_version > 8.0
}
isI18N
=> 1
|
Tcl8.0以上では、globalコマンドを使わなくてもスコープ解決演算子(::)を使ってグローバル変数を参照できます。
proc isI18N {} {
expr $::tcl_version > 8.0
}
isI18N
=> 1
|
proc sum {args} {
set sum 0
foreach num $args {
incr sum $num
}
return $sum
}
sum 1 2 3
=> 6
sum 1 2 3 4
=> 10
|
proc add {a {b 1}} {
expr $a + $b
}
add 10
=> 11
add 10 2
=> 12
|
set ary(名前) 太郎
set ary(歳) 2歳
set ary(性別) 男
proc getname {a} {
upvar $a var
return $var(名前)
}
getname ary
=> 太郎
|
upvarは、変数名の参照(別名)を作成します。
また、引数に変数名を渡すことにより、変数の値を直接書き換えることができます。
以下の例は、第1引数で渡された変数名の値を直接書き換えています。
proc add {a {b 1}} {
upvar $a var
set var [expr $var + 1]
}
set a 1
add a
=> 2
set a
=> 2
|
addプロシジャの呼び出し後に、変数aの値が2になっていることに注目してください。