Как я могу сократить этот код с помощью троичных операторов? - PullRequest
1 голос
/ 04 марта 2011

У меня есть следующий фрагмент кода

public class direction do(direction)
    if(istrue) {
        left = do(left);
    } else {
        right = do(right);
    }
}

Мне было интересно, есть ли способ сократить это.Я пытался использовать троичные операторы, но столкнулся с некоторыми трудностями.предложения?

Ответы [ 3 ]

4 голосов
/ 04 марта 2011

В вашем примере нет смысла использовать тернарный оператор.

Значение троичного оператора в Java (и других C-подобных языках) состоит в том, что выражение троичного оператора представляет собой выражение , тогда как оператор if является оператором .Выражения дают значения, а выражения - нет.Если вы не используете значение, полученное из троичного оператора выражение , то вам не нужно использовать троичный оператор.Только не делайте этого.

Для вашего интереса, вот пример правильного использования троичного оператора:

int max(int x, int y) {
    return x > y? x : y;
}
2 голосов
/ 04 марта 2011

Вы можете использовать троичное выражение, если другие программисты в вашей команде не против. Так что, если ваш пример был в действительной Java:

public void Do(Direction direction)
{
    (istrue)? left = Do(left) : right = Do(right);
}

Вы можете опустить скобки в if:

public void Do(Direction direction)
{
    if ( istrue )
        left = Do(left);
    else
        right = Do(right);
}

Или у вас даже может быть один вкладыш:

public void Do(Direction d)    { (istrue)? left = Do(left) : right = Do(right); }

Прежде всего, выберите стиль, который понятен и не слишком умен. Используйте больше строк, если они делают ваш код легче для чтения и понимания.

Однострочники обычно не очень читабельны, хотя в некоторых случаях они имеют смысл (для меня), особенно если у вас есть семейства очень похожих небольших методов:

public String getFirstName()        { return first_name; }
public String getLastName()         { return last_name; }
public String getAddress1()         { return address1; }
public String getAddress2()         { return address2; }
public String getCity()             { return city; }
public String getState()            { return state; }
public String getZip()              { return zip; }
0 голосов
/ 04 марта 2011

Ваш код требует, чтобы вы присваивали две разные переменные (left или right) в зависимости от условия. Тернарное выражение не поможет вам в этом, поскольку его нельзя использовать в левой части назначения.

Это оставляет RHS (двух) назначений. Хотя теоретически вы можете использовать троичное выражение, оно, вероятно, сделает код длиннее.

Итак, короткий ответ: троичный оператор не поможет.

...