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

9.9 KiB
Raw Blame History

scala_20260908

Scala 学习代码仓库,记录从 2026-09-08 开始的 Scala 学习过程。

本仓库主要用于保存:

  • 线下课程中的课堂代码
  • 使用 ChatGPT 辅助学习时编写的练习代码
  • 对 Scala 语法、特性和容易混淆知识点的实验与验证

目前项目以 Scala 2.11.12 + JDK 8 + Maven 为主要开发环境。


一、仓库定位

这个仓库不是一个完整的业务项目,而是一个持续积累的 Scala 学习工程。

整个学习过程分成两条线:

                    Scala 学习
                        │
             ┌──────────┴──────────┐
             │                     │
          chapter               practise
             │                     │
        线下课程代码          ChatGPT 辅助学习
             │                     │
       跟随老师学习           理解 / 补充 / 练习
             │                     │
             └──────────┬──────────┘
                        │
                     知识掌握

chapter

保存线下课程代码。

主要目标:

  • 记录老师课堂上的示例代码
  • 对应线下课程章节
  • 保留课堂学习过程
  • 方便课后复习
  • 尽量保持与课堂进度一致

可以把它理解为:

课堂笔记的代码版

practise

保存自主练习代码,主要是使用 ChatGPT 辅助学习过程中产生的代码。

主要目标:

  • 补充课堂知识
  • 针对某个知识点单独练习
  • 根据自己的理解重新实现
  • 编写练习题
  • 编写综合题
  • 验证 Scala 语法特性
  • 研究容易混淆的概念

可以把它理解为:

自己练习、实验和深入理解 Scala 的代码区


二、当前学习进度

目前已经完成 Scala 基础语法以及 方法、函数 相关内容的学习。

已学习内容

Scala 基础
│
├── 变量与常量
│   ├── val
│   └── var
│
├── 数据类型
│   ├── 类型推断
│   ├── 显式类型声明
│   ├── 基本数据类型
│   ├── 类型转换
│   └── 隐式转换
│
├── 字符串
│   ├── String
│   ├── 字符串插值
│   ├── ==
│   └── eq
│
├── 运算符
│   ├── 算术运算符
│   ├── 比较运算符
│   ├── 逻辑运算符
│   └── 赋值运算符
│
├── 流程控制
│   ├── if / else
│   ├── for
│   └── 其他基础控制结构
│
└── 方法与函数
    ├── def
    ├── 方法参数
    ├── 返回值
    ├── 函数
    ├── Lambda
    ├── 函数类型
    ├── 函数作为参数
    └── 高阶函数基础

三、项目结构

当前源码位于 src/main/scala。

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 基础语法,包括:

  • 变量与常量
  • 数据类型
  • 字符串
  • 字符串插值
  • 运算符
  • 流程控制
  • 基础练习

目录按照课堂知识点划分:

chapter1/
├── demo1/
├── demo2/
├── demo3/
├── demo4/
└── exercises/

其中:

demo
    ↓
课堂知识点示例

exercises
    ↓
课堂练习

2. chapter2

线下课程后续章节。

当前已包含:

chapter2/
└── demo1/
    └── DemoMethod.scala

这一部分开始进入:

  • 方法
  • 方法参数
  • 返回值
  • 方法调用

并逐步衔接到 Scala 函数相关内容。citeturn733546view1


3. practise1

第一阶段自主练习。

目录划分为:

practise1/
├── demo/
├── exercises/
└── comprehensive/

含义:

demo
    ↓
针对知识点重新编写示例

exercises
    ↓
针对单个知识点进行练习

comprehensive
    ↓
综合多个知识点完成练习

4. practise2

第二阶段自主练习,目前主要围绕 方法与函数 继续学习。

目录划分为:

practise2/
├── demo/
├── exercises/
└── comprehensive/

