读整理优先:小改进,大回报,整洁代码设计指南(上)

C/C++代码整理源代码 C/C++代码整理源代码作者:Y___Y联系:yinwei_88@sina.com        对于程序员来说,经常需要到网上查找资料,尤其是源代码,但往往由于网页排版或者其他的原因,导致copy下来的代码有时会相当的乱,手工整理需要花大量的时间,把时间花在这些无聊的工作上,无疑是对宝贵的时间的巨大浪费。笔者深受其苦,而且笔者也不喜欢用其他的辅助工具,所以花了点时间,编了一个C++源代码整理 阅读详情

1. 整理优先

1.1. 耦合和内聚只是度量计算机代码复杂度的标准,这不是从执行程序的计算机的角度来看的,而是从试图理解代码的人类的角度来看的

1.2. 软件设计是一种人际关系实践

1.3. 良好的软件设计是提高软件开发效率的强大工具,但如果使用不当,它就会变成另一个压迫工具,拖累软件开发的效率

1.4. 整理的理念之一是它永远不应该成为一件大事

  • 1.4.1. 不需要打报告、跟踪、计划和安排时间

  • 1.4.2. 之所以优先进行整理,是因为你需要改动代码,但代码很混乱,改起来很困难

1.5. 功能是所有人都关心的问题,所以我们今天要尽可能少地进行设计,这样才能回到功能开发上来

1.6. 经验性软件设计的时机取决于具体的情况

1.7. 极客设计软件的方式并不安全,有些方式会不小心破坏系统的行为,有些方式会让软件维护者倍感压力

  • 1.7.1. 不安全的行为产生不安全的感受是合理的,能感受到不安全远比毫不知情、毫不在意地感到安全要好得多

1.8. 当你优先整理时,你会立即感受到整理的价值

1.9. 完美的结果就是产生蝴蝶效应

2. 整理

2.1. 一般的学习策略是从具体到抽象

  • 2.1.1. 熟悉重构的人会发现,重构和整理之间有很大的相似之处,重构是在不改变行为的前提下改变结构

  • 2.1.2. 整理是重构的子集,是一种“可爱的、毛茸茸”的小重构,没有人会讨厌它

2.2. 卫述句

  • 2.2.1. 在深入代码的细节之前,需要处理一些前提条件

  • 2.2.2. 不要过多使用卫述句

2.3. 无用代码

  • 2.3.1. 如果代码不会被执行,就删掉

  • 2.3.2. 如果它就在那里,只需再次调用就能让它发挥价值,但如果删掉它而又需要它了,就会因为删除它而后悔

  • 2.3.3. 有时,无用代码很容易识别

  • 2.3.4. 有时,如果大量使用了反射,它们识别起来就不那么容易了

  • 2.3.5. 版本控制

    • 2.3.5.1. 我们并没有删除任何东西,只是现在不需要再看到它了

    • 2.3.5.2. 如果我们有很多代码但现在用不上,并且希望在未来使用它们而又不改变它们,那么我们就可以把它们找回来

    • 2.3.5.3. 可以再写一次,而且写得更好

  • 2.3.6. “少量”度量的是认知,而不是代码行数

2.4. 对称归一

  • 2.4.1. 代码量是自然增长的

    • 2.4.1.1. 我们不可能一次性写完所有需要的代码,除非我们从不学习任何东西
  • 2.4.2. 在自然增长的过程中,同样的问题可能在不同的时间或由不同的人以不同的方式解决

  • 2.4.3. 当交互使用两种或两种以上的模式时,就会变得混乱

    • 2.4.3.1. 不同的代码表达的是相同的事情
  • 2.4.4. 选择一种方式,将其他变体转换成这种方式

    • 2.4.4.1. 每次整理一种不必要的变体形式
  • 2.4.5. 细节会掩盖共性

    • 2.4.5.1. 寻找相似但不完全相同的例程,将不同的部分和相同的部分分离

2.5. 新接口,旧实现

  • 2.5.1. 你需要调用一个例程,而接口使调用变得困难、复杂、混乱或麻烦

  • 2.5.2. 创建直通接口是软件设计的微观本质

  • 2.5.3. 逆向编程

    • 2.5.3.1. 从例程的最后一行开始,就好像已经得到了所需的所有中间结果
  • 2.5.4. 先测试后编码

    • 2.5.4.1. 从需要通过的测试开始
  • 2.5.5. 设计辅助函数

    • 2.5.5.1. 如果只有一个例程/对象/服务能做XXX,那么剩下的事情就好办了

