2013-04-09 3 views
0

Я довольно новичок в java, так что медведь со мной. Я пытаюсь сконденсировать некоторые из моего кода и задавался вопросом, как вы пишете тройной оператор с & & или ||. Итак, как бы я превратил приведенный ниже код в сокращенный тернарный оператор.Яркий оператор Java с логическим оператором

if(homePage != null && currentParentPage.getPath().equals(homePage.getPath())){ 
    isParent = true; 
} 
+4

Как правило, вы должны оптимизировать читаемость, а не плотность. – yshavit

+0

Да, в общем случае, вероятно, лучше назначить логическое значение, а затем проверить логическое значение, чтобы ваше утверждение становилось слишком длинным и нечитаемым. И имейте в виду, что тройка компилируется не более эффективно, чем эквивалент if/else. –

+0

^true, если вы не пишете код, который будет передан клиенту для выполнения (т.е. javascript) – 75inchpianist

ответ

2

На самом деле, чтобы преобразовать код в троичной вы «d иметь код

isParent = (homePage != null && currentParentPage.getPath().equals(homePage.getPath())) 
      ? true : isParent; 

Ведение

isParent = (homePage != null && currentParentPage.getPath().equals(homePage.getPath())); 

или

isParent = (homePage != null && currentParentPage.getPath().equals(homePage.getPath())) 
      ? true : false; 

изменяет isParent на ложной ноге, что не то, что исходный код делает.

+0

Спасибо @HotLicks это очень полезно! –

1

Тернарный оператор предназначен для представления случая if-else. В вашем случае содержится только аргумент if, поэтому он вам не нужен. Вы могли бы использовать, если вы явно хотите установить isParent ложь, если это не удается, то есть

isParent = (homePage != null && 
    currentParentPage.getPath().equals(homePage.getPath())) ? true : false; 

Это означает, что если условие перед? имеет значение true, возвращается первое значение (true), а второе возвращается (false).

В соответствии с приведенным ниже комментарием вам действительно не нужно использовать тройники для булевого назначения. Это может быть упрощена просто:

isParent = (homePage != null && 
    currentParentPage.getPath().equals(homePage.getPath())); 
+4

Всегда, всегда, всегда, если вы обнаруживаете, что пишете 'foo? true: false', просто напишите 'foo'. –

+0

Спасибо @ 75inchpianist Я ценю объяснение –

1
(homePage != null && currentParentPage.getPath().equals(homePage.getPath())) 
     ? isParent = true 
     : isParent = false; 

Я хотел бы предложить, чтобы сделать это самым простым способом - вместо того, чтобы использовать трехкомпонентную операции

isParent = (homePage != null && currentParentPage.getPath().equals(homePage.getPath())); 
+1

Но ни то, ни другое. И похоронить назначение внутри заявления, как правило, плохая форма. –

+0

@HotLicks ... вы указали на отсутствующий ')' ';)' –

+0

Я буду использовать его после ';'. –