美文网首页
编写可读代码的艺术 - 一次只做一件事

编写可读代码的艺术 - 一次只做一件事

作者: DZQANN | 来源:发表于2022-03-28 21:14 被阅读0次

将任务分解,一次只做一件事是单一职责的基础,对于代码的服用也会非常有利

首先书里面举了一个例子,很简单,但是在我们的开发过程中经常会出现

需求比较简单,给一个"location_info"对象,里面有4个字段,LocalityName、SubAdministrativeAreaName、AdministrativeAreaName、CountryName分别对应城市、大城市、州和国家名。给4个字段的值,生成一个Geo的Display。取值逻辑分两部分,第一部分从前面3个字段里取值,优先取靠前的,比如LocalityName有值就不取SubAdministrativeAreaName。如果3个都没有值就用默认的"Middle-ofNowhere"。第二部分取CountryName,如果为空则取"Planet Earth"

public String getDisplay(LocationInfo locationInfo) {
  String place = locationInfo.getLocalityName();
  if (!StringUtils.hasLength(place)) {
    place = locationInfo.getSubAdministrativeAreaName();
  }
  if (!StringUtils.hasLength(place)) {
    place = locationInfo.getAdministrativeAreaName();
  }
  if (!StringUtils.hasLength(place)) {
    place = "Middle-of-Nowhere";
  }
  if (StringUtils.hasLength(locationInfo.getCountryName())) {
    place += ", " + locationInfo.getCountryName();
  } else {
    place += ", Plane Earth";
  }
  return place;
}

对于这段代码,抛开本身说的没有分割任务,我不是很喜欢给一个变量设默认值,然后后面判断不断变化的做法。我更喜欢变量只是短暂的存储一各值,尽量减少变化。

代码比较简单

public class Demo {

    private static final List<Function<LocationInfo, String>> FIRST_PART_GETTERS = ImmutableList.of(
            LocationInfo::getLocalityName,
            LocationInfo::getSubAdministrativeAreaName,
            LocationInfo::getAdministrativeAreaName
    );
    private static final String DEFAULT_FIRST_PART = "Middle-of-Nowhere";
    private static final String DEFAULT_SECOND_PART = "Plane Earth";

    public String getDisplay(LocationInfo locationInfo) {
        return this.getFirstPart(locationInfo) + ", " + this.getSecondPart(locationInfo);
    }

    private String getSecondPart(LocationInfo locationInfo) {
        return StringUtils.hasLength(locationInfo.getCountryName()) ?
                locationInfo.getCountryName() :
                DEFAULT_SECOND_PART;
    }

    private String getFirstPart(LocationInfo locationInfo) {
        return FIRST_PART_GETTERS.stream()
                .map(e->e.apply(locationInfo))
                .filter(StringUtils::hasLength)
                .findFirst()
                .orElse(DEFAULT_FIRST_PART);
    }
}

这样做的好处就是把每一个字段的取值都独立开了,方便增加新的需求,而且代码层次比较清晰,如果我只看getDisplay的话,直接就能知道前面一部分拼上逗号再拼后面一部分。每一个字段的取值逻辑如果有变化也方便修改。

我们的一些接口的塞值逻辑,就是平铺把所有字段的set判断逻辑都写在一个函数里,这样阅读的时候就总有一种被打断的感觉。

相关文章

  • 代码可读性

    这是一篇结合项目代码与《编写可读艺术的代码》一书结合的读书笔记 代码应当易于理解 《编写可读艺术的代码》这本书告诉...

  • 编写可读代码的艺术

    【代码质量】: 代码行数、时间复杂度、内存消耗,准确率; 《clean code》:在代码阅读过程中人们说脏话的频...

  • 编写可读代码的艺术

    来源 《编写可读代码的艺术》 第2章 把信息装到名字里 1. 选择专业名词 找到更有表现力的词 2. 避免泛泛的名...

  • 编写可读代码的艺术

    以下是书里文字的引用与整理 前言 可读性基本定理:代码的写法应当使别人理解它所需的时间最小化。 一、表面层次的改进...

  • 《编写可读代码的艺术》

    1.调整心态认识到编写可读代码的必要性。在编写可拓展代码,可用代码和可读代码之间的优先级,编写可读代码较高;克服思...

  • 编写可读代码的艺术

    1.写在前面 最近花了一个周的零星时间,看了《编写可读代码艺术》,收获颇多。虽然平时也经常使用书中提到的一些方法编...

  • 编写可读代码的艺术

    "阅读本文大约需要 5 分钟" 很多程序员在学习一门新的编程语言时,会先学习基础的语法和自带的基础库,稍加熟练后便...

  • 编写可读代码的艺术

    先放大佬的视频教学地址:https://github.com/biezhi/write-readable-code...

  • 编写可读艺术的代码

    前言 编写代码,实质是在梳理逻辑,为了完善整个逻辑流程,我们借用编程语言的变量、函数、流程控制、循环、注释、方法等...

  • 读《编写可读代码的艺术》

    《编写可读代码的艺术》是与Clean Code相似的书,提供改善“丑陋”代码的技巧。本书193页,共16章内容。 ...

网友评论

      本文标题:编写可读代码的艺术 - 一次只做一件事

      本文链接:https://www.haomeiwen.com/subject/oqubjrtx.html