Clean Code (4):函数长度、抽象层次

Excel CLEAN函数:专清ASCII 0-31非打印字符的数据清洗基石 CLEAN函数是Excel中专用于清除ASCII码0–31范围内非打印字符(如换行符、制表符、空字符等)的基础文本处理函数。其设计遵循确定性原则,不处理空格(CHAR(32))或Unicode扩展字符(如不间断空格CHAR(160)、零宽空格CHAR(8203)),从而保障清洗行为的可预测性与稳定性。该函数的核心技术价值在于解决数据导入过程中的‘隐形污染’问题,确保LEN、FIND、VLOOKUP等函数逻辑正确执行。典型应用场景包括CSV/数据库导出数据、网页爬取内容、ERP系统报表等非人工直录来源的预处理 阅读详情

一、什么构成一个“好函数”?

编写一个函数并不难,难的是编写一个易读、易维护、易复用的函数。
我们从三个维度来看“好函数”的要素:

  1. 调用时可读性强
  2. 函数体简洁明确
  3. 输出与副作用可控

调用函数的可读性:读起来,就像在说人话

函数调用的语义应当尽可能自然。
好的函数命名与参数设计,让函数调用像阅读一段逻辑描述一样顺畅。

✅ 要点

  • 参数数量越少越好
  • 参数顺序应与语义逻辑一致
  • 少用布尔型参数(容易混淆意图)

🔧 示例:

# 糟糕的命名与参数设计
processData(True, 50)

# 良好的命名与参数设计
resizeImage(width=50, keep_aspect=True)

上面的第二种写法更自然,表达意图清晰。


函数体的结构:短小而专注

函数的内部实现应当只做一件事(Single Responsibility)。
当函数太长时,逻辑复杂度会指数级增加,重构与测试成本也随之上升。


📊 思维导图:影响函数可读性的关键因素

函数可读性

调用层面

参数数量

参数顺序

命名语义

实现层面

行数控制

单一职责

代码重复

输出层面

输出参数

副作用

返回值一致性


一个函数只做一件事

当一个函数试图做太多事情时,它就不再“抽象”,而成为“代码碎片的拼接”。

重构的目标是提高抽象层级一致性:
函数内部的代码应在同一个思维层面上工作。

✅ 建议:

  • 若一个函数包含多个逻辑阶段(例如验证 → 计算 → 更新),应尝试拆分成子函数。
  • 每个子函数对应一个明确的意图。

🌿 示例:糟糕与优化的函数结构对比
# ❌ 糟糕示例:功能混杂
def handleUserData(user):
    if not user.is_valid():
        log.error("Invalid user")
        return None
    db.save(user)
    send_welcome_email(user.email)
    update_statistics()

# ✅ 改进示例:逻辑分层,更好维护
def handleUserData(user):
    if not isUserValid(user):
        logInvalidUser(user)
        return None
    
    persistUserData(user)
    onboardUser(user)
    updateSystemMetrics()

def isUserValid(user): ...
def logInvalidUser(user): ...
def persistUserData(user): ...
def onboardUser(user): ...
def updateSystemMetrics(): ...

这样的结构让每个函数的职责清晰,后续维护更方便。


避免重复代码(Don’t Repeat Yourself)

重复代码不仅浪费时间,更容易引入不一致性的错误。
任何发现相似结构的地方,都可以考虑抽象成辅助函数。


小心“输出参数”

输出参数容易混淆调用方的意图,也可能改变函数的副作用边界。
如果函数需要返回多个值,建议返回一个对象或元组,而不是通过修改外部变量。

# ❌ 输出参数的陷阱
def fillStats(stats):
    stats['count'] = 20
    stats['avg'] = 4.5

# ✅ 更好的做法
def getStats():
    return {'count': 20, 'avg': 4.5}

这样不仅使函数更“纯净”,也更符合函数式编程的理念。


二、函数拆分与抽象层次

“函数拆分”不是简单地把代码分块,而是要建立清晰的抽象边界。
每个函数应位于一个明确的抽象层次上。


🪄 抽象层次示意图

高层抽象: 用户操作

中层抽象: 数据处理

底层抽象: I/O 操作

例如:

  • 高层函数:面向业务逻辑(如处理订单)
  • 中层函数:处理数据、验证输入
  • 底层函数:执行数据库操作或网络请求

✅ 当你在一个函数中看到不同层次的逻辑时,它就应当被拆分。


🔧 拆分流程图

下面是一个函数重构过程的逻辑流程:

是

否

大型函数

是否过长?

识别逻辑阶段

抽取子函数

重命名与统一抽象层

保持不变


三、总结与实践指南

