2022-10-24 在程序里起名有很多要注意的
发布于 2022年10月24日  (最近编辑 2022年10月30日 )
3 分钟 • 1024 字
最近检查以前写的代码,发现我给不同的功能函数或者变量起的名不是很精确。 比如数据处理这个阶段,就很容易取 data_process, get_data,process_data,data_preprocess,deal_with_data 这些名字。再比如很多类的主入口,我经常会写 run()、xx_driver() 等等。
想一个名字看起来简单,但是新建文件那一刻抓耳挠腮肚子里墨水空空,想不到好名字,无奈最后写下写了很多遍的 get_data 。于是学习给不同的功能函数或者变量取一些适合的名字迫在眉睫。
今天看了关于两篇起名建议的文章,一篇是《变量名不要起得他妈的那么长》,链接在这 。 我跟着这篇文章反省了一下,有时候为了区分不同情况,我就会用下划线连接好几个单词,这样的话总体长度很长,不是很 pythonic。
作者给了几个建议:
-
不要容易看出类型的名字后面加上类型,例如
name就不要叫namestring。 -
写复数,不要用单数加
collection。例如holidays比 holiday_list 好些。我这个问题还挺严重的,因为我很喜欢写
xx_list,yy_dict等。 -
在写
func的名字的时候,不需要把参数也写在功能函数名称里面,因为参数列表能够看出来要处理什么参数。例如merge(table_cells)比merge_table_cells(x)要好。 -
要精确,不需要把每一个细节都写出。例如
recentlyUpdatedAnnualSalesBid这里面每一个单词细节都值得推敲,看是不是为了确保独一性而加的,没有就要去掉。 -
变量名不要包含能从上下文看出来的单词。如果类名里面已经包含的单词,在类方法就不用再写了。
例如类名有 data,已经表明了这个类是和数据相关。那么方法可以直接写 process,不需要写 data_process。
- 变量名不要包含无意义的单词。
这些单词包括:
data, state, amount, value, manager, engine, object, entity, and instance.
Python 里面用类型注释很容易避免这些问题,就算用 results,不用 results_list 也可以很快看出 results 是一个 list,有时候是 list of list。
第二篇文章是这个《起名的那些事儿》,链接在这儿 。
对于起名他给的建议是:
- 对于类名、接口名:
-
用名词,不用形容词。
-
不要用manager或者helper这种词。
-
精确表示。
Bad: IncomingMessageQueue CharacterArray SpatialOrganizer Good: Mailbox String Map
- 对于方法名:
-
要简短, 也不能太简短。
Bad: list.GetNumberOfItems(); Good: list.Count(); Bad: list.Verify(); Good: list.ContainsNull();
-
表示动作的话用动词,返回布尔值用问句的形式。
```python Bad: list.Empty(); Good: list.IsEmpty(); list.Contains(item); ``` -
返回一个不改变状态的值用名词。
```python Bad: list.GetCount(); Good: list.Count(); ``` -
不要重复。
```python Bad: list.AddItem(item); handler.ReceiveMessage(msg); Good: list.Add(item); handler.Receive(msg); ``` -
不要使用 and 或者 or ,如果有多种情况,可以写几个方法或者用一个类来封装。
这两篇文章的建议都非常好。但是也不可能看了就能照着所有的建议做好,还是需要不断地改以前的代码,多去思考该怎么写。