编程命名规范(网文)

news/2024/12/30 20:19:43/文章来源:https://www.cnblogs.com/thingk/p/18555377

一个好的变量或函数命名,应该能起到自解释的作用,甚至能减少我们代码的注释。

naming-cheatsheet是一个命名备忘录,记录一些常见的规范约定,并提供简单的例子说明。如果能够严格遵守这些规范,相信我们的代码可读性会大大提升,下面就来介绍 naming-cheatsheet 提供的一些建议。

项目地址:

https://github.com/kettanaito/naming-cheatsheet

使用英语

这是最基本的一条规则了,英语是编程中的主要语言,所有编程语言的语法都是用英语编写的,通过英语编写代码,可以大大提高其通用性。对于我们国内开发者来说,一定要避免拼音甚至是直接的中文命名。

/* Bad */
const primerNombre = 'Gustavo'
const amigos = ['Kate', 'John']/* Good */
const firstName = 'Gustavo'
const friends = ['Kate', 'John']

命名风格

选择一种命名的风格,并且严格遵守,可以是camelCase,或者snake_case,或者是其他任何的风格,最重要的是要保持一致,不管是个人开发者还是团队,保持一致的命名风格很重要,不要混合使用。

/* Bad */
const page_count = 5
const shouldUpdate = true/* Good */
const pageCount = 5
const shouldUpdate = true/* Good as well */
const page_count = 5
const should_update = true

遵守SID原则

命名应该简短、直观并且具有描述性,遵循SID原则。

  • Short。简短,避免输入太长,但是也应该注意不能简写到失去其原本的意义。
  • Intuitive。直观,并且尽可能接近自然语言。
  • Descriptive。以最有效的方式反映其作用或目的。
/* Bad */
const a = 5 // "a" could mean anything
const isPaginatable = a > 10 // "Paginatable" sounds extremely unnatural
const shouldPaginatize = a > 10 // Made up verbs are so much fun!/* Good */
const postCount = 5
const hasPagination = postCount > 10
const shouldPaginate = postCount > 10 // alternatively

避免过度的简写

命名要简短,但是要避免钻牛角尖,命名最重要的是要让人能看懂,过度的缩写如果失去了其原本的意义,降低了代码的可读性,那就不应该这么做,宁愿多写几个字母。

/* Bad */
const onItmClk = () => {}/* Good */
const onItemClick = () => {}

避免上下文重复

有时候在一段代码中可能会出现类似意义的变量定义,这个时候要避免命名的重复。

class MenuItem {/* Method name duplicates the context (which is "MenuItem") */handleMenuItemClick = (event) => { ... }/* Reads nicely as `MenuItem.handleClick()` */handleClick = (event) => { ... }
}

反映预期结果

变量或函数的命名应该能反映预期的结果。

/* Bad */
const isEnabled = itemCount > 3
return <Button disabled={!isEnabled} />/* Good */
const isDisabled = itemCount <= 3
return <Button disabled={isDisabled} />

命名的模式

可以参考以下类似的模式来做命名。

A/HC/LC模式

可以遵循A/HC/LC,即

prefix? + action (A) + high context (HC) + low context? (LC)
 
nameprefixAHCLC
getUser   get User  
getUserMessages   get User Messages
handleClickOutside   handle Click Outside
shouldDisplayMessage should Display Message  

 

 

上下文的顺序可能会影响变量的含义,例如shouldUpdateComponent意味着将要更新一个组件,换一下顺序变成shouldComponentUpdate,意味着组件将做自我更新。

动作

函数名称的动词部分,是描述函数作用的最终要的部分,如:

  • getXXX,表示获取数据
  • setXXX,表示设值
  • resetXXX,重置数据
  • fetchXXX,请求数据
  • removeXXX,移除数据,表示从某处删除某物
  • deleteXXX,删除数据,表示完全清楚某些事物
  • composeXXX,从现有数据创建新数据
  • handleXXX,处理某个动作

上下文

函数或方法通常是某些事物的动作,结合上下文,能够明确其操作的对象,或者要能反映出函数预期的数据类型。一些特定的情况下允许省略上下文,例如在JavaScript中,filter对Array进行操作很常见,就没必要命名为filterArray了。

/* A pure function operating with primitives */
function filter(predicate, list) {return list.filter(predicate)
}/* Function operating exactly on posts */
function getRecentPosts(posts) {return filter(posts, (post) => post.date === Date.now())
}

前缀

前缀用来增强变量的含义,如:

  • is,描述特征或状态,通常是boolean类型
  • has,描述是否具有某个状态或值,通常是boolean类型
  • should,反映肯定的条件,加上特定的执行动作
  • min/max,描述边界或界限时使用
  • prev/next,指示前一个或下一个状态

单复数

变量名称是单数还是复数,取决于值的单数还是复数。

/* Bad */
const friends = 'Bob'
const friend = ['Bob', 'Tony', 'Tanya']/* Good */
const friend = 'Bob'
const friends = ['Bob', 'Tony', 'Tanya']

 

