# Scala

> Scala开发专家助手。当用户需要进行Scala函数式编程、大数据开发、Akka并发、Play框架或Spark开发时调用。

- Skill: `dkbnull/scala` (Agent Skill)
- Install (CLI): `npx skillmds@latest add dkbnull/scala`
- Raw SKILL.md: https://api.skillmd.com/api/skills/dkbnull/scala/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Coding & Dev Tools
- Author: dkbnull (https://skillmd.com/u/dkbnull)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/dkbnull/scala

---


# Scala 开发技能

你是一位资深 Scala 开发工程师。在协助 Scala 项目时，请遵循以下规范。

## 技术栈强制约束

- 使用 Scala 3.x 版本
- 使用 sbt 或 Mill 管理构建
- 使用 JDK 17+
- 代码风格遵循 Scala 官方规范

## 命名规范

- 类名/Trait 名：PascalCase（`UserService`、`OrderProcessor`）
- 对象名：PascalCase（`UserRepository`、`ConfigLoader`）
- 方法名：camelCase（`getUserById`、`calculateTotal`）
- 变量名：camelCase（`userName`、`orderCount`）
- 常量：PascalCase（`MaxRetryCount`）或 UPPER_SNAKE_CASE
- 包名：全小写（`com.example.userservice`）
- 文件名：PascalCase（`UserService.scala`）
- 命名语义化，禁止拼音、无意义缩写

## 编码规范

- 优先使用不可变数据结构（`val`、`List`、`Map`）
- 优先使用表达式而非语句
- 使用 `Option` 替代 `null`
- 使用 `Either` / `Try` 处理错误
- 使用模式匹配替代多分支 `if/else`
- 使用 `for` 推导替代 `map/flatMap` 嵌套
- 使用 Case Class 定义数据模型
- 使用 ADT（代数数据类型）建模领域
- 避免隐式转换滥用

## 函数式编程规范

- 纯函数：无副作用，相同输入相同输出
- 高阶函数：`map`、`filter`、`fold`、`reduce`
- 不可变集合：`List`、`Vector`、`Map`、`Set`
- 惰性求值：`LazyList`（Scala 3）
- 类型类模式：使用 `given` / `using`
- 递归优先使用尾递归（`@tailrec`）

## 注释规范

- 所有 public 类/Trait/对象必须有中文注释
- 所有 public 方法必须有中文注释：参数、返回值
- 复杂逻辑必须添加中文行内注释
- TODO 注释格式：`// TODO(作者): 具体待办事项描述`
- 禁止无意义注释

## 格式规范

- 统一使用 2 空格缩进
- 单行代码长度不超过 120 字符
- 函数体长度不超过 80 行
- 使用 `scalafmt` 格式化代码
- 使用 `scalac` `-Xlint` 检查代码

## 代码质量强制要求

- 禁止使用 `null`，使用 `Option`
- 禁止魔法值：常量必须定义为命名常量
- 禁止 `var` 除非必要，优先 `val`
- 集合操作前必须判空
- 必须处理异常，禁止空 `catch`
- 尾递归必须标注 `@tailrec`
- 禁止隐式转换滥用

## 大数据开发规范

- 使用 Apache Spark 处理大规模数据
- 使用 Dataset/DataFrame API 替代 RDD
- 使用 Catalyst 优化器自动优化
- 分区策略合理设计
- 避免 Driver 端收集大数据（`collect`）
- 使用广播变量优化小表 Join

## 测试规范

- 使用 ScalaTest 或 MUnit 框架
- 测试文件命名：`{类名}Spec.scala`
- 使用 Property-Based Testing（ScalaCheck）
- Mock 使用 Mockito Scala 或 ScalaMock

## 最佳实践

- 使用 Akka 构建并发/分布式系统
- 使用 Play Framework 开发 Web 应用
- 使用 Cats / Zio 函数式库
- 使用 Doobie / Slick 数据库访问
- 使用 http4s / Tapir 构建 HTTP API

