Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Прочее";
Текущий архив: 2006.09.10;
Скачать: [xml.tar.bz2];

Вниз

Отличие делфишного 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 вся ветка

Форум: "Прочее";
Текущий архив: 2006.09.10;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.46 MB
Время: 0.041 c
2-1156014482
Виталий Юрьевич
2006-08-19 23:08
2006.09.10
Обработка ошибок Indy. собственно как поймать?


15-1156015707
Мефисто
2006-08-19 23:28
2006.09.10
х/ф "Планета обезъян" - 2 версии фильма или нет?


3-1152271401
drashka
2006-07-07 15:23
2006.09.10
Затруднение при подчинении 2-х таблиц (DBExpress)


15-1156002455
DillerXX
2006-08-19 19:47
2006.09.10
Beeline && Хамелеон


2-1155800786
SerJaNT
2006-08-17 11:46
2006.09.10
Активное поле ввода





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский