Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.09.09;
Скачать: CL | DM;

Вниз

case +string   Найти похожие ветки 

 
07002   (2007-08-16 20:23) [0]

Я приавильно понимаю, что в операторе case использовать string не представляется возможным?

var
 ss: string[40];
 s1, s2: string[40];
begin
 case ss of
   s1: Halt(1);
   s2: Halt(0);
 end;
end;


 
Efir ©   (2007-08-16 20:39) [1]

Правильно.


 
Вася Правильный   (2007-08-16 21:05) [2]

только для перечислимых типов


 
Leonid Troyanovsky ©   (2007-08-16 21:16) [3]


> 07002   (16.08.07 20:23)  

> Я приавильно понимаю, что в операторе case использовать
> string не представляется возможным?

Не представляется.
Хотя, приведенный пример реализовать легко. См., например, часть 2
http://www.rsdn.ru/Forum/Message.aspx?mid=476748&only=1

--
Regards, LVT.


 
tesseract ©   (2007-08-16 21:35) [4]


> только для перечислимых типов


Для простых и перечисляемых. String в case - это программистский маразм.


 
Германн ©   (2007-08-17 00:49) [5]


> Хотя, приведенный пример реализовать легко. См., например,
>  часть 2
> http://www.rsdn.ru/Forum/Message.aspx?mid=476748&only=1
>

Интересно. Запомню. Спасибо Леонид.


 
DrPass ©   (2007-08-17 01:35) [6]


> что в операторе case использовать string не представляется
> возможным

...если сильно хочется, можно использовать приблуду Delphi Language Extensions (хотя оно еще до сих пор бета)
http://andy.jgknet.de/dlang/
Это, кстати, будет эффективнее, чем делать if ... then, т.к. оно строит хеш-таблицу строк


 
Германн ©   (2007-08-17 01:42) [7]


> DrPass ©   (17.08.07 01:35) [6]

Я тоже думал о хэше, но, имхо, это не совсем то, что нужно.


 
DevilDevil ©   (2007-08-17 10:15) [8]

> DrPass ©   (17.08.07 01:35) [6]

ЭЭЭЭЭЭЭ......... (разинув рот...)

А как это всё может работать ?
Начиная с какой версии Delphi ?
Там точно есть шаблоны или у меня сегодня конкретные глюки ?
Почему всё до сих пор официально не введено в Delphi Language ?


 
DevilDevil ©   (2007-08-17 10:17) [9]

P.S. но лучше бы ввели оператор return


 
Вася Правильный   (2007-08-17 10:35) [10]


> Для простых и перечисляемых

первое и так входит во второе


 
Anatoly Podgoretsky ©   (2007-08-17 10:43) [11]

> DevilDevil  (17.08.2007 10:17:09)  [9]

Много ты странного хочешь, а то что уже есть освоил?


 
DrPass ©   (2007-08-17 10:45) [12]


> DevilDevil ©   (17.08.07 10:15) [8]


> А как это всё может работать ?

Там замешана черная магия :)

> Там точно есть шаблоны или у меня сегодня конкретные глюки
> ?

Есть и шаблоны :)

На самом деле это просто очень хитрый препроцессор, который преобразует новые конструкции в понятный компилятору код. Те же шаблоны/дженерики - это ведь по сути макросы, хоть в Сях они реализованы на уровне компилятора.


 
Плохиш ©   (2007-08-17 10:47) [13]


> DevilDevil ©   (17.08.07 10:17) [9]
> P.S. но лучше бы ввели оператор return

А ещё афтаматическое впуздыривание туда где часики и ещё много всего из вопросов ентой конференции... И вообще пусть сама проги клепает, до того как прогер подумает...


 
DevilDevil ©   (2007-08-17 10:51) [14]

> Плохиш ©   (17.08.07 10:47) [13]

эта реплика к чему?


 
Плохиш ©   (2007-08-17 11:21) [15]


> DevilDevil ©   (17.08.07 10:51) [14]
> > Плохиш ©   (17.08.07 10:47) [13]
>
> эта реплика к чему?

