如何写出好的变量名

前言

本文内容主要是摘抄自《代码大全》中与变量名相关章节的内容,阐述当需要一个好的变量名需要注意哪些点。

变量名的力量

一个好的变量名是可读的,易记的和恰如其分的。考虑变量名时,名字需要完全、准确地描述出该变量所代表的事物。

x = xx - xxx;

balance = balance - lastpayment

一般对变量的描述就是最佳的变量名。 并且注意长度。

一个好的变量名通常反应的是问题,而不是解决方案,其通常表达的是”什么“(what)而不是”如何“(how)。 例如财务软件中,calcVal 变量名就比 sum 变量名更能表现问题领域。 员工数据记录则取名 employeeData 而不是简单的 data。

短的变量名也不总是不好的,例如 i, j ,k 这类变量名,一般就是在表示普通的循环计数器或者是数组下标,并且在这几行之外它没有任何作用。

程序中表示计算结果的变量: 总额,平均值,最大值等,如果要用类似,Total, sum, average, max ,min, record, string, pointer 这类的限定词来修改某名字,记住把限定词放在名字的最后。 就不会出现风格不统一同时使用 totalRevenue 和 revenuetotal 而产生的歧义。 且风格一致,提高可读性。

Num 限定词的位置也约定俗成。Num 放在变量名的开始位置表示总数: numCustomers 是员工总数。 Num 放在变量名结束的位置表示下标,customerNum 表示员工的序号。 当然由于这样会带来麻烦,更好的办法也是避开这个问题,通过 Count 或者 total 表示总数, index 来表示某个特定员工。

对仗词会让命名更加一致性,方便理解和记忆,下面是书中记录的常用的对仗词:

begin / end | | opened / closed

first / last | | visible / invisble

locked / unlocked | | source / target

min / max | | up / down

next / previous | | old / new

特定数据类型命名

循环变量

i,j,k 像是约定俗成的循环变量命名方式,如果循环体并不长,且循环变量不会在循环之外使用,那么可以用 i,j,k 简单表示。相反一旦循环体比较长,或者在循环体外还要使用,就需要一个更有意义的名字了。否则代码一长,编程人员可能就忘记了 i 本来具有的含义,更容易出错。

状态变量

要为状态变量取一个比 flag 更好的名字。标记的名字中不应该含有 flag, 因为从中丝毫看不出该标记是做什么的。为了清楚起见,标记应该用枚举类型、具名常量(const xxx)。

// NO
if(flag) ...
if(statusFlag & 0x0F) ...
if(printFlag == 16) ...
if(computeFlag == 0) ...

//Yes
if(dataReady) ...
if(characterType & PRINTABLE_CHAR) ...
if(reportType == ReportType_Annual) ...
if(recalcNeeded == false) ...

临时变量

临时变量用于存储计算的中间结果。它们通常被赋予 tmp,x 等一些模糊且缺乏描述性的名字。临时变量也最好是可以给出一个更加准确的变量名来增加代码的可读性。

布尔变量

一些比较常用的布尔变量名: done,error,found,success 等。 上面都是给布尔变量赋予隐含”真/假“ 含义的名字。 done 这样要么是 true 要么是 false。 如果是 status, sourceFile 这样的名字,是没有明确的 true 或者 false 在里面的,每件事情都有状态, true 就代表状态是 OK 的吗?不一定。 可以将 status 替换成 error 或者是 statusOK。

有一些喜欢在布尔名前面加上 is。 这边变量名变成了一个问题: isdone? isfound? 这种做法的好处是避免了模糊不清的名字, isStatus。 但是可读性略差, if(isFound) 可读性略差于 if(found)。

与语言无关的指导原则

区分变量和子程序名字,区分类和对象,标识全局变量,标识成员变量,标识类型声明等,上述未必有固定的风格,或者答案,有一些建议是加前缀,例如全局加 g_ 前缀,类型加 t_ 前缀,成员变量加 m_ 前缀等,包括是驼峰命名,还是下划线间隔,等等,选择一种格式并统坚持下去,就可以增加代码可读性。

