Pracuję z Javą od kilku lat, ale do niedawna nie spotkałem się z tą konstrukcją:
int count = isHere ? getHereCount(index) : getAwayCount(index);
To chyba bardzo proste pytanie, ale czy ktoś może to wyjaśnić? Jak to przeczytać? Jestem prawie pewien, że wiem, jak to działa.
- jeśli
isHere
jest prawdą,getHereCount()
nazywa się, - jeśli
isHere
jest fałszywe,getAwayCount()
jest wywoływane.
Poprawny? Jak nazywa się ta konstrukcja?
java
syntax
ternary-operator
conditional-operator
mainstringargs
źródło
źródło
Odpowiedzi:
Tak, jest to skrócona forma
Nazywa się to operatorem warunkowym . Wiele osób (błędnie) nazywa to operatorem trójargumentowym , ponieważ jest to jedyny operator trójargumentowy (trójargumentowy) w Javie, C, C ++ i prawdopodobnie w wielu innych językach. Ale teoretycznie mógłby istnieć inny operator trójskładnikowy, podczas gdy może istnieć tylko jeden operator warunkowy .
Oficjalna nazwa jest podana w specyfikacji języka Java :
Zauważ, że obie gałęzie muszą prowadzić do metod zwracających wartości:
Tak więc, jeśli
doSomething()
idoSomethingElse()
są nieważne metody, nie można skompresować tak:zaangażowany w to:
Proste słowa:
źródło
the
w italicisation dniathe ternary operator
, i że to , co oznacza, że jest błędne, to nieternary operator
jest błędne. Operator trójargumentowy oznacza, że, jak mówi Michael, jest jedynym, który z kolei może prowadzić jedną przyjąć nie może być żadnych innych operatorów trójskładnikowych, co jest, co mówi Michael jest błędne, a ja zgadzam się, że będzie mieć błędne założenie.Inni odpowiedzieli na to w rozsądnym zakresie, ale często podając nazwę „operator trójskładnikowy”.
Będąc pedantem, chciałbym wyjaśnić, że nazwa operatora jest operatorem warunkowym lub „operatorem warunkowym?:”. Jest to operator trójskładnikowy (w tym, że ma trzy operandy) i jest obecnie jedynym operatorem trójskładnikowym w Javie.
Jednak specyfikacja jest dość jasna, że jej nazwa jest operatorem warunkowym lub „operatorem warunkowym?:”, Aby była absolutnie jednoznaczna. Myślę, że wyraźniej jest nazywać to tą nazwą, ponieważ wskazuje ona do pewnego stopnia zachowanie operatora (ocenianie warunku), a nie tylko liczbę operandów, które ma.
źródło
&&
operator warunkowy i oraz operator||
warunkowy lub, ale używa tylko „operatora warunkowego” dla?:
.Zgodnie ze specyfikacją Sun Java , nazywa się to operatorem warunkowym. Patrz rozdział 15.25. Masz rację co do tego, co robi.
Operator warunkowy? : używa wartości logicznej jednego wyrażenia, aby zdecydować, które z dwóch innych wyrażeń powinno zostać ocenione.
Operator warunkowy jest syntaktycznie prawostronny (grupuje od prawej do lewej), tak więc a? B: c? D: e? F: g oznacza to samo co a? B: (c? D: (e? F :sol)).
Operator warunkowy ma trzy wyrażenia operandowe; ? pojawia się między pierwszym a drugim wyrażeniem, a: pojawia się między drugim a trzecim wyrażeniem.
Pierwsze wyrażenie musi być typu logicznego lub logicznego, w przeciwnym razie wystąpi błąd w czasie kompilacji.
źródło
znaczy :
źródło
Nie do końca poprawne, żeby być precyzyjnym:
To „zwrócone” jest bardzo ważne. Oznacza to, że metody muszą zwracać wartość i ta wartość musi być gdzieś przypisana.
Ponadto nie jest dokładnie odpowiednikiem składniowym wersji if-else. Na przykład:
Jeśli zakodowane za pomocą if-else zawsze da więcej kodu bajtowego.
źródło
Potrójny, warunkowy; pomidor, pomidor. To, co jest naprawdę cenne, to inicjalizacja zmiennych. Jeśli (tak jak ja) lubisz inicjować zmienne tam, gdzie są zdefiniowane, warunkowy operator trójskładnikowy (bo to oba) pozwala ci to zrobić w przypadkach, gdy istnieje warunek dotyczący ich wartości. Szczególnie godne uwagi w ostatnich dziedzinach, ale przydatne także w innych miejscach.
na przykład:
Bez tego operatora - pod jakąkolwiek nazwą - musiałbyś uczynić to pole niekońcowym lub napisać funkcję po prostu w celu jej zainicjowania. Właściwie to nie w porządku - nadal można go zainicjować za pomocą if / else, przynajmniej w Javie. Ale uważam, że to czystsze.
źródło
Jeśli warunek jest spełniony,
true
oblicz pierwsze wyrażenie. Jeśli warunek jest takifalse
, oceń drugie wyrażenie.Nazywa się operatorem warunkowym i jest typem operacji trójskładnikowej .
źródło
Konstrukcja ta nosi nazwę operatora trójskładnikowego w technikach informatyki i programowania.
I Wikipedia sugerują następujące wyjaśnienie:
Nie tylko w Javie, ta składnia jest dostępna również w PHP, Objective-C.
W poniższym linku podaje następujące wyjaśnienie, które jest ciche, dobrze je zrozumieć:
Może to być czytelne dla niektórych warunków logicznych, które nie są zbyt złożone, w przeciwnym razie lepiej jest użyć bloku Jeśli- Inaczej z zamierzoną kombinacją logiki warunkowej.
Możemy uprościć bloki If-Else za pomocą tego operatora trójskładnikowego dla jednej linii instrukcji kodu.
Na przykład:
Może być równe następującym:
Więc jeśli odnosimy się do twojego oświadczenia:
W rzeczywistości jest to 100% odpowiednik następującego bloku Jeśli-Inaczej :
Otóż to!
Mam nadzieję, że to komuś pomogło!
Twoje zdrowie!
źródło
Poprawny. To nazywa operator trójskładnikowych . Niektórzy nazywają to również operatorem warunkowym .
źródło
Jego operator trójskładnikowy (? :)
źródło
Możesz być zainteresowany propozycją nowych operatorów, które są podobne do operatora warunkowego. Operatory o wartości null-safe włączą następujący kod:
Byłoby to szczególnie wygodne w przypadku automatycznego rozpakowywania.
Został wybrany do dalszych rozważań w ramach projektu „Moneta projektu” JDK 7.
źródło
W rzeczywistości może to zająć więcej niż 3 argumenty. Na przykład, jeśli chcemy sprawdzić, czy liczba jest dodatnia, ujemna czy zero, możemy to zrobić:
co jest lepsze niż używanie if, else if, else.
źródło
Jest to operator warunkowy i jest czymś więcej niż zwięzłym sposobem pisania instrukcji if.
Ponieważ jest to wyrażenie zwracające wartość, może być używane jako część innych wyrażeń.
źródło
Tak, masz rację. ?: jest zwykle nazywany „trójskładnikowym operatorem warunkowym”, często nazywany po prostu „trójskładnikowym operatorem”. Jest to skrócona wersja standardu warunkowego if / else.
Operator warunkowy trójskładnikowy
źródło
Tak się składa, że bardzo lubię ten operator, ale czytelnik powinien być wzięty pod uwagę.
Zawsze musisz zrównoważyć zwartość kodu z czasem spędzonym na jego czytaniu, ponieważ ma on kilka poważnych wad.
Przede wszystkim jest to sprawa Original Asker. Po prostu spędził godzinę, pisząc o tym i czytając odpowiedzi. Ile czasu zajęłoby autorowi pisanie każdego?: Jako „jeśli / wtedy” przez całe życie. Nie ma godziny, żeby mieć pewność.
Po drugie, w językach typu C masz zwyczaj po prostu wiedzieć, że warunki warunkowe są pierwszą rzeczą w linii. Zauważyłem to, gdy używałem Rubiego i napotkałem linie takie jak:
Gdybym był użytkownikiem Rubiego przez długi czas, prawdopodobnie nie miałbym problemu z tą linią, ale wychodząc z C, kiedy widzisz "callMethodWhthing" jako pierwszą rzecz w linii, spodziewasz się, że zostanie wykonana. ?: Jest mniej tajemniczy, ale wciąż na tyle niezwykły, że może zrzucić czytelnika.
Zaletą jest jednak naprawdę fajne uczucie w brzuszku, kiedy możesz napisać 3-liniowe zdanie if w przestrzeni 1 z nich. Nie można temu zaprzeczyć :) Ale szczerze, niekoniecznie bardziej czytelne dla 90% ludzi po prostu ze względu na jego rzadkość.
Kiedy jest to naprawdę zadanie oparte na wartości logicznej i wartościach, nie mam z tym problemu, ale można je łatwo nadużyć.
źródło
Wyrażenia warunkowe mają zupełnie inny styl, bez wyraźnego wyrażenia if w instrukcji.
Składnia to: wyrażenie-boolowskie? wyrażenie1: wyrażenie2;
Wynikiem tego wyrażenia warunkowego jest
wyrażenie1, jeśli wyrażenie-boolowskie jest prawdziwe;
w przeciwnym razie wynik to wyrażenie2.
Załóżmy, że chcesz przypisać większą liczbę zmiennych num1 i num2 do max. Możesz po prostu napisać instrukcję, używając wyrażenia warunkowego: max = (num1> num2)? num1: num2;
Uwaga: symbole? i: pojawiają się razem w wyrażeniu warunkowym. Tworzą operator warunkowy, zwany także operatorem trójskładnikowym, ponieważ używa trzech operandów. Jest to jedyny operator trójskładnikowy w Javie.
cytowane z: Intro to Java Programming 10. wydanie autorstwa Y. Daniel Liang str. 126 - 127
źródło