# scala_20260908 Scala 学习代码仓库,记录从 **2026-09-08** 开始的 Scala 学习过程。 本仓库主要用于保存: - 线下课程中的课堂代码 - 使用 ChatGPT 辅助学习时编写的练习代码 - 对 Scala 语法、特性和容易混淆知识点的实验与验证 目前项目以 **Scala 2.11.12 + JDK 8 + Maven** 为主要开发环境。 --- ## 一、仓库定位 这个仓库不是一个完整的业务项目,而是一个持续积累的 **Scala 学习工程**。 整个学习过程分成两条线: ```text Scala 学习 │ ┌──────────┴──────────┐ │ │ chapter practise │ │ 线下课程代码 ChatGPT 辅助学习 │ │ 跟随老师学习 理解 / 补充 / 练习 │ │ └──────────┬──────────┘ │ 知识掌握 ``` ### `chapter` 保存线下课程代码。 主要目标: - 记录老师课堂上的示例代码 - 对应线下课程章节 - 保留课堂学习过程 - 方便课后复习 - 尽量保持与课堂进度一致 可以把它理解为: > **课堂笔记的代码版** ### `practise` 保存自主练习代码,主要是使用 ChatGPT 辅助学习过程中产生的代码。 主要目标: - 补充课堂知识 - 针对某个知识点单独练习 - 根据自己的理解重新实现 - 编写练习题 - 编写综合题 - 验证 Scala 语法特性 - 研究容易混淆的概念 可以把它理解为: > **自己练习、实验和深入理解 Scala 的代码区** --- ## 二、当前学习进度 目前已经完成 Scala 基础语法以及 **方法、函数** 相关内容的学习。 ### 已学习内容 ```text Scala 基础 │ ├── 变量与常量 │ ├── val │ └── var │ ├── 数据类型 │ ├── 类型推断 │ ├── 显式类型声明 │ ├── 基本数据类型 │ ├── 类型转换 │ └── 隐式转换 │ ├── 字符串 │ ├── String │ ├── 字符串插值 │ ├── == │ └── eq │ ├── 运算符 │ ├── 算术运算符 │ ├── 比较运算符 │ ├── 逻辑运算符 │ └── 赋值运算符 │ ├── 流程控制 │ ├── if / else │ ├── for │ └── 其他基础控制结构 │ └── 方法与函数 ├── def ├── 方法参数 ├── 返回值 ├── 函数 ├── Lambda ├── 函数类型 ├── 函数作为参数 └── 高阶函数基础 ``` --- ## 三、项目结构 当前源码位于 `src/main/scala`。 ```text scala_20260908/ │ ├── pom.xml ├── README.md │ └── src/ └── main/ └── scala/ │ ├── chapter1/ │ ├── demo1/ │ ├── demo2/ │ ├── demo3/ │ ├── demo4/ │ └── exercises/ │ ├── chapter2/ │ └── demo1/ │ └── DemoMethod.scala │ ├── practise1/ │ ├── demo/ │ ├── exercises/ │ └── comprehensive/ │ └── practise2/ ├── demo/ ├── exercises/ └── comprehensive/ ``` 当前仓库已经按照课程和自主练习进行了明确区分。citeturn210862view0turn733546view0turn733546view1turn733546view2turn733546view3 --- ## 四、目录说明 ### 1. `chapter1` 线下课程第一阶段代码。 当前主要围绕 Scala 基础语法,包括: - 变量与常量 - 数据类型 - 字符串 - 字符串插值 - 运算符 - 流程控制 - 基础练习 目录按照课堂知识点划分: ```text chapter1/ ├── demo1/ ├── demo2/ ├── demo3/ ├── demo4/ └── exercises/ ``` 其中: ```text demo ↓ 课堂知识点示例 exercises ↓ 课堂练习 ``` --- ### 2. `chapter2` 线下课程后续章节。 当前已包含: ```text chapter2/ └── demo1/ └── DemoMethod.scala ``` 这一部分开始进入: - 方法 - 方法参数 - 返回值 - 方法调用 并逐步衔接到 Scala 函数相关内容。citeturn733546view1 --- ### 3. `practise1` 第一阶段自主练习。 目录划分为: ```text practise1/ ├── demo/ ├── exercises/ └── comprehensive/ ``` 含义: ```text demo ↓ 针对知识点重新编写示例 exercises ↓ 针对单个知识点进行练习 comprehensive ↓ 综合多个知识点完成练习 ``` --- ### 4. `practise2` 第二阶段自主练习,目前主要围绕 **方法与函数** 继续学习。 目录划分为: ```text practise2/ ├── demo/ ├── exercises/ └── comprehensive/ ``` 重点包括: - `def` - 方法与函数的区别 - Lambda 表达式 - 函数类型 - 函数参数 - 函数返回值 - 函数作为参数 - 高阶函数基础 当前仓库中的 `practise2` 与 `chapter2` 已经开始对应方法、函数这一阶段的学习。citeturn733546view1turn733546view3 --- ## 五、方法与函数核心理解 这是当前学习阶段的重要内容。 ### 方法 使用 `def` 定义: ```scala def add(a: Int, b: Int): Int = { a + b } ``` 方法可以直接调用: ```scala println(add(10, 20)) ``` --- ### 函数 函数可以赋值给变量: ```scala val add = (a: Int, b: Int) => a + b ``` 这里: ```text add ↓ 函数变量名 (Int, Int) => Int ↓ 函数类型 (a, b) => a + b ↓ 具体的 Lambda 函数 ``` --- ### 函数作为参数 例如: ```scala def operate( a: Int, b: Int, f: (Int, Int) => Int ): Int = { f(a, b) } ``` 调用: ```scala println( operate( 10, 20, (a, b) => a + b ) ) ``` 可以把它理解成: ```text f ↓ 只是一个函数变量名 (Int, Int) => Int ↓ f 的函数类型 (a, b) => a + b ↓ 传入的具体函数 f(a, b) ↓ 调用这个函数 ``` 这也是 Scala 函数式编程中非常重要的基础。 --- ## 六、开发环境 当前项目使用 Maven 管理。 ### 环境 | 工具 | 版本 | | --- | --- | | JDK | 8 | | Scala | 2.11.12 | | Maven | 3.x | | IDE | IntelliJ IDEA | | scala-maven-plugin | 4.8.1 | 项目中的 `pom.xml` 使用 `scala-maven-plugin` 编译 Scala 源代码,并以 Java 8 作为编译目标。citeturn210862view1 --- ## 七、运行项目 ### IntelliJ IDEA 推荐直接使用 IntelliJ IDEA。 操作步骤: 1. 用 IDEA 打开项目 2. 安装 Scala 插件 3. 打开任意 `.scala` 文件 4. 找到包含 `main` 方法的 `object` 5. 右键运行 `Run 'XXX.main()'` 例如: ```scala object Demo { def main(args: Array[String]): Unit = { println("Hello Scala") } } ``` --- ### Maven 编译: ```bash mvn clean compile ``` 运行指定的 Scala 主类: ```bash mvn scala:run -DmainClass=chapter2.demo1.DemoMethod ``` 例如自主练习中的入口: ```bash mvn scala:run -DmainClass=practise2.demo.DemoFunction ``` 项目当前 README 中也采用这种 Maven 运行方式。citeturn210862view2 --- ## 八、学习方式 当前采用: ```text 线下课程 ↓ chapter ↓ 理解老师讲解的知识 ↓ ChatGPT 辅助学习 ↓ practise ↓ 自己重新实现 ↓ 练习题 ↓ 综合题 ↓ 验证和总结 ``` ### 学习原则 `chapter`: > **老师怎么讲,就尽量怎么记录。** `practise`: > **把知识真正理解并自己写出来。** 两者不是两个独立的项目,而是同一个学习过程中的不同阶段。 --- ## 九、代码组织原则 ### `chapter`:以课程为中心 ```text chapter1 chapter2 chapter3 ... ``` 随着线下课程继续推进,按课程章节持续增加。 尽量不要为了代码“漂亮”而修改课堂代码结构,因为这里最重要的是: > **能够快速回忆当时老师讲了什么。** --- ### `practise`:以理解为中心 ```text practise1 practise2 practise3 ... ``` 每个练习阶段可以继续拆分: ```text demo exercises comprehensive test experiment ``` 其中允许存在专门为了理解某个 Scala 特性而编写的实验代码。 --- ## 十、推荐的学习路径 后续可以沿着下面的路线继续学习: ```text 基础语法 ↓ 变量与数据类型 ↓ 流程控制 ↓ 方法与函数 ↓ 函数式编程基础 ↓ 集合 ↓ 高阶函数 ↓ 面向对象 ↓ Trait ↓ 继承 ↓ 隐式转换 ↓ Scala 集合操作 ↓ 模式匹配 ↓ Option / Either / Try ↓ 并发与异步 ↓ Spark ↓ 大数据开发 ``` 最终目标不是只会写 Scala 语法,而是建立: ```text Scala 基础 + 函数式编程思维 + 面向对象编程 + 集合处理能力 + 实际项目开发能力 ``` --- ## 十一、Git 提交习惯 当前项目主要使用语义化的提交信息,例如: ```text feat: 线下课:流程控制、方法和函数 feat: 更新README feat: 更新目录 ``` 后续建议继续保持简单统一的提交风格: ```text feat: 新增某个知识点代码 fix: 修复示例代码问题 refactor: 调整代码结构 docs: 更新README或学习说明 ``` --- ## 十二、学习记录 这个仓库会随着学习过程持续更新。 因此 README 中的内容代表的是: > **当前学习进度,而不是 Scala 最终完整知识体系。** 后续学习到新的内容后,继续按照下面的原则添加即可: ```text 线下课程 → chapter 自主学习 → practise ``` 这样可以长期保持仓库结构清晰,也方便以后回头复习。 --- ## License 个人 Scala 学习代码,仅用于学习、练习和知识整理。