代码里的命名规则:错误的和正确的对比

代码编程规范(一)命名风格 (一) 命名风格 1. 【强制】代码中的命名均不能以下划线或美元符号开始,也不能以下划线或美元符号结束。 反例:_name / __name / $name / name_ / name$ / name__ 2. 【强制】所有编程相关的命名严禁使用拼音与英文混合的方式,更不允许直接使用中文的方式。 说明:正确的英文拼写和语法可以让阅读者易于理解,避免歧义。注意,纯拼音命名方式更要避免采用。 正例:ali / alibaba / taobao / cainiao/ aliyun/ youk 阅读详情

Step-1

  英文原文:Express names in code: Bad vs Clean

  编程初学者总是把大量的时间用在学习编程语言、语法、技巧和编程工具的使用上。他们认为,如果掌握了这些技术技巧,他们就能成为不错的程序员。然而,计算机编程的目的并不是关于精通这些技术、工具的,它是关于针对特定领域里的特定问题创造出相应的解决方案,程序员通过相互合作来实现这些。所以,很重要的一点,你需要能精确的用代码表达出你的思想,让其他人通过代码能明白你的意图。

  让我们先看看编程大师 Robert C. Martin 的杰作《Clean Code》里的一句话:

注释的目的是为了弥补代码自身在表达上的不足。

  这句话可以简单的理解为如果你的代码需要注释,最有可能是你的代码写的很烂。同样,如果在没有注释的情况下你无法用代码完整的表达你对一个问题或一个算法的思路,那这就是一个失败的信号。最终,这意味着你需要用注释来阐明一部分的思想,而这部分在代码里是看不出来的。好的代码能够让任何人在不需要任何注释的情况下看懂。好的编码风格能将所有有助于理解这个问题的所有信息都蕴含在代码里。

  在编程理论中,有一个概念叫做“自我描述的源代码”。对于一段代码,一种常见的自我描述机制是遵循某种非严格定义的变量、方法、对象命名规则。这样做的主要作用就是使源代码更易读易懂。所以,也就更容易维护和扩展。

  这篇文章里,我将举出一些例子,说明什么是“不好的代码”,什么是“清楚的代码”

  命名要能揭示意图

  如何命名,在编程中这永远都是个老大难问题。有些程序员喜欢简化、缩短或加密名称,使得只有他们自己能懂。下面让我们看一些例子:

  不好的代码:

int d;
// 天数 int ds;
int dsm;
int faid;

  “d”可以表示任何东西。作者使用注释来表明他的意图,却没有选择用代码来表示。而“faid”很容易导致误解为ID。

  清楚的代码:

int elapsedTimeInDays;
int daysSinceCreation;
int daysSinceModification;
int fileAgeInDays;

  命名时避免含义引起误解的信息

  错误的信息比没有信息更糟糕。有些程序员喜欢“隐藏”一些重要信息,有时候他们也会写出一些让人误解的代码。

  不好的代码:

Customer[] customerList;
Table theTable;

  变量“customerList”其实不是个 list。它是一个普通的 array (或客户集合)。除此之外,“theTable”是一个 Table 类型的对象(你可以用 IDE 容易的发现它的类型),“the”这个词是个不必要的干扰。

  清楚的代码:

Customer[] customers;
Table table;

  命名要有合适的长度

  在高级编程语言中,变量名的长度通常不太限制。变量名几乎可以任何长度。虽然如此,这也可能使代码变得闹心。

  不好的代码:

var theCustomersListWithAllCustomersIncludedWithoutFilter;
var list;

  好的名称应该只含有必要的词汇来表达一个概念。任何不必要的字词都会使名称变长、难于理解。名称越短越好,前提是能在上下文中表达完整的意思(下订单这个场景中,“customersInOrder” 要比 “list” 好)。

  清楚的代码:

var allCustomers;
var customersInOrder;

  命名时编码规范保持一致,让规范帮助理解代码

  所有的编程技术(语言)都有自己的“风格”,叫做编码规范。程序员应该在写代码时遵循这些习惯,因为其他的程序员也知道这些,并按这种风格编写。下面我们看一个没有明显规范的不好的代码例子。下面的这段代码没有遵循很好的已知的“编码规范”(比如 PascalCase, camelCase, Hungarian 规范)。更糟糕的是,这有一个毫无意义的 bool 变量“change”。这是个动词(用来描述动作),但这里的 bool 值是来描述一个状态,所以,这里应该用一个形容词更合适。

  不好的代码:

const int maxcount = 1
bool change = true
public interface Repository
private string NAME
public class personaddress
void getallorders()

  一段代码,只看它的一部分,你就应该直接明白它是什么类型,只需要看它的命名方法。

  例如:你看到了“_name”,你就能知道它是个私有变量。你应该在任何地方都利用这种表示方法,没有例外情况。

  清楚的代码:

const int MAXCOUNT = 1
bool isChanged = true
public interface IRepository
private string _name
public class PersonAddress
void GetAllOrders()

  命名时相同的概念用相同的词表达

  定义概念很难。在软件开发过程中,很多时间都花在分析业务场景、思考正确的定义里面所有的元素。这些概念永远都是让程序员头痛的事。

  不好的代码:

//1. void LoadSingleData ()
void FetchDataFiltered ()
Void GetAllData ()
//2. void SetDataToView ();
void SetObjectValue (int value)

  首先:

  代码的作者试图表达“get the data”的概念,他使用了多个词“load”,“getch”,“get”。一个概念只用一个词表达就行了(在同一个场景中)。

  第二:

  “set”这个词用在了 2 个概念里:第一是“data loading to view”,第二个是“setting a value of object”。这是两个不同的概念,你应该使用不同的词。

  清楚的代码:

//1. void GetSingleData ()
void GetDataFiltered ()
Void GetAllData ()
//2. void LoadDataToView ();
void SetObjectValue (int value)

  命名时使用跟业务领域相关的词

  程序员写的所有代码都是跟业务领域场景逻辑相连的。为了让所有关系到这个问题的人都能更好的理解,程序中应该使用在领域环境中有意义的名称。

  不好的代码:

public class EntitiesRelation
{
Entity o1;
Entity o2;
}

  当在编写针对某个领域的代码时,你应该始终考虑使用领域有联系的名称。在将来,当另外一个人(不仅是程序员,也许是测试人员)接触你的代码时,他能轻松的理解这个业务领域里你的代码是什么意思(不需要业务逻辑知识)。你首先考虑的应该是业务问题,之后才是如何解决。

  清楚的代码:

public class ProductWithCategory
{
Entity product;
Entity category;
}

  命名时使用在特定环境里有意义的词

  代码里名称都有自己的上下文。上下文对于理解一个名称非常重要,因为它能提供额外的信息。让我们来看看一个典型的“地址”上下文:

  不好的代码:

string addressCity;
string addressHomeNumber;
string addressPostCode;

  在大多数情况中,“Post Code”通常是地址的一部分,很显然,邮政编码不能单独使用(除非你是在开发一个专门处理邮编的应用)。所以,没有必要在“PostCode”的前面加上“address”。更重要的,所以的这些信息都有一个上下文容环境,一个命名空间,一个类。

  在面向对象编程中,这里应该用一个“Address”类来表达这个地址信息。

  清楚的代码:

class Address
{
string city;
string homeNumber;
string postCode;
}

  命名方法总结

  概述起来,做为一个程序员,你应该:

  • 命名是来表达概念的
  • 注意名称长度,名称里只该含有必要的词语
  • 编码规范有助于理解代码,你应该使用它
  • 名称不要混用
  • 名称在业务领域里要有意义,在上下文里有意义

  请随便发表你的意见。如果你知道在命名或代码表达方面的其它问题,请写在下面的评论里。

