当前位置: 首页 > news >正文

《代码大全2》13,14,15读后感

第13章:不常见的数据类型——超越基础的选择
本章探讨了结构体、指针、全局数据等“高级”或“危险”的数据类型,核心思想是:强大的能力需要匹配强大的纪律。

关键收获:
结构体(Struct)的抽象价值

结构体不仅是数据的容器,更是语义的封装。它将逻辑上相关的数据绑定在一起,创建了一个新的抽象层次(如 Customer 而非一堆分散的变量)。

关键原则:让结构体纯粹。它应代表单一概念,避免混杂不同用途的数据。

指针(Pointer):双刃剑的驾驭之道

指针错误(悬空指针、内存泄漏)是C/C++中许多灾难的根源。作者提出了系统的安全策略:

分层隔离:将指针操作封装在低层、经过充分测试的例程中。

显式所有权:明确哪个模块负责分配和释放内存。

使用哨兵:释放后立即将指针设为NULL。

更深层的启示:指针不仅是语法工具,更是资源所有权的表达。混乱的指针通常意味着混乱的设计。

全局数据的“极简主义”

全书对全局数据的态度近乎“零容忍”。理由非常深刻:全局数据破坏了模块化、损害了可读性、并导致不可预测的耦合。

唯一的例外是“全局常量”(如配置参数),因为它们没有状态变化的风险。

实践建议:将全局变量包装成类的静态成员,或通过参数传递,显式地暴露依赖关系。

实践启发:
积极使用结构体来提升代码的声明性(代码更易读)。

如果必须使用指针,建立团队内的“指针安全协议”。

将“减少全局数据”作为代码审查的硬性指标。

第14章:组织直线型代码——顺序的哲学
本章研究最简单、最普遍的代码形式——顺序执行的语句,并揭示其中隐藏的秩序。

关键收获:
依赖性是最重要的秩序

直线型代码的正确组织原则只有一个:让依赖关系显式且有序。即,确保每条语句的准备条件(所需的计算、状态变化)都已由前面的语句完成。

这听起来简单,但违反此原则是常见错误。例如,使用未初始化的变量,或在配置完成前调用服务。

“就近原则”

相关的操作应尽可能靠近放置。例如,打开文件、读取文件、关闭文件的操作应放在一起,而不是分散在函数各处。

这减少了认知负荷,也降低了因插入新代码而破坏依赖的风险。

从时间顺序到逻辑顺序

优秀的代码顺序不仅反映操作的时间序列,更反映底层的逻辑关联。例如,初始化所有模块→建立连接→开始处理,这个顺序背后是“准备→连接→运行”的逻辑阶段。

实践启发:
编写代码时,有意识地问:“这条语句执行前,必须确保什么已经发生?”

重构时,将具有强依赖的语句块聚合在一起。

用空行分隔逻辑上独立的代码块,形成“视觉段落”。

第15章:使用条件语句——控制逻辑的清晰表达
本章深入探讨了 if 和 case 语句,目标是编写意图透明、易于维护的条件逻辑。

关键收获:
if 语句的心理学

正逻辑优先:if (isEnabled) 比 if (!isDisabled) 更易理解。人脑处理肯定判断更快。

先处理常见或简单情况:这符合阅读的“快路径”期待,并能减少嵌套。

警惕深层嵌套:深层嵌套是“代码坏味道”,通常意味着需要提取子程序或重组逻辑。

case 语句的结构化力量

case(或 switch)语句不仅是语法糖,更是枚举处理逻辑的天然框架。

关键技巧:

利用 default 子句处理错误或意外情况,即使你认为所有情况都已覆盖。

按逻辑顺序(如频率、字母序)排列分支。

保持每个分支内聚——如果分支代码过长,应提取为函数。

多态作为条件语句的替代方案

这是本章的升华点:复杂的 if 或 case 链,尤其是基于类型判断的,通常是引入多态(面向对象)或策略模式(非面向对象)的信号。

