Пълен оператор if/else срещу условен оператор

Възможни дубликати:
Ползи от използването на условния ?: (троичен) оператор
Бавен ли е условният оператор?

Здравейте всички,

Имам доста прост въпрос относно различните изрази if/else.

Освен писането на по-малко код, има ли други ползи от използването на условния оператор за разлика от пълния оператор if/else?

Има ли увеличение на производителността, по-малко компилиран код или нещо друго, което би ми било от полза, когато го използвам?

Оценявам помощта ти

Марко


person Marko    schedule 01.09.2010    source източник
comment
Благодаря, че ми показахте дубликатите, те не се появиха, когато въвеждах отговора и предполагам, че търсих всички грешни неща!   -  person Marko    schedule 02.09.2010
comment
Условният оператор и операторът if се компилират до точно един и същ CIL код: инструкция за условно разклоняване. (Пренареждане по модул, защото едното е израз, а другото изявление.)   -  person Timwi    schedule 02.09.2010


Отговори (2)


Не се съсредоточавайте върху писането на по-малко код... съсредоточете се върху кода, който в крайна сметка ще бъде по-четлив.

Понякога изразът if ще бъде по-четлив. Понякога условният оператор ще бъде по-четлив. Харесвам условния оператор в случаите, когато има смисъл, по отношение на различни начини за изчисляване на една логическа стойност (напр. отстъпка, базирана на възрастта на клиента). Не ми харесва обаче да го използвам по сложни начини - няма нищо лошо в използването на пълен if/else, където има смисъл.

Струва си да запомните и оператора за нулево обединяване... така че вместо:

string shipTo = customer.ShippingAddress != null 
              ? customer.ShippingAddress : customer.BillingAddress;

можеш да използваш

string shipTo = customer.ShippingAddress ?? customer.BillingAddress;

Отново, това е полезно само в определени ситуации - но в тези случаи е наистина удобно.

person Jon Skeet    schedule 01.09.2010
comment
Благодаря - това е всичко, което трябваше да знам. Прочетох някакъв код и открих, че някои разработчици усложняват кода прекалено много, като използват троичния оператор на места, където вероятно не би трябвало. Приема след 8 минути! - person Marko; 02.09.2010
comment
@Marko: Кратка бележка за педантичност, името на оператора е условният оператор. Това е троичен оператор, защото има три операнда, но това е просто свойство на оператора, а не негово описание. - person Jon Skeet; 02.09.2010
comment
Страхотно - благодаря @Jon. Все още чакам книгата ви да пристигне, без съмнение ще имам още въпроси, след като я прочета! Благодаря! - person Marko; 02.09.2010

Освен писането на по-малко код, има ли други предимства от използването на оператора Ternary за разлика от пълния оператор if/else?

По-добра четливост, в някои случаи... Мисля, че това е всичко.

Има ли увеличение на производителността, по-малко компилиран код или нещо друго, което би ми било от полза, когато го използвам?

Не, нищо съществено. Мисля, че така или иначе обикновено ще се компилира до същия IL...

Така че в крайна сметка трябва да основавате избора си само на четливостта. Когато е по-разбираемо да напишете пълен if/else, направете го. Ако това е много прост троичен израз, който е лесен за четене, давайте.

person Thomas Levesque    schedule 01.09.2010