28 Ağustos 2012 Salı

TPredicate(T) Kullanımı

{
 İsmail Kocacan
 TPredicate Kullanımı
}
unit Unit1;

interface

uses
  Windows,
  Messages,
  SysUtils,
  Variants,
  Classes,
  Graphics,
  Controls,
  Forms,
  Dialogs,
  StdCtrls;

type

  TStringListHelper = class helper for TStringList
    function Where(Condition: TPredicate): TStringList;
  end;

  TForm1 = class(TForm)
    Memo1: TMemo;
    procedure FormCreate(Sender: TObject);
  private
 
  public

  end;

var
  Form1: TForm1;




implementation

{$R *.dfm}


procedure TForm1.FormCreate(Sender: TObject);
var
  AList: TStringList;
begin
  AList := TStringList.Create;
  AList.Add('Ali');
  AList.Add('Veli');
  AList.Add('Deli');
  AList.Add('İsmail');

  Memo1.Lines.AddStrings(
      AList.Where(
              function(Arg: Integer): Boolean
                  begin
                    Result := Arg > 3;
                  end
      )
  );

  AList.Free;
end;


{ TStringListHelper }
function TStringListHelper.Where(Condition: TPredicate): TStringList;
var
  I: Integer;
  NewList: TStringList;
begin
  NewList := TStringList.Create;
  for I := 0 to Self.Count - 1 do
  begin
    if Condition(Length(Self[I])) then
      NewList.Add(Self[I]);
  end;
  Result := NewList;
end;

end.

Yukarıdaki örnekte TStringList'e Where isminde bir extension(uzanım) fonksiyon yazdık.
Bu fonksiyon TStringList de bulunan,karakter sayısı 3 den büyük elemanları, yeni bir liste olarak geriye döndürür.

C# Predicate Kullanımı Bknz : http://msdn.microsoft.com/en-us/library/bfcke1bz.aspx
C# Extension Method Kullanımı Bknz : http://msdn.microsoft.com/en-us/library/bb383977.aspx