维度建议目的
参数控制数量与顺序提高调用可读性
行数保持短小降低复杂度
职责单一职责原则易于维护
输出返回值代替输出参数消除副作用
抽象一致的层次结构更高可读性与复用性

最佳实践清单

  1. 每个函数都应能被一句话描述其作用。
  2. 函数名应揭示意图,而非实现细节。
  3. 行数控制在 10~20 行为宜。
  4. 避免嵌套超过两层。
  5. 使用返回值代替修改外部状态。

最后的思考

干净的代码并非“短小即美”,
真正的 Clean Code 是一种思维方式:

每一行函数都在服务于“清晰的意图表达”。

EEGLAB安装、EDF数据导入、EEG预处理(Matlab) 目录下载和安装下载安装遇到问题及解决方案导入EDF数据EEG预处理 下载和安装 下载 链接:https://pan.baidu.com/s/17eMT6B7LgZ4PyqWvD5ixmg 提取码:12gz 安装 **第一步:**将下载下来的文件解压,修改名称为eeglab,将此文件夹存放在matlab的安装目录里的toolbox文件夹下,下图是我的路径,需要拷贝到自己相对应的路径中 第二步: 打开Matlab软件,点击主页中的设置路径 设置路径 点击添加并包含子文件夹,将eeglab文件夹添加进来,保 阅读详情

相关推荐

springcloud+nacos+gateway+oauth2小聚会

在微服务工程中,Nacos作为目前主流的注册中心和配置中心,Spring Cloud Gateway作为目前主流的网关,下面引入spring security+oauth2+jwt作为认证和授权中心,进行简单的聊聊。

ldcaws的专栏 2646

函数长度与抽象层次:Clean Code 中长函数重构的实战指南

从函数长度作为代码可读性的常见信号切入,说明长函数的核心问题往往不是行数,而是抽象层次混乱导致读者心智负担加重。通过分层管理、提取方法、设计中间数据结构等重构手段,可以将多职责函数拆分为职责单一、层次清晰的小函数,从而在代码评审中降低沟通成本,提升测试效率。结合一个报表函数的重构案例,给出可执行的拆分边界、操作顺序与验收标准,并讨论算法类长函数的合理豁免场景。最终回归到代码质量的根本目的:降低读者认知成本,实现可持续演进。

weixin_30843121的博客 201

阿里天池新闻推荐实战:多路召回策略解析与优化

本文深入解析阿里天池新闻推荐项目中的多路召回策略,包括ItemCF、UserCF、YouTubeDNN等五种召回模型的协同应用与优化技巧。通过实战案例展示如何提升推荐系统效果,特别针对冷启动问题提出创新解决方案,帮助开发者构建高效的新闻推荐系统。

weixin_26918763的博客 414

函数长度与抽象层次:Clean Code拆分的核心原则

在软件工程实践中,函数长度一直是代码审查与重构中反复讨论的话题。很多人追求“短函数”,却往往陷入机械拆分的误区——代码被拆成多个中等函数,可读性依然没有改善。真正的关键并不在于行数多少,而在于抽象层次一致性:一个函数内部的代码应当处于同一抽象层级,避免业务意图与技术实现混杂。遵循这一原则,母函数可以像目录一样清晰描述业务流,子函数则聚焦独立职责,从而显著降低认知负担,提升代码可维护性与可测试性。当函数包含多个逻辑阶段或步骤间存在独立数据依赖时,基于抽象层次进行拆分,比单纯追求短小更具工程价值。文章结合订单取

weixin_31220401的博客 294

Veeam Backup 13 通过UI界面高效备份VMware ESXi虚拟机的完整指南

本文提供了一份使用Veeam Backup 13图形化界面高效备份VMware ESXi虚拟机的完整指南。内容涵盖从环境准备、添加vCenter/ESXi主机、配置备份存储库,到创建备份任务、设置保留策略与计划,以及执行备份和验证成功的关键步骤。通过直观的UI操作,管理员可以轻松实现虚拟机数据的可靠保护与快速恢复。

weixin_29322553的博客 436

STM32 SPI驱动TFT LCD实战:时序配置与硬件协同

SPI(串行外设接口)是一种高速、全双工、同步串行通信协议,广泛应用于微控制器与显示模组等外设的数据交互。其核心依赖时钟极性(CPOL)与时钟相位(CPHA)组合定义的四种工作模式,直接影响数据采样可靠性;而片选(NSS)与MOSI/SCLK等信号的硬件映射,则决定了多设备共总线下的通信稳定性。在TFT LCD驱动场景中,SPI凭借低开销、高吞吐优势成为主流选择,尤其适配ST7789、ILI9341等集成显示控制器的模块。本文聚焦STM32L系列MCU通过SPI2驱动1.3寸LCD的完整链路,涵盖Mode

