章节摘要:任何攀登都从整理装备开始。本章回答三个问题:Scala 到底是什么、为什么它的价值要等爬到类型系统那段才真正显现、以及如何在半小时内搭好可用的开发环境。读完你能写出第一批表达式与函数,并理解"一切皆表达式"这个贯穿全书的底色。
一句话:Scala 是把函数式编程"编译"进 JVM 面向对象世界的一次工程实践,类型系统是两者之间的胶水。
本章三节是递进的:先有环境(1.1),再学最小的语义单元"表达式"(1.2),最后把表达式打包成可复用的函数(1.3)。
[环境就绪] -> [表达式与绑定] -> [函数定义与复用] | (第二章把函数装进类,第三章把类甩在身后)
前置:任意一门主流语言的基础语法。延伸:第二章把函数装进类的世界里;如果本章的类型推断让你好奇"编译器到底知道多少",第五章会给出完整答案。
整章的知识点可以串在一个不到二十行的小工具里——把摄氏、华氏、开氏互转,并批量处理一组读数:
object TempConvert: def toF(c: Double): Double = c * 9 / 5 + 32 def toC(f: Double): Double = (f - 32) * 5 / 9 val readings = List(0.0, 36.6, 100.0) val report = readings.map(toF) // 高阶函数:把转换当值传 val hot = readings.filter(c => toF(c) > 95)
val 绑定、表达式求值、函数作为一等公民,三个概念在一个文件里各就各位。建议读者扩展它:加上单位枚举与模式匹配(第三章),再改成样例类(第二章),最后给它写测试(第八章)——这个小工具会贯穿整条攀登路线,成为检验每章收获的标尺。
四条都打勾,就可以进第二章把函数装进类里了;有任何一条含糊,回对应小节把代码重新敲一遍——山脚的路每一步都要踩实,后面的岩缝才敢发力。
营地虽平,钩子不少——这就是第一章的全部重量。具体而言:
本章的函数值在第二章会装进类与特质里变成方法;第三章的 map/filter 在这里已经露过脸;而 Nothing 类型那个"最底端"的伏笔,到第五章型变推演时会正式兑现。营地虽平,埋的钩子不少。