Элвис оператор
Необходимо перенести содержимое этой статьи в статью Тернарная условная операция и заменить эту статью на перенаправление. |
В некоторых языках компьютерного программирования оператор Элвиса часто пишется ?
:
, - это двоичный оператор, который возвращает вычисленный первый операнд, если этот операнд возвращает истину (в соответствии с соглашением, зависящим от языка, оно же. истинное значение), а в противном случае возвращает вычисленный второй операнд (в этом случае первый операнд считается аналогичным логически ложному) . Элвис оператор идентичен короткому замыканию с семантикой "последнего значения" и похож на тернарный оператор, ?
:
, поскольку выражение оператора Элвиса A ?
: B
приблизительно равно троичному условному выражению A ?
A: B.
Название «оператор Элвиса» назван так, потому что в его обычном обозначении ?
:
, если смотреть сбоку, напоминает смайлик Элвиса Пресли с его фирменной прической . [1]
Аналогичным оператором является оператор объединения значений NULL, в котором логическая проверка истинности (истинности) заменяется проверкой на ненулевое значение. Обычно так пишут ??
и его можно увидеть в таких языках, как C# [2] или Dart [3]
Альтернативы[править | править код]
В нескольких языках, таких как Common Lisp, Clojure, Lua, Object Pascal, Perl, Python, Ruby и JavaScript, оператор OR (обычно ||
или или
) ведет себя так же, как описано выше: возвращает свой первый операнд, если он будет вычислять истинное значение, и в противном случае вычисляет и возвращает свой второй операнд, который может быть истинным или ложным значением. Когда левая часть верна, правая часть даже не оценивается; она "закорочена". Это отличается от поведения в других языках, таких как C/C++, где результатом ||
всегда будет (правильное) логическое значение.
Примеры[править | править код]
Логический вариант[править | править код]
На языке, поддерживающем оператор Элвиса, это:
x = f() ?
: g()
установит x
равным результату f()
если этот результат истинен, и результату g()
в противном случае.
Это эквивалентно примеру ниже, использующему условный тернарный оператор :
x = f() ?
f() : g()
за исключением того, что он не оценивает f()
дважды, если он дает истинный результат.
Вариант ссылки на объект[править | править код]
Результатом этого кода будет ссылка на объект, который гарантированно не будет нулевым. Функция f()
возвращает ссылку на объект вместо логического значения и может возвращать значение null, которое повсеместно считается ложным:
x = f() ?
: "default value"
Языки, поддерживающие оператор Элвиса[править | править код]
- Perl, начиная с версии 5.10, предоставляет логический оператор ИЛИ:
//
, эквивалентныйdefined $a ?
$a : $b
[4] - В GNU C и C++ (то есть в C и C++ с расширениями GCC ) второй операнд тернарного оператора является необязательным. [5] Это имело место начиная с GCC 2.95.3 (март 2001 г.), и, похоже, это оригинальный оператор Элвиса. [6]
- В Apache Groovy «оператор Элвиса»
?
:
задокументирован как отдельный оператор; [7] эта функция была добавлена в Groovy 1.5 [8] (декабрь 2007 г.). Groovy, в отличие от GNU C и PHP, не позволяет просто использовать второй операнд?
:
опустить; скорее, двоичный?
:
должен быть записан как один оператор, без пробелов между ними. - В PHP можно исключить среднюю часть тернарного оператора, начиная с PHP 5.3. [9] (июнь 2009 г.).
- Язык программирования Fantom имеет расширение
?
:
бинарный оператор, который сравнивает свой первый операнд сnull
. - В Kotlin оператор Элвиса возвращает свою левую часть, если она не равна нулю, и правую часть в противном случае. [10] Распространенным шаблоном является использование его с
return
, например:val foo = bar() ?: return
- В Госу
?
Оператор:
возвращает правый операнд, если левый также равен нулю. - В C# — условный оператор с нулевым значением
?.
называется «оператором Элвиса» [11], но он не выполняет ту же функцию. Вместо него это делает оператор объединения нулей. - В ColdFusion и CFML оператор Элвиса был введен с использованием
?
:
синтаксис. - Поддерживается языком Xtend. [12]
- В шаблонах закрытия Google оператор Элвиса является оператором объединения значений NULL, эквивалентным
isNonnull($a) ?
$a : $b
. [13] - В Ballerina оператор Элвиса
L ?
: R
возвращает значениеL
, если оно не равно нулю. В противном случае верните значениеR
. [14] - В JavaScript нулевой оператор объединения (
??
) — это логический оператор, который возвращает свой правый операнд, когда его левый операнд имеет значениеnull
илиundefined
, и в противном случае возвращает свой левый операнд. [15]
Смотрите также[править | править код]
?
:
или условный оператор, если он используется как тернарный оператор- Безопасный оператор навигации, часто
?.
- Оператор космического корабля
< = >
- Тип опции
Ссылки[править | править код]
Примечания[править | править код]
- ↑ Joyce Farrell. Java Programming. — 7 February 2013. — P. 276. — «The new operator is called Elvis operator because it uses a question mark and a colon together (?:); if you view it sideways, it reminds you of Elvis Presley.». — ISBN 978-1285081953.
- ↑ ?? Operator . C# Reference. Microsoft. Дата обращения: 5 декабря 2018.
- ↑ Conditional expressions . Dart Language. Google.
- ↑ perlop - Perl operators and precedence -Perldoc Browser . Perl.org. Дата обращения: 19 января 2023.
- ↑ Using the GNU Compiler Collection (GCC): Conditionals with omitted operands . gcc.gnu.org.
- ↑ Using and Porting the GNU Compiler Collection (GCC): C Extensions . gcc.gnu.org.
- ↑ Elvis Operator (?: ) .
- ↑ The Apache Groovy programming language - Groovy 1.5 release notes . groovy-lang.org.
- ↑ PHP: Comparison Operators - Manual . PHP website. Дата обращения: 17 февраля 2014.
- ↑ Null Safety - Kotlin Programming Language . Kotlin.
- ↑ Albahari, Joseph. C# 6.0 in a Nutshell / Joseph Albahari, Ben Albahari. — 6. — O'Reilly Media, 2015. — P. 59. — ISBN 978-1491927069.
- ↑ Efftinge. Xtend - Expressions . eclipse.org.
- ↑ Closure Templates - Expressions . GitHub (29 октября 2021).
- ↑ Elvis Operator - Ballerina Programming Language . Ballerina. Дата обращения: 19 декабря 2018. Архивировано из оригинала 20 декабря 2018 года.
- ↑ Nullish coalescing operator (??) - JavaScript | MDN (амер. англ.). developer.mozilla.org. Дата обращения: 5 января 2023.