Co oznacza ten wiersz kodu?
label.frame = (inPseudoEditMode) ? kLabelIndentedRect : kLabelRect;
?
I :
mylić mnie.
objective-c
c
syntax
operators
conditional-operator
danielreiser
źródło
źródło
variable ?: anotherVariable
, co to oznacza?(valOrVar != 0) ? valOrVar : anotherValorvar
Odpowiedzi:
To jest operator trójskładnikowy (Cel-C jest nadzbiorem C):
jest semantycznie równoważny z
Trójka bez pierwszego elementu (np.
variable ?: anotherVariable
) Oznacza to samo co(valOrVar != 0) ? valOrVar : anotherValOrVar
źródło
?:
) jest jeszcze lepszy w sytuacjach, w których lewa strona jest wyrażeniem, ponieważ?:
uniemożliwia jej ocenę więcej niż jeden raz. Na przykład:[myArray firstObject] ? [myArray firstObject] : @"Hello World";
dzwonifirstObject
dwukrotnie (jeślifirstObject
nie zwracanil
), gdzie[myArray firstObject] ?: @"Hello World";
daje identyczny wynik, ale nigdy nie dzwonifirstObject
więcej niż raz.?:
jest również nazywany operatorem Elvisa ze względu na podobieństwo emoji do piosenkarza. I oczywiście w tym przypadku, gdy upuszczamy jeden element, nie jest on już operatorem trójskładnikowym, ale operatorem binarnym . Operatory binarne obejmują większość operatorów zazwyczaj używamy podczas programowania (*
,+
,-
,^
,|
,||
,&
,>>
, etc).Jest to operator trójskładnikowy lub warunkowy. Jego podstawowa forma to:
Gdzie wartości będą oceniane tylko wtedy, gdy zostaną wybrane.
źródło
condition ? codeIfTrue : codeIfFalse
Po prostu logika byłaby
(condition) ? {code for YES} : {code for NO}
źródło
Opierając się na doskonałym wytłumaczeniu Barry'ego Warka ...
To, co jest tak ważne w trójskładnikowym operatorze, to fakt, że można go używać w miejscach, których nie mógłby wykonać if-else. tj .: Wewnątrz warunku lub parametru metody.
... co jest doskonałym zastosowaniem dla stałych preprocesora:
Dzięki temu nie musisz używać i zwalniać zmiennych lokalnych we wzorcach if-else. FTW!
źródło
To tylko zwykły operator trójskładnikowy . Jeśli część przed znakiem zapytania jest prawdziwa, ocenia i zwraca część przed dwukropkiem, w przeciwnym razie ocenia i zwraca część po dwukropku.
jest jak
źródło
Jest to część C, więc nie jest specyficzna dla Celu C. Oto tłumaczenie na
if
oświadczenie:źródło
To tylko krótka forma napisania instrukcji „jeśli-to-jeszcze”. Oznacza to to samo, co następujący kod:
źródło
Cel C
Dla Swift
źródło
Ciekawostka, w celu-c, jeśli chcesz sprawdzić null / nil Na przykład:
Szybki sposób to zrobić:
Następnie możesz zaktualizować go w najprostszy sposób:
Ponieważ w celu C:
Powiedzmy, że piszesz:
drugi parametr zwraca wartość logiczną, dlatego zgłaszany jest wyjątek.
źródło
Jest to operator trójskładnikowy, podobnie jak instrukcja if / else.
W operatorze trójskładnikowym wygląda to tak: warunek? co zrobić, jeśli warunek jest prawdziwy: co zrobić, jeśli jest fałszywy;
źródło
Właśnie nauczyłem się czegoś nowego na temat operatora trójskładnikowego. Krótka forma pomijająca środkowy operand jest naprawdę elegancka i jest jednym z wielu powodów, dla których C pozostaje istotny. Do waszej informacji, po raz pierwszy naprawdę się tym zajmowałem w kontekście procedury zaimplementowanej w języku C #, która obsługuje również operatora trójskładnikowego. Ponieważ operator trójskładnikowy znajduje się w C, zrozumiałe jest, że byłoby w innych językach, które są w zasadzie jego rozszerzeniami (np. Objective-C, C #).
źródło
Jak wszyscy to powiedzieli, jest to sposób reprezentowania operatora warunkowego
za pomocą operatora trójskładnikowego
(condition)? true:false
Aby dodać dodatkowe informacje, W trybie szybkim mamy nowy sposób ich reprezentowania za pomocą??
.Który jest podobny do
jest równa
if (a>c)?a:c
==> Jest równeif (a>c)?:c
zamiast
?:
możemy użyć??
jest szybki.źródło
znaczy
źródło