第一章·山脚营地:Scala起步与工具链


第一章 · 山脚营地:Scala 起步与工具链

章节摘要:任何攀登都从整理装备开始。本章回答三个问题:Scala 到底是什么、为什么它的价值要等爬到类型系统那段才真正显现、以及如何在半小时内搭好可用的开发环境。读完你能写出第一批表达式与函数,并理解"一切皆表达式"这个贯穿全书的底色。

学习目标

  • 说清 Scala 在 JVM 生态中的定位与双范式特征
  • 独立完成 JDK、sbt、IDE 的安装并跑通第一个程序
  • 区分 val 与 var,理解 Scala 推崇不可变的语言级倾向
  • 用 def 定义带默认参数、可变参数的函数
  • 解释"表达式 vs 语句"差异对后续类型推断的影响

核心概念速览

一句话:Scala 是把函数式编程"编译"进 JVM 面向对象世界的一次工程实践,类型系统是两者之间的胶水。

子章节导航

  • 1.1 为什么 Scala 值得攀:语言定位、发展脉络与环境的完整搭建。
  • 1.2 val、var 与表达式:语法第一阶,理解"一切皆表达式"。
  • 1.3 函数即岩点:def 的全部细节,以及函数作为值的第一印象。

子章节之间的逻辑关系

本章三节是递进的:先有环境(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 绑定、表达式求值、函数作为一等公民,三个概念在一个文件里各就各位。建议读者扩展它:加上单位枚举与模式匹配(第三章),再改成样例类(第二章),最后给它写测试(第八章)——这个小工具会贯穿整条攀登路线,成为检验每章收获的标尺。

容易踩的坑

  • 在 IntelliJ 里没装 Scala 插件就打开 .scala 文件,满屏报红,误以为环境坏了
  • REPL 里粘贴多行代码报错,忘了先进 :paste 模式
  • 用 var 接住 if 表达式,错过了"表达式语言"的第一课

检查点:离开营地前自测

  • 能说出 val 与 var 在字节码与语义上的差别,并解释为什么默认写 val
  • 能把一段 Java 的 if/else 赋值改写成 Scala 表达式风格
  • 能写出一个接收函数参数的方法,并在 REPL 里用 lambda 调用它
  • 知道 Unit、Null、Nothing 各自的位置,遇到不再慌

四条都打勾,就可以进第二章把函数装进类里了;有任何一条含糊,回对应小节把代码重新敲一遍——山脚的路每一步都要踩实,后面的岩缝才敢发力。
营地虽平,钩子不少——这就是第一章的全部重量。具体而言:

与后续章节的接缝

本章的函数值在第二章会装进类与特质里变成方法;第三章的 map/filter 在这里已经露过脸;而 Nothing 类型那个"最底端"的伏笔,到第五章型变推演时会正式兑现。营地虽平,埋的钩子不少。

作者与出处
原作者:灏天文库
来源:平台策划编纂
整理人: 灏天文库整理
由灏天文库平台收录,内容或由平台用户上传,仅供学习交流
发布者: 作者: 灏天文库 转发
评论区 (0)
U