当前位置:  开发笔记 > 人工智能 > 正文

我怎么能让这个程序更优雅?

如何解决《我怎么能让这个程序更优雅?》经验,为你挑选了1个好方法。

我有一个伺服控制器正在移动物体越来越接近传感器,试图触发它.

我希望距离 15.5 开始.但是,在每次迭代中,我希望它减小距离.1,直到传感器触发.为方便起见,我想退出while循环,并将变量$ currentHeight设置为此触发高度,因此我将减量行放在循环的beignning处.

但是,我必须在while循环之前对15.6起始点进行硬编码,以便它在循环的第一行中减少到15.5.

这似乎并不优雅.关于如何修饰它的任何建议?顺便说一句,对于你所有的老学校和晦涩的程序员来说,这是Tcl.;)

码:

set currrentDistance 15.6
set sensorStatus 4

while {$sensorStatus == 1)} {
    set currentDistance [expr $currentDistance - .1]
    moveServo $currentHeight
    set sensorStatus [watchSensor 2]
}

Donal Fellow.. 6

我用了一个for循环:

for {set d 155} {$d > 0} {incr d -1} {
    set currentDistance [expr {$d * 0.1}]

    moveServo $currentHeight
    set sensorStatus [watchSensor 2]
    # If we've found it, stop searching!
    if {$sensorStatus == 1} break
}

这样做的首先具有抗物理不可能的限制(在机器人研磨件没有意义!),其次用整数做迭代的优势.第二点至关重要:二进制浮点数是棘手的事情,特别是在迭代0.1时,Tcl(与许多其他语言一样)在内部使用IEEE浮点运算.避免这些问题的方法是迭代整数并有一些代码转换为浮点(例如,除以10).考虑以0.1为单位处理倒计时.:-)

另一个较小的风格点.将{括号括起来,}因为它可以提高安全性和性能.(性能提升是因为运行时知道它不能有奇怪的表达式片段,这也是不安全的.不是因为它依赖于伺服硬件而在这段代码中很关键,但这是一个好习惯.进入.)



1> Donal Fellow..:

我用了一个for循环:

for {set d 155} {$d > 0} {incr d -1} {
    set currentDistance [expr {$d * 0.1}]

    moveServo $currentHeight
    set sensorStatus [watchSensor 2]
    # If we've found it, stop searching!
    if {$sensorStatus == 1} break
}

这样做的首先具有抗物理不可能的限制(在机器人研磨件没有意义!),其次用整数做迭代的优势.第二点至关重要:二进制浮点数是棘手的事情,特别是在迭代0.1时,Tcl(与许多其他语言一样)在内部使用IEEE浮点运算.避免这些问题的方法是迭代整数并有一些代码转换为浮点(例如,除以10).考虑以0.1为单位处理倒计时.:-)

另一个较小的风格点.将{括号括起来,}因为它可以提高安全性和性能.(性能提升是因为运行时知道它不能有奇怪的表达式片段,这也是不安全的.不是因为它依赖于伺服硬件而在这段代码中很关键,但这是一个好习惯.进入.)

推荐阅读
Gbom2402851125
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有