编码规范之命名规范

news2024/11/18 7:30:41

前言: \textcolor{Green}{前言:} 前言:

💞这个专栏就专门来记录一下寒假参加的第五期字节跳动训练营
💞从这个专栏里面可以迅速获得Go的知识

今天的笔记是昨天的补充,对编码规范中的命名规范进行总结。主要包含变量的命名规范函数的命名规范包的命名规范。通过学习我们可以对我们的命名进行统一,之后在项目开发过程中可以节约很长的时间,让更多的精力关注在实现上,而不是细枝末节中。

1.2.3 编码规范 - 命名规范

variale(变量)命名规范

  • 简洁胜于冗长
  • 缩略词全大写,但当其位于变量开头且不需要导出时,使用全小写。
    • 例如使用 Server HTTP 而不是 ServerHttp
    • 使用 XMLHTTPRequest 或者 xmlHTTPRequest
  • 变量距离其被使用的地方越远,则需要携带越多的上下文信息
    • 全局变量在其名字中需要更多的上下文信息,使得在不同地方可以轻易辨认出其含义。

例子:在 i 和 index 作用域仅在 for 循环内部时,变量名 index 没有增加对程序的理解,直接用最简单的 i 是最好的。如果索引的作用域扩展,在循环外也会用到时,就需要重新考虑更加符合需求的名称了

// Bad
for index := 0; index < len(s); index++ {
    // do something
}

// Good
for i := 0; i < len(s); index++ {
    // do something
}

再来一个例子:函数参数的名称示例,这里为了简短将时间参数 deadline 改成了 t,修改后发现降低了变量名的信息量。

  • t 常代指任意时间
  • deadline 常指截止时间,有特定的含义
    函数提供给外部调用时,签名的信息很重要,要将自己的功能准确表示,自动提示一般会提示函数的方法签名,通过参数名更好的理解功能很有必要,节省时间。
// Good
fun (c * Client) send(req *Request, deadline time.Time)

// Good
fun (c * Client) send(req *Request, t time.Time)

function(函数)命名规范

  • 函数名不携带包名的上下文信息,因为包名和函数名总是成对出现的
  • 函数名尽量简短
  • 当名为 foo 的包某个函数返回类型 Foo ,可以省略类型信息而不导致歧义
  • 当名为 foo 的包某个函数返回类型 T 时(T 并不是 Foo),可以在函数名中加入类型信息。

例如图中的问题。
image.png
因为我们在实际调用过程中,调用 http 包的 Server 方法时,代码是 http.Server 携带有 http 包名,所以函数中无需添加包信息。

package(包)的命名规范

比函数高一层的就是包。接下来讲解对包的命名规范

  • 只右小写字母组成。不包含大写字母和下划线等字符
  • 简短并包含一定的上下文信息。例如:schema、task等
  • 不与标准库同名。例如:不使用 sync 或 strings

以下规则尽量满足,以标准库包名为例

  • 不使用常用变量名作为包名。例如使用 bufio 而不是 buf
  • 使用单数而不是复数。例如使用 encoding 而不是 encodings
  • 谨慎使用缩写。例如使用 fmt 在不破坏上下文的情况下比 format 更加简短。

需要使用多个单词表达上下文的命名可以使用缩写,例如使用 strconv 而不是 stringconversion

包名也涉及到项目代码结构的划分和层次安排,具体名称不同项目会有细微差异,实际项目内风格统一。

小结

  • 核心目标是降低阅读理解代码的成本
  • 重点考虑上下文信息,设计简洁清晰的名称

阅读理解代码么时候会尝试模拟计算机运行程序,好的命名能让程序猿将更多的精力关注在主流程上,清晰地理解程序地功能,避免频繁地关注到分支细节上,增加了理解成本

Good naming is like a good joke. if you have to explain it, it’s not funny。
这句话地意思是好的命名就像一个好笑话。如果你必须解释它,那就不好笑了。 – Dave Cheney

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/681993.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

管理类联考——逻辑——知识篇——形式逻辑——六、假言——haimian

假言 考点分析 假言 年度 2012 2013 2014 2015 2016 2017 2018 2019 2020 2021 2022 2023题量106312461345 定义分类 假言命题是断定一全事物情况的存在是另一个事物情况存在的条件的命题&#xff0c;又称条件命题。假言命题可以分为三类&#xff1a;充分条件假言命题、必要…

WPF开发txt阅读器19:加载json格式的配置文件

文章目录 系统参数字典加载参数自动加载配置文件 txt阅读器系列&#xff1a; 需求分析和文件读写目录提取类&#x1f48e;列表控件与目录&#x1f48e;快捷键翻页字体控件绑定&#x1f48e;前景/背景颜色书籍管理系统&#x1f48e;用树形图管理书籍语音播放&#x1f48e;播放进…

大数据从0到1的完美落地之Flume模型

Flume的模型 数据模型 - 单一数据模型 - 多数据流模型 复制代码 单一数据模型 在单个 Agent 内由单个 Source, Channel, Sink 建立一个单一的数据流模型&#xff0c;如下图所示&#xff0c;整个数据流为 Web Server --> Source --> Channel --> Sink --> HDFS。…

ViewModel进阶 | 使用SavedState实现数据复用的另一种方式

前言&#xff1a;金风玉露一相逢&#xff0c;便胜人间无数。 前言 本文需要有上一篇文章基础&#xff0c;如果不了解的可以先看看《由浅入深&#xff0c;ViewModel配置变更的复用详解》 前面我们了解到&#xff0c;ViewModel 它只能做到因为配置变更页面被销毁而导致重建数据…

ModaHub AI模型开源社区:向量数据库Milvus向量索引是什么?

目录 向量索引 索引创建机制 数据段建索引 用户主动创建索引 闲时建索引 索引概览 FLAT IVF_FLAT IVF_SQ8 IVF_SQ8H IVF_PQ RNSG HNSW ANNOY 选择索引 常见问题 参考文献 向量索引 向量索引&#xff08;vector index&#xff09;是指通过某种数学模型&#xf…

软路由系统 --- OpenWrt网络配置(LAN口、WAN口)

这里使用的 OpenWrt 是一台虚拟机安装的. 配置LAN口IP等信息 编辑修改网络配置文件 rootOpenWrt:~# vi /etc/config/network config interface lanoption type bridgeoption ifname eth0option proto staticoption ipaddr 192.168.100.4option netmask 255.255.255.0option i…

Servlet(下篇)

哥几个来学 Servlet 啦 ~~ 这个是 Servlet&#xff08;上篇&#xff09;的链接&#xff0c; (2条消息) Servlet &#xff08;上篇&#xff09;_小枫 ~的博客-CSDN博客https://blog.csdn.net/m0_64247824/article/details/131229873主要讲了 Servlet的定义、Servlet的部署方式、…

【总结】网页状态码——200正常、302重定向、304客户端有缓存、400浏览器请求传参异常、404未找到、405方法不允许、500服务器异常

目录 200正常500异常--服务器异常Java代码400异常----传参相关的异常get方法长度限制400异常&#xff0c;加了RequestParam(value "name") 必须传值400异常&#xff0c;后端类型是Integer&#xff0c;前端传的是string&#xff0c;转换失败400异常&#xff0c;日期格…

一文带你学习“国密算法”

博主介绍&#xff1a; ✌博主从事应用安全和大数据领域&#xff0c;有8年研发经验&#xff0c;5年面试官经验&#xff0c;Java技术专家✌ Java知识图谱点击链接&#xff1a;体系化学习Java&#xff08;Java面试专题&#xff09; &#x1f495;&#x1f495; 感兴趣的同学可以收…

ES6--一

1、ES6之includes()方法 Array.prototype.includes方法返回一个布尔值&#xff0c;表示某个数组是否包含给定的值&#xff0c;与字符串的includes方法类似。 一般常用这种写法 : [1,2,3].includes(2) 表示2在不在 前面的数组里 项目里 参数 1&#xff09;第一个参数是要…

VUE L 计算监视属性 ⑥

目录 文章有误请指正&#xff0c;如果觉得对你有用&#xff0c;请点三连一波&#xff0c;蟹蟹支持✨ V u e j s Vuejs Vuejs计算属性 C o m p u t e d Computed Computed监视属性 W a t c h Watch Watch总结 文章有误请指正&#xff0c;如果觉得对你有用&#xff0c;…

SpringBoot 实现 elasticsearch 索引操作(RestHighLevelClient 的应用)

文章目录 0. 引入依赖1. 实例创建与关闭2. 创建索引3. 测试索引库存在不存在4. 删除索引库5. 遍历导入数据6. 批量导入数据&#xff08;推荐&#xff09; RestHighLevelClient 是 Elasticsearch 官方提供的Java高级客户端&#xff0c;用于与Elasticsearch集群进行交互和执行各种…

基于Java+Swing实现中国象棋游戏

基于JavaSwing实现中国象棋游戏 一、系统介绍二、功能展示三、其他系统四、获取源码 前言 中国象棋是起源于中国的一种棋&#xff0c;属于二人对抗性游戏的一种&#xff0c;在中国有着悠久的历史。由于用具简单&#xff0c;趣味性强&#xff0c;成为流行极为广泛的棋艺活动。 …

操作系统之死锁详解

本文已收录于专栏 《自考》 目录 背景介绍死锁的前提死锁的概念死锁的分类死锁的产生原因条件 死锁的解决预防避免检测与恢复 死锁的实现总结提升 背景介绍 最近一直在做操作系统的测试题&#xff0c;在做题的过程中发现有很多地方涉及到了关于死锁的知识点。今天就回归课本来自…

机器学习——手写数据集的介绍以及案例讲解

系列文章目录 机器学习聚类——DBSCAN&#xff08;Density-based spatial clustering of applications with noise&#xff0c;基于密度的聚类算法&#xff09; 机器学习集成学习——Adaboost分离器算法 机器学习聚类算法——BIRCH算法、DBSCAN算法、OPTICS算法 机器学习的…

“交通·未来”第27期:基于随机效应机器学习的多区域居民出行模式选择分析...

2020年6月份&#xff0c;公众号正式推出了“交通未来”系列线上公益学术活动等你来~&#xff0c; 2023年&#xff0c;新起航新征程&#xff0c;我们继续前行~ 6月24日下午15:30&#xff0c;我们将迎来活动的第27期。 1、讲座主题 基于随机效应机器学习的多区域居民出行模式选择…

工作三--知识点

1、split 切割字符串 2、includes 而不是写成 if&#xff08;useContext pm_global_teamrole_project_manager || pm_global_teamrole_task_manager || pm_global_teamrole_task_parent_manager&#xff09; 因为 的 优先级 高于 ||&#xff0c;这样写 只能 前面的&…

大数据学习(3)

大数据学习&#xff08;3&#xff09; 1 Hive-SQL-DML语句1.1 Hive SQL Load 加载数据语句1.1.1 Load功能1.1.2 Load语法规则1.1.3 Load 语法实验1.1.3.1 Load Data From Local FS1.1.3.2 Load Data From HDFS1.1.3.3 Overwrite选项 1.2 Hive SQL Insert 插入数据语句1.3 Hive …

河道垃圾自动识别监测算法 opencv

河道垃圾自动识别监测系统通过pythonopencv网络模型技术&#xff0c;河道垃圾自动识别监测算法对水面上的垃圾进行自动识别&#xff0c;一旦发现垃圾污染将自动发出警报。OpenCV基于C实现&#xff0c;同时提供python, Ruby, Matlab等语言的接口。OpenCV-Python是OpenCV的Python…

Win10文件夹选项在哪里打开?Win10文件夹选项打开方法

Win10文件夹选项在哪里打开&#xff1f;Win10电脑中用户不知道在哪里才能打开文件夹选项&#xff0c;这时候用户随意打开Win10电脑上的一个文件夹&#xff0c;然后点击右上角的选项&#xff0c;打开之后就能打开文件夹选项了&#xff0c;也可以打开电脑的运行窗口&#xff0c;在…