开发者需知:优秀程序设计的18大原则

UR10e+D435+ag95夹爪 gazebo 仿真记录(一) 学习仿真环境gazebo下利用UR10e机械臂搭建模拟平台,此博客用于记录搭建过程!!主要参考光头明明、总有一天全城的人都要高看我们和bug404_三位博主。最终自己功能包的主要参考了bug404_的ur_platform,感觉这个结构比较合理。运行环境:Ubuntu18.04+Ros-melodic+Gazebo9。 阅读详情

转自:http://tech.it168.com/a2011/0801/1225/000001225688.shtml

【IT168 评论】良好的编程原则与良好的设计工程原则密切相关。本文总结的这些设计原则,帮助开发者更有效率的编写代码,并帮助成为一名优秀的程序员。

  1.避免重复原则(DRY - Don’t repeat yourself)

  编程的最基本原则是避免重复。在程序代码中总会有很多结构体,如循环、函数、类等等。一旦你重复某个语句或概念,就会很容易形成一个抽象体。

  2.抽象原则(Abstraction Principle )

  与DRY原则相关。要记住,程序代码中每一个重要的功能,只能出现在源代码的一个位置。

  3.简单原则(Keep It Simple and Stupid )

  简单是软件设计的目标,简单的代码占用时间少,漏洞少,并且易于修改。

  4.避免创建你不要的代码 Avoid Creating a YAGNI (You aren’t going to need it)

  除非你需要它,否则别创建新功能。

  5.尽可能做可运行的最简单的事(Do the simplest thing that could possibly work)

  尽可能做可运行的最简单的事。在编程中,一定要保持简单原则。作为一名程序员不断的反思“如何在工作中做到简化呢?”这将有助于在设计中保持简单的路径。

  6.别让我思考(Don’t make me think )

  这是Steve Krug一本书的标题,同时也和编程有关。所编写的代码一定要易于读易于理解,这样别人才会欣赏,也能够给你提出合理化的建议。相反,若是繁杂难解的程序,其他人总是会避而远之的。

  7.开闭原则(Open/Closed Principle)

  你所编写的软件实体(类、模块、函数等)最好是开源的,这样别人可以拓展开发。不过,对于你的代码,得限定别人不得修改。换句话说,别人可以基于你的代码进行拓展编写,但却不能修改你的代码。

  8.代码维护(Write Code for the Maintainer)

  一个优秀的代码,应当使本人或是他人在将来都能够对它继续编写或维护。代码维护时,或许本人会比较容易,但对他人却比较麻烦。因此你写的代码要尽可能保证他人能够容易维护。用书中原话说“如果一个维护者不再继续维护你的代码,很可能他就有想杀了你的冲动。”

  9.最小惊讶原则(Principle of least astonishment)

  最小惊讶原则通常是在用户界面方面引用,但同样适用于编写的代码。代码应该尽可能减少让读者惊喜。也就是说,你编写的代码只需按照项目的要求来编写。其他华丽的功能就不必了,以免弄巧成拙。

  10.单一责任原则(Single Responsibility Principle)

  某个代码的功能,应该保证只有单一的明确的执行任务。

  11.低耦合原则(Minimize Coupling)

  代码的任何一个部分应该减少对其他区域代码的依赖关系。尽量不要使用共享参数。低耦合往往是完美结构系统和优秀设计的标志。

  12.最大限度凝聚原则(Maximize Cohesion)

  相似的功能代码应尽量放在一个部分。

  13.隐藏实现细节(Hide Implementation Details)

  隐藏实现细节原则,当其他功能部分发生变化时,能够尽可能降低对其他组件的影响。

  14.迪米特法则又叫作最少知识原则(Law of Demeter)

  该代码只和与其有直接关系的部分连接。(比如:该部分继承的类,包含的对象,参数传递的对象等)。

  15.避免过早优化(Avoid Premature Optimization)

  除非你的代码运行的比你想像中的要慢,否则别去优化。假如你真的想优化,就必须先想好如何用数据证明,它的速度变快了。

  “过早的优化是一切罪恶的根源”——Donald Knuth

  16.代码重用原则(Code Reuse is Good)

  重用代码能提高代码的可读性,缩短开发时间。

  17.关注点分离(Separation of Concerns)

  不同领域的功能,应该由不同的代码和最小重迭的模块组成。

  18.拥抱改变(Embrace Change)

  这是Kent Beck一本书的标题,同时也被认为是极限编程和敏捷方法的宗旨。

  许多其他原则都是基于这个概念的,即你应该积极面对变化。事实上,一些较老的编程原则如最小化耦合原则都是为了使代码能够容易变化。无论你是否是个极限编程者,基于这个原则去编写代码会让你的工作变得更有意义。

  作者简介:Christopher Diggins是加拿大一位有25年编程经验的资深技术人员,曾效力于Microsoft和Autodesk,并创办过两家赢利的互联网公司。

  他是《C++ Cookbook》的作者之一,并自己编写了一门编程语言Heron。

