Полный оператор 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

Помимо написания меньшего количества кода, есть ли какие-либо другие преимущества использования тернарного оператора по сравнению с полным оператором if / else?

Лучшая читаемость, в некоторых случаях ... Думаю, это все.

Есть ли повышение производительности, менее скомпилированный код или что-то еще, что принесет мне пользу при его использовании?

Нет, ничего существенного. Я думаю, что обычно он все равно компилируется в один и тот же IL ...

Так что в конечном итоге вы должны основывать свой выбор только на удобочитаемости. Когда будет удобнее писать полное if / else, сделайте это. Если это очень простое тройное выражение, которое легко читать, дерзайте.

person Thomas Levesque    schedule 01.09.2010