feat:更新README
This commit is contained in:
@@ -1,89 +1,421 @@
|
|||||||
# scala_20260908
|
# scala_20260908
|
||||||
|
|
||||||
Scala 学习笔记工程,记录 2026-09-08 线下课内容。
|
Scala 学习代码仓库,记录从 2026-09-08 开始的 Scala 学习过程。
|
||||||
|
|
||||||
## 课程内容
|
本仓库的代码主要分为两部分:
|
||||||
|
|
||||||
- 变量和数据类型
|
```text
|
||||||
- 运算符
|
chapter/
|
||||||
|
↓
|
||||||
## 项目结构
|
线下课程学习代码
|
||||||
|
|
||||||
|
practise/
|
||||||
|
↓
|
||||||
|
使用 ChatGPT 辅助学习的练习代码
|
||||||
```
|
```
|
||||||
|
|
||||||
|
两部分代码虽然都属于 Scala 学习内容,但定位不同。
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 一、目录说明
|
||||||
|
|
||||||
|
### chapter —— 线下课程
|
||||||
|
|
||||||
|
`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 学习
|
||||||
|
│
|
||||||
|
┌──────────┴──────────┐
|
||||||
|
│ │
|
||||||
|
chapter practise
|
||||||
|
│ │
|
||||||
|
线下课程代码 ChatGPT辅助学习
|
||||||
|
│ │
|
||||||
|
老师怎么讲就怎么写 自己理解 / 补充 / 练习
|
||||||
|
│ │
|
||||||
|
└──────────┬──────────┘
|
||||||
|
│
|
||||||
|
最终掌握
|
||||||
|
```
|
||||||
|
|
||||||
|
其中:
|
||||||
|
|
||||||
|
`chapter` 负责**跟着课程学习**。
|
||||||
|
|
||||||
|
`practise` 负责**把知识真正练会**。
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 三、当前学习内容
|
||||||
|
|
||||||
|
目前已经开始学习 Scala 基础语法。
|
||||||
|
|
||||||
|
### chapter
|
||||||
|
|
||||||
|
主要对应线下课程,目前包括:
|
||||||
|
|
||||||
|
```text
|
||||||
|
Scala 基础语法
|
||||||
|
├── 变量
|
||||||
|
├── 数据类型
|
||||||
|
├── 字符串
|
||||||
|
├── 字符串插值
|
||||||
|
├── 运算符
|
||||||
|
├── 流程控制
|
||||||
|
└── 方法 / 函数
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### practise
|
||||||
|
|
||||||
|
目前主要围绕已经学习的 Scala 基础知识进行练习:
|
||||||
|
|
||||||
|
```text
|
||||||
|
变量与常量
|
||||||
|
↓
|
||||||
|
数据类型
|
||||||
|
↓
|
||||||
|
字符串
|
||||||
|
↓
|
||||||
|
字符串插值
|
||||||
|
↓
|
||||||
|
if 表达式
|
||||||
|
↓
|
||||||
|
方法
|
||||||
|
↓
|
||||||
|
函数
|
||||||
|
↓
|
||||||
|
函数参数
|
||||||
|
↓
|
||||||
|
函数返回值
|
||||||
|
↓
|
||||||
|
综合练习
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 四、学习方式
|
||||||
|
|
||||||
|
整个学习过程采用:
|
||||||
|
|
||||||
|
```text
|
||||||
|
线下课程
|
||||||
|
↓
|
||||||
|
chapter
|
||||||
|
↓
|
||||||
|
理解课堂知识
|
||||||
|
↓
|
||||||
|
ChatGPT辅助学习
|
||||||
|
↓
|
||||||
|
practise
|
||||||
|
↓
|
||||||
|
独立练习 / 综合练习
|
||||||
|
↓
|
||||||
|
进一步理解 Scala
|
||||||
|
```
|
||||||
|
|
||||||
|
其中 `chapter` 和 `practise` 并不是两个独立的课程,而是同一个学习过程中的两个部分。
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 五、项目结构
|
||||||
|
|
||||||
|
```text
|
||||||
scala_20260908/
|
scala_20260908/
|
||||||
├── pom.xml # Maven 配置:JDK 8 + scala-maven-plugin 4.8.1
|
│
|
||||||
└── src/main/scala/
|
├── pom.xml
|
||||||
├── Hello.scala # 入口:Hello world
|
├── README.md
|
||||||
├── demo1/
|
│
|
||||||
│ └── DemoVar.scala # val vs var
|
└── src/
|
||||||
├── demo2/
|
└── main/
|
||||||
│ ├── DemoStr.scala # 字符串 + s 插值 + == / eq
|
└── scala/
|
||||||
│ └── DemoVar2.scala # 数据类型 + 隐式转换 + 强制转换
|
│
|
||||||
├── demo3/
|
├── chapter1/
|
||||||
│ └── DemoOps.scala # 算术 / 比较 / 逻辑 / 赋值运算符
|
│ ├── demo1/
|
||||||
└── practise1/ # 课堂练习
|
│ ├── demo2/
|
||||||
├── Demo1VarAndVal.scala # val / var 基础
|
│ ├── demo3/
|
||||||
├── Demo2Type.scala # 类型推断 vs 显式声明
|
│ ├── demo4/
|
||||||
├── Demo3StringInterpolation.scala # s 插值
|
│ └── exercises/
|
||||||
├── Demo4If.scala # if 表达式
|
│
|
||||||
├── Practise1.scala # 练习:基本变量输出
|
├── chapter2/
|
||||||
├── Practise2.scala # 练习:判断年龄
|
│ └── demo1/
|
||||||
├── Practise3.scala # 练习:四则运算
|
│
|
||||||
├── Practise4.scala # 练习:成绩分级
|
├── practise1/
|
||||||
└── Overall.scala # 综合练习
|
│ ├── demo/
|
||||||
|
│ ├── exercises/
|
||||||
|
│ └── comprehensive/
|
||||||
|
│
|
||||||
|
└── practise2/
|
||||||
|
├── demo/
|
||||||
|
├── exercises/
|
||||||
|
└── comprehensive/
|
||||||
```
|
```
|
||||||
|
|
||||||
## 环境要求
|
---
|
||||||
|
|
||||||
- JDK 8
|
## 六、代码组织原则
|
||||||
- Scala 2.11.12
|
|
||||||
- Maven 3.x(`pom.xml` 已配好 `scala-maven-plugin` 4.8.1)
|
|
||||||
- IntelliJ IDEA(可选,装 Scala 插件即可直接运行)
|
|
||||||
|
|
||||||
## 运行方式
|
### chapter
|
||||||
|
|
||||||
### 命令行(Maven)
|
以**课程章节**为核心:
|
||||||
|
|
||||||
先编译:
|
```text
|
||||||
|
chapter1
|
||||||
|
chapter2
|
||||||
|
chapter3
|
||||||
|
...
|
||||||
|
```
|
||||||
|
|
||||||
|
尽量保持课堂代码的原始结构,不为了“代码漂亮”而过度修改。
|
||||||
|
|
||||||
|
这样做的主要目的是:
|
||||||
|
|
||||||
|
> 能够回到对应章节,快速回忆老师当时讲了什么。
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### practise
|
||||||
|
|
||||||
|
以**学习和练习**为核心:
|
||||||
|
|
||||||
|
```text
|
||||||
|
practise1
|
||||||
|
practise2
|
||||||
|
practise3
|
||||||
|
...
|
||||||
|
```
|
||||||
|
|
||||||
|
可以根据学习过程自由增加:
|
||||||
|
|
||||||
|
```text
|
||||||
|
demo
|
||||||
|
exercises
|
||||||
|
comprehensive
|
||||||
|
test
|
||||||
|
experiment
|
||||||
|
```
|
||||||
|
|
||||||
|
等目录。
|
||||||
|
|
||||||
|
这里允许出现为了理解某一个 Scala 特性而专门编写的小实验代码。
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 七、环境
|
||||||
|
|
||||||
|
当前项目使用 Maven 管理。
|
||||||
|
|
||||||
|
主要环境:
|
||||||
|
|
||||||
|
```text
|
||||||
|
JDK 8
|
||||||
|
Scala 2.11.12
|
||||||
|
Maven 3.x
|
||||||
|
IDEA IntelliJ IDEA
|
||||||
|
```
|
||||||
|
|
||||||
|
项目通过 `scala-maven-plugin` 编译 Scala 代码。
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 八、运行代码
|
||||||
|
|
||||||
|
推荐使用 IntelliJ IDEA 打开项目。
|
||||||
|
|
||||||
|
找到需要运行的 `.scala` 文件,例如:
|
||||||
|
|
||||||
|
```scala
|
||||||
|
object Demo {
|
||||||
|
def main(args: Array[String]): Unit = {
|
||||||
|
println("Hello Scala")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
直接运行:
|
||||||
|
|
||||||
|
```text
|
||||||
|
Run 'Demo.main()'
|
||||||
|
```
|
||||||
|
|
||||||
|
也可以使用 Maven:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
mvn clean compile
|
mvn clean compile
|
||||||
```
|
```
|
||||||
|
|
||||||
再跑某个入口(任选其一):
|
运行指定 Scala 主类:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
mvn scala:run -DmainClass=Hello
|
mvn scala:run -DmainClass=chapter2.demo1.DemoMethod
|
||||||
mvn scala:run -DmainClass=demo1.DemoVar
|
|
||||||
mvn scala:run -DmainClass=demo2.DemoStr
|
|
||||||
mvn scala:run -DmainClass=demo2.DemoVar2
|
|
||||||
mvn scala:run -DmainClass=demo3.DemoOps
|
|
||||||
mvn scala:run -DmainClass=practise1.Demo1VarAndVal
|
|
||||||
mvn scala:run -DmainClass=practise1.Demo2Type
|
|
||||||
mvn scala:run -DmainClass=practise1.Demo3StringInterpolation
|
|
||||||
mvn scala:run -DmainClass=practise1.Demo4If
|
|
||||||
mvn scala:run -DmainClass=practise1.Practise1
|
|
||||||
mvn scala:run -DmainClass=practise1.Practise2
|
|
||||||
mvn scala:run -DmainClass=practise1.Practise3
|
|
||||||
mvn scala:run -DmainClass=practise1.Practise4
|
|
||||||
mvn scala:run -DmainClass=practise1.Overall
|
|
||||||
```
|
```
|
||||||
|
|
||||||
### IntelliJ
|
或者:
|
||||||
|
|
||||||
1. 用 IDEA 打开本目录
|
```bash
|
||||||
2. 装 Scala 插件(首次会提示)
|
mvn scala:run -DmainClass=practise2.demo.DemoFunction
|
||||||
3. 打开任意 `.scala` 文件,右键 `Run 'XXX.main()'`
|
```
|
||||||
|
|
||||||
## 重点速记
|
---
|
||||||
|
|
||||||
- `val` 定义常量(不能重新赋值),`var` 定义变量。**优先用 `val`**
|
## 九、学习记录原则
|
||||||
- Scala 的 `==` 等价于 Java 的 `equals`(比较内容),`eq` 才等价于 Java 的 `==`(比较地址)
|
|
||||||
- `s"..."` 是字符串插值,表达式用 `${...}`
|
这个仓库不追求一次性把 Scala 所有知识整理完整,而是随着学习过程持续更新。
|
||||||
- `if` 在 Scala 里是**表达式**,可以直接 `val x = if (cond) a else b`
|
|
||||||
- 整数除法默认向 0 取整(`10 / 3 == 3`),想要小数至少一边要 `.0`
|
因此:
|
||||||
- `Byte → Long` 隐式转换合法,`Long → Byte` 必须 `.toByte`,且可能溢出(129 → -127)
|
|
||||||
|
```text
|
||||||
|
chapter
|
||||||
|
= 课程真实学习进度
|
||||||
|
|
||||||
|
practise
|
||||||
|
= 自主学习与练习进度
|
||||||
|
```
|
||||||
|
|
||||||
|
以后学习到新的内容后,继续按照这个规则添加即可。
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 十、后续学习方向
|
||||||
|
|
||||||
|
随着 Scala 学习深入,预计逐步涉及:
|
||||||
|
|
||||||
|
```text
|
||||||
|
基础语法
|
||||||
|
↓
|
||||||
|
流程控制
|
||||||
|
↓
|
||||||
|
方法与函数
|
||||||
|
↓
|
||||||
|
集合
|
||||||
|
↓
|
||||||
|
面向对象
|
||||||
|
↓
|
||||||
|
Trait
|
||||||
|
↓
|
||||||
|
继承
|
||||||
|
↓
|
||||||
|
函数式编程
|
||||||
|
↓
|
||||||
|
高阶函数
|
||||||
|
↓
|
||||||
|
隐式转换
|
||||||
|
↓
|
||||||
|
Scala 集合操作
|
||||||
|
↓
|
||||||
|
Spark / 大数据开发
|
||||||
|
```
|
||||||
|
|
||||||
|
最终希望通过:
|
||||||
|
|
||||||
|
```text
|
||||||
|
课堂学习
|
||||||
|
+
|
||||||
|
ChatGPT辅助学习
|
||||||
|
+
|
||||||
|
大量练习
|
||||||
|
```
|
||||||
|
|
||||||
|
逐步建立完整的 Scala 编程能力。
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
## License
|
## License
|
||||||
|
|
||||||
私有学习笔记,暂不外发。
|
个人 Scala 学习代码,仅用于学习、练习和知识整理。
|
||||||
|
|||||||
Reference in New Issue
Block a user