在programming in scala中P175页中提到 Living without break and continue,说到scala中不提倡使用break and continue,当然break 和continue主要是在for和while这样的循环中。scala中是提倡使用for,提倡使用while,理由很简单,scala提倡面向函数编程,每个方法都有返回值,而while是没有返回值。
首先来看看书中175行具的例子。
java代码
int i = 0; // This is Java boolean foundIt = false; while (i < args.length) { if (args[i].startsWith("-")) { i = i + 1; continue; } if (args[i].endsWith(".scala")) { foundIt = true; break; } i = i + 1; }
在scala,中去掉break和continue的代码如下:
def searchFrom(i: Int): Int = if (i >= args.length) -1 else if (args(i).startsWith("-")) searchFrom(i + 1) else if (args(i).endsWith(".scala")) i else searchFrom(i + 1) val i = searchFrom(0)
上面的转化过程挺简单,当是continue时,递归调用本身,当是break时,直接返回。
然而,现实世界的逻辑不是这样简单,如:现在有一个列表(1 to 10)当值是 1,5,7时 continue,当值是 2,4,9时,break。代码该怎样写。
对于continue的情况,我们可以用for 在for 里面添加filter过滤来实现 continue ,对于 break 可以 Array中的 takewhile方法。
如果是代码中同事有break和continue时,我们该怎么办?如果for时,想比较上个元素和这个元素,又该怎么办?