不从术语表开始,而是用一个命令行记账本,把变量、判断、循环、方法和对象自然长出来
| 你要做的事 | 自然遇到的卡点 | 这时才引入的概念 |
|---|---|---|
| 让用户输入金额、类型和备注 | 金额和文字不能混在一起,程序要知道每个值是什么 | 变量、类型、输入输出 |
| 收入增加余额,支出减少余额 | 同一笔账因为类型不同,处理路径不同 | 条件判断 |
| 连续记录很多笔账 | 一笔账可以手写变量,很多笔就需要统一保存和重复处理 | 数组、集合、循环 |
| 统计总收入、总支出、余额 | 程序要一笔一笔扫过去,把结果累加出来 | 循环边界、累加器 |
| 代码越来越长 | 所有逻辑堆在 main 里,自己也看不懂了 | 方法、参数、返回值 |
| 每笔账都有金额、类型、备注、时间 | 这些字段总是一起出现,应该被当成一个东西 | 类、对象、字段 |
| 用户输入了负数或乱填文字 | 真实程序不能假设输入永远正确 | 异常、校验、失败路径 |
if 不是语法,而是路径选择。amount1、amount2。用集合保存多条记录,开始理解“一组数据”为什么需要容器。Entry 类。对象不是抽象名词,它就是一笔账在程序里的形状。| 动作 | 具体做法 | 不要做什么 |
|---|---|---|
| 先写最小版本 | 每轮只加一个新功能,哪怕只有 20 行 | 不要一开始就想做完整系统 |
| 再问为什么 | 写完后解释:我为什么需要这个变量、这个判断、这个循环 | 不要先背概念定义 |
| 保留失败记录 | 记录一次报错、原因和修复方式 | 不要只把正确代码留下来 |
| 关掉参考重写 | 看懂之后,空白文件重写一遍 | 不要一直跟着视频敲 |
| 最后复盘迁移 | 想想同样结构能不能做成绩统计、图书清单、通讯录 | 不要把知识绑定在唯一例子上 |
| 概念 | 在记账本里对应什么 | 迁移到别的小项目 |
|---|---|---|
| 变量与类型 | 金额是数字,备注是文字,类型是收入或支出 | 成绩、价格、库存、姓名、手机号 |
| 条件判断 | 收入和支出走不同计算路径 | 成绩等级、库存是否足够、用户权限 |
| 循环 | 逐条扫描账目,统计收入支出 | 遍历学生、图书、订单、商品 |
| 集合 | 保存多笔账,而不是只保存一笔 | 列表页、查询结果、购物车 |
| 方法 | 新增、统计、打印明细分别拆开 | 任何项目都要拆功能块 |
| 对象 | 一笔账是 Entry,有金额、类型、备注、时间 | Student、Book、Order、Product |
| 异常与校验 | 负数金额、非法类型、空备注都要处理 | 表单校验、接口参数、文件读取失败 |
| 验收问题 | 能回答才算过关 |
|---|---|
| 如果我要新增“分类”,代码应该改哪里? | 能说出 Entry 要加字段,新增记录时要输入分类,统计时可以按分类过滤 |
| 如果我要只看支出记录,怎么做? | 能用循环遍历集合,并用条件筛出支出 |
| 如果 main 太长,怎么拆? | 能拆出新增、打印、统计、校验几个方法 |
| 如果用户输入错了,程序怎么办? | 能给出校验和提示,而不是让程序直接崩掉 |
| 如果换成学生成绩统计,这些结构还能用吗? | 能把 Entry 换成 StudentScore,并复用输入、保存、遍历、统计这套结构 |