如何拥有一个优雅的变量名?

你好,我是坚持分享干货的 EarlGrey,翻译出版过《Python编程无师自通》、《Python并行计算手册》等技术书籍。

如果我的分享对你有帮助,请关注我,一起向上进击。

来源:网络

我有一个同事,能力很强,BUG率很低。

但我每次看他的变量命名,都有种想打人的冲动,也不是我太菜,只是.....(直接上代码吧。)

totalNumberOfItems = 150
averageProcessingTime = 5.25
maximumAllowedConnections = 100
configurationSettings = {"timeout": 30, "retries": 5}
initializationParameters = {"mode": "auto", "threshold": 0.75}
temporaryFilePath = "/tmp/data.txt"
currentUserSession = "abc123xyz"
databaseConnectionString = "Server=myServerAddress;Database=myDataBase;User Id=myUsername;Password=myPassword;"
applicationErrorMessage = "An unexpected error occurred."
userAuthenticationToken = "abcdef123456"

这样看起来还好,但是结合到到应用中就会变成这样:

public class AppDemo {
    public static void main(String[] args) {
        // 定义变量
        int totalNumberOfItems = 150;
        double averageProcessingTime = 5.25;
        int maximumAllowedConnections = 100;
        // 配置设置
        Map<String, Integer> configurationSettings = new HashMap<>();
        configurationSettings.put("timeout", 30);
        configurationSettings.put("retries", 5);
        // 初始化参数
        Map<String, Object> initializationParameters = new HashMap<>();
        initializationParameters.put("mode", "auto");
        initializationParameters.put("threshold", 0.75);
        // 临时文件路径
        String temporaryFilePath = "/tmp/data.txt";
        // 当前用户会话
        String currentUserSession = "abc123xyz";
        // 数据库连接字符串
        String databaseConnectionString = "Server=myServerAddress;Database=myDataBase;User Id=myUsername;Password=myPassword;";
        // 应用程序错误信息
        String applicationErrorMessage = "An unexpected error occurred.";
        // 用户认证令牌
        String userAuthenticationToken = "abcdef123456";
        // 输出变量值
        System.out.println("Total Number of Items: " + totalNumberOfItems);
        System.out.println("Average Processing Time: " + averageProcessingTime);
        System.out.println("Maximum Allowed Connections: " + maximumAllowedConnections);
        System.out.println("Configuration Settings: " + configurationSettings);
        System.out.println("Initialization Parameters: " + initializationParameters);
        System.out.println("Temporary File Path: " + temporaryFilePath);
        System.out.println("Current User Session: " + currentUserSession);
        System.out.println("Database Connection String: " + databaseConnectionString);
        System.out.println("Application Error Message: " + applicationErrorMessage);
        System.out.println("User Authentication Token: " + userAuthenticationToken);
    }
}

如果业务逻辑再复杂点,代码我觉得就不能看了。

我觉得会命名简洁的缩写变量名让代码观感有质的提升!!

请看以下代码!

import java.util.HashMap;
import java.util.Map;

public class AppDemo {
    public static void main(String[] args) {
        // 定义变量
        int ttlItems = 150;
        double avgTime = 5.25;
        int maxConns = 100;
        // 配置设置
        Map<String, Integer> config = new HashMap<>();
        config.put("timeout", 30);
        config.put("retries", 5);
        // 初始化参数
        Map<String, Object> initParams = new HashMap<>();
        initParams.put("mode", "auto");
        initParams.put("threshold", 0.75);
        // 临时文件路径
        String tmpPath = "/tmp/data.txt";
        // 当前用户会话
        String curSess = "abc123xyz";
        // 数据库连接字符串
        String dbStr = "Server=myServerAddress;Database=myDataBase;User Id=myUsername;Password=myPassword;";
        // 应用程序错误信息
        String errMsg = "An unexpected error occurred.";
        // 用户认证令牌
        String authTok = "abcdef123456";
        // 输出变量值
        System.out.println("Total Items: " + ttlItems);
        System.out.println("Average Time: " + avgTime);
        System.out.println("Maximum Connections: " + maxConns);
        System.out.println("Configuration Settings: " + config);
        System.out.println("Initialization Parameters: " + initParams);
        System.out.println("Temporary File Path: " + tmpPath);
        System.out.println("Current User Session: " + curSess);
        System.out.println("Database Connection String: " + dbStr);
        System.out.println("Application Error Message: " + errMsg);
        System.out.println("User Authentication Token: " + authTok);
    }
}