php55的博客 1208

Clean Code (1):让代码成为一种艺术

Clean Code不仅仅是“能跑通”的代码,它更像是一篇写得很好的散文。

TracyCoder的博客 1476

CAPL自动化测试

通过本文的学习,读者应该对CAPL自动化测试有了初步的了解,并能够编写复杂的CAPL脚本。在实际项目中,CAPL的应用非常广泛,希望读者能够通过不断的学习和实践,掌握更多的CAPL技巧,提高自己的开发能力。

闲人编程的博客 1526

clean code 读书笔记

前提 破窗理论:设计良好的架构,如果维护不当,也会随着时间腐化 重构要一直进行,而不是到不得不做才开始 好的系统是演进出来的。所有事物都是如此。软件也不例外,不要尝试一开始就构建一个可以抽象非常好的系统,没有人可以做到这样。 一般软件的生命周期只有3-5年,所以,一定要考虑收益比 好的代码是锦上添花,不要动不动上升到代码写得烂,公司就倒闭这种夸张程度 LeBlanc:稍后等于永远不 代码质量与思...

wenxueliu的博客 648

特征拼接(Feature Concatenation)技术全景解析

特征拼接是深度学习中的核心特征融合技术,通过在指定维度连接不同来源的特征张量,创造性地解决了多源、多尺度特征融合的关键挑战。这种简单却强大的操作已成为现代神经网络架构设计的基石。

浩瀚之水的专栏 1639

RK3568 HDMI输出调试:分辨率切换与EDID解析

厂商信息(Vendor ID)显示器型号(Product ID)支持的分辨率列表色彩特性音频支持情况检查项方法HPD 信号EDID 读取当前模式TMDS 时钟PHY 状态。

小灰灰的博客 1482

如何写出单职责PHP函数:clean-code-php的终极指南

clean-code-php是一个专注于将Clean Code概念应用于PHP开发的项目,它提供了一系列实用指南帮助开发者编写更清晰、更可维护的PHP代码。本文将深入探讨如何利用clean-code-php的原则来优化函数设计,实现单一职责原则,让你的PHP代码质量提升到新高度。 ## 为什么单职责函数对PHP开发至关重要 在PHP开发中,函数是代码的基本构建块。一个函数只负责一项明确的任务,

gitblog_00215的博客 340

ROS2 CANopen 使用教程

第一步是定义一个结构,用于保存有关接头和相关 CANopen 数据的信息。该结构是 CANopen 网络的基础,可确保存储所有相关数据并在需要时进行访问。

机器人控制与仿真应用 3690

《Clean Code》学习之—Formatting

周末女朋友过来了,又没有好好看书,呵呵。今天下班接着看bob大叔的《Clean Code》。Bobo大叔不愧是神人,对于代码的格式都能说得这么多,杯具的是,今天状态不好,也没怎么看明白。先稍微记一些,有不明白的地方以后再回过头来看看吧。 这一节的篇幅不是很长,感觉内容也不是很多,先随便写点吧。 在文章中,bob大叔的意思应该是代码是程序...

weixin_30323961的博客 133

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

Clean-Code:函数

Clean-Code:函数 短小: 函数的第一规则是短小,第二规则还是短小, 很明显作者将短小放到第一个列出来的位置。说明对于函数而言,短小的重要性不言而喻。 可是函数多少行才算短小呢? 代码大全上说一个函数理论上应该小于50行,我认为这个数字有点

鍵盤農夫 727

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

Claude Code 的 Clean Code 生成规范:用清晰代码规则约束 AI,产出可维护的工程级代码

