Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 14.08.2009, 10:18   #1
Utkin
Старожил
 
Аватар для Utkin
 
Регистрация: 04.02.2009
Сообщений: 17,351
По умолчанию Длинный Case

У меня есть некоторый код
Код:
case Id of

          1  : begin

                  // Бла-бла
               end;
          ...

else

            // Ошибка
            Exit;
 end;
И этих блоков begin-end уже штук 50 имеется (свой на каждый Id) и еще штук надцать предвидится. Так вот засомневался - эффективно ли это? Может разбивать на подразделы условиями (если id>50 то ищем там-то и там то иначе смотрим для Id<50). Функция с этим case вызывается построчно (это интерпретатор ) для большого количества массивов строк, поэтому нужна большая эффективность, а в ней и так еще куча проверок различных состояний.
Маньяк-самоучка
Utkin появился в результате деления на нуль.
Осторожно! Альтернативная логика
Utkin вне форума Ответить с цитированием
Старый 14.08.2009, 10:30   #2
Квэнди
Старожил
 
Аватар для Квэнди
 
Регистрация: 13.12.2006
Сообщений: 3,859
По умолчанию

А красивее будет унифицировать код, убрав такую линейность )
ICQ не для вопросов, а для предложений. Для вопросов используйте форум
IRC канал клуба программистов|Мои статьи
Квэнди вне форума Ответить с цитированием
Старый 14.08.2009, 10:37   #3
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Хм. Массив функций:

Код:
program Project1;

{$APPTYPE CONSOLE}

uses
  SysUtils;
type f=function(param:string):string;
  var a:array[0..1] of f; id:byte;

 function a1(s:string):string;begin result:='1 -'+s; end;
 function a2(s:string):string;begin result:='2 -'+s; end;

begin
 a[0]:=a1;a[1]:=a2;
 id:=1;
write(a[id]('hallo'));
readln;
end.
Думаю ты понял мою идею 9ато я ее сам не понял (Шучу)

Цитата:
А красивее будет унифицировать код, убрав такую линейность
Пардон, а это как?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 14.08.2009, 10:38   #4
Utkin
Старожил
 
Аватар для Utkin
 
Регистрация: 04.02.2009
Сообщений: 17,351
По умолчанию

Каким образом? Id это идентификатор определенного действия. Сначала берется строка и определяется что это? Допустим команда объявления константы. Соответственно для нее определяется Id, на основании этой переменной определяется какого рода параметр должен быть извлечен для правильной работы.
Затем этот параметр передается в функцию - в какую уже решается через Case.
Как это можно улучшить?

Stilet твое предложение тоже, ИМХО, аналогично case. Но быстрее?
Маньяк-самоучка
Utkin появился в результате деления на нуль.
Осторожно! Альтернативная логика

Последний раз редактировалось Utkin; 14.08.2009 в 10:41.
Utkin вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Не получается в Post запросе передать длинный текст theYozh Работа с сетью в Delphi 17 18.05.2009 21:43
диапозон в case (c++) Айат Помощь студентам 4 03.04.2009 15:13
case Кирилл17 Помощь студентам 6 28.12.2008 10:11
компьютер издает какую-то азбуку морзе - один длинный и два коротких гудка и не грузиться совсем Красавчег))) Свободное общение 13 18.01.2008 04:27
ошибка ORA - 01704 (Строковый литерал слишком длинный) MAcK БД в Delphi 1 01.11.2007 09:44