Языки с синтаксисом типа C получают else if
бесплатно без необходимости его реализации.
Причина в том, что в этих структурах управления синтаксисом просто используется следующий оператор, который может быть составным выражением, заключенным в фигурные скобки, если необходимо (например, { x += 1; y += 1 }
).
Это означает, что после того, как вы внедрили if
и else
, else if
просто выпадает из грамматики языка, естественно, бесплатно, без каких-либо дополнительных усилий по осуществлению. Чтобы понять, почему, посмотрите на это:
if (condition) {
if_body();
} else if (another_condition) {
else_if_body();
} else {
else_body();
}
Это выглядит как if
с else if
и else
прилагается, каждый применительно к составному оператору. Но на самом деле это не так. Это фактически два отдельных оператора if
, каждый из которых имеет только один случай else
; второй оператор if
находится внутри тела else
первого if
.
else if { ... }
действительно анализируются как else
применяется к следующему оператору, который представляет собой if
заявления (применительно к составному оператору { else_if_body(); }
. Затем конечный else
связывается с непосредственно предшествующими if
, которая является вторым.
Вот то же самое написано в соответствие с тем, как он разобран :
if (condition) {
if_body();
} else {
if (another_condition) {
else_if_body();
} else {
else_body();
}
}
Но получается, что если язык не принимали непосредственного осуществления else if
как первоклассный вариант для if
заявлений, он будет вести себя точно то же, что и второе независимое заявление if
изнутри else
первых! Поэтому нет необходимости беспокоиться об осуществлении else if
; языковые исполнители получают else if
бесплатно с этим стилем синтаксиса, после того как они реализованы if
и else
.
Синтаксис Python не разрешает эту халяву.
Программисты синтаксиса C-стиля может думать с точки зрения else if
хотя язык имеет только if
с точно нулевой или один год else
, но только потому, что они могут писать код, как мой первый пример, который отформатирован в который выглядит по-разному для читателя, чем для компилятора.
Python, OTOH, использует отступы для указания структуры блока, что заставляет структуру блоков выглядеть одинаково с человеческим читателем, как и с интерпретатором . После того, как вы получили if
и else
в синтаксисе стиля Python, программисты все еще могли написать код, который ведет себя идентично else-if, помещая второй оператор if
изнутри else
первого. Но это выходит глядя, как это:
if condition:
if_body()
else:
if another_condition:
else_if_body()
else:
else_body()
Это выглядит некрасиво, и гораздо сложнее мыслить в терминах, чем еще, если цепь, как только вы получите больше, чем 1 или 2-либо еще сослагательного наклонения. Поэтому стоит добавить явную функцию языка, чтобы вернуть способность мыслить в терминах else-if. Несмотря на то, что это технически делает язык более сложным, он фактически делает мышлением с точки зрения языка проще, поэтому это хорошая сложность; с созданной вручную цепочкой вложенных if
с внутри else
с читателем необходимо вручную прочитать весь код и убедиться, что каждый else
, за исключением последнего, содержит ровно один оператор if
и ничего больше, чтобы сделать вывод, что вся последовательность эквивалентна линейная цепочка условий, проверенная по порядку, с некоторым кодом для выполнения первой проверки, которая преуспевает.
Итак, тогда. Мы видели, что языки с C-подобным синтаксисом могут также идти с else if
, потому что они получают его бесплатно. Вот почему это существует. Языки с синтаксисом типа Python должны явно делать что-то, чтобы получить конструкцию, которая может использоваться как else-if. Почему они выбрали elif
? Это произвольно; вы должны спросить людей, которые приняли решение.
Однако Python не изобрел elif
, он был на других языках задолго до того, как существовал Python. Поэтому я хотел бы угадать, что, когда им пришлось реализовать явную конструкцию else-if, они просто выбрали тот, с которым уже знакомы программисты.
Технически, это то, как люди, которые действительно серьезно всегда использовать фигурные скобки с управляющими структурами должны написать свой код. ;)
Вы можете, конечно, создать контр-примеры для этого, но это общая идея синтаксиса на основе отступа.
Проверьте рубин. Он делает то же самое. Это не стоит обдумывать, ИМО. –
Отъезд perl, где находится 'elsif'. – slebetman
Проверьте bash/sh, где это 'elif'. – slebetman