VTK-9.5.0 1D2D3DWidget实现灰度图+深度图+3D点云显示(可轻松集成到自己的项目) VTK1D2D3DWidget是一个基于Qt和VTK开发的3D点云可视化工具,支持RGB和深度点云数据的显示与处理。主要功能包括点云加载、可视化、保存为PLY格式文件,以及背景颜色、点间隔、坐标轴显示等参数的自定义设置。该工具采用模块化设计,核心组件包括主窗口管理类、VTK渲染组件和自定义鼠标交互样式,依赖Qt5+和VTK9.5.0库实现跨平台支持。项目提供完整的源码和构建指南,适用于点云数据的快速展示与分析。 阅读详情

相关推荐

LabVIEW实战:3步搞定Excel模板数据填充(附完整VI源码)

本文提供了一个高效的LabVIEW Excel报表自动化方案,通过使用命名区域定位和动态文件管理,实现数据的精准、动态填充。文章详细阐述了如何构建可复用的数据填充引擎,包括文本、表格数据及图表的写入,并分享了主程序流程、错误处理及性能优化等进阶技巧,帮助工程师彻底摆脱手动操作,提升工作效率。

weixin_29233333的博客 276

目录遍历漏洞深度剖析:从原理到实战绕过与防御

目录遍历漏洞(Directory Traversal)是一种经典的Web安全漏洞,其核心原理在于应用程序过度信任用户输入,未对文件路径参数进行充分净化与校验,导致攻击者可通过构造特殊路径序列(如`../`)突破预设访问边界,访问服务器文件系统中的任意文件。该漏洞技术价值在于其利用简单但危害深远,常作为渗透测试和CTF比赛中的基础考点,能有效检验系统安全防护的成熟度。在应用场景上,目录遍历不仅可导致敏感信息泄露(如配置文件、用户凭证),还可能结合文件上传等功能实现远程代码执行,甚至成为权限提升的跳板。本文聚焦

299

2026零成本私有化:OpenClaw一键搭建Discord/Telegram智能机器人,数据不出本地,永久免费替代ChatGPT

如果内置的功能不能满足你的需求,你可以很容易地添加自己的自定义工具。public string Description => "查询指定城市的天气";// 调用天气API获取天气信息return $"city今天的天气是晴,温度25度";// 注册工具今天北京的天气怎么样?大模型的选择很重要:不要盲目追求大参数的模型。对于大多数场景来说,7B参数的模型已经足够用了,而且速度快,内存占用低。上下文长度不要设置太大:上下文长度越大,内存占用越高,推理速度越慢。

2601_94871597的博客 259

自己编写错误代码的规范

如: #define ERRCODE_BASE 0x0505000   0~15位:异常代码 由Microsoft/客户定义 16~27位:设备代码,由Microsoft定义 28位:保留,必须为0 29位:0=Microsoft定义代码 1=客户定义代码 30~31位:(严重性) 0=成功 1=供参考 2=警告 3=错误   enum VORX_ERRCODE {

记得评论哦 3915

论文学习| PoseDiffusion: 通过扩散辅助的束调整解决姿态估计问题

解决的问题:相机姿态估计,这是计算机视觉中的一个经典问题。提出的方法:一种新的方法,PoseDiffusion,它将Structure from Motion(SfM,从运动中构建结构)问题整合到概率扩散框架中。优势模拟捆绑调整的迭代过程。整合来自极线几何的几何约束。在具有挑战性的场景中(如视角稀疏、基线宽的情况)表现良好。能够为多张图片预测内外参。结果:在现实世界数据集上,PoseDiffusion超越了经典的SfM管道和学习型方法,在不同数据集上具有跨数据集的泛化能力,无需进一步训练。

麻辣小香郭的博客 1990

VisDrone2019数据集实战:从下载到YOLO格式转换的完整指南

本文提供了一份完整的VisDrone2019数据集实战指南,详细介绍了从数据集下载、理解其独特的标注格式,到转换为YOLO模型可直接训练格式的全过程。通过清晰的代码示例和步骤讲解,帮助读者掌握处理复杂无人机视觉数据集的核心技能,为基于YOLO的目标检测模型训练做好准备。

weixin_29165725的博客 384

[转载]代码里的命名规则:错误的和正确的对比

