用还是不用GOTO语句,这是个问题

从学BASIC语言开始,就被不断告之,千万不要用GOTO语句,它会让你的代码变成老鼠窝。但是,现在碰到这样的一个情况,想用GOTO语句了。

当从一个多层嵌套的循环体里的时候,比如在三维网格里线性搜索一个节点,找到了,就想直接跳出来。

当然可以用return跳。但如果不想就此结束方法,就不能用return了。

在JAVA里,可以用带label的break语句跳出来,很体贴。

C#里却没这种带label的break,这时,只能用goto语句跳出来了。

当然,可以用些循环标志,一层层地跳出来,但这样太麻烦了。

网上有人说,如果只用goto语句向下跳,而坚决不向上跳,还是可以的。

也有说法,直接用goto语句跳出来的运行效率却比一层层跳出来差,主要是JIT优化不好。

所以,我还是选择一层层跳出来了,没敢用goto语句。

此外,还有一种最烂的写法,就是用抛异常的方法跳出来。这个在Effective Java里说的很清楚,抛异常是不应该用来控制正常程序流程的。这样做,不但代码可读性差。而且JIT对这种流的运行优化很差。

Advertisements
此条目发表在未分类分类目录。将固定链接加入收藏夹。

发表评论

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / 更改 )

Twitter picture

You are commenting using your Twitter account. Log Out / 更改 )

Facebook photo

You are commenting using your Facebook account. Log Out / 更改 )

Google+ photo

You are commenting using your Google+ account. Log Out / 更改 )

Connecting to %s