Ticket #35277

実行コマンドの無い一行形式のifをエラーにする

Open Date: 2015-06-22 11:11 Last Update: 2016-03-06 19:30

Reporter:
Owner:
Type:
Status:
Closed
Component:
MileStone:
(None)
Priority:
5 - Medium
Severity:
5 - Medium
Resolution:
Fixed
File:
None
Vote
Score: 0
No votes
0.0% (0/0)
0.0% (0/0)

Details

if文には以下の2形式がある。

1: 一行形式

if <条件式> <コマンド>
2: 複数行形式
if <条件式> then
  <コマンド1>
  <コマンド2>
endif

例えば以下のマクロがあるとする。

result = 1

if result = 0
  messagebox "Error!" "error"
  goto Error
endif

:Error
このマクロの if 文は then が無いため一行形式として扱われ、コマンド指定も無いためなにも行わない。 条件が偽なので、実行コマンド部分が評価されないのでエラーにならない。

その後 messagebox, goto 文が実行される為、if が result の値にかかわらず常に if の条件が偽なのに実行されているように見えてしまう。

実行コマンドの無い一行形式の if 文に有用性は無いと思われるので、エラーとすべき。

if の条件が偽の時にコマンド部分が評価されないのは仕様だが、この例のように実行コマンドが無い場合は複数行形式の if 文に見えてしまい、 一見異常な動作に見えるのでコマンド指定が無い場合は特別にエラーとする方が良いと思われる。

Ticket History (3/6 Histories)

2015-06-22 11:11 Updated by: doda
  • New Ticket "実行コマンドの無い一行形式のifをエラーにする" created
2016-02-18 21:04 Updated by: doda
  • Owner Update from (None) to doda
  • Details Updated
Comment

問題の本質を誤解していたため修正。

2016-02-18 21:06 Updated by: doda
Comment

コマンド部分が無い場合は then が無くても複数行形式として扱うというのも考え付いたが、余計にややこしくなるので採用しない方がよさそう。

2016-02-23 21:48 Updated by: doda
Comment

r6316 で修正

2016-03-01 09:01 Updated by: None
2016-03-06 19:30 Updated by: (del#1144)
  • Milestone Update from Tera Term 4.90 (closed) to (None)
  • Ticket Close date is changed to 2016-03-06 19:30
  • Status Update from Open to Closed

Attachment File List

No attachments

Edit

You are not logged in. I you are not logged in, your comment will be treated as an anonymous post. » Login