2013-02-28 4 views
0

У меня есть метод, который условно вызывает другого. Например:Одиночная строка, если содержит метод вызова

public boolean contionallyDoSomething(boolean something){ 
    boolean didSomething = false; 
    if(something){ 
     theSomething(); 
     didSomething = true; 
    } 
    return didSomething; 
} 

public void theSomething(){ 
    //do something 
} 

Я полагал, что я мог бы переписать это:

public boolean contionallyDoSomething(boolean something){ 
    boolean didSomething =something && theSomething(); 
    return didSomething; 
} 

public boolean theSomething(){ 
    //do something 
    return true; 
} 

Второй метод чувствует себя намного аккуратнее, и я лично это нравится. Однако я немного устал писать код, как будто это может вернуться, чтобы укусить меня. Каковы нижние стороны? Каковы преимущества/недостатки?

Благодаря

+2

Я предполагаю, что вы хотите, чтобы «didSomething» было инициализировано ложным в первом разделе? – cmonkey

+0

действительно. исправлено спасибо – crunchBar

+3

Ваш код недействителен, так как 'theSomething()' возвращает void - вы не можете использовать его как RHS оператора '&&'. –

ответ

1

Самый большой недостаток этого кода, особенно, если оно совершено в общее хранилище является читаемость. if statement branching легко отображает намерение, где, поскольку сжатый код требует второго взгляда (для простых смертных), чтобы расшифровать то, что он делает.

Что касается преимуществ, то вы пишете меньше кода и в некоторой степени компилятор оптимизирует его для работы быстрее.

0
public boolean contionallyDoSomething(boolean something) { 
    if (something) { 
     theSomething(); 
    } 
    return something; 
} 

Несомненно, это имеет смысл, вместо того, чтобы возвращать второе логическое значение, которое будет таким же, как и пройденное?

+0

Я исправил это сейчас. Извините ... слишком много ctrl + z/y! – crunchBar

+0

Вам не хватает точки, вы все равно получаете два булевых значения, которые являются точными. 'something' и' didSomething' никогда не будут отличаться. – Rawkode

+0

, конечно, они будут в этом случае. Но симтика отличается. – crunchBar

0

Вы пробираться в субъективную воду. Все плюсы и минусы связаны с читабельностью. Лично я сделаю еще один шаг и напишу его как:

public boolean contionallyDoSomething(boolean something) { 
    return something && theSomething(); 
} 

Но я считаю, что плотность в коде повышает читаемость. Другие могут (и будут) не соглашаться.

Смежные вопросы