这种重构不仅能简化当前逻辑,更能抵御未来的变化——新增类型只需新增类,而非修改庞大的条件语句。

实践启发:
编写条件时,像写句子一样思考:“如果…(条件),那么…(操作)”。

当发现同一个条件判断分散在多个地方时,考虑使用“卫语句”(Guard Clause)或引入状态变量。

评估复杂的条件链,看是否可以通过查表法(第18章)或设计模式来简化。

三章的内在联系与整体启示
这三章完成了从 “数据构建” 到 “行为构建” 的自然过渡:

第13章 为我们提供了构建复杂数据模型的工具(结构体),并警告了最危险的工具(指针、全局数据)。好的数据是清晰行为的基础。

第14章 确立了行为组织的最基本法则:依赖秩序。这是所有程序正确执行的物理基础。

第15章 在此基础上,处理了程序中最能体现“智能”的部分——决策。它告诉我们,清晰的决策逻辑首先是心理学和设计问题,其次才是语法问题。

贯穿这三章的一个统一主题是:通过约束获得清晰度。

约束指针的使用,获得内存安全。

约束全局数据,获得模块化。

约束代码顺序,确保依赖清晰。

约束条件逻辑,使其易于理解。

对我的实际影响
对全局变量产生了近乎本能的警惕,会主动寻找替代方案。

在组织代码时,会画出简单的依赖图(哪怕只是在脑海里),以确保顺序合理。

将“简化条件逻辑” 视为日常重构的重点任务,并开始有意识地使用多态来替代类型判断。

这三章的内容再次证明,大师级的编程能力体现在对基础构造块的精湛掌握上。接下来,书中将深入循环、表驱动法等更复杂的控制结构。如果你对其中某个特定主题(例如“如何安全地重构一个巨型switch语句”)感兴趣,我们可以继续探讨。

http://www.rkmt.cn/news/190116.html

相关文章:

  • 模拟信号隔离技术解析:系统学习指南
  • 全面讲解Proteus元器件大全中的电源与地符号
  • 苹果App Store提交指南:将DDColor封装为iOS应用
  • GitHub镜像推荐:DDColor黑白照片修复模型快速部署教程
  • 思否SegmentFault发文:解决DDColor部署中的典型坑点
  • 量化算法优化降低GPU显存占用提升推理速度
  • 2025机顶盒刷机包下载大全:零基础小白指南
  • 混合精度计算应用进一步榨干每一分算力效能
  • 实战案例:利用elasticsearch官网API进行动态配置更新
  • 电感饱和对DC-DC性能的影响及应对策略
  • Vivado使用教程:Artix-7嵌入式Zynq系统搭建示例
  • 理解逻辑门的非线性分类:多层感知机通俗解释
  • LLaMA Factory 报错:微调合并之后,加载模型报错AttributeError: can‘t set attribute
  • 人物面部颜色异常?建议使用460-680范围内的size值
  • 合作伙伴计划招募代理商扩大DDColor市场覆盖范围
  • 年末重磅改革!国自然基金委官宣:启动申请书“瘦身提质” 行动,30页封顶
  • Prometheus监控DDColor服务状态,保障SLA稳定性
  • OllyDbg条件断点高级用法:精准捕获异常
  • 构建开发者生态:鼓励第三方基于DDColor做二次开发
  • 百度搜索优化技巧:让‘DDColor 老照片修复’排名靠前
  • YOLOv5可以检测老照片中的人物位置,再交由DDColor上色
  • 数据备份策略防止意外丢失重要修复成果
  • Typora官网风格文档撰写:记录DDColor模型使用全过程
  • ArduPilot角速度控制算法深度解析与优化建议
  • 国际信用卡支持打通海外用户付费通道
  • AB实验平台建设科学评估功能改动效果
  • 开源不等于低质:DDColor修复质量媲美商业软件
  • 一文说清elasticsearch安装与日志检索优化
  • 安全审计措施到位保护用户上传老照片隐私不泄露
  • I2S协议工作原理小白指南:掌握左右声道切换规则