zoukankan      html  css  js  c++  java
  • 代码整洁之道-函数

    什么是一个好的函数或者叫方法,只要能让函数明确的表达其意图,让读者能够一眼看出是一个怎样的函数,其接收什么参数,返回什么结果,做了什么事情。能做到这,大概就能算作一个好的函数了,看上去很简单。那么问题来了,如果做到这点呢?

    1. 短小

    想象一下,一个击败航的复杂函数和一个只有十几行的函数,哪一个能够让人一眼看出其意图并理解其行为呢?显然是后者。当然,现在大多数语言完全可以将几百行代码写到一行,那样毫无格式的代码只会让人难以理解。

    2.代码块和缩进

    对于if、else等语句来说,其中包含的代码块最好只有一行,而这一行应该是一个函数调用语句,让读者可以一看看出其意图

    3.函数名

    一个好的函数名十分重要,如何定义一个好的函数名呢?只可意会。如果一个函数,你仅看函数名,就能明白他是做了什么,返回什么,那它就是一个好的函数名了。

    4.只做一件事

    函数应该只做一件事,并且做好这一件事足矣。这个大家都承认吧,并且已经是一个共识了,但是说起来容易,做起来却并没有那么简单。那么如何确保函数只做一件事呢?我们可以尝试这在函数中再拆出一个函数来,当然,拆出的函数不能仅仅是将代码搬过去,它应该有自己的责任,能够对新的函数起一个好的函数名。如果不能再拆出这样的函数,那么他应该可以了。

    5. 函数参数

    最理想的参数数量是0,其次递增,3个参数就已经很多了。

    就函数测试而言,没有参数的函数测试简直小菜一碟,若有了一个参数,就需要测试很多种组合,之后每多一个参数,测试的组合数量都是指数级增长。

    就调用者而言,没有参数的函数直接调用即可,而有了参数就需要理解每一个参数是什么,也增加了调用者的时间。

    如果函数的参数中存在布尔值,不好意思,并不推荐这样做,因为它明确的告诉调用者如果为true就会这样做,如果为false就会那样做。更好的做法是其拆分成两个函数。

    同时,如果一个函数需要三个以上的参数,就可以考虑将其中的一些参数封装成类了。比如描绘笛卡尔坐标的x、y。

    6.无副作用

    副作用是函数的一个谎言,函数名承诺只做这一件事,但是他偷偷的做了其他事情。

    比如,一个checkOrderStatus函数,明显它是在检查订单状态,但是如果它在检查的同时对状态进行了修改,就会让人很困惑,甚至在排查错误的时候,看到这样一个函数都不会点进去看。更好的做法是将其拆成两个函数。

    7. 每个函数一个抽象层级

    说起来很简单,我们在阅读代码时,往往采用自顶向下的顺序来看,如果每个函数都只处理自己所在层级的逻辑,阅读和维护就很舒服了。

    这个虽然我觉得很有道理,但是我没看懂啊。

    。。。等等


    那么问题来了,如何写出符合这样规范的代码呢?

    其实没有必要再一开始写的时候就按照规则来写,那样很容易打乱思路,甚至事倍功半。完全可以在写完后在返回来认真打磨、拆解函数、修改名称、消除重复代码等.

  • 相关阅读:
    面试中AOP这样说,面试官只有一个字:服!
    Spring第三天,详解Bean的生命周期,学会后让面试官无话可说!
    Spring第二天,你必须知道容器注册组件的几种方式!学废它吊打面试官!
    C#一些基础知识回顾
    关闭WiN10自动更新和后台程序。
    python脚本显示运行进程
    选择pyqt5理由
    anaconda3下64位python和32位python共存
    爬取百度搜索信息
    python尝试windows在用端口
  • 原文地址:https://www.cnblogs.com/hujingnb/p/11568593.html
Copyright © 2011-2022 走看看