Модератор: Модераторы

pupsik писал(а):"оптимизированная ИДЕ
 Но почему-то на 1 мегабайт меньше чем версия из коробки. Это видимо из-за разной оптимизации.
 Но почему-то на 1 мегабайт меньше чем версия из коробки. Это видимо из-за разной оптимизации. 
zub писал(а):Откуда такие мысли в головах? Ненадо такое постить на форумах - вводить в заблуждение читающих
zub писал(а):Смысл очень большой - чтоб не возникало веры в "неполные" формы if-else

вы забыли о: упс...На этом претензии к нему заканчиваются.

zub писал(а): На этом претензии к нему заканчиваются.
zub писал(а): Если бы ты использовал отладчик, то пару раз нажав F8 понял бы где накосячил - else относится не к тому if как ты планировал - забыл ;
zub писал(а):Например чтоб понять как работает.
zub писал(а):или исправить баг.

zub писал(а):Ветвистые ифы и кэйсы - в большинстве своем говнокод. надо обходиться без них.
zub писал(а):Не используя отладчик серьезную ошибку не поймать.

zub писал(а): Динамическая регистрация и последующий поиск и выполнение нужной ветки - гораздо лучше.
zub писал(а):С ростом сложности ружда будет всё чаще.

Лекс Айрин писал(а):Тут как с написанием художественных текстом -- хочешь чтобы было интересно, пиши сам.
zub писал(а):Динамическая регистрация и последующий поиск и выполнение нужной ветки - гораздо лучше.

program case2map;
uses
  gmap{модуль описания TMap из fpc-stl},gutil{пара вспомогательных функций из fpc-stl};
type
  TMyKey=Integer;//Тип ключа в мапе
  TMyOnKeyProc=procedure;//Тип данных сопоставленных ключу в мапе
  TMyKeyComparer=specialize TLess<TMyKey>;//стандартный компаратор из gutil, нужен для сортировки ключей
  TMyCase2Map=class(specialize TMap<TMyKey,TMyOnKeyProc,TMyKeyComparer>)//собственно сам класс
    procedure doit(key:TMyKey);//ищем ключ, если есть - вызываем сопоставленную ему процедуру, если нет делаем чето другое
  end;
var
  MyCase:TMyCase2Map;
procedure on1proc;//выполняется для 1
begin
  writeln('on1proc');
end;
procedure on2proc;//выполняется для 2
begin
  writeln('on2proc');
end;
procedure on100proc;//выполняется для 100
begin
  writeln('on100proc');
end;
procedure TMyCase2Map.doit(key:TMyKey);
var
  proc:TMyOnKeyProc;
begin
  if TryGetValue(key,proc) then //пробуем найти ключ
    proc() //если нашли запускаем процедуру
  else
    writeln('Do Something else, key=',key) //не нашли, аналог case else
end;
begin
  MyCase:=TMyCase2Map.Create;
  MyCase.Insert(100,@on100proc); //регистрируем процедуру для 100
  MyCase.Insert(2,@on2proc);//регистрируем процедуру для 2
  MyCase.Insert(1,@on1proc);//регистрируем процедуру для 1
  MyCase.doit(1);//пробуем выполнить чтото для 1
  MyCase.doit(22);//пробуем выполнить чтото для 22
  MyCase.doit(2);//пробуем выполнить чтото для 2
  MyCase.doit(33);//пробуем выполнить чтото для 33
  MyCase.doit(100);//пробуем выполнить чтото для 100
  MyCase.Destroy;//денег нет, вы держитесь тут. хорошего настроения
  readln;
end.on1proc
Do Something else, key=22
on2proc
Do Something else, key=33
on100proc
zub писал(а):if TryGetValue(key,proc) then //пробуем найти ключ
generic TSet<T, TCompare>=class  .... 
function TSet.NFind(value:T):PNode;inline;
var x:PNode;
begin
  x:=FBase;
  while(x <> nil) do begin
    if(TCompare.c(value,x^.Data)) then x:=x^.Left
    else if(TCompare.c(x^.Data,value)) then x:=x^.Right
    else begin
      exit(x);
    end;
  end;
  exit(nil);
end; 

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1