函数

短小

函数的第一规则是要短小;第二条规则则是还要更短小
函数应该20行封顶。

  • 代码块和缩进
    if语句、else语句、while语句等,其中的代码块应该只有一行,该行大致是一个函数调用语句。这样不仅能保持函数短小,而且因为块内调用的函数拥有较具说明性的名称,从而增加了文档的价值。
  • 只做一件事
    函数应该做一件事。做好这件事。只做这一件事。
    判断函数是否做了不止一件事的一个方法就是能否再拆出一个函数,这个函数不是单纯的重新诠释其实现。
    只做一件事的函数无法被合理地切分为多个区段。
  • 每个函数一个抽象层级
    要确保函数只做一件事,函数中的语句都在同一抽象层级上。

自顶向下读代码:向下规则
我们想让代码拥有自顶向下的阅读顺序。我们想让每个函数后面都跟着位于下一抽象层级的函数,这样一来,在查看函数列表是,就能循抽象层级向下阅读。我们把这叫做向下规则。
换一种说法我们想要这样读程序:程序就像是一系列TO起头的段落,每一段都描述当前抽象层级,并引用位于下一抽象层级的后续TO起头段落。

  • switch语句
    对于switch语句,如果只出现一次,用于创建多态对象,并且隐藏在某个继承关系中,在系统其他部分看不见,就还能容忍。

使用描述性的名称

选择描述性的名称能理清关于模块的设计思路,有助于改进。
命名方式要保持一致。使用与模块名一脉相承的短语、名词和动词给函数命名。

函数参数

零参数函数 优于 单参数函数 优于 双参数函数;因尽量避免三参数以上的函数。
输出参数比输入参数要难以理解。我们惯于认为信息通过参数传入函数,通过返回值从函数输出。我们不太期望信息通过参数输出。

  • 一元函数
    向函数传入单个参数有两种极普遍的理由。

    1. 问关于那个参数的问题
    2. 操作参数

    还有一种不那么普遍但仍极有用的单参数函数形式,那就是事件。在这种形式中,有输入参数无输出参数。
    所以我们在命名时要注意名称的区别,让读者能轻易分辨是哪种类型。

  • 参数对象
    如果函数看起来需要二个、三个和三个以上参数,就说明其中一些参数应该封装成类。

  • 动词与关键词
    给函数起个好名字,能更好的解释函数的意图,以及参数的顺序和意图。对于一元函数,函数和参数应当形成一种非常良好的动词/名词对形式

其他

  • 分隔指令与询问
    函数要么做什么事,要么回答什么事,但二者不可兼得。函数应该修改某对象的状态,或者返回对象的有关信息。
  • 使用异常代替返回错误码
  • 抽离try/Catch代码块
  • 错误处理就是一件事
  • 别重复自己
  • 结构化编程
    每个函数、函数中的每个代码块都应该有一个入口、一个出口。这意味着每个函数中只该有一个return,不能有break或continue语句,而且永永远远不能用有goto语句。
    但是只要函数保持短小,偶尔出现的return、break或continue语句没有坏处。但是goto在小函数中应该尽量避免使用。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容