SimTalk 编程技巧和建议
善用debug
在程序运行中,有时会出现意外的情况,但是并不会打断程序执行,如move语句执行失败,程序会继续运行。当出现错误时,问题的根源已难以追溯。debug语句就可以在问题发生时,及时中断程序。下面列举一些debug的适用范围。
- move:move失败错误比较隐蔽,经常会在很长时间之后发生错误。建议使用以下方法:
if not move()
debug
end
- find:如果在一个表中使用find查找一个值,而这个值应该出现在表中。那么如果出现错误,并没有这个值,那么find语句并不会报错,而是返回初始游标位置,找到错误的值。建议使用以下方法:
if TableFile.find({*,*}..{*,*},aValue)
else
debug
end
- if:可以在if语句未涵盖到的部分添加debug,以检验当前程序逻辑。例如:
if condition1
elseif condition2
else
debug
end
利用高效语句
正常的仿真运行对程序效率要求不高,但是当仿真时间较长,需要进行大规模实验的时候,运行效率的问题变得尤为重要。这里列举一些高效的语句供参考。
- 使用switch…case…end (inspect…when…end) 代替 if…elseif…end (条件较多时)
- 使用copyRangeTo / writeRow 等代替循环语句写表,减少表格读取次数。
- 尽量使用局部变量代替全局变量,包括表格。
循环语句的终止条件
for循环不涉及该问题,但是while循环和repeat循环极有可能因为终止条件不完善陷入死循环。所以在使用这两种循环时,要注意设置循环次数的限制,添加计数器。例如:
repeat
«loop_statements»
i+=1
until «exit_condition» or i>1000