Files
scala_20260908/README.md
T
2026-09-13 19:30:49 +08:00

633 lines
9.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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/
```
当前仓库已经按照课程和自主练习进行了明确区分。
---
## 四、目录说明
### 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 学习代码,仅用于学习、练习和知识整理。