К желанию о вводе всяких странных и бесполезных операторов...


 
DevilDevil ©   (2007-08-17 11:29) [16]

Плохиш, давайте не будем рассуждать о плюсах и минусах Delphi и Си.
В gamedev-е, к примеру, вопрос шаблонов актуален.


 
palva ©   (2007-08-17 11:30) [17]


> String в case - это программистский маразм.

Если вам нужен String в case используйте Basic.


 
DevilDevil ©   (2007-08-17 11:38) [18]

В дебаге тоже было бы полезно:

procedure RaiseException(const ExceptionText : string; const UnitStr : string = $__FILE__; const Line : string = $__LINE__);
begin
   Log(Format(Exception! Unit "%s", CodeLine %s : "%s"", [UnitStr, Line, ExceptionText]);  
   raise Exception.Create(ExceptionText);
end;


а в тексте программы так:

if not FileExists(FileName)
 then RaiseException("FileNotFound");


P.S. кстати, подобный код обработается, сели использовать DLangExtensions?


 
DevilDevil ©   (2007-08-17 12:46) [19]


> palva ©   (17.08.07 11:30) [17]
> > String в case - это программистский маразм. Если вам нужен
> String в case используйте Basic.


в некоторых случаях используют различные фабрики классов, настроек... по определённым строковым константам. Прочитать тег, например, может понадобиться, есть такие задачи!

в этом случае string-case удобнее и читабельнее.
реплики типа "пограммистский маразм" я бы посоветовал оставлять при себе


 
DevilDevil ©   (2007-08-17 12:50) [20]

кстати говоря, работая на Си чуть более года, я осознал полезность и удобство таких вещей как макросы и операторы типа
Value = (условие)? true_value : false_value;


 
DevilDevil ©   (2007-08-17 12:52) [21]

то же самое про Result и return ...
есть задачи, в которых очень удобен Result, есть задачи, в которых очень удобен return... почему бы не объединить 2 возможности ?

поэтому разработчики "DLangExtensions" - круты!


 
tesseract ©   (2007-08-17 12:53) [22]


> в некоторых случаях используют различные фабрики классов,
>  настроек...



>  Прочитать тег, например, может понадобиться, есть такие
> задачи!


A string-case тут причём ? Тэги конечными автоматами разбираються.


 
Игорь Шевченко ©   (2007-08-17 13:12) [23]


> В gamedev-е, к примеру, вопрос шаблонов актуален.


"во многой мудрости много печали; и кто умножает познания, умножает скорбь." (Еккл. 1.18)


 
Anatoly Podgoretsky ©   (2007-08-17 13:17) [24]

> DevilDevil  (17.08.2007 12:50:20)  [20]

Никто на Дельфи не держит.


 
DevilDevil ©   (2007-08-17 13:18) [25]

> tesseract ©   (17.08.07 12:53) [22]

неважно!
задачи такие есть


 
tesseract ©   (2007-08-17 13:20) [26]


> задачи такие есть


Кнута мы не читали, там и не такие задачи без стрингов решаються.  

"Кнут программированию не научит, там сплошная математика" (С) какой-то форум.


 
DevilDevil ©   (2007-08-17 13:28) [27]

> tesseract ©   (17.08.07 13:20) [26]

а что, собственно, обсуждаем?

- можно ли решить подобный вопрос без использования string-case ?
- можно

- есть ли задачи, в которых такая возможность была бы полезна ?
- есть

- если бы такая возможность поддерживалась в Delphi, хуже было бы ?
- нет, только лучше


 
tesseract ©   (2007-08-17 13:31) [28]


> - если бы такая возможность поддерживалась в Delphi, хуже
> было бы ?


В delphi такая возможность есть. Вот пример :

http://delphimaster.net/view/15-1187184079/


 
DevilDevil ©   (2007-08-17 13:55) [29]

> tesseract ©   (17.08.07 13:31) [28]

:)) ну вот и где там strung-case ? там приведён алгоритм быстрого сравнения строк без учёта регистра.

