上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人
第7章
内建的控制结构
Scala只有为数不多的几个内建的控制结构。这些控制结构包括:if、while、for、try、match和函数调用。Scala的内建控制结构之所以这么少,归功于它从一开始就引入了函数字面量。不同于在基础语法中不断地添加高级控制结构这种做法,Scala将它们归口到类库当中(第9章将会展示具体做法)。本章主要介绍的就是这些内建的控制结构。
你会注意到一点,那就是Scala所有的控制结构都返回某种值作为结果。这是函数式编程语言采取的策略,程序被认为是用来计算出某个值的,因此程序的各个组成部分也应该计算出某个值。你也可以将这种方式看作在指令式编程语言中已经存在的那种趋势的逻辑终局。在指令式编程语言中,函数调用可以返回某个值,即便被调用的函数在过程中更新了某个传入的输出变量,这套机制也是能正常运作的。除此之外,指令式编程语言通常都提供了三元操作符(比如C、C++和Java的?:),其行为跟if几乎没差别,只是会返回某个值,Scala也采纳了这样的三元操作模型,不过把它称作if。换句话说,Scala的if可以有返回值。Scala更进一步让for、try和match也都有返回值。
程序员可以用这些返回值来简化他们的代码,就像他们能用函数的返回值一样。缺少了这个机制,程序员必须创建临时的变量,这些变量仅仅是用来保持那些在控制结构内部计算出来的结果。去掉这些临时变量不仅让代码变得更简单,同时还避免了很多由于在某个分支设置了变量而在另一个分支中忘记设置带来的bug。
总体而言,Scala这些基础的控制结构虽然看上去很简洁,却提供了本质上跟指令式编程语言相同的功能。不仅如此,它们通过确保每段代码都有返回值让你的代码变得更短。为了展示这一点,我们将对Scala的每一个控制结构做详细的讲解。