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

Вниз

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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.57 MB
Время: 0.046 c
2-1187069383
rosl
2007-08-14 09:29
2007.09.09
IB_users


4-1173466174
ГОША
2007-03-09 21:49
2007.09.09
выключение компьютера


15-1186930128
Dimka Maslov
2007-08-12 18:48
2007.09.09
Вот интересно почему


1-1183280902
JanMihail
2007-07-01 13:08
2007.09.09
Как узнать позицию каретки в чужом окне?


3-1179123491
Jakudza
2007-05-14 10:18
2007.09.09
Как в FoxPro шную базу записать пусту дату ?





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский