From b451d5439d76f2450f0ff52adfaff63317d25240 Mon Sep 17 00:00:00 2001 From: kennethcheng Date: Sun, 13 Sep 2026 19:29:18 +0800 Subject: [PATCH] =?UTF-8?q?docs:=20=E6=9B=B4=E6=96=B0=E9=A1=B9=E7=9B=AEREA?= =?UTF-8?q?DME?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 754 ++++++++++++++++++++++++++++++++++-------------------- 1 file changed, 483 insertions(+), 271 deletions(-) diff --git a/README.md b/README.md index 2dbca6d..053772a 100644 --- a/README.md +++ b/README.md @@ -1,220 +1,128 @@ # 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 + Scala 学习 + │ + ┌──────────┴──────────┐ + │ │ + chapter practise + │ │ + 线下课程代码 ChatGPT 辅助学习 + │ │ + 跟随老师学习 理解 / 补充 / 练习 + │ │ + └──────────┬──────────┘ + │ + 知识掌握 ``` -随着线下课程推进,会继续增加: +### `chapter` -```text -chapter3 -chapter4 -chapter5 -... -``` +保存线下课程代码。 -因此: +主要目标: -> `chapter` 可以理解为“课堂笔记的代码版”。 +- 记录老师课堂上的示例代码 +- 对应线下课程章节 +- 保留课堂学习过程 +- 方便课后复习 +- 尽量保持与课堂进度一致 + +可以把它理解为: + +> **课堂笔记的代码版** + +### `practise` + +保存自主练习代码,主要是使用 ChatGPT 辅助学习过程中产生的代码。 + +主要目标: + +- 补充课堂知识 +- 针对某个知识点单独练习 +- 根据自己的理解重新实现 +- 编写练习题 +- 编写综合题 +- 验证 Scala 语法特性 +- 研究容易混淆的概念 + +可以把它理解为: + +> **自己练习、实验和深入理解 Scala 的代码区** --- -### practise —— ChatGPT 学习 +## 二、当前学习进度 -`practise` 用于保存**通过 ChatGPT 辅助学习 Scala 时编写的代码**。 +目前已经完成 Scala 基础语法以及 **方法、函数** 相关内容的学习。 -这部分内容不一定完全按照线下课程章节组织,而是更侧重: - -* 对知识点进行补充学习 -* 针对某个知识点单独练习 -* 根据自己的理解重新写代码 -* 编写练习题 -* 编写综合题 -* 验证 Scala 的语法特性 -* 对容易混淆的知识点进行实验 - -例如: +### 已学习内容 ```text -practise1 - ├── demo - ├── exercises - └── comprehensive - -practise2 - ├── demo - ├── exercises - └── comprehensive -``` - -其中通常可以理解为: - -```text -demo - ↓ -知识点示例 - -exercises - ↓ -针对知识点的练习 - -comprehensive - ↓ -综合多个知识点的练习 -``` - -因此: - -> `practise` 可以理解为“自己练习和深入理解的代码区”。 - ---- - -## 二、为什么要分成 chapter 和 practise - -将两部分代码分开,可以避免课堂代码和自主练习相互混杂。 - -学习过程可以理解为: - -```text - Scala 学习 - │ - ┌──────────┴──────────┐ - │ │ - chapter practise - │ │ - 线下课程代码 ChatGPT辅助学习 - │ │ - 老师怎么讲就怎么写 自己理解 / 补充 / 练习 - │ │ - └──────────┬──────────┘ - │ - 最终掌握 -``` - -其中: - -`chapter` 负责**跟着课程学习**。 - -`practise` 负责**把知识真正练会**。 - ---- - -## 三、当前学习内容 - -目前已经开始学习 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,94 +423,211 @@ 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 - ↓ -继承 - ↓ -函数式编程 - ↓ + ↓ 高阶函数 - ↓ + ↓ +面向对象 + ↓ +Trait + ↓ +继承 + ↓ 隐式转换 - ↓ + ↓ Scala 集合操作 - ↓ -Spark / 大数据开发 + ↓ +模式匹配 + ↓ +Option / Either / Try + ↓ +并发与异步 + ↓ +Spark + ↓ +大数据开发 ``` -最终希望通过: +最终目标不是只会写 Scala 语法,而是建立: ```text -课堂学习 -+ -ChatGPT辅助学习 -+ -大量练习 +Scala 基础 + + +函数式编程思维 + + +面向对象编程 + + +集合处理能力 + + +实际项目开发能力 ``` -逐步建立完整的 Scala 编程能力。 +--- + +## 十一、Git 提交习惯 + +当前项目主要使用语义化的提交信息,例如: + +```text +feat: 线下课:流程控制、方法和函数 +feat: 更新README +feat: 更新目录 +``` + +后续建议继续保持简单统一的提交风格: + +```text +feat: 新增某个知识点代码 +fix: 修复示例代码问题 +refactor: 调整代码结构 +docs: 更新README或学习说明 +``` + +--- + +## 十二、学习记录 + +这个仓库会随着学习过程持续更新。 + +因此 README 中的内容代表的是: + +> **当前学习进度,而不是 Scala 最终完整知识体系。** + +后续学习到新的内容后,继续按照下面的原则添加即可: + +```text +线下课程 + → chapter + +自主学习 + → practise +``` + +这样可以长期保持仓库结构清晰,也方便以后回头复习。 --- ## License -个人 Scala 学习代码,仅用于学习、练习和知识整理。 +个人 Scala 学习代码,仅用于学习、练习和知识整理。 \ No newline at end of file