编程初学者总是把大量的时间用在学习编程语言、语法、技巧和编程工具的使用上。他们认为,如果掌握了这些技术技巧,他们就能成为不错的程序员。然而,计算机编程的目的并不是关于精通这些技术、工具的,它是关于针对特定领域里的特定问题创造出相应的解决方案,程序员通过相互合作来实现这些。所以,很重要的一点,你需要能精确的用代码表达出你的思想,让其他人通过代码能明白你的意图。   让我们先看看编程大师 Rober...

weixin_30586257的博客 157

不用Root!这些隐藏代码能一键开启安卓诊断端口(小米/OPPO/魅族机型实测)

本文提供了一份无需Root权限即可开启安卓手机诊断端口的实用指南。通过拨号盘输入特定隐藏代码,小米、OPPO、魅族等机型的用户可以一键激活此工程模式,从而连接电脑进行基带数据备份(如QCN文件)或故障排查。文章详细列出了各品牌指令、操作验证步骤,并强调了备份IMEI等关键数据的重要性与操作风险,旨在帮助用户在紧急情况下修复网络问题。

weixin_29260291的博客 273

错误码的命名规范

错误码的命名规范 A-BB-CCC的形式 A:表示错误的级别 BB:表示项目的编码 CCC:表示错误的编码,自增即可

GetcharZp的博客 1240

RT-Thread Studio与CubeMX联合编程(超级详细)

RT-Thread Studio与CubeMX联合编程 本文章参考以下文章: https://blog.youkuaiyun.com/qq_40824852/article/details/122596043 https://zhuanlan.zhihu.com/p/395106066 https://blog.youkuaiyun.com/m0_37697335/article/details/108890584 一、简介 经过上次对RT-Thread Studio的初步尝试,发现RT-Thread Studio中存在官方支

zhuzhu的博客 3万+

vue3 web项目引入高拍仪

高拍仪的引入步骤就两步,安装SDK,然后根据官网的api进行开发。根据自己需要的功能,请求对应的接口。

qq_42480170的博客 4116

系统错误码定义规则

