跳到课程正文
EN
课程书架/自学公开课程

第 02 周 / 24 · 理解基础

让输入可信

把“能运行”变成“输入可信”:函数、数据结构与校验

10 小时核心 + 2 小时机动学习 · 实验 · 独立练习
开始阅读 ↓
让输入可信24 周个人 FDE 实践路线

本周要回答: 当用户输入不完整、顺序不同或数据重复时,工具还能给出可解释的结果吗?

进入本周前: 能运行第 1 周工具,认识函数、参数、数组和对象;不熟悉时继续补基础,不急着加界面。

图 02.1本周的思考路径
  1. 01解析输入
  2. 02校验字段
  3. 03纯函数处理
  4. 04预览输出
课程示意图 · 根据本周实验步骤绘制,表示建议流程,不是实测结果。

学习内容与理解目标

学习主线是纯处理逻辑与副作用分开:解析输入、计算结果、读写文件或更新页面,不要混成一个巨大函数。理解字符串、数字、布尔值、数组、对象以及 Map/Set 的用途;能解释为什么“空字符串”和“没有值”不能一律当零。掌握条件分支、循环、异常和模块的最小用法。

类型声明有助于开发期间检查,但来自文件、网络和模型的内容仍需要运行时校验。本周先自己理解一条校验规则,再决定是否引入库;不要为了三个字段搭建复杂验证框架。通过错误样例学习规则的边界,比重复生成正确样例更有价值。

学习链接与选读范围

级别 官方或原始资料 本周只读这些 阅读预算
必读 R27 · MDN:JavaScript Guide Control flow and error handling、Indexed collections、Keyed collections、Functions。 60 分钟
必读 R28 · TypeScript Handbook:Introduction Everyday Types、Narrowing;重点区分类型提示和实际输入检查。 35 分钟
补基础 R13 · CS50P Week 5:Unit Tests 如何为函数提供独立输入与期望结果。 25 分钟

实战拆解

  1. 将第 1 周功能拆成三个小部分:读取或接收输入、纯函数处理、展示或保存输出。先保证行为不变,再重构;不要在同一次修改里同时加新功能。

  2. 为数据写清字段、单位和允许范围。例如时长用整数分钟、空标题是否允许、重复项按什么字段判断。对不确定的字段写“缺失”,不要静默生成一个看似合理的值。

  3. 准备正常、空列表、字段缺失、错误类型、重复项五组样例。先预测每组是成功还是拒绝,再运行;错误信息要能让使用者知道怎么改。

  4. 用当前工具链的一种测试方式固定上述行为。让 agent 帮忙写重复代码,但自己审查期望值;不要把实现的错误复制进测试答案。

  5. 加入只预览不写入的模式,或者保持输出到新文件。解释一次输入如何经过每个函数,并把最复杂函数拆小到自己能逐行读懂。

交付与验收

本周交付 怎样确认真的完成
数据约定 字段、类型、单位、缺失值和去重规则都有明确说明。
边界测试 正常与异常样例能被重复运行,期望结果经过本人核验。
可理解的错误 坏输入被拒绝或清楚标记,不悄悄改成另一条有效数据。

不用代码生成器的练习: 自己新增一条规则:例如时长必须大于零、标题去掉首尾空格。先写失败样例,再修改实现;不能让模型先把完整补丁给你。

隐私与安全检查: 输出默认最小化,不保留输入原文的“调试备份”。处理文本时不要直接把用户输入拼成可执行命令或数据库语句;尚未需要执行外部动作就不要增加该能力。

落到日常生活: 找一次过去容易因复制粘贴或缺字段而返工的任务,使用校验后的工具。记录错误是否被更早发现;防止返工也是价值,不必只统计点击数。

过关或补课判断: 可以解释一次校验失败,并独立添加一条规则后再进入下一周。若测试只有“没有抛异常”,应补一个结果确实正确的断言。

本周可复制的协作提示

请先帮我明确数据契约,将解析、纯逻辑和输出分离。围绕真实边界写最小测试,不扩展框架。完成后让我自己增加一条校验规则,并检查我是否真正理解类型检查与运行时校验的区别。

本周来源与核对范围

来源编号与核对说明沿用课程原文,基线为 2026-09-27。未逐一登录完成外部实验;实施前请核对最新版本与访问条件。

  1. R13
    CS50P Week 5:Unit Tests ↗

    选输入、期望输出与测试边界,不必迁移整个项目到 Python。

  2. R27
    MDN:JavaScript Guide ↗

    按章读语法、控制流、集合、函数、异步与模块。

  3. R28
    TypeScript Handbook:Introduction ↗

    主手册入口;先有 JavaScript 基础,再读日常类型与收窄。