徐慧志的个人博客

2022-10-24 在程序里起名有很多要注意的

发布于 2022年10月24日  (最近编辑 2022年10月30日 )
3 分钟  • 1024 字

最近检查以前写的代码,发现我给不同的功能函数或者变量起的名不是很精确。 比如数据处理这个阶段,就很容易取 data_processget_dataprocess_datadata_preprocessdeal_with_data 这些名字。再比如很多类的主入口,我经常会写 run()xx_driver() 等等。

想一个名字看起来简单,但是新建文件那一刻抓耳挠腮肚子里墨水空空,想不到好名字,无奈最后写下写了很多遍的 get_data 。于是学习给不同的功能函数或者变量取一些适合的名字迫在眉睫。

今天看了关于两篇起名建议的文章,一篇是《变量名不要起得他妈的那么长》,链接在 。 我跟着这篇文章反省了一下,有时候为了区分不同情况,我就会用下划线连接好几个单词,这样的话总体长度很长,不是很 pythonic。

作者给了几个建议:

  1. 不要容易看出类型的名字后面加上类型,例如 name 就不要叫 namestring

  2. 写复数,不要用单数加 collection。例如 holidays 比 holiday_list 好些。

    我这个问题还挺严重的,因为我很喜欢写 xx_listyy_dict 等。

  3. 在写 func 的名字的时候,不需要把参数也写在功能函数名称里面,因为参数列表能够看出来要处理什么参数。例如 merge(table_cells)merge_table_cells(x) 要好。

  4. 要精确,不需要把每一个细节都写出。例如 recentlyUpdatedAnnualSalesBid 这里面每一个单词细节都值得推敲,看是不是为了确保独一性而加的,没有就要去掉。

  5. 变量名不要包含能从上下文看出来的单词。如果类名里面已经包含的单词,在类方法就不用再写了。

例如类名有 data,已经表明了这个类是和数据相关。那么方法可以直接写 process,不需要写 data_process

  1. 变量名不要包含无意义的单词。

这些单词包括:

data, state, amount, value, manager, engine, object, entity, and instance.

Python 里面用类型注释很容易避免这些问题,就算用 results,不用 results_list 也可以很快看出 results 是一个 list,有时候是 list of list

第二篇文章是这个《起名的那些事儿》,链接在这儿

对于起名他给的建议是:

  1. 对于类名、接口名:
  1. 对于方法名:
  1. 表示动作的话用动词,返回布尔值用问句的形式。

      ```python
      Bad:  list.Empty();
      Good: list.IsEmpty();
            list.Contains(item);
      ```
    
  2. 返回一个不改变状态的值用名词。

      ```python
      Bad:  list.GetCount();
      Good: list.Count();
      ```
    
  3. 不要重复。

      ```python
      Bad:  list.AddItem(item);
            handler.ReceiveMessage(msg);
      Good: list.Add(item);
            handler.Receive(msg);
      ```
    
  4. 不要使用 and 或者 or ,如果有多种情况,可以写几个方法或者用一个类来封装。

这两篇文章的建议都非常好。但是也不可能看了就能照着所有的建议做好,还是需要不断地改以前的代码,多去思考该怎么写。

Sein heißt werden, leben heißt lernen.

Der einfache Weg is immer verkehrt.