代码被阅读的次数大约是它被书写的 10 倍。Claude Code 之所以能持续产出"可维护、专业级"的代码,靠的是一套显式的 Clean Code 规则约束——本仓库根目录下的 [clean-code-rules.md](https://link.gitcode.com/i/5512a07142ec2b404ccd40fe6d931bae) 正是这套规则集本身。本文以它为骨架,结合仓库内 `03

gitblog_00030的博客 1028

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

TypeScript团队协作规范:clean-code-typescript实践指南

你是否曾在团队协作中遇到过这些问题:接手同事的代码如同解密,变量名`a1`、`temp`让人费解;函数动辄数百行,逻辑嵌套堪比迷宫;修改一行代码引发连锁反应,调试半天发现是全局变量被意外篡改?这些问题的根源往往不是技术能力不足,而是缺乏统一的代码规范。本文将基于[clean-code-typescript](https://link.gitcode.com/i/67faf1dd22f3a1087f...

gitblog_00816的博客 932

clean code之路——函数

函数代码总原则 函数代码长度要短; 一个函数只做一件事; 写函数代码如同给写文章段落,要在合适的地方分段; 写代码如磨论文,休想一次成形,优美的代码需要多次打磨。 函数代码方法论 函数最好不要超过20行,切函数内代码的缩进不超过两级。 衡量一个函数是否只做一件事的标准: - 是函数体代码实现的功能是否超出了函数名所限定的功能; - 函数体代码是否能够分成多个逻辑部分,如...

无花果树的博客 754

clean-code-guard 技能解析:用 Clean Code + SOLID + 24 条硬性准则为 AI 生成代码设置发布前质检关卡

clean-code-guard 是 [agentic-awesome-skills](https://pre-link.gitcode.com/i/136c754c12126421a888220981c74e53) 仓库中社区贡献的便携式指令技能(instruction skill),定位是"代码发布前的判断层(judgement layer)":它不替代 linter、格式化器、类型检查器或测

gitblog_00951的博客 74

Professional Programming代码质量革命:Clean Code实践指南

> "代码被阅读的次数远多于被编写的次数。" —— Robert C. Martin 在软件开发的世界中,代码质量往往决定了项目的成败。Clean Code(整洁代码)不仅仅是一种编程风格,更是一种工程哲学,它关乎代码的可读性、可维护性和可扩展性。本文将深入探讨Clean Code的核心原则和实践方法,帮助您提升代码质量。 ## 为什么Clean Code如此重要? ### 技术债务的隐性成...

gitblog_00155的博客 455

clean code笔记

clean code 之 类篇1.类的组织类的组织遵循标准的Java约定:变量 变量又称为实体,变量的顺序应该为:公共静态变量–>私有静态变量–>私有实体变量–>公共变量 注意1:公共静态变量应该尽可能存在同一个地方便于管理 注意2:Java类中很少使用公共变量,应该采用属性的方式来进行变量的访问和修改 属性 属性及get和set在紧跟私有实体变量。 函数 遵循自顶向下原则,

xidiancyp的博客 1910

Clean-Code: 有意义的名字

最近在看Clean-Code(代码整洁之道) 里面有些内容还是不错的,所以给大家分享下。 名副其实: 意思是说名称和意思要一致,更精确的说应该是看到名字就能想到意思。 对程序员来说取名通常是一件麻烦的事情,尤其是取一个好的名字。 这里截取一段书中的代码: public List<int[]> GetThem() { List&l...

weixin_34349320的博客 199

使用tslint-clean-code打造整洁的TypeScript代码库

使用tslint-clean-code打造整洁的TypeScript代码库 在编程世界中,代码质量的重要性不言而喻。一个干净、可读性强的代码库不仅能提高团队的工作效率,还能降低维护成本。今天,我们将向您推荐一款名为tslint-clean-code的开源项目,它是一个基于TSLint的规则集,专门用于强制实施《Clean Code》中的编码最佳实践。 项目介绍 tslint-clean-code是...

gitblog_00046的博客 442

Clean Code

书名《代码整洁之道》 命名 有意义的命名,使人能读懂 类名和对象名应该是名称或名称短语 方法名应该是动词或动词短语 函数 短小,函数块不要超过一个屏幕 类尽量不要超过1000行 if语句、else语句、while语句等,其中的代码块应该只有一行。该行应该是一个函数调用语句。 函数的缩进层级不该多于一层或二层 函数参数...

weixin_30782331的博客 136

简洁代码(Clean Code)的黄金法则

代码简洁性体现在可读性、可维护性和可扩展性上,核心原则包括:1)KISS原则,避免过度设计;2)单一职责原则,确保模块化;3)DRY原则,消除重复代码;4)清晰命名,提高自解释性;5)短小精悍的函数设计;6)优化控制流,减少嵌套;7)注重“为什么”的注释而非“是什么”;8)保持代码可测试性。这些原则共同降低协作和维护成本,使代码更易于理解和修改。

Qinti_mm的博客 1335

7个终极PHP代码质量指标:clean-code-php教你如何科学衡量代码优劣

在PHP开发中,写出能运行的代码很容易,但写出高质量、易维护的代码却需要遵循一定的规范和标准。clean-code-php项目作为PHP代码整洁之道的实践指南,提供了一套全面的代码质量评估体系。本文将深入解析7个核心代码质量指标,帮助开发者科学衡量PHP代码质量,提升项目可维护性和团队协作效率。 ### 1. 变量命名质量:代码可读性的基础指标 变量命名是衡量代码质量的首要指标。clean-c

gitblog_00528的博客 800
上一篇: Clean Code (3):注释与代码格式化
下一篇: LeetCode Hot100(1/100)——1. 两数之和 (Two Sum)
TracyCoder123
博客等级 码龄8年 1万+粉丝 226原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

TracyCoder123

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值