if文でバグを仕込まないための注意点

今回はTeraTermマクロの仕様上回避のしようがないので、コーディングする側が気をつけましょう、という話です。

追記(2016年3月5日)

2016年3月5日リリースされたTera Term 4.90で仕様が変更されたため、4.90以降はこの問題に該当しません。

if文は皆さんご存じの通り、条件判定により「もし〜だったら」という処理をおこないます。では、つぎのマクロはどのような動作をするでしょうか。

実行結果はつぎのようになります。

おかしいですね。codeの値は100で間違いありません。

スポンサーリンク

if文の書き方

TeraTermマクロのif文は2通りの書き方があります。まず最初は「if 〜 then 〜 endif」形式です。

もうひとつの書き方は「if 〜 マッチした際の処理」形式です。

そう、if文には「then」がある場合とない場合の2パターンの書き方があります。

最初に掲載したサンプルマクロは「then」がありません。TeraTermマクロの仕様では「then」がない場合、条件にマッチした際の処理コードを書かなくても構文エラーになりません。そのため、条件に関わらず次の行へ進みます。ですから、codeの値が100だろうが200だろうが関係なく「codeの値が100ではありません!」というメッセージボックスが表示されてしまいます。

訂正(2016年2月19日)

「then」がない場合は次にTTLコマンドが来ることをTeraTermマクロは期待していますが、if文の条件に一致しない場合はTTLコマンドが実行されないため、次の行へ進みます。今回のサンプルでいうと4行目の「codeの値が100ではありません!」というメッセージを表示する箇所です。逆にif文の条件に一致した場合はTTLコマンドを実行しようとしますがTTLコマンドを記述していないためシンタックスエラーとなります。

thenの書き忘れに注意

これまで、本サイトではif文の使い方として、あえてthenを書かない方法を紹介しませんでした。それは今回のようばバグが発生してしまう可能性があるからです。ぼくの個人的な意見ですが、thenを書かない方式は使わず、常にthenを使う事をオススメします。そうすれば、if文を検索してthenの有無をチェックする事でバグを見つけやすくなるからです。

Tera Term 4.90以降はシンタックスエラーになる

2016年3月5日リリースされたTera Term 4.90へアップデートすると、thenの書き忘れはシンタックスエラーで処理が停止します。

スポンサーリンク

フォローする

スポンサーリンク

コメント

  1. ゆたか より:

    次のリリース(v4.90)で、thenがないif文はエラーとする予定です。

    https://osdn.jp/ticket/browse.php?group_id=1412&tid=35277

  2. […] 参考記事:if文でバグを仕込まないための注意点 […]