docs: 更新项目README
This commit is contained in:
@@ -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
|
||||
...
|
||||
```
|
||||
|
||||
尽量保持课堂代码的原始结构,不为了“代码漂亮”而过度修改。
|
||||
|
||||
这样做的主要目的是:
|
||||
|
||||
> 能够回到对应章节,快速回忆老师当时讲了什么。
|
||||
当前仓库已经按照课程和自主练习进行了明确区分。citeturn210862view0turn733546view0turn733546view1turn733546view2turn733546view3
|
||||
|
||||
---
|
||||
|
||||
### 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 函数相关内容。citeturn733546view1
|
||||
|
||||
---
|
||||
|
||||
### 3. `practise1`
|
||||
|
||||
第一阶段自主练习。
|
||||
|
||||
目录划分为:
|
||||
|
||||
```text
|
||||
practise1/
|
||||
├── demo/
|
||||
├── exercises/
|
||||
└── comprehensive/
|
||||
```
|
||||
|
||||
含义:
|
||||
|
||||
```text
|
||||
demo
|
||||
↓
|
||||
针对知识点重新编写示例
|
||||
|
||||
exercises
|
||||
↓
|
||||
针对单个知识点进行练习
|
||||
|
||||
comprehensive
|
||||
↓
|
||||
综合多个知识点完成练习
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### 4. `practise2`
|
||||
|
||||
第二阶段自主练习,目前主要围绕 **方法与函数** 继续学习。
|
||||
|
||||
目录划分为:
|
||||
|
||||
```text
|
||||
practise2/
|
||||
├── demo/
|
||||
├── exercises/
|
||||
└── comprehensive/
|
||||
```
|
||||
|
||||
重点包括:
|
||||
|
||||
- `def`
|
||||
- 方法与函数的区别
|
||||
- Lambda 表达式
|
||||
- 函数类型
|
||||
- 函数参数
|
||||
- 函数返回值
|
||||
- 函数作为参数
|
||||
- 高阶函数基础
|
||||
|
||||
当前仓库中的 `practise2` 与 `chapter2` 已经开始对应方法、函数这一阶段的学习。citeturn733546view1turn733546view3
|
||||
|
||||
---
|
||||
|
||||
## 五、方法与函数核心理解
|
||||
|
||||
这是当前学习阶段的重要内容。
|
||||
|
||||
### 方法
|
||||
|
||||
使用 `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 作为编译目标。citeturn210862view1
|
||||
|
||||
---
|
||||
|
||||
## 八、运行代码
|
||||
## 七、运行项目
|
||||
|
||||
推荐使用 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 运行方式。citeturn210862view2
|
||||
|
||||
---
|
||||
|
||||
## 九、学习记录原则
|
||||
## 八、学习方式
|
||||
|
||||
这个仓库不追求一次性把 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
|
||||
```
|
||||
|
||||
这样可以长期保持仓库结构清晰,也方便以后回头复习。
|
||||
|
||||
---
|
||||
|
||||
|
||||
Reference in New Issue
Block a user