代码之家  ›  专栏  ›  技术社区  ›  Sajal Dutta

Java:代码重构/优化

  •  4
  • Sajal Dutta  · 技术社区  · 16 年前

    考虑到可读性、内存使用和其他原因,建议使用哪一种?

    String strSomething1 = someObject.getSomeProperties1();
    strSomething1 = doSomeValidation(strSomething1);
    
    String strSomething2 = someObject.getSomeProperties2();
    strSomething2 = doSomeValidation(strSomething2);
    
    String strSomeResult = strSomething1 + strSomething2;
    someObject.setSomeProperties(strSomeResult);
    

    2.

    someObject.setSomeProperties(doSomeValidation(someObject.getSomeProperties1()) + 
                                 doSomeValidation(someObject.getSomeProperties2()));
    

    8 回复  |  直到 3 年前
        1
  •  17
  •   Greg    16 年前

    我同意:

    String strSomething1 = someObject.getSomeProperties1();
    String strSomething2 = someObject.getSomeProperties2();
    
    // clean-up spaces
    strSomething1 = removeTrailingSpaces(strSomething1);
    strSomething2 = removeTrailingSpaces(strSomething2);
    
    someObject.setSomeProperties(strSomething1 + strSomething2);
    

        2
  •  12
  •   bradheintz    16 年前

    String strSomething1 = doSomeValidation(someObject.getSomeProperties1());
    String strSomething2 = doSomeValidation(someObject.getSomeProperties2());
    someObject.setSomeProperties(strSomething1 + strSomething2);
    

        3
  •  6
  •   Bill the Lizard    16 年前

    我喜欢第二种。只需稍加格式化即可使其可读,而无需声明额外的中间引用。

    someObject.setSomeProperties(
        doSomeValidation( someObject.getSomeProperties1() ) + 
        doSomeValidation( someObject.getSomeProperties2() ));
    

    方法名称提供了所需的所有解释。

        4
  •  4
  •   Vijay Dev    16 年前

    . 如果这些方法只执行它们的名称所指示的操作,我看不到任何内存问题。不过,我会因连接而有所不同。由于Java字符串的不变性,随着字符串concats的增加,性能肯定会下降。

    只是想知道,您真的编写了自己的removeTrailingSpaces()方法吗?还是只是一个示例?

        5
  •  3
  •   Aaron Digulla    16 年前

    我试着每行做一次手术。主要原因是:

    setX(getX().getY()+getA().getB())
    

        6
  •  2
  •   Argelbargel    16 年前

    对我来说,这取决于上下文和周围的代码。

    [编辑:没有任何意义,抱歉] 如果是在“setSomeObjectProperties()”这样的方法中,我更喜欢变量2,但如果删除空格不是一个重要的操作,可能会创建一个私有方法“getProperty(String name)”,该方法会删除尾随空格

    如果验证属性是方法的一个重要步骤,那么我会将该方法称为“setValidatedProperties()”,并希望使用第一个建议的变体:

    validatedProp1 = doValidation(someObject.getSomeProperty1());
    validatedProp2 = doValidation(someObject.getSomeProperty2());
    someObject.setSomeProperties(validatedProp1, validatedProp2);
    

    如果验证不是此方法的重要内容(例如,返回未验证的属性没有意义),我会尝试将验证步骤放在“getSomePropertyX()中”

        7
  •  1
  •   Julien Oster    16 年前

    就我个人而言,我更喜欢第二个。它不那么杂乱,我也不必跟踪那些临时变量。

    但是,使用更复杂的表达式可能很容易更改。

        8
  •  1
  •   PhiLho    16 年前