网文地址

 

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MyBatis 学习笔记

MyBatis 执行器 JDBC 的执行过程分为四步:获取数据库连接(Connection) 预编译 SQL(PrepareStatement) 设置参数 执行 SQL(ResultSet)MyBatis 提供了执行器 Executor 将这一过程进行封装,对外提供 SqlSession 让用户通过调用其 API 直接操作数据库,因为 SqlSession 持有…

机器学习:线性回归

章节安排背景介绍 均方根误差MSE 最小二乘法 梯度下降 编程实现背景生活中大多数系统的输入输出关系为线性函数,或者在一定范围内可以近似为线性函数。在一些情形下,直接推断输入与输出的关系是较为困难的。因此,我们会从大量的采样数据中推导系统的输入输出关系。典型的单输…

20222322 2024-2025-1 《网络与系统攻防技术》实验六实验报告

1.实验内容 掌握使用Metasploit和nmap等工具进行前期渗透的方法,并利用四种特定的漏洞对靶机进行攻击。 (1)掌握Metasploit和nmap的用法 学习并熟悉Metasploit框架的基本操作,包括模块搜索(Search)、使用(Use)、展示选项(Show)、设置参数(Set)以及执行攻击(Exploi…

ETL之kettle 专业陪伴群,1元开启kettle精进之旅

1、为啥收取1元? 确保只有真正感兴趣或有意愿的用户才会加入。减少无关人员的加入,保持群组的专业性和活跃度。 付费入群可以减少垃圾信息的发送,因为发垃圾信息的人不太可能愿意为发送广告付费。 2、送人玫瑰手留余香自从公众号连载了90+篇关于kettle的干活文章,不到半年时…

SpringBoot:SpringBoot集成E-mail邮件发送功能

前言今天做项目时有个需求是:用公司邮箱给客户发送邮件通知,然后上网冲浪找到一些不错的文章,通过优化并实现功能后,写这篇文章记录一下,也提供给大家做参考。 前期准备 在编写代码前,我们需要获取到一些信息用于后续邮件发送功能,需要获取的信息为:协议服务器地址、邮…

控制之美1-第七章 PID控制

目录7.1 引子7.2 比例控制 7.1 引子 \[7000 \frac{dx(t)}{dt}+10ax(t)=u(t)+d(t) \]\(u(t)\) 是体重变化, \(u(t)=E_i-E_a\), \(E_i\) 是热 量摄入 ,\(E_a\) 是运动消耗, \(x(t)\) 系统输出,体重 \(a\)是劳动强度系数 \(d(t)=-aC\) 是扰动量 进行拉普拉斯变换 \[7000(sX(s)-…

基于 LLM 的智能运维 Agent 系统设计与实现

摘要 本文详细介绍了一个基于大语言模型(LLM)的智能运维 Agent 系统的设计与实现。该系统采用多 Agent 协同的架构,通过事件驱动的方式实现了自动化运维流程。系统集成了先进的 AI 能力,能够实现故障自动诊断、预测性维护、知识沉淀等核心功能。 一、运维 Agent 架构设计 在设…

RCE_sample_ctf_questions(ing)

[广东强网杯 2021 团队组]love_Pokemon 考点:函数escapeshellarg/escapeshellcmd绕过正则匹配 文件查看指令+通配符绕过正则匹配点击查看代码<?php error_reporting(0); highlight_file(__FILE__); $dir = sandbox/ . md5($_SERVER[REMOTE_ADDR]) . /;if(!file_exists($di…

C# 注册Windows服务

环境:.NET Farmework 4.7.2 IDE:Visual Studio 2022 添加程序集引用: System.ServiceProcess System.Configuration.Install 右键项目,添加UpdateServices1类,让UpdateServices1继承ServiceBase(UpdateServices1换成自己的Services服务)编译过后如果需要更新服务代码,要…

20222321 2024-2025-1 《网络与系统攻防技术》 实验六实验报告

一、实验内容 本实践目标是掌握metasploit的用法。 、指导书参考Rapid7官网的指导教程。 https://docs.rapid7.com/metasploit/metasploitable-2-exploitability-guide/ 下载官方靶机Metasploitable2,完成下面实验内容: (1)前期渗透 ①主机发现(可用Aux中的arp_sweep,sea…

【刷题笔记】[BalticOI 2024] Portal

【刷题笔记】[BalticOI 2024] Portal \(Solution\) 先注意到,题目中的图形是许多的自相似图形,要求能满足要求的单位图形的最大面积 先考虑只有一维的情况, 设几个传送门的坐标为 \((a_i,0)\) ``` 发现将整个图形平移后答案不会改变,所以不妨把一个传送门移动到 \((0,0)\)…

关于作业系统的一些思考

作业程序有两种类型:Long-lived 作业程序:输入或输出是无限量的数据,常见近乎实时的业务数据处理,比如日志处理等。(一般将消息队列连接输入,用来做流量削峰或多个输入) Short-lived 作业程序:处理一组有限的数据然后终止。运行代码并在数据库中记录执行状态的任务,然…