一、定义错误异常类 /** * @author yunpeng.zhao * @version $Id TestException.java, v 0.1 2018-08-01 下午1:51 yunpeng.zhao Exp $$ */ public class TestException extends RuntimeException{ private static fina...

yunpeng456的专栏 7364

《UDS协议从入门到精通》系列——图解0x2E:通过ID写数据

图解数据包格式+直观的通信示例,迅速认识0x2E服务!!

车载系统攻城狮 3602

文件上传漏洞攻防全解析:从一句话木马构造到立体防御体系构建

文件上传是Web应用中的基础功能,其核心原理是允许用户将本地文件传输至服务器存储。然而,若服务器对上传文件缺乏严格验证,攻击者便可利用此机制上传恶意脚本,从而引发严重安全风险。从技术价值看,安全的上传功能是保障Web应用数据完整性与系统可控性的关键。在应用场景中,用户头像、文档分享等均依赖于此功能。本文聚焦于文件上传漏洞这一常见高危威胁,深入剖析攻击者如何利用**一句话木马**实现远程控制,并探讨如何通过**白名单校验**、文件内容检测、目录隔离等代码层与架构层措施,构建纵深防御体系,有效应对包括解析漏洞、

weixin_33912638的博客 394

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

java错误代码命名_java命名规范

一、命名规范1、 项目名全部小写2、 包名全部小写3、 类名首字母大写,如果类名由多个单词组成,每个单词的首字母都要大写。如:public class MyFirstClass{}4、 变量名、方法名首字母小写,如果名称由多个单词组成,每个单词的首字母都要大写。如:int index=0;public void toString(){}5、 常量名全部大写如:public static final...

weixin_29485605的博客 643

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

Micrium代码规范——命名规则

Micrium公司是著名的RTOS——μC/OS的提供商。μC/OS在实时嵌入式领域应用非常广泛,而且其代码符合MISRA-2004规范,因此非常值得汽车嵌入式工程师借鉴与参考。 采用良好的代码规范可以大大提高软件的维护性和可读性。代码规范没有唯一标准,坚持一贯的代码风格才是王道。 本文翻译了Micrium的代码规范,作为平时开发的参考文档。

汽车 · 软件 · 生活 1179

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

代码中的命名

代码中的命名 周伟光 2012-10-15   子曰:名不正则言不顺。          提到代码里面的命名,大家首先想到匈牙利命名法,骆驼命名法,.net命名规范,C/C++命名规范等。而本文中的命名,主要解决代码可读性的问题。       Bad Small        当我接手一个新系统的时候,命名不规范让我十分头疼,改也不是,不改也不是。最好的结果就是,大家都能注意

juwikuang的专栏 1636

C++期末错题复习(选择题)(2)

1、下面有关重载函数的说法中正确的是( C )。 A. 重载函数必须具有不同的返回值类型 B. 重载函数形参个数必须不同 C. 重载函数必须有不同的形参列表 D. 重载函数名可以不同 2、函数定义为Fun(int &n),变量定义int x =20 ,则下面调用正确的是( C )。 A. Fun(20) B. Fun(20 + x) C. Fun(x...

Laic Zhang的博客 1万+

代码规范

一. 代码规范的重要性 有助于团队合作 减少BUG处理 降低维护成本 有助于代码审查 养成规范代码的习惯,有助于程序员自身的成长 毋庸置疑的是随着团队的发展、规范化,良好的代码规范能体现的好处会越来越明显,提升工作效率、提高代码质量等等… 二. 核心原则 原则一:代码应该简洁易懂,逻辑清晰 因为软件是需要人来维护的。这个人在未来很可能不是你。所以首先是为人编写程序,其次才是计算机: 不要过分追求...

hy521lei的博客 461

HTTP错误code大全

100 - Continue 101 - Switching Protocols Top Success Codes 200 - OK 201 - Created 202 - Accepted 203 - Non-Authoritative Information (for DNS) 204 - No Content 205 - Reset Content 206 - Pa...

weixin_33742618的博客 632

Java编程中常见异常有哪些?

Java编程中常见异常有哪些? 【导语】在进行Java编程的过程中,我们需要通过代码编写进行程序的运行,都是人工进行代码编写,所以会出现不少异常现象,这都是属于正常现象,但是遇到这些异常现象是需要大家了解并学会处理的,今天就先给大家介绍一下Java编程中常见异常有哪些?一起来看看吧。 Java中常见的异常: 1、空指针异常类:NullPointerException 2、数据类型转换异常:java.lang.ClassCastException 3、没有访问权限:java.lang.IllegalAcces

qq_38397646的博客 3931

代码为什么需要遵循规范,来看看µC/OS代码规范

素材来源:micrium编辑整理:strongerHuang开发过项目的工程师都知道,一个好的项目,代码基本都有统一的规范,否则代码就会随着版本迭代,变得越来越臃肿。代码规范应在项目早期...

1408

老码农冒死揭开行业黑幕:如何编写无法维护的代码

【程序员的那些事 注】:这是一篇非常经典的文章,我们以前发过多次。虽然部分内容是针对 Java 语言,但其他部分对所有编程语言都有参考意义。今天重新推荐给新读者朋友,老朋友也值得重温。编...

小詹学python的博客 3063

三种编程命名规范(匈牙利命名法、驼峰式命名法、帕斯卡命名法)

1 . 匈牙利命名: 开头字母用变量类型的缩写,其余部分用变量的英文或英文的缩写,要求单词第一个字母大写。 ex: int iMyAge; “i”是int类型的缩写; char cMyName[10]; “c”是char类型的缩写; float fManHeight; “f”是float类型的缩写; 其他: 前缀类型 a b by c cb cr cx,cy dw fn h i l...

逐梦者 7万+
上一篇: SQLITE数据表主键设置Id自增方法
下一篇: 忠告:不要在愚蠢时间写代码
cll131421
博客等级 码龄19年 68粉丝 25原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值