Автор | Сообщение |
|
Отправлено: 22.03.10 13:22. Заголовок: ELSEIF в многострочных IF
В следующей версии планируется поддержка ELSEIF в многострочных IF. При разработке возникла следующая ситуация: Хочется, чтобы "ELSE IF" (с пробелом) воспринимался аналогом ELSEIF, но тогда возникает ситуация, когда "ELSE IF" при чтении кода может быть воспринят как отдельно "ELSE" и отдельно "IF": a=4 if a=1: 'a is 1' elseif a=2: 'a is 2' else if a=9: 'a is 9' else if a=3:'a is 3' else 'a' 'test' end Как воспринимается данный код? Что должно быть выведено? Собственно, разница между ELSEIF и ELSE веткой в том, что ELSE ветка будет выполняться в случае, когда ни один из вышестоящих ELSEIF не был выполнен. А "ELSEIF" при неверном условии перейдет к следующему "ELSE/ELSEIF". PS: После "ELSE" можно будет, как и прежде, ставить двоеточие - для удобства.
|
|
Профиль
Цитата
Ответить
|
Ответов - 16
[только новые]
|
|
|
Отправлено: 22.03.10 13:31. Заголовок: Примерно так...
Восприниматься будет примерно так: a=4 if a=1: 'a is 1' elseif a=2: 'a is 2' else if a=9: 'a is 9' else if a=3:'a is 3' else 'a' 'test' end Может, конечно, я недостаточно идеологию однострочных/многострочных конструкций понимаю…
|
|
Профиль
Цитата
Ответить
|
|
Отправлено: 22.03.10 13:38. Заголовок: Olegus t.Gl., там та..
Olegus t.Gl., там такой вложенности не может быть, то есть однострочные / многострочные формы if нельзя смешивать..
|
|
Профиль
Цитата
Ответить
|
|
Отправлено: 22.03.10 13:47. Заголовок: Если убрать "ELS..
Если убрать "ELSE IF" как синоним ELSEIF, то строчка else if a=9: 'a is 9' будет означать "если ни одно из условий elseif выше не было выполнено (т.е. ветка ELSE), то выполнить "if a=9:". 'a is 9' выполняться уже не будет, т.к. находится на другой строке.
|
|
Профиль
Цитата
Ответить
|
|
Отправлено: 22.03.10 14:04. Заголовок: Вопрос отпадает: пос..
Вопрос отпадает: посмотрел QBASIC - там ELSE IF воспринимается именно как "ELSE" с оператором "IF". Делаю точно также.
|
|
Профиль
Цитата
Ответить
|
|
| moderator
|
|
|
Отправлено: 22.03.10 16:11. Заголовок: Byte т.е. в QBASIC, ..
Byte т.е. в QBASIC, код IF condition1 THEN ... ELSE IF condition2 THEN ... END равнозначен следующему: IF condition1 THEN ... ELSE IF condition2 THEN ... END END ?
|
|
Профиль
Цитата
Ответить
|
|
Отправлено: 22.03.10 16:37. Заголовок: Как я понял схемка i..
Как я понял схемка if elseis else end аналогична switch case case default a=4 if a=1: | 'a is 1' | elseif a=2: | 'a is 2' | else if a=9: | 'a is 9' | else if a=3:'a is 3' else | 'a' | 'test' end Если же запретить else if как синоним elseif то тот же код будет обрабатываться иначе и нужно дополнять его end'ами. ну в концовке я не очень уверен. a=4 if a=1: | 'a is 1' | elseif a=2: | 'a is 2' else if a=9: | | 'a is 9' | else if a=3:'a is 3' | | else | | | 'a' | | | 'test' | | end | end end
|
|
Профиль
Цитата
Ответить
|
|
| moderator
|
|
|
Отправлено: 22.03.10 16:41. Заголовок: Ntropy результат пол..
Ntropy результат получается один и тот же.
|
|
Профиль
Цитата
Ответить
|
|
Отправлено: 22.03.10 16:43. Заголовок: Nex IF condition1 ..
Nex IF condition1 THEN ... ELSE IF condition2 THEN ... END Такой код в QBASIC вообще запрещен - если записано ELSE IF (с пробелом), то после THEN обязательно должен идти какой-то код - эта форма не может быть многострочной. Но суть такая, как ты написал - ELSE IF воспринимается как ELSE <какой-то код> - после выполнения мы сразу переходим на END всего условия.
|
|
Профиль
Цитата
Ответить
|
|
Отправлено: 22.03.10 16:54. Заголовок: Ntropy, всё не так..
Ntropy, всё не так
|
|
Профиль
Цитата
Ответить
|
|
Отправлено: 23.03.10 03:01. Заголовок: Будет сообщение об о..
Будет сообщение об ошибке.
|
|
Профиль
Цитата
Ответить
|
|
Отправлено: 31.03.10 08:07. Заголовок: Народ, а не проше сд..
Народ, а не проше сделать просто switch?
|
|
Профиль
Цитата
Ответить
|
|
|
| moderator
|
|
|
Отправлено: 31.03.10 08:12. Заголовок: hitecnologys у elsei..
hitecnologys у elseif больше возможностей.
|
|
Профиль
Цитата
Ответить
|
|
| moderator
|
|
|
Отправлено: 31.03.10 17:15. Заголовок: ИМХО :) Бинарное мыш..
ИМХО :) Бинарное мышление :) У условия 2 состояние 1 или 0 (истина или лож) и другого не дано не надо. Бинарность реализуется: IF условие истина ELSE лож END Все остальное CASE также просто и наглядно. Если не подходит CASE 2 ИФА подрят 3 ИФА подрят Даже можно ИФ в ИФЕ :) Но делать 3, 4, 5 уровень вложенности только нагромождение логических ошибок. На будущее: чем завернутее будет написан IF, тем сложнее будет разобрать код.
|
|
Профиль
Цитата
Ответить
|
|
Отправлено: 31.03.10 17:30. Заголовок: hitecnologys за осно..
hitecnologys за основу взят язык Basic поэтому IF|ELSEIF, P.S. самый удобный и навороченный switch на мой взгляд в JavaScript и вот он может сравниться с elseif по удобству, поскольку там в case'ах могут быть не константы, а любые произвольные выражения разного типа, а С'шный — нет.
|
|
Профиль
Цитата
Ответить
|
|
| moderator
|
|
|
Отправлено: 31.03.10 18:24. Заголовок: HIman в том-то и дел..
HIman в том-то и дело, что "уровня вложенности" нет. Вложенные IF всегда можно было писать, а ELSEIF предназначен для перебора ситуаций на одном уровне.
|
|
Профиль
Цитата
Ответить
|
|
Отправлено: 31.03.10 23:16. Заголовок: Byte Стоит поправить..
Byte Стоит поправить пример, текущий код (особенно else if) вроде бы не должен правильно исполняться.
|
|
Профиль
Цитата
Ответить
|
|