![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
if else
pqpqp © (2006-09-30 18:54:00)Глупый вопрос, в приведенном коде else работает для if x = 0, а как для первого if x < 5 then сделать else. Без begin ... end не обойтись?
x := 10;
y := 10;
if x < 5 then
if x = 0 then y := 0
else
y := 5;
TUser (2006-09-30 23:45:00) [1]> Так вот, в c они не обязательны
И, кстати, в паскале тоже, что не есть гуд. Тут привлекался я в качестве светлой головы для поиска ошибки. Считалось что-то не так. Было написано (на си)
if (...);
{
while (...)
{
...
}
}
Понятно, что точка-запятая поставлена на автопилоте и сделано это зря.
И паскаль аналогично будет в случае
while ... do;
А был бы обязателен непустой оператор (хотя бы {}) - не было бы такой проблемы.
Так что пустые операторы - все-таки нехорошо. Необходимости в них нет, а проблемы возникнуть могут.
palva (2006-09-30 22:20:00) [2]Конечно, надо ставить. В некоторых корпоративных стандартах они просто обязательны. В некоторых языках (c, perl) вместо begin end используются {}. Так вот, в c они не обязательны, а в perl и, по-моему в c# обязательны, чтоб не было у программиста соблазна экономить на спичках.
Kolan (2006-09-30 22:16:00) [3]
> palva © (30.09.06 22:12) [9]
Знаю одно. Сам часто обжигался на том что условия срабатываюбт неверно только потому что я не поставил операторные скобки. Конкретные примеры не помню, но для себя правило выработал. Чуть сложнеif ... then ... elseя их ставлю :). И сё больше не ошибаюсь.
palva (2006-09-30 22:12:00) [4]Между двумя else стоит пустой оператор. По правилам языка паскаль пустое место является оператором.
Kolan (2006-09-30 22:06:00) [5]
> По-моему самый естественный вариант.
А он правильно работает? У меня ума не хватает понять его..
var
X, Y: Integer;
begin
x := 11;
y := 10;
if x < 5 then
if x = 11 then
y := 0
else
Y := 3
else
y := 5;
ShowMessage(IntToStr(Y));
end;
Зачем тадаif x = 11
palva (2006-09-30 21:53:00) [6]Dmitrij_K (30.09.06 18:59) [1]
По-моему самый естественный вариант.
Kolan (2006-09-30 21:41:00) [7]
> TUser © (30.09.06 21:29) [5]
:)
X := 10;
Y := 10;
if X < 5 then
begin
if X = 0 then
Y := 0
end
else
Y := 5;
TUser (2006-09-30 21:29:00) [8]> Нет.
запросто
label a, b;
begin
...
if x < 5 then goto a
if x = 0 then y := 0
goto b;
a: // else
y := 5;
b:
end;
Kolan (2006-09-30 19:19:00) [9]
> Без begin ... end не обойтись?
Нет.
Vovan#1 (2006-09-30 19:16:00) [10]Иногда помогает
[code]
x := 10;
y := 10;
if x >= 5 then
y := 5
else
if x = 0 then y := 0;
[/code]
А так да, из разряда Delphi suxx.
Anatoly Podgoretsky (2006-09-30 19:09:00) [11]А используй ты операторные скобки, что бы не было подобного рода проблем.
Dmitrij_K (2006-09-30 18:59:00) [12]
x := 10;
y := 10;
if x < 5 then
if x = 0 then y := 0 else
else
y := 5;