Вниз
Скачать: CL | DM;

Отличие делфишного CASE от сишного SWITCH   Найти похожие ветки 

← →
StriderMan ©   (2006-08-15 13:06) [0]

вот такой код на делфи к сожалению не прокатывает

procedure DoSmth(AVal: integer);
begin
 case AVal of
 1: ShowmEssage("1");
 2: ShowMessage("2");
 1..2: ShowMessage("1 or 2");
 end;
end;


насколько я помню, на сях такое сделать можно. Почему так?


← →
Romkin ©   (2006-08-15 13:08) [1]

Потому что case выполняет только один пункт, первый из подходящих. После этого выходит из case.


← →
Nic ©   (2006-08-15 13:08) [2]

Зачем нужна эта строка? :
1..2: ShowMessage("1 or 2");


← →
Джо ©   (2006-08-15 13:09) [3]

В C при обработке каждого из вариантов в Switch"e не происходит выход из блока Switch (нужен break).


← →
Ega23 ©   (2006-08-15 13:12) [4]

procedure DoSmth(AVal: integer);
begin
Case AVal of
 1..2 begin
            case AVal of
            1: ShowmEssage("1");
            2: ShowMessage("2");
            end;
            ShowMessage("1 or 2");
        end;
  else Showmessage("not (1 or 2)");
end;
end;

?


← →
Desdechado ©   (2006-08-15 13:13) [5]

В Си этоточка входа, а выход только по break, которого может и не быть вовсе. В Паскале же выполняется всегда только один кусок, что, имхо, правильнее.

Джо ©   (15.08.06 13:09) [3]
Да, иногда это удобно, когда выполнение проходит по совокупности последовательных веток. Но чаще является причиной скрытых ошибок.
Если я правильно помню, в C# это заблокировали.


← →
StriderMan ©   (2006-08-15 13:14) [6]


> Ega23 ©   (15.08.06 13:12) [4]

ну типа того. только это громоздко.


> Nic ©   (15.08.06 13:08) [2]

например в случае в каждом конкретном случае выполняются какие-то действия, но скажем в случае 1,2 нужно сделать нечто общее, а в случае 3,4 нечто другое общее.


← →
Ega23 ©   (2006-08-15 13:15) [7]


> ну типа того. только это громоздко.


Громоздко логику извращённую вертеть.


← →
Плохиш ©   (2006-08-15 13:16) [8]


> StriderMan ©   (15.08.06 13:06)
> Почему так?

Ответ на этот вопрос находиться в описаниях языков.


← →
Джо ©   (2006-08-15 13:17) [9]

> [5] Desdechado ©   (15.08.06 13:13)
> Но чаще является причиной скрытых
> ошибок.

Согласен.


> Если я правильно помню, в C# это заблокировали.

Заблокировали. Пока break не поставишь, компилятор будет ругаться.


← →
Rouse_ ©   (2006-08-15 13:17) [10]


> Потому что case выполняет только один пункт, первый из подходящих.
>  После этого выходит из case.

без бряка еще и на default выскочит.



Страницы: 1 вся ветка

Скачать: CL | DM;



Память: 0.47 MB
Время: 0.045 c
2-1155922176
Alex7
2006-08-18 21:29
2006.09.10
TDBLookupComboBox


2-1155801843
ZX48
2006-08-17 12:04
2006.09.10
ping


3-1151581247
Ищущий
2006-06-29 15:40
2006.09.10
данные хранимки как основа


2-1155816596
Alral
2006-08-17 16:09
2006.09.10
Движение компонентов.


3-1151687027
Bad tester
2006-06-30 21:03
2006.09.10
Подскажите как лучше работать с базой данных MySQL из Делфи?




   Наверх