Форум: "Начинающим";
Текущий архив: 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