docs: 更新项目README

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