<<代码大全>>阅读笔记之二 变量名的力量
1.变量命名的注意事项
1)可理解性
变量要望文知义,看到这个变量不用看其他的代码就知道这个变量表示什么意思
好的变量命:currentDate, heartRate
糟糕的变量名:newButton, peopleCnt
2)可读性
变量不仅要可理解,还要容易读,要是变量像这样:numberOfShitsInChinaMansFootballNationalTeam,太长了,会疯掉的
研究发现,变量名的长度在8~20各字符的长度时是易于调试的,因此上面的变量可以改为numShitsInTeam, 在可理解性和可读性之间做一个平衡
2.变量命对作用域的影响
短的变量名也不一定不好,像for i in healthInfos:,i代表一个临时的数据,作用域仅限制在这个for循环里面
研究表明:较长的名字适用于很少用到的变量或全局变量,而较短的名字适用于局部变量或者循环变量。
不过,短的变量命常常会带来一些麻烦,因此,作为一项防御式编程策略,应尽量避免使用短的变量名
3.变量名中的计算值限定词
代码里经常会出现表示计算结果的变量,总额、平均值、最大值、最小值等,要用total,average,max,min等限定词,那么请记住把限定词加在名字的最后。
这种方式的优点在于:
1)突出主要含义
对于revenueAverage,阅读者第一眼看到的是revenue,就知道这个变量表示的是收益;如果用averageRevenue,阅读者第一眼看到的是average,只知道这是平均值,是什么的平均值呢?不知道!这是因为在average和revenue里面,revenue是主体,表示主要含义,average只是修饰词,因此把主体放在前面,更有利于理解
2)增加一致性
如果之后还有类似的变量revenueTotal, revenueMax, revenueMin,expenseTotal, expenseMax,就会显得很工整
4.为特定类型的数据命名
1)为for循环中的变量命名
对于python的for循环,不要使用i,info等不表示具体含义的临时变量,因为这样阅读者无法根据变量名猜测变量的意义
好的示例:for health_info in health_infos
糟糕的示例:for i in health_infos
其中health_infos表示一个存储用户健康数据的数组,for health_info in health_infos阅读者一眼就能看出来health_info代表某一个用户的健康数据
2)为状态变量命名
不要使用单纯的flag来命名状态变量
CHECKLIST
1)变量名完整并准确地表达了变量所代表的含义吗?
2)变量名反映了现实世界的问题而不是编程语言方案吗?
3)变量名是否过长?
4)如果有计算限定词,它被放到变量名的后面了吗?
5)for循环中的变量名能表示具体含义吗?
6)命名规则能够区分局部数据、类的数据和全局数据吗?
7)所有单词的缩写方式一致吗?
<<代码大全>>阅读笔记之二 变量名的力量的更多相关文章
- <<代码大全>>阅读笔记之一 使用变量的一般事项
一.使用变量的一般事项 1.把变量引用局部化 变量应用局部化就是把变量的引用点尽可能集中在一起,这样做的目的是增加代码的可读性 衡量不同引用点靠近程度的一种方法是计算该变量的跨度(span) 示例 a ...
- [置顶] Linux协议栈代码阅读笔记(二)网络接口的配置
Linux协议栈代码阅读笔记(二)网络接口的配置 (基于linux-2.6.11) (一)用户态通过C库函数ioctl进行网络接口的配置 例如,知名的ifconfig程序,就是通过C库函数sys_io ...
- Linux协议栈代码阅读笔记(二)网络接口的配置
Linux协议栈代码阅读笔记(二)网络接口的配置 (基于linux-2.6.11) (一)用户态通过C库函数ioctl进行网络接口的配置 例如,知名的ifconfig程序,就是通过C库函数sys_io ...
- Hadoop阅读笔记(二)——利用MapReduce求平均数和去重
前言:圣诞节来了,我怎么能虚度光阴呢?!依稀记得,那一年,大家互赠贺卡,短短几行字,字字融化在心里:那一年,大家在水果市场,寻找那些最能代表自己心意的苹果香蕉梨,摸着冰冷的水果外皮,内心早已滚烫.这一 ...
- Apollo源码阅读笔记(二)
Apollo源码阅读笔记(二) 前面 分析了apollo配置设置到Spring的environment的过程,此文继续PropertySourcesProcessor.postProcessBeanF ...
- 《梦断代码Dreaming In Code》阅读笔记(二)
这段时间一口气读了5章,所以想着现在一块写阅读笔记. 在阅读的这段时间,我一直是晚上进行阅读,很多时候都是读完一看已经一个小时了,效果还不错.闲话不表,说说阅读心得. 关于底层语言或是低级语言,我之前 ...
- 【unix网络编程第三版】阅读笔记(二):套接字编程简介
unp第二章主要将了TCP和UDP的简介,这些在<TCP/IP详解>和<计算机网络>等书中有很多细致的讲解,可以参考本人的这篇博客[计算机网络 第五版]阅读笔记之五:运输层,这 ...
- 《大象Think in UML》阅读笔记之二
Think in UML阅读笔记(二) 上一次读到面向对象和面向过程的区别和各自的优势,结合实例分析了面向过程在面对大数据的时候,已经不足以满足人们的需求,所以引入了面向对象,面向对象的方法把世界看做 ...
- [代码]--ORA-01745: 无效的主机/绑定变量名 ORA-00917: 缺失的逗号 oracle日期格式错误
今天在oracle中执行插入语句的时候报了一个奇怪的错误,在程序中报的错误是ORA-01745: 无效的主机/绑定变量名,网上一查说是缺失逗号,在查询分析器执行的时候报缺失的逗号,仔细看了一下也没有缺 ...
随机推荐
- Java核心第五章继承
5.1类 超类(父类.基类) 子类(派生类) 使用关键字extends来继承 对于子类想访问父类的私有域,则必须要借助公有接口,在父类中的公有方法正是这样的接口 为了防止子类定义了与父类一样的成员函 ...
- 1.3.2 AQS 读写锁
1.读写锁原理 2.利用读写锁写一个安全的HashMap 读写锁原理 ReadWriteLock:维护一对关联锁,一个读锁一个写锁,读锁可以由多个线程同时获得,写锁只能被一个线程获得.同一时间,读锁和 ...
- 【AtCoder】AGC001
AGC001 A - BBQ Easy 从第\(2n - 1\)个隔一个加一下加到1即可 #include <bits/stdc++.h> #define fi first #define ...
- 缓存穿透 & 缓存雪崩 & 缓存击穿
一 缓存穿透 1. 行为 查询一个一定不存在的数据.存储层(姑且认为是db,下面都用db指代)查不到数据则不写入缓存,那么下次请求这个不存在的数据同样会到db层查询,失去了缓存的意义.流量大或人为恶意 ...
- Java各版本新特性总结
Java或者说JDK的更新一般分为两部分内容:Java语言.JVM(C.C++编写),但通常情况下都不会单独发布,因为新的语言特性需要特定的JVM支持才行.下面我总结了从古至今Java各版本的新 ...
- Photon Server 实现注册与登录(三) --- 前端UI设计和发起请求
一.打开之前的测试项目.先将服务端代码编译一下,在 bin/Debug/目录下会发现有一个Common.dill.我们相应导入到前端使用.直接拖拽到相应地方 UI相应布局属于前端操作,这里就不做介绍了 ...
- Redis 和 Memcached 各有什么优缺点,主要的应用场景是什么样的?
1.显示最新的项目列表 2.删除与过滤 3.排行榜相关 4.按照用户投票和时间排序 5.处理过期项目 6.计数 7.特定时间内的特定项目 8.实时分析正在发生的情况,用于数据统计与防止垃圾邮件等 9. ...
- python--关于正则表达式的学习小结
python中提供了re这个模块提供对正则表达式的支持. 一.正则表达式常用到的一些语法(并非全部): . 匹配任意单个字符 [...] 匹配单个字符集 \w 匹配单词字符,即[a-zA-Z0-9] ...
- python基础知识0-1
绝对值:abs age = -19 age.__abs__() 19 相加: add age.__add__() 与运算:and age.__add__() 比较两个数大小:cmp age._cmp_ ...
- mvc 登陆界面+后台代码
上代码 前端+js(懒得分文件了) @{ ViewBag.Title = "MVC权限系统架构学习-登录"; Layout = "/Views/Shared/_LoadJ ...