从某种程度上,要求使用短变量名是早期计算的遗留物。早期语言一般要求把变量名长度限制在 2 ~ 8 个字符。于是慢慢有了一些简短的缩写名字。而缩写也有一般指导原则:

  • 使用标准的缩写(字典中常见的缩写)
  • 去掉素有非前置元音(computer → cmptr, screen→scrn)
  • 去掉虚词:and, or , the 等
  • 使用后每个单词的第一个或前几个字母
  • 统一地使用每个单词的第一、第二或第三个字母后截断
  • 使用名字中每一个重要单词,最多不超过三个
  • 去掉无用的后缀 - ing, ed 等

上述一些原则本身就有冲突的地方,所以不需要满足所有的原则,选择其中一条即可。

  • 避免使用令人误解的名字或缩写
  • 避免使用具有相似含义的名字:recordNum 和 Numrecoeds 同时使用, fileNumber 和 fileIndex 等
  • 避免使用不同含义却相似名字的变量。
  • 避免使用发音相近的名字: wrap 和 rap
  • 避免在名字中使用数字。
  • 避免在名字中拼错单词。
  • 不要仅靠大小写来区分变量名。
  • 不要使用与变量含义完全无关的名字。

代码阅读的次数远远多于编写的次数。确保你所取的名字更侧重于阅读而不是编写方便。

以上只是书中列出的一些点,可以让我们有意识的去注意哪些点,想要写出可读性好,风格一致的代码还是在日常接触优秀开源项目源码时多加留意,学习和模仿。

