编写可读代码的艺术

来源

《编写可读代码的艺术》

第2章 把信息装到名字里

1. 选择专业名词
  • 找到更有表现力的词
单词 更多选择
send deliver, dispatch, announce, distribute, route
find search, extract, locate, recover
start lauch, create, begin, open
make create, set up, build, generate, compose, add, new
2. 避免泛泛的名字
  • tmp -> tmp_xxx
  • 循环迭代器i, j, iter, it -> club_i, meber_i OR ci, mi
3. 用具体的名字代替抽象的名字
  • DISALLOW_EVIL_CONSTRUCTORS() -> DISALLOW_COPY_AND_ASSIGN()
  • --run_locally -> --extra_logging OR --use_local_database
4. 使用前缀或后缀来给名字附带更多信息
  • 进制
    • id -> hex_id
  • 带单位的值
    • start_time -> start_time_ms
    • delay -> delay_secs
    • size -> size_mb
    • limit -> max_kbps
    • angle -> degrees_cw
  • 安全信息
    • url -> untrusted_url
    • passowrd -> plaintext_password
  • 其他信息
    • comment -> unescaped_comment
    • html -> htmml_utf8
    • data -> data_urlenc
5. 决定名字的长度
  • 在小的作用域里可以使用短的名字
  • 单词自动补全使得输入长名字不再是问题
  • 首字母缩略词和缩写,只用最常用的
    • evaluation -> eval
    • string -> str
    • document -> doc
  • 丢掉没用的词
    • convert_to_string() -> to_string()
    • do_serveloop() -> serveloop()
6. 利用名字的格式来表达含义
  • 使用CamelCase来表示类名
  • 使用lower_separated来表示变量名
  • 常量的格式是kConstantName而不是CONSTANT_NAME,这种形式的好处是容易和#define的宏区分开
  • 宏的规范是MACRO_NAME
  • 类成员变量和普通变量一样,但必须以一条下划线结尾,入offset_。
  • "构造函数"应该首字母大写而普通函数首字母小写
  • 给jQuery返回的结果加上$作为前缀
  • <div id="middle_column" class="main-content"> 用下划线来划分ID中的词,用连字符来划分class中的词

第3章 不会误解的名字

  1. Filter() 是“选出”还是“除去”
  2. Clip(text, length) -> Truncate(text, length)
  3. 推荐用min和max来表示(包含)极限
  4. 推荐用first和last来表示包含的范围
  5. 推荐用begin和end来表示包含/排除范围
    • PrintEventsInRange("OCT 16 12:00am", "OCT 17 12:00am")
  6. 给布尔值命名:
    • 通常来讲,加上像is, has, can或should这样的词,可以把布尔值变得更明确。read_password -> need_password OR user_is_authenticated
    • 最好避免使用反义名字。disable_ssl -> use_ssl
  7. 与使用者的期望相匹配
    • get*():“轻量级访问器”,简单地返回一个内部成员变量。
  8. 权衡多个备选名字