ACR 磁共振安全手册 2024 更新版:全面保障 MRI 安全实践 MR 环境:MR 系统周围的三维空间,包含法拉第屏蔽体积和 9 高斯线,医疗设备在此区域可能因暴露于 MR 设备产生的电磁场而构成危险,需进行访问控制以降低风险MR 受控访问区域:MR 系统周围的局部定义区域,包含 MR 环境(包括其静磁场),访问仅限于授权人员MR 抛射物区域:围绕 MRI 系统的 IV 区区域,铁磁物体在此有成为抛射物的风险图一 磁共振环境:场地规划与区域划分。 阅读详情

相关推荐

LT9611EX芯片实战:如何用双端口MIPI转HDMI1.4打造高清播放器(附配置代码)

本文详细介绍了如何使用龙迅半导体的LT9611EX芯片实现双端口MIPI转HDMI1.4的高清播放器开发。内容涵盖芯片特性、硬件设计要点、寄存器配置技巧及完整代码实现,特别适合嵌入式视频处理应用,如机顶盒和便携式媒体播放器。

weixin_29256771的博客 321

Ruby坚持最小惊讶( Least Astonishment)的原则

Ruby坚持最小惊讶( Least Astonishment)的原则

weixin_34175509的博客 484

冒险岛脚本函数大全:cm.sendYesNo和cm.warp的20个实战用法

本文深入解析了冒险岛脚本中cm.sendYesNo和cm.warp两个核心函数的20个实战应用场景。从基础的确认对话框交互、条件判断,到复杂的装备强化系统、动态传送与副本入口逻辑,文章通过大量代码示例展示了如何组合运用这两个函数,实现从简单NPC到复杂任务系统的进阶脚本开发,并分享了状态管理、错误处理与性能优化等最佳实践。

t4y5u6i7o的博客 1051

最小惊讶原则(POLA)

在这个糟糕的例子中,我们使用三个不同的动词(get、fetch、retrieve)来执行类似的操作。糟糕的示例将相似的参数放在不同的位置,使 api 变得混乱。好的示例保持了逻辑顺序:首先是标识符(userid/orderid),然后是主要数据(项目),最后是可选/元数据参数(日期)。这个很好的例子将其分为两个不同的方法,具有明确的名称和目的。这些实践中的每一种都有助于使代码更易于维护、更易于理解且不易出现错误,因为它的行为方式是开发人员基于 php 开发中的常见模式和约定所期望的方式。

电商数据代码站 680

Opencv实战:答题卡自动识别与评分系统(附完整代码解析)

本文详细介绍了如何使用OpenCV实现答题卡自动识别与评分系统,包含完整的代码解析。通过图像预处理、边缘检测、透视变换和答案识别等关键技术,系统能够快速准确地完成阅卷工作,适用于学校考试、资格认证等多种场景,大幅提升工作效率。

weixin_33737134的博客 415

STM32Cubemx-H7-17-麦克纳姆轮驱动

我们先看.h,知道哪些函数会有哪些功能和宏定义参数首先 是在.h的宏定义处定义引脚编号,比如tb6612控制方向的引脚,以及设定了哪个定时器作为pwm输出,还有编码计次的中断引脚/* 硬件相关宏定义 *//*1 前进方向往上 42 3*/// TB6612 方向引脚定义/* 定时器相关宏定义 *//* 编码器相关宏定义 */把自己的引脚根据原理图填对应,方向引脚也是,如果发现反转就把对应的引脚定义反过来,编码也是,编码我们用一个引脚就好,都在cubemx配置好。

m0_74211379的博客 1419

什么是最小惊讶原则?

最小惊讶原则要求系统行为符合用户预期,避免意外和困惑。核心是"事物应该以最不令人惊讶的方式工作",广泛应用于编程(函数命名、API设计)、UI设计(控件功能暗示)和产品设计(门把手方向)。遵循该原则能降低学习成本、减少错误、提升体验。实践方法包括了解用户、保持一致性、遵循标准、提供清晰反馈和用户测试。优秀设计应在不引起困惑的基础上创新。

