fonksiyon ile birden fazla yapmak?

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
Kullanıcı avatarı
Shou
Üye
Mesajlar: 260
Kayıt: 26 Ağu 2011 02:00

fonksiyon ile birden fazla yapmak?

Mesaj gönderen Shou »

merhabalar benim yapmak istediğim şu,

Kod: Tümünü seç

yazdir("ad","soyad","yaş");
tarzında birden fazla şeyi fonksiyona taşımak istiyorum bunu nasıl yaparım normalde 1 tane taşıyorum örnek,

Kod: Tümünü seç

yazdir("hasan gül 19");
tarzında ama ayrı ayrı taşımak istiyorum yardımcı olursanız sevinirim.
destiny24
Üye
Mesajlar: 131
Kayıt: 22 Tem 2010 09:42

Re: fonksiyon ile birden fazla yapmak?

Mesaj gönderen destiny24 »

fonksiyonu overload etmekten bahsediyorsun.Tanımlamaların şöyle olmalı


public
procedure Yazdir(Ad, Soyad: String; No: Integer) : Overload;
procedure Yazdir(Ad_Soyad: String; No: Integer) : Overload;
Kullanıcı avatarı
Shou
Üye
Mesajlar: 260
Kayıt: 26 Ağu 2011 02:00

Re: fonksiyon ile birden fazla yapmak?

Mesaj gönderen Shou »

Mesela abi bana örnek olarak bi tane yaparmısın misal,

Kod: Tümünü seç

Yazdir("ad","soyad");
daha sonra yazdir fonksiyonu şöyle olsun,

Kod: Tümünü seç

showmessage(ad);
showmessage(soyad);
ayrı ayrı okutabileyim istiyorum.
Kullanıcı avatarı
sabanakman
Kıdemli Üye
Mesajlar: 3081
Kayıt: 17 Nis 2006 08:11
Konum: Ah bi Antalya olaydı keşke (Ankara)

Re: fonksiyon ile birden fazla yapmak?

Mesaj gönderen sabanakman »

Kod: Tümünü seç

function Yazdir(const Args: array of const): string;
var
  I: Integer;
  S: String;
begin
  Result := '';
  for I := Low(Args) to High(Args) do
  begin
    case Args[I].VType of
    vtAnsiString:S := PChar(Args[I].VAnsiString);
    vtBoolean:S := BoolToStr(Args[I].VBoolean);
    vtChar:S := Args[I].VChar;
    vtClass:S := Args[I].VClass.ClassName;
    vtCurrency:S := FloatToStr(Args[I].VCurrency^);
    vtExtended:S := FloatToStr(Args[I].VExtended^);
    vtInt64:S := IntToStr(Args[I].VInt64^);
    vtInteger:S := IntToStr(Args[I].VInteger);
    vtInterface:S := Format('%p', [Args[I].VInterface]);
    vtObject:S := Args[I].VObject.ClassName;
    vtPChar:S := Args[I].VPChar;
    vtPointer:S := Format('%p', [Args[I].VPointer]);
    vtPWideChar:S := Args[I].VPWideChar;
    vtString:S := Args[I].VString^;
    vtVariant:S := Args[I].VVariant^;
    vtWideChar:S := Args[I].VWideChar;
    vtWideString:S := WideString(Args[I].VWideString);
    else
      //raise Exception.CreateFmt('Unsupported VType=%d',[Args[I].VType]);
    end;
    Result := Result + S;
  end;
end;
Örnek kullanım

Kod: Tümünü seç

procedure TForm1.Button1Click(Sender: TObject);
begin
  ShowMessage(Yazdir(['ad','soyad',15]));
  ShowMessage(Yazdir(['test']));
end;
Şaban Şahin AKMAN
_________________
Derin olan kuyu değil kısa olan iptir. - .
Kullanıcı avatarı
Shou
Üye
Mesajlar: 260
Kayıt: 26 Ağu 2011 02:00

Re: fonksiyon ile birden fazla yapmak?

Mesaj gönderen Shou »

Şimdi abi şöyle bir sorun var ben fonksiyon içerisine taşımak istiyorum bilgileri oradan da txt yazıracağım o yüzden her mesaj için aynı kodu yazarsam form çok büyüyor alan büyüyor boyutu yani ben tek fonksiyon üzerinden yapmak istiyorum?
Kullanıcı avatarı
sabanakman
Kıdemli Üye
Mesajlar: 3081
Kayıt: 17 Nis 2006 08:11
Konum: Ah bi Antalya olaydı keşke (Ankara)

Re: fonksiyon ile birden fazla yapmak?

Mesaj gönderen sabanakman »

Nasıl ki, tek Format fonksiyonu ile bir çok değerin string karşılığı üretiliyorsa yukarıdaki Yazdır fonksiyonu da tek başına bu işlevi yapabilmektedir. Üstelik parametre olarak verilen değerlerin tipi ve sayısı önemli değildir. Mesela

Kod: Tümünü seç

ShowMessage(Yazdir(['ali','Veli',15,3.3,'Dünya']));
ShowMessage(Yazdir([5,'Okul']));
ile

Kod: Tümünü seç

ShowMessage(Format('%s%s%d%f,%s',['ali','Veli',15,3.3,'Dünya']));
ShowMessage(Forat('%d,%s',[5,'Okul']));
kodları aynı sonucu üretirler. Örnekte verilen fonksiyonda parametrede geçen veri tiplerinin ve sayısının önemi yoktur ve hem sabit hem de değişkenler bu parametre listesi içerisinde kullanılabilirler. Kısacası erişmek istediğiniz bilgiler örnek fonksiyon içerisindeki döngüyle tek tek sağlanmaktadır. Burada yapmak istediğiniz her ne ise, döngü içerisinde S değişkeniyle veya döngü sonrası Result (fonksiyon sonuç) değişkeniyle yapmak istediğinizi yapabilirsiniz. Örnek üzerinde biraz zihin egzersizi sizi çözüme kavuşturacak kadar kolay bir yapıdadır aslında.
Şaban Şahin AKMAN
_________________
Derin olan kuyu değil kısa olan iptir. - .
Cevapla