2.6. 阅读顺序

  • 2.6.1. 要抑制住诱惑,不要同时整理其他的问题

  • 2.6.2. 读完了整个文件后发现,最后的内容可以帮助你理解文件的前面部分

  • 2.6.3. 元素的排列顺序不可能尽善尽美

2.7. 内聚顺序

  • 2.7.1. 重新排列代码顺序,让需要更改的元素相邻

  • 2.7.2. 内聚顺序不仅适用于一个文件内的例程:如果两个例程是耦合的,就让它们相邻

  • 2.7.3. 内聚顺序也适用于目录中的文件:如果两个文件是耦合的,就把它们放在同一个目录中

  • 2.7.4. 内聚顺序甚至还适用于不同的代码库:把耦合的代码放在同一个代码库中,然后再修改它们

  • 2.7.5. 如果知道怎么消除,那尽管消除

  • 2.7.6. 解耦成本+变更成本<耦合成本+变更成本

  • 2.7.7. 解耦可能很难(不知道怎么解耦)​

  • 2.7.8. 解耦可能会耗费大量的时间和金钱(你可以做到,但现在花不起这个时间)

  • 2.7.9. 解耦可能是一种人际关系问题(团队已经到达了它所能承受的极限)

  • 2.7.10. 整理可以增加内聚性,使行为变更变得容易

    • 2.7.10.1. 内聚性稍有提高,就能清除解耦的障碍

    • 2.7.10.2. 更好的内聚性能让你更好地应对耦合

2.8. 将声明和初始化放在一起

  • 2.8.1. 变量及其初始化总是会渐行渐远

  • 2.8.2. 变量的名称可以告诉我们它在计算中的作用

  • 2.8.3. 初始化则会强化名称的信息

  • 2.8.4. 如果代码将(可能包含类型的)声明和初始化分离开来,阅读就会变得困难

  • 2.8.5. 变量和设置变量的代码不能随意排列

    • 2.8.5.1. 必须尊重变量之间的数据依赖关系

    • 2.8.5.2. 如果使用a初始化b,就必须先初始化a

    • 2.8.5.3. 要记住必须保持数据依赖关系的顺序

  • 2.8.6. 小步前进

2.9. 解释型变量

  • 2.9.1. 要把整理代码的提交与修改行为的提交分开

2.10. 解释型常量

  • 2.10.1. 把那些一起变化或需要一起理解的常量放在一块儿,并拆分那些由于别的原因而放在一起的常量

2.11. 显式化参数

  • 2.11.1. 人们常常用map来传递一组参数,但这样很难阅读和理解需要哪些数据

  • 2.11.2. 使用显式化参数的情况是在代码深处使用环境变量

    • 2.11.2.1. 将参数显式化,然后将其放到函数调用链的最前面

    • 2.11.2.2. 将使代码更易于阅读、测试和分析

2.12. 语句分块

  • 2.12.1. 软件设计让更改成为可能,小的软件设计可以让更改更容易

  • 2.12.2. 软件设计也会让后续更多的软件设计更容易

2.13. 提取辅助函数

  • 2.13.1. 有重构意识的人会发现这种整理与“提取方法”(Extract Method)类似

  • 2.13.2. 如果没有自动重构工具,执行这种整理/重构可能会很麻烦

2.14. 积沙成堆

  • 2.14.1. 根据需要尽可能多地内联代码,直到积沙成堆

  • 2.14.2. 代码的最大成本不是编写成本,而是阅读和理解的成本

  • 2.14.3. 整理优先倾向于大量的小片段,理论上可以增加内聚性、降低耦合性,实际上也可以减少大量细节

  • 2.14.4. 目的是让人们一次理解少量代码

  • 2.14.5. 症状

    • 2.14.5.1. 冗长、重复的参数列表

    • 2.14.5.2. 重复的代码,尤其是重复的条件

    • 2.14.5.3. 辅助函数命名不当

    • 2.14.5.4. 共享可变数据结构

2.15. 解释型注释

  • 2.15.1. 如果你发现一个文件没有header,可以考虑添加一个header,告诉潜在的读者这个文件的价值

  • 2.15.2. 写注释的一个好时机是在发现缺陷的时候

  • 2.15.3. 添加注释指出耦合问题,要比把它埋在沙子里好得多

2.16. 删除多余注释

  • 2.16.1. 当看到与代码内容完全一致的注释时,就将其删除

  • 2.16.2. 代码的目的是向其他程序员解释你希望计算机做的事情

  • 2.16.3. 当系统发生变化时,没有任何机制可以检查注释的准确性,而且随着代码的演化,注释可能会变得多余

    • 2.16.3.1. 注释一开始并不是多余的

    • 2.16.3.2. 经过整理后,注释只是对代码内容的简单重复