weixin_56334307的博客 587

RealSense D455启动教程

RealSense D455启动教程 修改rs_camera.launch

每天进步一点点 2416

“最少惊讶”和可变默认参数

长时间修改Python的任何人都被以下问题咬伤(或弄成碎片): def foo(a=[]): a.append(5) return a Python新手希望此函数始终返回仅

asdfgh0077的博客 411

Windows下CMake编译VTK

选择项目INSTALL,生成该项目,得到vtk在Debug模式下的lib和dll文件,在文件夹中可看见,已得到debug模式下lib库与dll库。,把Value值设置为最后在vtk_sln中生成include、dll、lib的位置。在上面点击Configure后,红色区域没有了。选择自己vs编译平台的版本信息,我这边已经设置好了没有这个设置了,借用参考博客的图片。设置完后,点击左下角"Configure",然后等待Configure。,把搜索结果的Value勾选上。在search中搜索。

weixin_74239923的博客 841

vue3+ts+elementui-plus二次封装树形表格实现不同层级展开收起的功能

我只定义了三层数据,就只演示展开了三层,还可以多层,自己设置即可。

蜗牛~~ 2602

【课程设计】(附源码)Springboot+mysql+基于VUE框架的商城综合项目设计与实现 毕业设计111612

本商城综合项目采用的数据库是Mysql,使用java技术开发。在设计过程中,充分保证了系统代码的良好可读性、实用性、易扩展性、通用性、便于后期维护、操作方便以及页面简洁等特点。

Biye_Design的博客 4735

从零开始学习AI人工智能本体论:概念与实战

本文旨在为初学者提供一个全面而易于理解的人工智能本体论入门指南。我们将覆盖从基本概念到实际应用的全过程,帮助读者理解本体论在AI系统中的核心作用。核心概念与联系:介绍本体论的基本概念和原理核心算法与操作步骤:详细讲解本体构建和推理方法项目实战:通过实际案例展示本体论的应用实际应用场景:探讨本体论在不同领域的应用未来发展趋势:展望本体论在AI领域的前景本体论(Ontology): 在AI中,指对特定领域概念及其关系的明确形式化描述。

AI智能探索者的博客 864

CnOpenData 线上招聘网站信息数据

CnOpenData线上招聘网站信息数据库是一个覆盖中国主流招聘平台、时间跨度长、更新频率高的劳动力市场需求侧大数据集合。本数据库汇集了,为学术界和业界提供了一扇实时观察中国劳动力市场动态的窗口。

CnOpenData_wj的博客 2592

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

常见开发原则

保持简单,避免复杂性。

weixin_45566576的博客 1160

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

燕山大学——软件用户界面设计(七)更多的易学性

..

weixin_50533561的博客 2194

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

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

软件开发的核心原则

本文主要介绍了软件开发的多种核心原则,包括 DRY(不要重复自身)、KISS(保持简单)、YAGNI(只包含必需功能)、避免过早优化、完成胜于完美、选择最合适的等,还阐述了 SOLID 原则、奥卡姆剃刀、得墨忒耳定律、测量两次切割一次、最小惊讶原则等。这些原则能帮助开发者构建可靠高效的软件系统,实现工程目标。

SAP学习成长之路的博客 1713

C++最小惊讶原则

摘要: “最小惊讶原则”强调设计代码时应符合用户直觉,避免反常识行为。C++中符合该原则的例子包括基础语法(如&取地址)、类的默认构造/析构、容器操作(如vector::push_back);反例则有无符号溢出、迭代器失效、string[]越界等。开发者应通过清晰命名、合理运算符重载、避免隐式转换来遵循此原则,使代码“一看就懂,一用就对”,而非依赖特殊规则。该原则既是语言设计准则,也是编码最佳实践。

doubleintfloat的博客 398

微服务设计原则——易维护

不是随便一个功能就要有个接口。虽然一个接口应该只专注一件事,但并不是每一个功能都要新建一个接口。要有充分的理由和考虑,即这个接口的存在是十分有意义和价值的。无意义的接口不仅浪费开发人力,更增加了服务的维护难度,服务将会十分臃肿。相关功能我们应该考虑合为一个接口来实现。

Doublelv 的博客专栏。 1148
上一篇: 同步时间脚本
下一篇: 9个重要习惯 极大提升工作和时间效率
ArvinStudy
博客等级 码龄15年 83粉丝 193原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值