如何命名优雅的缩写变量名?

变量名缩写规则通常涉及以下几项原则:

简洁明了

变量名应尽量简短,但同时要有意义,能够反映变量的内容或用途。

例如,totalCount 可以缩写为 tCount

去除元音

可以去掉变量名中的元音以缩短长度。

例如,comment 可以缩写为 cmttotal 可以缩写为 ttl

一个单词超过8个字母的,建议使用缩写。

使用驼峰式命名

对于多个单词组成的变量名,采用驼峰式命名法,使每个单词的首字母大写,紧凑在一起。

例如,userName 可以缩写为 uName

避免歧义

即使是缩写,也要确保变量名不易混淆或产生歧义。

例如,maximum 可以缩写为 max,但不要缩写为 m,因为太短且不具备辨识度。

开发常用缩写参照

  1. Identifier(标识符)

  • identifier -> id

Message(消息)

  • message -> msg

  • messages -> msgs

Number(数字)

  • number -> num

Length(长度)

  • length -> len

Index(索引)

  • index -> idx

Count(计数)

  • count -> cnt

Value(值)

  • value -> val

Parameter(参数)

  • parameter -> param

  • parameters -> params

Temporary(临时)

  • temporary -> tmp

Configuration(配置)

  • configuration -> config

  • configuration -> cfg

Information(信息)

  • information -> info

Database(数据库)

  • database -> db

组合词缩减

  1. User Profile(用户资料)

  • userProfile -> uProf

Session Token(会话令牌)

  • sessionToken -> sessTok

Transaction ID(交易ID)

  • transactionID -> transID

Maximum Value(最大值)

  • maximumValue -> maxVal

Minimum Value(最小值)

  • minimumValue -> minVal

File Name(文件名)

  • fileName -> fName

Database Connection(数据库连接)

  • databaseConnection -> dbConn

Configuration File(配置文件)

  • configurationFile -> cfgFile

Application Programming Interface(应用程序接口)

  • applicationProgrammingInterface -> api

Primary Key(主键)

  • primaryKey -> pk

其他

  1. 用户信息相关

  • userName -> uName

  • userEmail -> uEmail

  • userPassword -> uPwd

文件操作相关

  • filePath -> fPath

  • fileSize -> fSize

  • fileExtension -> fExt

时间相关

  • currentTime -> curTime

网络请求相关

  • requestURL -> reqURL

  • responseData -> resData

  • responseCode -> resCode

最后

你们有见过哪种变量名很长,可以在评论区留言,让大家一起讨论下如何缩短它!

- EOF -

文章已经看到这了,别忘了在右下角点个“赞”和“在看”鼓励哦~

推荐阅读  点击标题可跳转

1、Python 项目工程化最佳实践

2、Python 可以比 C 还要快!

3、streamlit,一个超强的 Python 库

4、豆瓣8.9分的C++经典之作,免费送!

5、Python 3.12 版本有什么变化?

最近我开了一家淘宝店,名字叫【打破壁垒】,主打程序开发相关付费素材、工具的共享类商品,帮助大家降低试错和使用成本。欢迎大家关注。

bef66f360474a1a3752fe4b16a2db090.jpeg

长按扫描下方二维码,然后点击页面中的【打开淘宝】,即可进入店铺:

64210ef5ab1851259b88097030eaa026.png

回复下方「关键词」,获取优质资源

回复关键词「 pybook03」,领取进击的Grey与小伙伴一起翻译的《Think Python 2e》电子版

回复关键词「书单02」,领取进击的Grey整理的 10 本 Python 入门书的电子版

👇关注我的公众号👇

告诉你更多细节干货

d6a8c044620fe5b9589357c82e588513.jpeg

欢迎围观我的朋友圈

👆每天更新所想所悟

