自己总结的C#编码规范--2.命名选择篇
上一篇文章讲了标识符命名的约定,今天讲下标识符命名的选择。
简单的讲,看到一个标识符一定要可以见名知意。
名字一定要能够表达出标识符的含意
标识符名字必须要表达出该标识符的意义,绝对不可以使用无意义的v1,v2…vn之类的命名。
public static void CloneChars(char[] cl1, char[] cl2)
{
for (var i = 0; i < cl1.Count(); i++)
{
cl2[i] = cl1[i];
}
}
代码的调用者不看这函数是无法知道cl1还是cl2是要拷贝的char数组,他必须进到这个函数去看完整个逻辑才可以调用。而且在看的过程中cl2[i] = cl1[i]; 也需要他花几秒钟来思考是做什么的。
如果改成有意义的名字: source 和target那么这个方法调用者一看名字就知道使用方法了。
public static void CloneChars(char[] source, char[] target)
{
for (var i = 0; i < source.Count(); i++)
{
target[i] = source[i];
}
}
选择意义单一明确的名字
在命名时要使用专业的单词,避免使用"空洞"的单词
如: class BinaryTree
{
public int Size()
看到这行代码你想到Size会返回什么,树的高度,节点数还是树在内存中的空间?
我们可以使用更单一明确的词来告诉读者这个方法的具体含义,如Height,NodesNum,Memory_Bytes
使用不会产生歧义的名字

在给标识符命名时,一定不能产生歧义,代码中的很多错误都是由于命名时的歧义造成的。例如:
public const int CART_TOO_BIG_LIMIT = 10;
if (ShoppingCart.Count() >= CART_TOO_BIG_LIMIT)
{
LogError("Too many items in cart.");
}
这段代码有个很经典的"大小差一缺陷"。在判断购物车物品上限时,我是应该使用 ">"还是应该使用">=",我是无法从代码中判断出来的,所以这个地方很容易出现bug.如果我们换成MAX_ITEMS_IN_CART, 那我马上就可以判定出这里要使用">"。
命名要与使用者的期望相匹配
有些名字之所以会让人误解是因为带吗阅读者对它们有先入为主的印象,就算你本意并非如此。这种情况下,你最好是选用一个与使用者期望所匹配的名字。
如很多程序员都习惯了把Get开始的方法当作"轻量级访问器",他只是简单的返回成员变量。
大家看到以下的代码
class BinaryTree
{
public int GetNodesCount()
会以为只是返回内部private int _nodesCount; 私有变量的访问器。
但如果实际你的代码可能是一个非常耗时的代码,内部实现是广度优先遍历所有的树节点,还要去数据库查找父节点和子节点的关系,然后累加。
那么这么一个耗时的方法可能由于你的命名,导致了被调用者反复多次的调用,导致整个系统性能下降。
如果你将命名改为ComputeNodesCount那么调用者就会知道这是个耗时的操作,需要缓存调用结果并减少调用。
为名字附加更多的信息

一个变量名就像一个小注释,尽管空间不大,但不管你在命中挤进任何额外的信息,每次有人看到命名时都会看到这些信息。
例子:当你从网页接收了请求的表单,里面可能还有不安全的代码,如注入语句等,这时你在命名时需要体现该数据不安全,可以使用unsafeFormData,当调用完安全检查方法后可以将其改为 safeFormData = HandleUnsafeData(unsafeFormData).这样代码阅读者就知道可以放心的使用该变量了。
下表给出了更多需要给名字附加额外信息的例子

不要卖弄风骚
使用最常用,众所周知的单词。不要在代码命名时卖弄你的学识,要让你的代码快速准确的表达出你的想法才是真正的牛人。
如public static string ConvertXml2Html (string sourcePath)
有些人在看到这个方法的时候怎么想也想不明白这个2是做什么用的,是把一个Xml文件变成两个Html?
熟悉英语文化的人可能知道这是To的俚语表达。如果你不能保证所有阅读你代码的人都知道2是To的缩写。那么请使用ConvertXmlToHtml命名。
自己总结的C#编码规范--2.命名选择篇的更多相关文章
- 浅谈Android编码规范及命名规范
前言: 目前工作负责两个医疗APP项目的开发,同时使用LeanCloud进行云端配合开发,完全单挑. 现大框架已经完成,正在进行细节模块上的开发 抽空总结一下Android项目的开发规范:1.编码规范 ...
- Swift— Swift编码规范之命名规范-备
程序代码中到处都是自己定义的名字,取一个有样并且符合规范的名字非常重要. 命名方法很多,但是比较有名的,广泛接受命名法有: 匈牙利命名,一般只是命名变量,原则是:变量名=类型前缀+描述,如bFoo表示 ...
- C# 编码规范、命名规则
1 规范目的 ……………………………………………………… 3 2 适用范围 ……………………………………………………… 3 3 代码注释 ……………………………………………………… 3 3.1 ...
- 《从零开始学Swift》学习笔记(Day 56)——命名规范Swift编码规范之命名规范
原创文章,欢迎转载.转载请注明:关东升的博客 程序代码中到处都是自己定义的名字,取一个有样并且符合规范的名字非常重要. 命名方法很多,但是比较有名的,广泛接受命名法有: 匈牙利命名,一般只是命名变量, ...
- 《从零開始学Swift》学习笔记(Day 56)—— Swift编码规范之命名规范
原创文章,欢迎转载.转载请注明:关东升的博客 程序代码中到处都是自定义的名字,取一个有样而且符合规范的名字非常重要. 命名方法非常多,可是比較有名的,广泛接受命名法有: 匈牙利命名,一般仅仅是命名变量 ...
- 这套C#编码规范写不错
自己总结的C#编码规范--1.命名约定篇:http://www.cnblogs.com/luzhihua55/p/CodingConventions1.html 自己总结的C#编码规范--2.命名选择 ...
- 自己总结的C#编码规范--7.文档下载 & 总结
今天终于把这一系列的编码规范写完了,这个编码规范算上前面阅读相关书籍,前前后后总共花了一个月的时间,也算是个人的呕心沥血之作了. 本来也没打算把这个系列写的这么长,但是在写的过程中自己搜了相关的网上资 ...
- 自己总结的C#编码规范--前言&目录
最近在为公司编写c#编码规范,以前对这方面研究不多,只是觉得代码能够出自己的意思就可以了. 我参考了以下资料 C# Coding Conventions NET设计规范约定惯用法与模式(第2版) 编写 ...
- JAVA 基本概念和编码规范
概括性描述:一个Java程序可以认为是一系列对象的集合,而这些对象通过调用彼此的方法来协同工作. 基本概念: 下面简要介绍下类.对象.方法和属性的概念. 对象:对象是类的一个实例,有状态和行为.例如, ...
随机推荐
- phpstudy添加redis扩展
操作系统 windows: 直接贴步骤记录下 一. 划重点,运行phpinfo(), 观察第四行 x86 好了记住这个 x86 三. http://pecl.php.net/pa ...
- webpack2配置备份
package.json: { "name": "leyi", "version": "1.0.0", "ma ...
- 使用gulp进行代码压缩
gulp是一个很不错的前端自动化工具,可以帮我们完成一些重复性操作,比如html.css和js代码的压缩.合并.混淆等,虽然这些操作可以通过一些在线工具帮我们实现,但不断重复地复制粘贴肯定比不上一句命 ...
- poj2836 状态压缩dp
自己的做法是枚举i,j作为顶点的矩形,然后再更新状态S,但是这种做法是错误的 正解是先把所有矩形对求出来,然后枚举状态S,每个处理每个状态时再枚举已经求出的矩形对,用旧状态更新新状态 #include ...
- CF451E
一道不错的题,对排列组合能力的要求较高 题意:给定s个相同的小球放在n个不同的盒子里,可以不放,每个盒子有一个放的上限,求一共有多少种放法 解析:首先考虑没有上限的情况,这里比较好解决,采用隔板法,可 ...
- name
问题 A: name 时间限制: 1 Sec 内存限制: 256 MB 题目描述 lpq同学最近突然对外国人的名字产生了兴趣,特别是外国女生的名字,于是他开始试图去认识一些国外的女生. 随着认识的女 ...
- C++ shut down a computer
前阵子有朋友问我,怎么用C语言写一个小程序,控制电脑关机.这个我真的不懂,这几天闲着,就上网搜了搜,整理一下. IDE: Code::Blocks 16.01 操作系统:Windows 7 x64 # ...
- appium 手势
1.2 appium玩转安卓手机 智能手机发展到今天,形成了一整套有关手势操作的操作习惯,如手指左右上下滑动,及双指缩放,还有手指的滑动解锁,摇晃手机等动作.那么我们怎么在python中利用appiu ...
- asp.net core 自定义404等友好错误页面
Home控制器里: [Route("Home/Error/{statusCode}")] public IActionResult Error(int statusCode) { ...
- Idea和PyCharm激活破解
1. 先去百度去官网下载专业版IDE, Idea 和PyCharm激活方法一样 2. 下载破解包, 点击下载 3. 将下载的jar包放到这个安装目录的bin目录下面 4. 在bin目录下面的文件pyc ...