кстати, что есть "хеш" ?
сколько лет живу, до сих пор незнаю. просто ранее расчитанная таблица ?


 
Игорь Шевченко ©   (2007-08-17 14:07) [30]


> кстати, что есть "хеш" ?
> сколько лет живу, до сих пор незнаю. просто ранее расчитанная
> таблица ?


А туда же.


 
tesseract ©   (2007-08-17 14:11) [31]


> :)) ну вот и где там strung-case ? там приведён алгоритм
> быстрого сравнения строк без учёта регистра.


там хэширование строк - его в case и пихай, если уж тебе лень писать алготим с числовыми константами.


> кстати, что есть "хеш" ?


Хэш функция - это функция возвращающая различный результат на всём диапазоне значений аргумента.

Крипто хэш : по значению функции нельзя восстановить аргумент.


 
DevilDevil ©   (2007-08-17 14:28) [32]

> там хэширование строк

там хеширование СИМВОЛОВ, для каждого символа строки

говоря про удобство я имею ввиду удобное case вместо бесконечного if else if else if else


> Хэш функция - это функция возвращающая различный результат
> на всём диапазоне значений аргумента.


а если более предметно ?


 
Leonid Troyanovsky ©   (2007-08-17 14:52) [33]


> tesseract ©   (17.08.07 14:11) [31]

> Хэш функция - это функция возвращающая различный результат
> на всём диапазоне значений аргумента.

Хеш-функция - это функция возвращающая один и тот же
результат для любых двух одинаковых аргументов.

Т.е., если хеши не совпадают, то аргументы различны.
Обратное, в общем случае, неверно.

--
Regards, LVT.


 
DevilDevil ©   (2007-08-17 14:57) [34]

> Leonid Troyanovsky ©   (17.08.07 14:52) [33]

спасибо. это точное определение ?
что то неверится, слишком всё просто


 
sdts   (2007-08-17 15:02) [35]


> слишком всё просто

http://ru.wikipedia.org/wiki/%D0%A5%D0%B5%D1%88%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5


 
tesseract ©   (2007-08-17 15:10) [36]


> Хеш-функция - это функция возвращающая один и тот жерезультат
> для любых двух одинаковых аргументов.


Во загнул, круче чем в маркетинге определение......

В принципе то же самое, вид сбоку.


 
DevilDevil ©   (2007-08-17 15:23) [37]

> DrPass ©   (17.08.07 01:35) [6]
>
> Это, кстати, будет эффективнее, чем делать if ... then,
> т.к. оно строит хеш-таблицу строк


следовательно, существует вероятность (и немаленькая), что сравнение может произойти некорректно. Т.е. если 2 строки не эквивалентны, а хеш-коды совпадают


 
tesseract ©   (2007-08-17 15:36) [38]


> следовательно, существует вероятность (и немаленькая), что
> сравнение может произойти некорректно.


Нет такой вероятности. См описание хэш функции. Так индексы полей CHAR на всех БД строяться.


 
DevilDevil ©   (2007-08-17 15:56) [39]

> tesseract ©   (17.08.07 15:36) [38]

приведи простенький алгоритм хеширования строк, я постараюсь найти две неравные строки... Контрольная сумма, например


 
tesseract ©   (2007-08-17 15:59) [40]


> приведи простенький алгоритм хеширования строк, я постараюсь
> найти две неравные строки... Контрольная сумма, например


См пост DrPass. Контрольная сумма она для такого  хэширования не предназначена.



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

Текущий архив: 2007.09.09;
Скачать: CL | DM;

Наверх




Память: 0.57 MB
Время: 0.027 c
2-1186412147
Melior
2007-08-06 18:55
2007.09.09
Работа с TCP/UDP и БД


15-1186675833
kernel
2007-08-09 20:10
2007.09.09
Выбираем *nix ?!


1-1182747433
Dmitry_177
2007-06-25 08:57
2007.09.09
TWebBrowser без полос прокрутки


15-1187057990
Slider007
2007-08-14 06:19
2007.09.09
С днем рождения ! 14 августа 2007 вторник


15-1186726846
stanislav
2007-08-10 10:20
2007.09.09
Вопрос по CVS