重点包括:

  • def
  • 方法与函数的区别
  • Lambda 表达式
  • 函数类型
  • 函数参数
  • 函数返回值
  • 函数作为参数
  • 高阶函数基础

当前仓库中的 practise2 与 chapter2 已经开始对应方法、函数这一阶段的学习。citeturn733546view1turn733546view3


五、方法与函数核心理解

这是当前学习阶段的重要内容。

方法

使用 def 定义:

def add(a: Int, b: Int): Int = {
  a + b
}

方法可以直接调用:

println(add(10, 20))

函数

函数可以赋值给变量:

val add = (a: Int, b: Int) => a + b

这里:

add
    ↓
函数变量名

(Int, Int) => Int
    ↓
函数类型

(a, b) => a + b
    ↓
具体的 Lambda 函数

函数作为参数

例如:

def operate(
  a: Int,
  b: Int,
  f: (Int, Int) => Int
): Int = {
  f(a, b)
}

调用:

println(
  operate(
    10,
    20,
    (a, b) => a + b
  )
)

可以把它理解成:

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()'

例如:

object Demo {
  def main(args: Array[String]): Unit = {
    println("Hello Scala")
  }
}

Maven

编译:

mvn clean compile

运行指定的 Scala 主类:

mvn scala:run -DmainClass=chapter2.demo1.DemoMethod

例如自主练习中的入口:

mvn scala:run -DmainClass=practise2.demo.DemoFunction

项目当前 README 中也采用这种 Maven 运行方式。citeturn210862view2


八、学习方式

当前采用:

线下课程
   ↓
chapter
   ↓
理解老师讲解的知识
   ↓
ChatGPT 辅助学习
   ↓
practise
   ↓
自己重新实现
   ↓
练习题
   ↓
综合题
   ↓
验证和总结

学习原则

chapter:

老师怎么讲,就尽量怎么记录。

practise:

把知识真正理解并自己写出来。

两者不是两个独立的项目,而是同一个学习过程中的不同阶段。


九、代码组织原则

chapter:以课程为中心

chapter1
chapter2
chapter3
...

随着线下课程继续推进,按课程章节持续增加。

尽量不要为了代码“漂亮”而修改课堂代码结构,因为这里最重要的是:

能够快速回忆当时老师讲了什么。


practise:以理解为中心

practise1
practise2
practise3
...

每个练习阶段可以继续拆分:

demo
exercises
comprehensive
test
experiment

其中允许存在专门为了理解某个 Scala 特性而编写的实验代码。


十、推荐的学习路径

后续可以沿着下面的路线继续学习:

基础语法
   ↓
变量与数据类型
   ↓
流程控制
   ↓
方法与函数
   ↓
函数式编程基础
   ↓
集合
   ↓
高阶函数
   ↓
面向对象
   ↓
Trait
   ↓
继承
   ↓
隐式转换
   ↓
Scala 集合操作
   ↓
模式匹配
   ↓
Option / Either / Try
   ↓
并发与异步
   ↓
Spark
   ↓
大数据开发

最终目标不是只会写 Scala 语法,而是建立:

Scala 基础
    +
函数式编程思维
    +
面向对象编程
    +
集合处理能力
    +
实际项目开发能力

十一、Git 提交习惯

当前项目主要使用语义化的提交信息,例如:

feat: 线下课:流程控制、方法和函数
feat: 更新README
feat: 更新目录

后续建议继续保持简单统一的提交风格:

feat: 新增某个知识点代码
fix: 修复示例代码问题
refactor: 调整代码结构
docs: 更新README或学习说明

十二、学习记录

这个仓库会随着学习过程持续更新。

因此 README 中的内容代表的是:

当前学习进度,而不是 Scala 最终完整知识体系。

后续学习到新的内容后,继续按照下面的原则添加即可:

线下课程
    → chapter

自主学习
    → practise

这样可以长期保持仓库结构清晰,也方便以后回头复习。


License

个人 Scala 学习代码,仅用于学习、练习和知识整理。