Java进阶之路【代码篇】——《CleanCode》编程规则精编(2)函数

14 篇文章 0 订阅
11 篇文章 0 订阅

函数

命名

使用描述性的名称。
函数又称为方法,其目的是要完成一项功能。命名应该能够描述出这件事。

大小

要短小。肉眼可见的量化标准是:
- 不长于一屏
- 缩进层级不高于2层

功能

  • 要符合单一职责原则。面向对象SOLID原则之一。一个函数只做一件事情,没有副作用。
  • 分隔指令与询问。要么询问一件事,要么命令一件事。也是单一职责的一种体现
  • 每个函数中的内容保持在同一抽象层级

    错误的抽象层级:

public void printBill() {
    System.out.println("This is a header");
    System.out.println("================");
    printDetails();
}

private void printDetails() {
    // print details info
}

这里printBill中的抽象层级就是错误的,混合了两个层级的抽象。应改为:

public void printBill() {
    printHeader();
    printDetails();
}

private void priintHeader() {
    System.out.println("This is a header");
    System.out.println("================");
}

private void printDetails() {
    // print details info
}

保持同一抽象层级的好处是,阅读程序时思维更加连贯。符合人类的思维逻辑。

参数

  • 不应过多。个人理解:除特殊清楚,不超过4个。如果数量过多,或者参数关联性较强,则可封装为参数对象。如一个方法需要传两个点的坐标用来绘制一个线段,构造一个point对象远比把两个点的XY坐标当做参数传递进去要好得多。
    good:‘drawALine(point start,point end)
    ugly:‘drawALine(int x1, int y1, int x2, int y2)
  • 不使用代码类型的参数。鬼知道那是什么意思?
  • 对于需要发生转换的参数,使用返回值,而不是把参数直接传递进去。

错误的处理方式:

pubic void main(String[] args) {
    StringBuffer sBuffer = new StringBuffer();
    initBuffer(sBuffer);
}

public void initBuffer(StringBuffer buffer){
    buffer.append("something");
}

正确的处理方式:

pubic void main(String[] args) {
    StringBuffer sBuffer = new StringBuffer();
    sBuffer = initBuffer();
}

public StringBuffer initBuffer(){
    StringBuffer buffer = new StringBuffer();
    buffer.append("something");
    return buffer;
}

避免了不易被人发觉的参数改动,增加程序易读性。同时也便于调试。

错误处理

  • 使用异常,而不是错误代码。不要指望注释能够解释你的错误代码,下一个修改错误代码的人未必会去维护相应的注释,不要使用错误代码就好了。
  • 错误处理就是一件事情。不要在错误处理里面做错误处理以外的事情。除了合理的关闭资源,日志记录,发出提醒,没有其他事情有什么正当的里有需要在错误处理里完成。
  • 错误信息不要骗人。相信我,说不定你会骗了自己人。
  • 另外如果还有强迫症的话。试着把需要try catch的部分单独拿到另外的函数中。它对整洁的代码真的是噩梦一样的存在。

其他

  • 尽可能少的使用swtich,那太不面向对象了。
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值