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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 06.05.2021, 13:58   #1
Kronos913
Форумчанин
 
Регистрация: 10.02.2021
Сообщений: 623
По умолчанию Память при переменной процедуре/функции

Внутри процедуры есть такой код:
Код:
  type
   TFunc1 = function(const s:string): boolean;
  const
   DirectoryFileExists:array [false..true] of TFunc1 =(DirectoryExists, FileExists);
Код:
If DirectoryFileExists[b](s1) then begin {что-то там}
b - bollean, s1 - string

У меня вопрос такой: этот массив является просто ссылками на функции?
Или же этот массив еще раз дублирует код этих функций?
Kronos913 на форуме Ответить с цитированием
Старый 06.05.2021, 14:01   #2
Kronos913
Форумчанин
 
Регистрация: 10.02.2021
Сообщений: 623
По умолчанию

Может кому пригодится, вот полный код:
Код:
Function FindDirFilDisk(const s1:string; var s2:string; const a:boolean):boolean;
  type
   TFunc1 = function(const s:string): boolean;
  const
   DirectoryFileExists:array [false..true] of TFunc1 =(DirectoryExists, FileExists);
  var
   c:char;
begin
   FindDirFilDisk:=false;
   c:='C';
   repeat
    If DirectoryFileExists[a](c+s1) then begin
     s2:=c+s1;
     c:='Z';
     FindDirFilDisk:=true;
    end;
    inc(c);
   until c>'Z';
end;
Одна и та же флешка при разных подключениях может оказаться диском E, F, G, и т.д.
И функция ищет, на каком диске находится папка, или файл
Kronos913 на форуме Ответить с цитированием
Старый 08.05.2021, 00:52   #3
Kronos913
Форумчанин
 
Регистрация: 10.02.2021
Сообщений: 623
По умолчанию

Вообще, насколько такой "универсализм" замедляет работу функции?
Можно было сделать отдельную функцию для папок и файлов, а можно вот так одну универсальную
Kronos913 на форуме Ответить с цитированием
Старый 08.05.2021, 13:50   #4
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,526
По умолчанию

а зачем все это?
Цитата:
Одна и та же флешка при разных подключениях может оказаться диском E, F, G, и т.д.
если программа на ЭТОЙ же флешке и требуется доступ к "соседним" файлам, то существуют...
1. относительные пути.
2. Application.ExeName
3. ParamStr(0)
4. ExtractFilePath и другие функции выделения(Extract....) нужных фрагментов файлового имени
программа — запись алгоритма на языке понятном транслятору
evg_m вне форума Ответить с цитированием
Старый 08.05.2021, 19:45   #5
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,289
По умолчанию

Цитата:
Сообщение от Kronos913 Посмотреть сообщение
этот массив является просто ссылками на функции?
Просто ссылки.
Очевидные исправления:
Код:
Function FindDirFilDisk(const s1: string; var s2: string; const a: boolean): boolean;
type
  TFunc1 = function(const s: string): boolean;
var
  c: char;
  checkExists: TFunc1;
begin
  Result := False;
  if a then
    checkExists := FileExists
  else
    checkExists := DirectoryExists;
  for c := 'C' to 'Z' do
    If checkExists(c + s1) then
    begin
      s2 := c + s1;
      Result := True;
      break;
    end;
end;
Использовать: Result (можно безболезненно переименовывать функцию и не думать о ее коде), break (а не подстраиваться под условие цикла), for (так как известны границы цикла), сразу брать адрес функции (во-первых, до цикла, так как функция одна и та же на всех итерациях; во-вторых, не из массива, чтобы не было косвенной адресации). Это если не поднимать вопрос целесообразности такого подхода, а только причесать текущий код.
Цитата:
Сообщение от Kronos913 Посмотреть сообщение
Вообще, насколько такой "универсализм" замедляет работу функции?
Хороший вопрос. Замеряйте время работы универсальной и специализированной версий.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA на форуме Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
при вводе уже существующей переменной появлялось поле с именнами этой переменной. desconocida16 Visual C++ 1 22.02.2014 18:58
Сохранение значения переменной при выходе из функции с++ danil123 Помощь студентам 12 13.11.2013 15:00
Изменение переменной в процедуре onkofe Общие вопросы Delphi 10 06.11.2011 23:01
как резервируется память для переменной assch Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 3 22.12.2010 15:42
преобразование переменной AnsiString в PAnsiChar для использования в процедуре loadlibrary The Best Общие вопросы Delphi 2 12.07.2009 20:42