我对干净代码的理解是什么?
深入研究软件开发最佳实践:对干净代码的反思
当开始研究良好的软件开发实践时,我将“干净代码”(干净代码)想象为一组简单的规则,以确保代码可读。 在某种程度上,这种看法是正确的。然而,这些规则并不总是适用于所有类型的代码,并且仅仅通过阅读书籍当然无法完全理解。
干净的代码:持续的旅程
最近,我重读了 Robert C. Martin 的经典著作干净的代码,我的理解与六年前的第一次阅读有很大不同。 作为当时的一名大学生,提出的许多问题和解决方案并不完全清楚。 这是一个很大的误解:干净的代码不适合初学者。
“……如果你是一名医生,而一名病人仅仅因为时间太长而要求你停止洗手以准备手术怎么办?[...]程序员屈服于这种做法是不专业的伟大的管理者不了解生成混乱代码的风险。”
这篇文章重点介绍了我阅读中的相关要点,并分享了实践经验。
函数:单一职责
一个编写良好的函数应该有一个单一的职责:做一件事,做好它,仅此而已。 将多个职责分组为一个角色会使代码难以阅读、测试和维护。
具有多重职责的角色示例(保存并通知用户):
<code>function salvarUsuarioENotificar(usuario) { // Valida os dados do usuário if (!usuario.nome || !usuario.email) { throw new Error('Dados do usuário incompletos.') } // Salva no banco de dados bancoDeDados.salvar(usuario) // Envia um e-mail de boas-vindas emailService.enviarEmail(usuario.email, 'Bem-vindo!', 'Obrigado por se cadastrar!') }</code>
重构后,每个职责都有特定的角色:
<code>function validarUsuario(usuario) { if (!usuario.nome || !usuario.email) { throw new Error('Dados do usuário incompletos.') } } function salvarUsuario(usuario) { bancoDeDados.salvar(usuario) } function enviarEmailDeBoasVindas(usuario) { emailService.enviarEmail(usuario.email, 'Bem-vindo!', 'Obrigado por se cadastrar!') } function processarCadastroDeUsuario(usuario) { validarUsuario(usuario) salvarUsuario(usuario) enviarEmailDeBoasVindas(usuario) }</code>
现在每个函数都有一个职责,使代码更具可读性且更易于维护。
评论:优先考虑不言自明的名称
注释很有用,但优先考虑不言自明的名称以避免冗余。 明显的注释会污染代码。
不必要的评论示例:
<code>/** Dia do mês **/ private number diaDoMes;</code>
改进了名称更清晰且没有注释:
<code>private number diaDoMesAtual;</code>
对象和数据结构:封装和清晰度
良好的面向对象设计侧重于公开操作和隐藏实现细节。 这样可以促进封装,减少耦合,方便维护。
封装在类中的示例Circulo
:
<code>class Circulo implements Forma { private Ponto centro; private number raio; private number PI = 3.14159; public number calcularArea() { return PI * raio * raio; } }</code>
避免出于不同目的在不同范围内重复使用变量。 使用不同的变量可以提高清晰度。
错误处理:异常而不是多重检查
过去,错误处理是有限的。 如今,使用异常使代码更简洁、更具可读性。
具有多重验证的详细代码示例:
<code>function salvarUsuarioENotificar(usuario) { // Valida os dados do usuário if (!usuario.nome || !usuario.email) { throw new Error('Dados do usuário incompletos.') } // Salva no banco de dados bancoDeDados.salvar(usuario) // Envia um e-mail de boas-vindas emailService.enviarEmail(usuario.email, 'Bem-vindo!', 'Obrigado por se cadastrar!') }</code>
使用异常进行重构:
<code>function validarUsuario(usuario) { if (!usuario.nome || !usuario.email) { throw new Error('Dados do usuário incompletos.') } } function salvarUsuario(usuario) { bancoDeDados.salvar(usuario) } function enviarEmailDeBoasVindas(usuario) { emailService.enviarEmail(usuario.email, 'Bem-vindo!', 'Obrigado por se cadastrar!') } function processarCadastroDeUsuario(usuario) { validarUsuario(usuario) salvarUsuario(usuario) enviarEmailDeBoasVindas(usuario) }</code>
单元测试:清晰度和焦点
干净的测试必须清晰、简单且一致。 用很少的表达方式传达大量的信息。
测试的一般结构:构建、操作、验证。
课程:SRP(单一职责原则)
类的名称应该反映其职责。 班级规模应该小,目标单一。 SRP 确保每个类只有一个职责。
结论:干净的代码是一段旅程
干净的代码不是一下子就能学会的。这是一个持续的旅程,需要实践、反思和进化。 真正的技能来自于经验和看到改进的能力。 Kent Beck 的规则(测试、避免重复、清晰、最小化类和方法)是一个很有价值的指南。
以上是我对干净代码的理解是什么?的详细内容。更多信息请关注PHP中文网其他相关文章!

热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

Video Face Swap
使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

不同JavaScript引擎在解析和执行JavaScript代码时,效果会有所不同,因为每个引擎的实现原理和优化策略各有差异。1.词法分析:将源码转换为词法单元。2.语法分析:生成抽象语法树。3.优化和编译:通过JIT编译器生成机器码。4.执行:运行机器码。V8引擎通过即时编译和隐藏类优化,SpiderMonkey使用类型推断系统,导致在相同代码上的性能表现不同。

Python更适合初学者,学习曲线平缓,语法简洁;JavaScript适合前端开发,学习曲线较陡,语法灵活。1.Python语法直观,适用于数据科学和后端开发。2.JavaScript灵活,广泛用于前端和服务器端编程。

从C/C 转向JavaScript需要适应动态类型、垃圾回收和异步编程等特点。1)C/C 是静态类型语言,需手动管理内存,而JavaScript是动态类型,垃圾回收自动处理。2)C/C 需编译成机器码,JavaScript则为解释型语言。3)JavaScript引入闭包、原型链和Promise等概念,增强了灵活性和异步编程能力。

JavaScript在Web开发中的主要用途包括客户端交互、表单验证和异步通信。1)通过DOM操作实现动态内容更新和用户交互;2)在用户提交数据前进行客户端验证,提高用户体验;3)通过AJAX技术实现与服务器的无刷新通信。

JavaScript在现实世界中的应用包括前端和后端开发。1)通过构建TODO列表应用展示前端应用,涉及DOM操作和事件处理。2)通过Node.js和Express构建RESTfulAPI展示后端应用。

理解JavaScript引擎内部工作原理对开发者重要,因为它能帮助编写更高效的代码并理解性能瓶颈和优化策略。1)引擎的工作流程包括解析、编译和执行三个阶段;2)执行过程中,引擎会进行动态优化,如内联缓存和隐藏类;3)最佳实践包括避免全局变量、优化循环、使用const和let,以及避免过度使用闭包。

Python和JavaScript在社区、库和资源方面的对比各有优劣。1)Python社区友好,适合初学者,但前端开发资源不如JavaScript丰富。2)Python在数据科学和机器学习库方面强大,JavaScript则在前端开发库和框架上更胜一筹。3)两者的学习资源都丰富,但Python适合从官方文档开始,JavaScript则以MDNWebDocs为佳。选择应基于项目需求和个人兴趣。

Python和JavaScript在开发环境上的选择都很重要。1)Python的开发环境包括PyCharm、JupyterNotebook和Anaconda,适合数据科学和快速原型开发。2)JavaScript的开发环境包括Node.js、VSCode和Webpack,适用于前端和后端开发。根据项目需求选择合适的工具可以提高开发效率和项目成功率。