<think>我们正在讨论PyCharm中快速生成局部变量名的技巧。根据用户的问题,他希望在PyCharm中能够快速生成局部变量名,即通过某种快捷方式或自动补全功能来创建局部变量。 在PyCharm中,当我们输入一个表达式,然后希望将这个表达式的结果赋值给一个局部变量时,可以使用一个叫做“提取变量”的重构功能(Refactor -> Extract -> Variable),或者使用快捷键(在Windows/Linux上是Ctrl+Alt+V,在Mac上是Cmd+Alt+V)。这个操作会弹出一个对话框,让你输入变量名,然后自动生成赋值语句,并将原来的表达式替换为这个变量。 此外,PyCharm还有一个功能叫做“后缀补全”(Postfix Completion)。例如,你可以先输入表达式,然后输入`.var`,再按Tab键,PyCharm就会自动将这个表达式赋值给一个变量,并为你生成一个默认的变量名(你可以立即修改这个变量名)。这个默认变量名通常是根据表达式类型或内容自动生成的。 例如: 1. 你输入`42.var`然后按Tab,它会变成`i = 42`(因为42是整数,所以默认变量名为i)。 2. 你输入`"hello".var`然后按Tab,它会变成`s = "hello"`(s表示字符串)。 另外,如果你已经了一个表达式,然后将光标放在表达式上,按Alt+Enter(或者使用灯泡图标),在弹出的菜单中选择“Extract variable”,也可以达到同样的效果。 需要注意的是,后缀补全功能需要先输入表达式,然后输入一个点,再输入补全模板的缩(如`var`),最后按Tab键。而使用快捷键则是先选中表达式(或者光标在表达式上),然后按快捷键(Ctrl+Alt+V或Cmd+Alt+V)来提取变量。 下面我们用一个简单的例子来说明: 假设我们在函数中了一个表达式:`3.14 * 5 * 5`,然后我们想把这个表达式的结果赋值给一个变量(比如area)。我们可以这样做: 1. 选中整个表达式`3.14*5*5`。 2. 按Ctrl+Alt+V(Windows/Linux)或Cmd+Alt+V(Mac),然后输入变量名area,按回车。这样就会生成`area = 3.14 * 5 * 5`。 或者使用后缀补全: 1. 输入`3.14*5*5.var`(注意:在表达式后面加上`.var`)。 2. 按Tab键,它会自动生成类似`v = 3.14 * 5 * 5`,然后你可以马上修改变量名v为area。 另外,PyCharm会根据表达式的类型来建议变量名。例如,如果表达式返回一个字符串,它可能会建议使用`s`或者`str`之类的名字,但通常我们更希望有意义的变量名,所以生成后立即修改是一个好习惯。 除了`.var`,PyCharm还有其他后缀补全,比如`.for`(生成for循环)、`.if`(生成if语句)等。 总结一下,快速生成局部变量名的方法主要有两种: 1. 使用提取变量的重构快捷键:Ctrl+Alt+V(Windows/Linux)或Cmd+Alt+V(Mac)。 2. 使用后缀补全:在表达式后输入`.var`然后按Tab。 下面我们通过一个简单的代码示例来展示: ```python # 假设我们有一个表达式,我们想将其赋值给一个变量 # 方法1:使用快捷键 # 首先输入表达式:3.14 * 5 * 5 # 然后选中表达式,按Ctrl+Alt+V,输入变量名area,回车 # 方法2:使用后缀补全 # 输入:3.14*5*5.var 然后按Tab,然后修改变量名为area ``` 注意:后缀补全的模板可以在PyCharm的设置中查看和自定义。打开设置(Settings),然后进入Editor -> General -> Postfix Completion,这里可以看到所有可用的后缀补全模板,包括`var`。 另外,有时候我们可能希望PyCharm能够自动建议变量名。在编代码时,当我们输入赋值语句的左边部分,PyCharm的代码补全功能会提供一些建议,但通常不会自动生成变量名。不过,我们可以利用后缀补全或者重构功能来快速生成。 最后,需要说明的是,这些功能在PyCharm的Professional(专业版)和Community(社区版)中都是可用的。 §§相关问题§§ 1. 如何在PyCharm中自定义后缀补全模板? 2. 除了提取变量,PyCharm还有哪些常用的重构技巧? 3. 如何修改PyCharm的快捷键设置以适应个人习惯?</think>### PyCharm 快速生成局部变量名的技巧 在 PyCharm 中,可以通过以下方法快速生成局部变量名: #### 1. **使用后缀补全 (Postfix Completion)** - 输入表达式后添加 `.var` 后缀,按 `Tab` 自动生成变量 - 示例: ```python 42.var # 按 Tab → 生成 i = 42 "text".var # 按 Tab → 生成 s = "text" [1,2].var # 按 Tab → 生成 lst = [1,2] ``` - **特点**:自动推断变量类型并生成默认名称 #### 2. **重构提取变量 (Refactor → Extract Variable)** 1. 选中表达式 2. 快捷键: - Windows/Linux: `Ctrl + Alt + V` - macOS: `⌘ + ⌥ + V` 3. 输入自定义变量名 - **适用场景**:复杂表达式或需要自定义变量名时 #### 3. **自动补全变量声明** - 输入表达式后按 `Alt + Enter` → 选择 `Introduce variable` - 自动生成带类型注解的变量(需开启类型提示) #### 4. **模板补全 (Live Templates)** 1. 自定义模板:`Settings → Editor → Live Templates` 2. 添加模板: ```text Abbreviation: var Template text: $EXPR$ = $END$ ``` 3. 使用:输入 `var` → 按 `Tab` 生成变量结构 #### 5. **智能类型推断** - 输入等号右侧表达式时,PyCharm 会: 1. 自动提示可能的变量名(基于上下文) 2. 按 `Ctrl + Space` 显示命名建议 3. 支持驼峰式/下划线命名风格自动转换 > **最佳实践**: > - 简单表达式 → 使用 `.var` 后缀补全 > - 复杂逻辑 → 用 `Ctrl+Alt+V` 重构提取 > - 团队规范 → 配置统一的 `Live Templates` > - 类型安全 → 开启 `Type hints` (Python 3.6+) ```python # 示例:快速生成带类型注解的变量 def calculate(): # 输入 (5+3)*2.var → 自动生成 result = (5 + 3) * 2 # 变量名和类型自动推断 return result ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值