Элвис оператор

Материал из Википедии — свободной энциклопедии
Перейти к навигации Перейти к поиску

В некоторых языках компьютерного программирования оператор Элвиса часто пишется ?:, - это двоичный оператор, который возвращает вычисленный первый операнд, если этот операнд возвращает истину (в соответствии с соглашением, зависящим от языка, оно же. истинное значение), а в противном случае возвращает вычисленный второй операнд (в этом случае первый операнд считается аналогичным логически ложному) . Элвис оператор идентичен короткому замыканию с семантикой "последнего значения" и похож на тернарный оператор, ? :, поскольку выражение оператора Элвиса 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]

Смотрите также[править | править код]

  • ? : или условный оператор, если он используется как тернарный оператор
  • Безопасный оператор навигации, часто ?.
  • Оператор космического корабля < = >
  • Тип опции

Ссылки[править | править код]

Примечания[править | править код]

  1. 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.
  2. ?? Operator. C# Reference. Microsoft. Дата обращения: 5 декабря 2018.
  3. Conditional expressions. Dart Language. Google.
  4. perlop - Perl operators and precedence -Perldoc Browser. Perl.org. Дата обращения: 19 января 2023.
  5. Using the GNU Compiler Collection (GCC): Conditionals with omitted operands. gcc.gnu.org.
  6. Using and Porting the GNU Compiler Collection (GCC): C Extensions. gcc.gnu.org.
  7. Elvis Operator (?: ).
  8. The Apache Groovy programming language - Groovy 1.5 release notes. groovy-lang.org.
  9. PHP: Comparison Operators - Manual. PHP website. Дата обращения: 17 февраля 2014.
  10. Null Safety - Kotlin Programming Language. Kotlin.
  11. Albahari, Joseph. C# 6.0 in a Nutshell / Joseph Albahari, Ben Albahari. — 6. — O'Reilly Media, 2015. — P. 59. — ISBN 978-1491927069.
  12. Efftinge. Xtend - Expressions. eclipse.org.
  13. Closure Templates - Expressions. GitHub (29 октября 2021).
  14. Elvis Operator - Ballerina Programming Language. Ballerina. Дата обращения: 19 декабря 2018. Архивировано из оригинала 20 декабря 2018 года.
  15. Nullish coalescing operator (??) - JavaScript | MDN (амер. англ.). developer.mozilla.org. Дата обращения: 5 января 2023.