if/else
операторы гибки в своем приемлемом синтаксисе. В таких языках, как C #, исполняемый код может находиться в той же строке, что и проверка условий, или в новой строке, с отступом или без, в фигурных скобках или нет. Эта гибкость ставит вопрос о том, является ли блок else if
фактической языковой конструкцией вообще или просто результатом гибкости if/else
операторов.
Рассмотрим этот код:
// Version 1
if (condition1)
// do something
else if (condition2)
// do something else
else
// do some third thing
Этот код может быть переписан таким образом, что он синтаксически отличается, но семантически идентичен:
// Version 2
if (condition1)
// do something
else
{
if (condition2)
// do something else
else
// do some third thing
}
Скобки, окружающие блок else
, являются необязательными, поскольку if/else
считается одним оператором для скобок. цели использования, поэтому еще одна семантически идентичная итерация была бы:
// Version 3
if (condition1)
// do something
else
if (condition2)
// do something else
else
// do some third thing
Разумеется, между версией 1 и версией 3 нет заметного различия, поскольку C # не учитывает пробелы. Естественный вопрос заключается в том, является ли else if
реальной функцией, встроенной в C # (или языки семейства C в целом), или просто полезным следствием гибкого синтаксиса, который умные разработчики программного обеспечения обнаружили давно.
Я пытался писать программы, чтобы проверить это поведение и попытаться выявить основное поведение, но я не смог написать программу, которая могла бы успешно различать два синтаксиса. Либо я недостаточно умен, либо разница довольно тонкая. Я также искал другое сообщество SE, чтобы опубликовать это, но ни одно не показалось подходящим.