суббота, 24 марта 2012 г.

Тернарный оператор в разных языках

Обзор тернарных операторов в разных языках программирования
Обычно тернарная условная операция ассоциируется с операцией ?: (condition ? true value : false value), но в разных языках она выглядит по разному и я хотел бы рассмотреть её на примере получения модуля числа.
C/C++/C#/Java/Javascript
Стандартная запись для большинства языков.
 (x > 0) ? x : -x; 
Python
Текущий вид тернарный оператор приобрел в версии 2.5 и описан в PEP-308. Такую форму он имеет благодаря Гвидо.
 x if x > 0 else -x  
На StackOveflow увидел как можно сделать тоже самое "немного" иначе:
 1. (-x, x)[x > 0]  
 2. x > 0 and x or -x  
Википедия приводит пример как можно использовать тернарный оператор в похожей на switch манере
 b = 3  
 a = 1 if b==1 else \  
     2 if b==2 else \  
     3   
Visual Basic
В VB такой вариант записи работает с 9 ой версии.
 If(x > 0, x, -x)  
До этого для этих целей могла использоваться тернарная функция
 Iif(x > 0, x, -x)  
но так как она являлась функцией все её параметры должны быть определены до вызова функции. Например, в следующем случае
 Iif(x <> 0, 10/x, x)  
выражение 10/x посчиталось бы даже если x = 0 (что привело бы к ошибке), чего бы не произошло при использовании тренарного оператора If который появился в 9ой версии VB.

Переключатель (case) с помощью тернарного оператора

Пока писал про тренанрный оператор неожиданно узнал для себя что можно использовать тернарный оператор как аналог switch case. Вот еще пример с синтаксисом Си.
 vehicle = arg == 'B' ? bus :  
           arg == 'A' ? airplane :  
           arg == 'T' ? train :  
           arg == 'C' ? car :  
           arg == 'H' ? horse :  
                        feet;  

Null coalescing operator

Пока смотрел что есть про тернарный оператор набрел на null coalescing operator(не знаю как он правильно переводится на русский так что так его называть и буду). Он в каком-то смысле сродни тернарному оператору. Например в C# он выглядит так
 possiblyNullValue ?? valueIfNull  

Смысл же его заключается в том чтобы вернуть вторую переменную если первая оказалась равна null. 
Допустим следующее - если название  не определено нам нужно получить название по умолчанию. Вот как можно сделать это с помощью тернарного оператора.
 string pageTitle = (suppliedTitle == null) ? "Default Title" : suppliedTitle;  
Или же мы можем воспользоваться null coalescing оператором
 string pageTitle = suppliedTitle ?? "Default Title";  
Этот оператор можно также найти и ряде других языков. В Python он отсутствует как отдельный оператор, но такое же поведение можно получить при использовании or.
 foo = None  
 bar = foo or 1 # теперь bar == 1  

Но в Python даже если бы foo был пустой строкой или нулем bar стал бы равен 1.

1 комментарий:

  1. ВСЕ ПРОЧИТАЙТЕ НАСТОЯЩЕЕ ОТЗЫВ О том, КАК Я ПОЛУЧИЛ СВОЙ КРЕДИТ ОТ КОМПАНИИ LEGIT И ДОВЕРЕННОЙ КРЕДИТНОЙ СРЕДИ Меня зовут Kjerstin Lis, я искал кредит для погашения своих долгов, все, кого я встречал, мошенничали и брали свои деньги, пока я наконец не встретил мистера Бенджамина Брейл Ли Он смог дать мне кредит в размере 450 000 рублей. Он также помог другим моим коллегам. Я говорю как самый счастливый человек во всем мире сегодня, и я сказал себе, что любой кредитор, который спасает мою семью от нашей бедной ситуации, я скажу имя всему миру, и я так счастлив сказать, что моя семья вернулся навсегда, потому что я нуждался в кредите, чтобы начать свою жизнь заново, потому что я одинокая мама с 3 детьми, и весь мир, казалось, висел на мне, пока я не имел в виду, что БОГ послал кредитора, который изменил мою жизнь и член моей семьи, БОЖИЙ кредитор, мистер Бенджамин, он был Спасителем БОГом, посланным для спасения моей семьи, и сначала я подумал, что это будет невозможно, пока я не получу кредит, я пригласил его к себе в семью -все вечеринка, от которой он не отказался, и я посоветую всем, кто действительно нуждается в кредите, связаться с г-ном Бенджамином Брейлом Ли по электронной почте (lfdsloans@outlook.com), потому что он самый понимающий и добрый кредитор. когда-либо встречал с заботливым сердцем. Он не знает, что я делаю это, распространяя свою добрую волю ко мне, но я чувствую, что должен поделиться этим со всеми вами, чтобы освободить себя от мошенников, пожалуйста, остерегайтесь подделок и свяжитесь с правильной кредитной компанией. com или whatsapp + 1-989-394-3740. ,

    ОтветитьУдалить