• 一 学习笔记


    1,本文翻译自 http://eclipsesource.com/blogs/2012/06/06/cleaner-code-with-guava-optionals-and-preconditions/,有说的不对的地方,欢迎斧正。

    2,我开发软件的时候,朝着干净代码发展是我的特权,有一段时间,我曾在我几乎所有的项目中使用谷歌瓜娃(Google Guava),理由很简单,guava为我编写漂亮代码提供了很大的便利,今天,我想向你展示下我是怎么使用预判断来避免不必要的if/throw 申明,使用选择来提升代码逻辑性。

      预判断并不是新东西,Apache Commons项目有类似的功能,但是并没有瓜娃提供的解决方案简洁,预判断用来验证方法的参数,状态等等,当条件判断结果是false,预判断就会抛出预想的异常,预想的意味着以下情形,当检查状态的时候,你可以使用Preconditions.checkState( 条件 ),如果条件判断的结果是false,将会抛出非法状态异常,同样,另外一种预判断checkArgument会抛出非法参数异常,当然,使用预判断你唯一需要明确的时候就是使用静态导入,让我们来看一个例子。

      给出的是一个方法,接受list作为参数,当这个方法被调用的时候,我们需要检查list是不是null和是不是空,一般的java解决方案如下所示:

    public void doSomething( List<Object> list ) {
      if( list == null ) {
        throw new IllegalArgumentException( "List must not be null" );
      }
      if( list.isEmpty() ) {
        throw new IllegalArgumentException( "List must not be empty" );
      }
      doSomethingMore( list );
    }

      当使用guava的预判断,代码的数量明显减少,解决方案如下所示.

    public void doSomething( List<Object> list ) {
      checkArgument( list != null, "List must not be null" );
      checkArgument( !list.isEmpty(), "List must not be empty" );
      doSomethingMore( list );
    }

      这肯定是一个提升,但是,当这个方法结合瓜娃的选择变得真正的性感,选择是一个概念,被设计来避免病态的null概念(阅读这里理解我为神马叫她“病态”),这里明显有一个对象容器来避免空引用,例如,null 大部分时间用来检查一个对象是不是存在,如果不存在,一个空指针异常发生了,结果如以下代码所示:

    public void doSomething() {
      if( this.field == null ) {
        throw new IllegalStateException( "Field is not initialized" );
      }
      doSomethingMore();
    }

      与其保存这个对象直接放到field,我经常使用选择.这避免了我代码中的空指针异常并且显得更合语法,上面这个例子结合选择变成了如下所示:

    public void doSomething() {
      checkState( field.isPresent(), "Argument is not initialied" );
      doSomethingMore();
    }

    最后,由你决定这个代码是不是更好更简洁,通过使用预判断和选择.从我的观点来看,这么写更具有可读性,我期待在评论中听到你的观点 .

    no pays,no gains!
  • 相关阅读:
    git学习
    我们碰到了大麻烦,一个新来的传教士惹恼了上帝,上帝很愤怒,要求我们把圣经(bbe.txt)背熟,直至他说哪个单词,我们就要飞快的回答出这个单词在第几行第几个单词位置。听说你是个优秀的程序员,那么髟助我们完成这个不可能的任务吧
    jquery 获取radio的值
    <label>标签 for属性
    jquery easyui datebox 的使用
    解析json对象出现$ref: "$.list[0]"的解决办法
    $.messager.show({
    jquery --- 定时器和实时进度条
    js每隔5分钟执行一次ajax请求的实现方法
    JavaScript中清空数组的三种方式
  • 原文地址:https://www.cnblogs.com/xingzc/p/6390159.html
Copyright © 2020-2023  润新知