goto不知道为什么这么讨人厌呢?我也不明白,大学时c语言老师就严厉反对我们使用goto。因此我也没怎么用过,有时候我在想这些最讨厌goto的人是不是曾经也是goto的重度使用患者,然后有一天他们的goto把他们的程序搞崩了,然后他们发现用goto写的程序他们自己也看不懂了...
咱也不敢说,也不敢问。
就说说java吧。我Java这么严谨的语言怎么可能有goto呢,当然是不可能有的。
但是我们有break goto 和 continue goto,我觉得这算是弱化版的goto,
学了Java两三年了,我还真的只是听过没有用过,可能是被goto的恶名影响了吧。
但是最近review java再度发现了这个,我觉得还是挺好用的。
首先先看一下break和continue吧:
@Test
public void test1() throws Exception {
int i = 0;
while (true) {
i ++;
if (i == 10) {
System.out.println("continue i = " + i);
continue;
}
if (i >= 10) {
System.out.println("break i =" + i);
break;
}
}
}
输出:
continue i = 10
break i =11
在i == 10,先执行了continue跳过了后边的判断,然后再次进入循环,i = 11,满足break条件,跳出循环。
break goto就是为了解决以下代码中的困境的:
这样的多重循环,要怎么跳出?
@Test
public void test2() throws Exception {
int i = 0;
while (true) {
do {
for (;;) {
i ++;
if (i == 10) {
break;
}
}
} while (true);
}
}
我们可能会用一个标识:
@Test
public void test3() throws Exception {
int i = 0;
boolean justBreak = false;
while (!justBreak) {
do {
for (;;) {
i ++;
if (i == 10) {
justBreak = true;
break;
}
}
} while (!justBreak);
}
System.out.println("i = " + i);
}
其实这样也挺好的,brerak goto会更好吗?
@Test
public void test4() throws Exception {
int i = 0;
breakPoint:
while (true) {
do {
for (;;) {
i ++;
if (i == 10) {
break breakPoint;
}
}
} while (true);
}
System.out.println("i = " + i);
}
其实也不错,代码量少了写。但是可读性会差一些。
continue也是类似的用法:
@Test
public void test5() throws Exception {
int i = 0;
breakPoint:
while (true) {
continuePoint:
while (true) {
// 1
System.out.println("continue Point从这里进入");
while (true) {
if (i == 5) {
break breakPoint;
}
if (i++ >= 0) {
continue continuePoint;
}
}
// System.out.println("这里永远不会执行");
}
}
System.out.println("i = " + i);
}
注释掉的那句语句永远也执行不到。但是语句1却会执行到:
continue Point从这里进入
continue Point从这里进入
continue Point从这里进入
continue Point从这里进入
continue Point从这里进入
continue Point从这里进入
i = 5
continue label 会跳到 label指定的循环入口处执行,它相当于一个break goto,但是break goto不会再进入循环,而continue goto 会。
这么说可能还是不是很好理解,可以看一下断点:
break continue goto 有利有弊,主要看怎么使用,但是可能你的老同事并不熟悉这种语法,他看到你用,第一反应就是想打你一顿。
唉,这该死的旧势力...
版权声明
本文章由作者“衡于墨”创作,转载请注明出处,未经允许禁止用于商业用途
评论区#
还没有评论哦,期待您的评论!
引用发言