Что это за синтаксис, называемый Bool bool = object.method ()> 0 в Java - PullRequest
3 голосов
/ 14 июня 2010

Я только что видел эту строку кода в коде моих соседей по дому.

Bool bool = method() > 0;

или

string name = "Tony";
boolean nameIsTony = name == "Tony";

Это приведет к тому, что nameIsTony станет true.

То есть у вас может быть встроенное условное выражение?

Как это называется?

Ответы [ 6 ]

6 голосов
/ 14 июня 2010

name == "Tony" (точнее, name.equals("Tony"), как и должно быть) - это логическое выражение, поэтому я предполагаю, что логическое выражение - это наиболее близкий термин к тому, что вы ищете.

Это выражениеа не утверждение - оно оценивает что-то, а не делает что-то.И это не совсем условно, поскольку оно всегда оценивается как логическое значение - в его поведении нет ничего условного, только его результат.Так что я бы пошел на «логическое выражение».«Встроенный» на самом деле не нужен.

2 голосов
/ 14 июня 2010

все о Приоритет оператора

равенство (==) имеет более высокий приоритет, чем присвоение (=).

, поэтому boolean nameIsTony = name == "Tony";

  1. имя == Выражение «Тони» оценивается как истинное

  2. и затем присваивается nameIsTony.

1 голос
/ 25 апреля 2011

Просто чтобы сделать такие назначения более простыми и понятными, многие языки, включая Java, предоставляют троичный оператор (? :), который используется следующим образом:

Employee emp = "manager".equals(profile) ? new Manager() : new Engineer();

Так что, если профиль равен «manager», то Employee emp будетустановить новый Manager (), иначе он установлен на новый Engineer ().

Также обратите внимание, что я написал "manager" .equals (профиль) вместо profile.equals ("manager"), причина в том, что хотяоба они верны, но использование 1-го способа - лучший способ, так как 2-й способ дает NPE (исключение нулевого указателя), если профиль равен нулю (если и до тех пор, пока вы действительно не захотите сообщить об исключении NPE, фактически даже вв этом случае лучше добавить проверку профиля, отличного от нуля).

1 голос
/ 14 июня 2010
Bool bool = method() > 0;

присваивает результат выражения method() > 0 - значение boolean - переменной bool.

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

Bool bool = (method() > 0);

Я полагаю, что «встроенное логическое выражение» является подходящим именем для него.

0 голосов
/ 14 июня 2010

За некоторыми исключениями, выражения могут быть вложены в другие выражения. Таким образом, каждое из них является логическим выражением:

true
false
x > 0
(x >= 0) && (x <= 5)
100 == 100
Integer.parseInt("100") == 100
true & (true) & ((true)) & (((true)))

Что касается, скажем, объявления локальной переменной, вы можете использовать любое выражение (при условии, что оно грамматически и семантически правильно).

Так что в этом нет ничего особенного:

boolean b = (x >= 0) && (x <= 5); // nothing special

На самом деле, вы также можете вкладывать задания так:

x = y = z; // use judiciously!

Глядя на грамматику

Рассмотрим следующую выдержку из спецификации языка Java:

JLS 14.4 Заявления о декларации локальной переменной

A объявление локальной переменной оператор объявляет одно или несколько имен локальных переменных.

LocalVariableDeclarationStatement:
        LocalVariableDeclaration ;

LocalVariableDeclaration:
        VariableModifiers Type VariableDeclarators

VariableDeclarators:
        VariableDeclarator
        VariableDeclarators , VariableDeclarator

VariableDeclarator:
        VariableDeclaratorId
        VariableDeclaratorId = VariableInitializer

VariableDeclaratorId:
        Identifier
        VariableDeclaratorId [ ]

VariableInitializer:
        Expression
        ArrayInitializer

Здесь мы видим, что оператор объявления локальной переменной допускает необязательную инициализацию для каждого идентификатора. Каждый VariableInitializer является грамматически Expression или ArrayInitializer.

Таким образом, someType anIdentifer = someExpression; в этом контексте - просто оператор локальной переменной с инициализатором. someExpression может быть грамматически любым выражением.


Примечание к ArrayInitializer

ArrayInitializer такие вещи, как { 1, 2, 3 } и { 4, 5, 6 }. Обратите внимание, что грамматическое правило ArrayInitializer не является частью производства Expression. Вот почему вы можете, скажем, int[] x = { 1, 2, 3 }; в объявлении с инициализатором, но не позже x = { 4, 5, 6 }; в присваивании.

0 голосов
/ 14 июня 2010

Это называется "назначение".

...