Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

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;


Наверх

Титульная страница Поиск, карта сайта Написать письмо