软件著作权pycharm 代码整理(去掉#注释和空行) 用现成工具实现软著删除#注释和空行。 阅读详情

相关推荐

在 XCode 中优雅地整理我们的 Swift 代码

大多数 iOS 团队都很难整理他们的代码。这是因为一些团队成员可能没有遵循 Swift 代码约定或使用他们自己的代码风格(尤其是初级工程师),因为他们往往会忘记或不知道 Swift 的代码约定。不骗你,当我刚接触 Swift 编程时,我就是那些初级工程师中的一员。但我发现了 XCode 提供的一些技巧,这些技巧让我的生活更轻松。当然,我不需要经常整理我的代码,因为我已经在强迫自己遵循 Swift 或我团队的代码约定。但这些技巧在常见情况下可能对我们有所帮助。

iCloudEnd的博客 1251

如何整理代码

整理代码,是开发的优化工作,虽是小细节,但不可忽视。如何整理代码,这里分享在实际工作中,得到的建议。虽时隔很久,依然觉得很赞。分享在此。

u013085212的博客 5529

高通camera open代码流程(hal到kernel)

内容:简单介绍Camera open代码调用流程,从HAl到kernel。(api1+hal1) 前言 Android camera api和hal对应关系。安卓在版本更新过程中,camera相关代码也经历了几个版本的更新,表现为camera HAL版本更新(HAL1->HAL2->HAL3),camera API版本更新(camera API1->camera API2),接下...

oxoo123的专栏 4276

visual studio整理代码

安装完后 这样就可以把代码整理的好看多了

图纸的博客 4198

一文搞定学术英语写作 (斯坦福SCI论文写作课程笔记)

0.前言: 本文基于斯坦福Kristin Sainani 教授的学术论文写作公开课——SCI论文写作(Writing in the Sciences)。在此基础上进行章节顺序的重排及部分内容的删减,以方便第一次进行英语学术论文写作的同学快速上手。 时间充足和想要系统学习英文学术写作的同学,十分建议观看完整课程视频,一定会受益匪浅!课程地址如下: 课程B站地址:https://www.bilibili.com/video/BV1zv41177JQ 1.论...

Ogmx的博客 3万+

华为Atlas200DK实战指南:从零搭建AI开发环境到人像语义分割模型部署

本文提供了一份详尽的华为Atlas 200DK AI开发环境搭建与模型部署实战指南。文章采用合设环境方案,从SD卡准备、系统镜像烧录、网络配置到必备工具安装,逐步引导开发者完成环境搭建。核心部分详细讲解了如何利用华为ATC工具将TensorFlow模型转换为昇腾专用格式,并最终成功编译和运行人像语义分割模型,实现实时人像识别效果。

weixin_29309213的博客 354

vs代码整理

vs代码整理 ctrl+k之后ctrl+f

superpan的博客 2276

基于ESP32-C3的便携式血氧仪硬件与算法实现

血氧饱和度(SpO₂)监测是生理参数无创检测的核心技术之一,其原理基于光电容积脉搏波(PPG)信号中红光与红外光吸收比值的动态变化。该技术依赖高精度模拟前端、稳定光学激励及实时数字信号处理能力,在消费级健康设备中面临功耗、体积与测量鲁棒性的多重约束。ESP32-C3凭借集成LEDC、12位ADC与低功耗双核架构,成为PPG终端的理想主控平台;结合定制化指夹式光学探头与比率法血氧算法,可实现非诊断级但趋势可靠的日常健康监测。本文围绕硬件电路设计、电源管理策略与嵌入式信号处理流程展开,覆盖从LED驱动、跨阻放大

weixin_29025501的博客 132

c语言代码自动整理,C语言代码自动整理工具

C语言代码格式化美化工具,把压缩包里的这两个文件一定要放在一个目录,之所以code是因为别人一看就是知道是和这个代码有关的程序不会删除,而叫Astyle.exe不知道文件作用,容易删除也就用不成了把要整理.c .h文件拖动到蓝色的文本框内,一定要拖动文件不能拖动目录,程序会把事个目录的.c和.h类型的文件全部以c代码的风格进行整理,无论你的代码是多么的乱都可以让它整洁!无论你的代码多么的乱,都可以...

weixin_32129187的博客 2045

从零开始:用Python实现AlphaZero五子棋AI(附完整代码)

本文详细介绍了如何从零开始使用Python实现AlphaZero五子棋AI。通过工程化实践,逐步构建蒙特卡洛树搜索(MCTS)、轻量化残差网络(ResNet)以及自博弈训练循环,并提供完整可运行的代码。文章旨在帮助开发者绕过复杂理论,聚焦实战,最终打造一个能够自我学习与对弈的智能体,是深度强化学习在游戏AI领域的一次完整项目实战。

weixin_29081703的博客 415

MIPI CSI-2

来源:公众号瓜大三哥版权归三哥所有1 MIPI简介2 MIPI CSI-2简介2.1 MIPI CSI-2 的层次结构2.2 CSI-2协议层2.3 打包/解包层2.4 ...

OpenFPGA的博客 2112

IDEA代码整理

文章目录一、代码整理二、代码模板 一、代码整理 代码整理,快捷键: ( mac )option + command + L ( win )ctrl + alt + L 相应的设置,如下: 二、代码模板 设置代码模板: 在建立新文件的时候,格式如下: ...

longgb123的博客 8219

Pytorch实现之SRGAN+CBAM的结构设计

在SRGAN的残差连接中加入了CBAM注意力机制,同时设计了四类损失来训练。

LJ1147517021的博客 568

软著代码整理小工具使用说明:一款高效的代码整理助手

软著代码整理小工具使用说明:一款高效的代码整理助手 去发现同类优质开源项目:https://gitcode.com/ 在软件开发过程中,代码的整理与规范至关重要。今天,我们就来介绍一款能够帮助开发者高效整理代码的利器——软著代码整理小工具。 项目介绍 软著代码整理小工具是一款专为软件开发者设计的代码整理工具。它可以帮助开发者快速地将代码按照规定的格式进行整理,提高工作效率,确保代码的整洁性和可读性...

gitblog_06722的博客 994

PCL 基于强度的双边滤波【2026最新版】

基于强度信息的双边滤波代码实现、滤波前后点云未出现变化的原因以及获取带有强度pcd点云的方法。本文由优快云点云侠原创,博客长期更新,本文最近一次更新时间为:2026年5月24日。

点云侠的博客 29万+

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

visual studio 自动整理代码

1.Ctrl+A选中要整理的代码2.Ctrl+K3.Ctrl+F

xwdreamer的专栏 5052

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

软著源代码整理软件

软著源代码整理软件 【下载地址】软著源代码整理软件 这款开源软件专为开发者设计,旨在简化源代码整理流程,特别适合申请软件著作权时使用。通过一键提取功能,自动扫描文件夹并提取指定格式的代码文件,如“.php”、“.css”、“.js”等,大幅提升效率。界面简洁,操作直观,快速上手,节省大量手动整理时间。只需选择文件夹和文件...

gitblog_06745的博客 840

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

【亲测免费】 软著代码整理工具:让代码整理变得轻松愉快!

软著代码整理工具:让代码整理变得轻松愉快! 【下载地址】软著代码整理工具2022-09-29亲测好用 软著代码整理工具2022-09-29亲测好用 项目地址: https://gitcode.com/open-source-too...

gitblog_09702的博客 1166

C#快速整理代码格式

C#快速整理代码格式 有以下几种办法: VS2005 使用快捷键crtl+E,然后再按crtl+D; VS2008 使用快捷键crtl+K,然后再按crtl+D ; 删除最后一个大括号,再添加。vs自动整理代码结构; Ctrl+A(全选) --> Ctrl+X(剪切) -->Ctrl+V(再粘回来); 使用快捷键crtl+K,然后再按crtl+D。 ...

hot1122333的博客 3710

eclipse快捷键及代码整理

eclipse使用技巧1、选中括号颜色: Window->Preferences->Java->Editor->color2、显示行号: Window-&

wangchaoqi1985的博客 7814

【免费下载】 软著源代码整理工具

软著源代码整理工具 【下载地址】软著源代码整理工具分享 本资源提供了一款高效便捷的软著(软件著作权)源代码整理工具。对于开发者和软件著作申请者而言,整理大量的源代码以满足申请软件著作权的要求往往是一项繁琐的任务。此工具旨在简化这一流程,帮助用户快速整理和准备源代码文件,以便于提交和归档 ...

gitblog_09803的博客 1401

idea中整理代码格式

leibowen12138的博客 2036

idea整理代码idea快捷键

idea整理代码快捷键: Catl + Alt +L

m0_64884960的博客 2157

visual studio 利用快捷键自动整理代码

Ctrl + K ,  Ctrl + D.  自动整理代码

Hamber_Bao的专栏 2万+
上一篇: 读商战数据挖掘:你需要了解的数据科学与分析思维12总结
下一篇: 读整理优先:小改进,大回报,整洁代码设计指南(下)
躺柒
博客等级 码龄4年 7004粉丝 1317原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值