### JavaScript 中同一对象被多个变量引用 在 JavaScript 中,当多个变量引用同一个对象时,这些变量实际上都指向内存中的同一位置。因此,通过任何一个变量对对象属性的操作都会反映到所有引用该对象的变量上。 ```javascript let obj1 = { name: "Alice", age: 25 }; let obj2 = obj1; obj2.age = 30; console.log(obj1); // 输出: { name: 'Alice', age: 30 } console.log(obj2); // 输出: { name: 'Alice', age: 30 } ``` 然而,如果其中一个变量使用赋值运算符 `=` 将其重新指向另一个新的对象,则只会改变该变量本身的引用目标,而不会影响其他仍然指向原对象的变量[^1]。 ### Python 中全局变量跨文件共享 对于 Python 来说,在不同模块间共享全局变量可以通过显式声明来实现。为了使一个变量成为真正的全局变量并能在整个程序范围内访问,应该遵循如下做法: - 在定义该变量的第一个模块中将其设为全局; - 当希望在一个函数内部修改这个全局变量时,需先用 `global` 关键字声明它。 例如: ```python # config.py 文件 CONSTANT = 0 # 声明为常量形式的大写字母表示法有助于提高可读性和维护性 # another_module.py 文件 import config def change_constant(): global CONSTANT # 明确指出这里使用的 CONSTANT 是来自外部的作用域而非局部创建的新实体 config.CONSTANT += 1 ``` 这种机制确保了即使有多个地方引用相同的名称也不会意外地创建独立副本而是真正意义上共享数据结构[^2]。 ### C++/C 中线程同步与条件变量 在线程编程领域内,特别是 POSIX Threads (pthreads),条件变量提供了优雅的方式让一组或多组线程基于某些特定事件的发生与否来进行协作工作流控制。每当涉及到条件变量的时候总是伴随着互斥锁的存在,这是因为我们需要保证对临界资源(即那些可能引起竞争状况的状态标志位或其他类型的数据成员)的安全存取操作得以原子化执行。 考虑下面的例子说明如何正确运用 pthreads 库里的条件变量 API 实现生产者消费者模式下的缓冲区管理逻辑: ```c++ #include <pthread.h> // 定义必要的条件变量和互斥锁实例... pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER; pthread_cond_t cond_not_empty = PTHREAD_COND_INITIALIZER; int buffer[MAX_SIZE]; size_t head, tail, count; void* producer(void *arg) { while(true){ produce_item(item); pthread_mutex_lock(&mutex); /* 如果队列已满则等待 */ while(count >= MAX_SIZE) pthread_cond_wait(&cond_not_full, &mutex); enqueue(buffer,&head,item); ++count; /* 发送信号给消费者 */ pthread_cond_signal(&cond_not_empty); pthread_mutex_unlock(&mutex); } return NULL; } void* consumer(void *arg) { Item item; while(true){ pthread_mutex_lock(&mutex); /* 若无可用项目则挂起当前进程直到收到通知 */ while(count == 0) pthread_cond_wait(&cond_not_empty, &mutex); dequeue(buffer,&tail,&item); --count; /* 提醒生产方现在有可能存在空间*/ pthread_cond_signal(&cond_not_full); pthread_mutex_unlock(&mutex); consume_item(item); } return NULL; } ``` 上述代码片段展示了典型的生产者-消费者问题解决方案的一部分,其中包含了恰当利用条件变量以及相应互斥锁的做法以防止竞态条件发生的同时也实现了高效的并发处理能力[^3]。 ### Java 中对象引用关系及其行为特征 Java 编程语言里同样支持多处持有相同对象实例的情形。一旦某个新变量接收到了已有对象的引用地址之后,二者便共同拥有对该实际存在的堆内存区域的使用权。这意味着任何一方所做的变更都将即时体现在另一方所观察的结果之中除非再次赋予后者全新的实例作为替代品。 举个简单的例子来看待这种情况的影响范围: ```java public class Student { String name; int age; void speak(){ System.out.println("My name is "+name+", I am "+age+" years old."); } } public class Main { public static void main(String[] args) { Student s1 = new Student(); s1.name = "张三"; s1.age = 19; s1.speak(); Student s2 = new Student(); s2.name = "李四"; s2.age = 23; s2.speak(); Student s3 = s2; // 此刻 s3 和 s2 指向的是完全一样的 student 对象 s3.speak(); // 所以此处输出的信息应当与前一句一致 // 修改 s3 的字段也会立即作用于 s2 s3.age++; s2.speak(); // 这里会显示出年龄已经被加了一岁 } } ``` 这段小程序很好地诠释了一个对象可以由若干个不同的名字去指代的事实,并且强调了在这种情况下保持谨慎的重要性——因为不经意间的改动可能会带来意想不到的效果[^5]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值