Форум переехал на новый адрес: http://qsp.su



АвторСообщение
администратор




ссылка на сообщение  Отправлено: 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" можно будет, как и прежде, ставить двоеточие - для удобства.

Спасибо: 0 
Профиль Цитата Ответить
Новых ответов нет [см. все]





ссылка на сообщение  Отправлено: 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

Может, конечно, я недостаточно идеологию однострочных/многострочных конструкций понимаю…

Спасибо: 0 
Профиль Цитата Ответить
администратор




ссылка на сообщение  Отправлено: 22.03.10 13:38. Заголовок: Olegus t.Gl., там та..


Olegus t.Gl., там такой вложенности не может быть, то есть однострочные / многострочные формы if нельзя смешивать..

Спасибо: 0 
Профиль Цитата Ответить
администратор




ссылка на сообщение  Отправлено: 22.03.10 13:47. Заголовок: Если убрать "ELS..


Если убрать "ELSE IF" как синоним ELSEIF, то строчка

 
else if a=9:
'a is 9'


будет означать "если ни одно из условий elseif выше не было выполнено (т.е. ветка ELSE), то выполнить "if a=9:".
'a is 9' выполняться уже не будет, т.к. находится на другой строке.

Спасибо: 0 
Профиль Цитата Ответить
администратор




ссылка на сообщение  Отправлено: 22.03.10 14:04. Заголовок: Вопрос отпадает: пос..


Вопрос отпадает: посмотрел QBASIC - там ELSE IF воспринимается именно как "ELSE" с оператором "IF". Делаю точно также.

Спасибо: 0 
Профиль Цитата Ответить
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


?

Спасибо: 0 
Профиль Цитата Ответить





ссылка на сообщение  Отправлено: 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


Спасибо: 0 
Профиль Цитата Ответить
moderator


ссылка на сообщение  Отправлено: 22.03.10 16:41. Заголовок: Ntropy результат пол..


Ntropy результат получается один и тот же.

Спасибо: 0 
Профиль Цитата Ответить
администратор




ссылка на сообщение  Отправлено: 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 всего условия.

Спасибо: 0 
Профиль Цитата Ответить
администратор




ссылка на сообщение  Отправлено: 22.03.10 16:54. Заголовок: Ntropy, всё не так..


Ntropy, всё не так

Спасибо: 0 
Профиль Цитата Ответить
администратор




ссылка на сообщение  Отправлено: 23.03.10 03:01. Заголовок: Будет сообщение об о..


Будет сообщение об ошибке.

Спасибо: 0 
Профиль Цитата Ответить



ссылка на сообщение  Отправлено: 31.03.10 08:07. Заголовок: Народ, а не проше сд..


Народ, а не проше сделать просто switch?

Спасибо: 0 
Профиль Цитата Ответить
moderator


ссылка на сообщение  Отправлено: 31.03.10 08:12. Заголовок: hitecnologys у elsei..


hitecnologys у elseif больше возможностей.

Спасибо: 0 
Профиль Цитата Ответить
moderator




ссылка на сообщение  Отправлено: 31.03.10 17:15. Заголовок: ИМХО :) Бинарное мыш..


ИМХО :) Бинарное мышление :)
У условия 2 состояние 1 или 0 (истина или лож) и другого не дано не надо.
Бинарность реализуется:

IF условие
истина
ELSE
лож
END

Все остальное CASE также просто и наглядно.

Если не подходит CASE
2 ИФА подрят
3 ИФА подрят
Даже можно ИФ в ИФЕ :)

Но делать 3, 4, 5 уровень вложенности только нагромождение логических ошибок.


На будущее: чем завернутее будет написан IF, тем сложнее будет разобрать код.


Спасибо: 0 
Профиль Цитата Ответить





ссылка на сообщение  Отправлено: 31.03.10 17:30. Заголовок: hitecnologys за осно..


hitecnologys за основу взят язык Basic поэтому IF|ELSEIF,

P.S. самый удобный и навороченный switch на мой взгляд в JavaScript и вот он может сравниться с elseif по удобству, поскольку там в case'ах могут быть не константы, а любые произвольные выражения разного типа, а С'шный — нет.

Спасибо: 0 
Профиль Цитата Ответить
moderator


ссылка на сообщение  Отправлено: 31.03.10 18:24. Заголовок: HIman в том-то и дел..


HIman в том-то и дело, что "уровня вложенности" нет.
Вложенные IF всегда можно было писать, а ELSEIF предназначен для перебора ситуаций на одном уровне.

Спасибо: 0 
Профиль Цитата Ответить





ссылка на сообщение  Отправлено: 31.03.10 23:16. Заголовок: Byte Стоит поправить..


Byte Стоит поправить пример, текущий код (особенно else if) вроде бы не должен правильно исполняться.

Спасибо: 0 
Профиль Цитата Ответить
Ответ:
1 2 3 4 5 6 7 8 9
большой шрифт малый шрифт надстрочный подстрочный заголовок большой заголовок видео с youtube.com картинка из интернета картинка с компьютера ссылка файл с компьютера русская клавиатура транслитератор  цитата  кавычки моноширинный шрифт моноширинный шрифт горизонтальная линия отступ точка LI бегущая строка оффтопик свернутый текст

показывать это сообщение только модераторам
не делать ссылки активными
Имя, пароль:      зарегистрироваться    
Тему читают:
- участник сейчас на форуме
- участник вне форума
Все даты в формате GMT  3 час. Хитов сегодня: 6
Права: смайлы да, картинки да, шрифты да, голосования нет
аватары да, автозамена ссылок вкл, премодерация вкл, правка нет



Создай свой форум на сервисе Borda.ru
Текстовая версия