代码整洁之道—变量名

简介: 软件中随处可见命名,我们给变量,函数,参数,类,包。给源代码及源代码目录命名,给jar文件,war文件,ear文件命名,我们命名,命名,不断命名。既然有这么多命名,那么我们就有必要做好它。

软件中随处可见命名,我们给变量,函数,参数,类,包。给源代码及源代码目录命名,给jar文件,war文件,ear文件命名,我们命名,命名,不断命名。既然有这么多命名,那么我们就有必要做好它。

选个好名字要花时间,但是节省下来的时间比花掉的多。注意,一旦有好的命名,就要替换掉原本旧的名称。认真对待每个变量名,你当用自己第一个孩子般的谨慎给变量命名。

给变量命名是开发的基础,看起来是小事,然成败在于细节之中,不要忽视它的重要性。

基本的命名法则

  • 不要定义一些与系统名称相冲突的变量名,比如定义数据库的order字段会报错。
  • 不要定义太长的变量名,比如XYZControllerForEfficientHandingOfStringsXYZControllerForEfficientStorageOfStrings区分起来的麻烦
  • 类名一般是名词,方法名一般是动词
  • 避免留下掩盖代码本意的错误线索,避免使用与本意相悖的词。
  • 尽量见名知意

做有意义的区分

废话是一种没意义的区分,假设你有一个Product类,如果还有一个ProductData和ProductInfo类,它们的名称虽然有区别,但是意思却无区别,info和data就像a,an和the一样,是意义含混的 废话。

如果缺少明确约定,变量moneyAmount就与money没区别,cusomerInfo与customer没区别,accountData与account没区别,theMessage与message没区别,要区分名称,就要以读者能鉴别不同之处的地方区分。

每个概念对应一个词

比如fetch,get,retrieve代表的都是获得的意思,但是如果在表达获得的时候三者混着使用,在当前文件的获得使用的是get,下个文件获得使用的是fetch,这样就容易造成混淆。

假设其余人看到你的程序,若同一个概念你使用的是同一个词,那么对自己对他人都是一种帮助。

避免思维映射

不要让读你代码的人把你所命名的变量在头脑中转换为另外一种概念。

单字母变量就是个问题,在作用域小,也没有名称冲突时,循环计数器,自然有可能被命名为i,j,k,这是因为传统上惯用单字母名称做循环计数器。
然而在多数情况下,单字母名称不是个好的选择,读的人必须要把它在脑中转换为真实的概念。

在你使用单字母做为变量的时候,在搜索这个名称的时候就出现了问题, 太多单词都会包含你所定义变量名的字母。

普通聪明程序员和专业程序员的区别在于,专业程序员了解到,明确才是王道

语境

添加有意义的语境,不要添加没有意义的语境。

设想你有名为firstName、lasiName、street、houseNu田ber、city·state和zipcode的变量。当它们在一块儿的时候,很明确是构成了一个地址。不过,如果只是在某个方法中看见孤零零一个state变量昵?你会理所当然推断那是某个地址的一部分吗?

可以添加前缀addrFirstName、addrLastName、addrstate等,以此提供语境。至少,读者会明白这些变量是某个更大结构的一部分。当然,更好的方案是创建名为Address的类。这样,即便是编译器也会知道这些变量隶属某个更大的概念了。

所谓不要添加无意义的语境,当你的名字也许短小,但是足够清楚的表达你想表达的意思的时候,就无需添加额外的语境。

Address是个好名称,不过若与Mac地址,端口地址,Web地址区别,可以考虑使用PostalAdress,MAC,URI来区别,因为大家虽代表的是地址,但意思上还是有区别的。

最后

这里没有展示案例,纯理论看起来理解起来相对费力一些,建议购买《代码整洁之道》

让自己的代码更好,通往编程大神之路。

相关文章
npm如何切换淘宝源镜像
npm如何切换淘宝源镜像
4184 0
【Vite】Vite设置好了Proxy,但接口却404!解决方案来了!
前言 最近在做一个Vue3+Vite+TypeScript的项目,进行一番网上冲浪后,参考了众多🐴友的方案,配置完vite.config.ts准备开始与后端的同学开始联调,发现无论怎么样都是404,然后就开始了一步步的排查!
6207 0
|
JavaScript 前端开发 API
深入解析JavaScript Generator 生成器的概念及应用场景
本文讲解了JS生成器的概念和应用场景。生成器是一个可以暂停和恢复执行的函数。利用生成器我们可以很方便地实现自定义的可迭代对象、状态机、惰性计算等,并且还能用它来简化我们的异步操作代码。
824 0
|
数据采集 XML 前端开发
react的优缺点
react的优缺点
|
Web App开发 缓存 安全
面试官:说说你对options请求的理解
什么是 options 请求 我们可以看下 MDN 中的一段描述: HTTP 的 OPTIONS 方法 用于获取目的资源所支持的通信选项。客户端可以对特定的 URL 使用 OPTIONS 方法,也可以对整站(通过将 URL 设置为“*”)使用该方法。” 简单来说,就是可以用 options 请求去嗅探某个请求在对应的服务器中都支持哪种请求方法。 其实,这是因为在跨域的情况下,在浏览器发起"复杂请求"时主动发起的。跨域共享标准规范要求,对那些可能对服务器数据产生副作用的 HTTP 请求方法(特别是 GET 以外的 HTTP 请求,或者搭配某些 MIME 类型的 POST 请求).
面试官:说说你对options请求的理解
|
小程序 JavaScript 前端开发
小程序实现滚动加载(懒加载)
小程序是一项很受欢迎的技术,随着其能力的不断增强,越来越多的人开始使用小程序来完成各种任务。当我面面临一个页面有非常多的数据时,该如何处理呢,显然一次性全部加载完,会非常消耗性能的,为了解决这些问题从而出现了一种叫滚动加载的数据处理方式,也被称为“无限滚动”或“懒加载”,它可以使你的页面在不刷新的情况下连续加载更多数据。在本文中,我们将讨论如何在小程序中实现滚动加载。
560 0
vue2之vuex实现数据持久化(vuex-persistedstate)插件
vue2之vuex实现数据持久化(vuex-persistedstate)插件
836 0
|
前端开发 JavaScript Go
🤔写了2年前端从来不用面向对象?
对比错误实现和正确实现的代码示例,展示了面向组合的设计方式如何使代码更加干净、可复用,并提升了维护性和灵活性。
250 1
|
JavaScript 容器 前端开发
第127天:移动端-获取触摸点的位置
一、移动端轮播图滑动 1、先获取手指在轮播图元素上的滑动方向(左右) (1)手指触摸开始时记录手指所在的坐标X (2)获取界面上的轮播图容器var $carousels=$('.carousel'); (3)注册滑动事件(4)变量重复赋值(5)结束触摸的一瞬间记录最后手指所在坐标X (6)比较开始...
1671 0