LoginSignup
7
4

More than 5 years have passed since last update.

Tcl/Tkでプログラムを書く(2)

Last updated at Posted at 2018-04-30

Tcl/Tkでプログラムを書く(1)から続く。

制御構造

標準的な制御構造は一通り使える。(1)で書いたとおり、すべての制御構造はコマンドである。

ifコマンドは見た目普通である。「条件」はexprが評価する。

if 条件 成立部 else 非成立部

前述のforと同じく、ifも1行で書かなければならないので、

if {$i == 0} {
  puts yes
}
else {
  puts no
}

のようには書けない(これだとelseが次の行に来る)。正しくは次のようになる。

if {$i == 0} {
  puts yes
} else {
  puts no
}

switchもある。見づらいので個人的にはあまり使わない。

switch [オプション] 値 パターン 処理 [パターン 処理 ...] [default 処理]

switchもコマンドなので、{ }の中の改行を除き、1行で書かなければならない。行をまたぐ時には \ で継続行にしなければならない。例えばこんな感じ。

switch $var \
  aaa {puts 1} \
  bbb {puts 2} \
  default {puts 100}

ループにはwhile, for, foreach がある。

while 条件 処理
for 初期化 継続判定 更新 処理
foreach 変数 リスト 処理

foreachは例えば次のように使う。

set words {foo baa baz}
foreach w $words {
  puts $w
}

コマンドが返す値の利用

ほかのコマンドが返す値を使いたいことがある。例えばexprで計算した値を変数に代入する場合などである。これには[ ]を使う。

set x 10
set y [expr $x*$x]

コマンドの定義

コマンドの定義はprocコマンドである。

proc コマンド名 引数リスト 処理

例えば同じ引数を2度繰り返すコマンドは次のように定義できる。

proc dub {x} {
  return $x$x
}

同じ引数をn回繰り返すコマンドは(いろんな書き方があるが)次のように書ける。

proc dubn {x n} {
  if {$n == 0} {
    return {}
  } else {
    return $x[dubn $x [expr $n-1]]
  }
}

その(3)に続く

7
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
4