以前看过的effect xxx之类的书,总是会少不了这一条:避免使用goto语句
理由很简单,你一段代码一会跳这里,一会跳那里,跳来跳去就晕了,犹如在迷宫之中
看起来是很有道理,但是在实际运用中,不大会有人这么乱跳
有些情况下,goto反而是一种更加优雅的方式。比如:
1.多重循环
跳出循环用break,如果跳出多重循环呢?这种例子屡见不鲜,大家也都有自己的应对方式:标志变量。
但是如果用goto的话是不是会更直接更易读呢?
在Java中,仅此情况允许使用goto,是很有道理的。
2.资源回收
在我看来这种情况比多重循环更加典型。
假设一种很常见的情景:你在函数开始部分initialize一大堆模块,又malloc了不少堆内存,你需要在函数结尾去释放他们。
但是在函数的过程中有很多步骤,一步失败就停止执行并退出。
这时如果直接return的话,要在return之前写很多释放的语句,有n个步骤就有n个return,释放语句要写n遍,这简直是噩梦。
在我看来,最优雅的方式就是在函数结尾做一个exit标志,后面是释放语句,哪个步骤如果执行失败,就直接goto exit,简洁易懂
在我看来,没有不好的语法,只有不好的程序员。现在提倡不用的一些语法,也不是绝对的,只是说很多人在这里栽过跟头,如果你没有十足的把握,还是尽量不要用,免得以后陷入debug的泥潭不能自拔