Tüm Platformlar için Hızlı Uygulama Geliştirme Kitap Yayın Süreci
Kitap gözden geçirilmek üzere BTG (Bilgi ve Teknoloji Grubu) 'na gönderildi. 05.10.2018-14:10
BTG (Bilgi ve Teknoloji Grubu) tarafından iki sayfalık bir reklam tasarımı bekleniyor. 08.10.2018 - 15:30
Kitap basım talebi değerlendirilmek üzere matbaaya bildirildi. Matbaadan basım süreci hakkında bilgi bekleniyor. 15.10.2018 - 15:34

Konuyu Paylaş : facebook gplus twitter

Konuyu Oyla:
  • Derecelendirme: 4/5 - 2 oy
  • 1
  • 2
  • 3
  • 4
  • 5
Class Kullanımı hakkında,
#1
Böyle bir Classım var,
TYakupClass = class
    public
     function doLogin( pUserName , pPassword: String ) : TYakupClass ; stdcall;
   private
      FHatakodu : Integer ;
      FHataText : string ;
   published
      property HataKodu : Integer read FHatakodu write FHatakodu ;
      property Dbase : string read FHataText write FHataText ;
 end;

Böyle bir functionum ,
function TYakupClass.doLogin(pUserName, pPassword: String): TYakupClass;
begin
   Result := TYakupClass.Create;
   if (pUserName = '1') and (pPassword = '1') then
   begin
    Result.FHatakodu := 1;
    Result.FHataText := 'Hata Yok';
   end;
end;


Ya bu şekilde kullanıyorum,
var
 a,b:TYakupClass;
begin
   try
     b := a.doLogin('1','1');
     ShowMessage(inttostr(b.FHatakodu) +' - '+ b.FHataText);
   except on E: Exception do ShowMessage(e.Message);
  end;
   end;

Yada Bu şekilde,
var
 a,b:TYakupClass;
begin
   try
      ShowMessage(inttostr(a.doLogin('1','1').FHatakodu) +' - '+ a.doLogin('1','1').FHataText);
   except on E: Exception do ShowMessage(e.Message);
  end;
   end;

Bu Kullanım doğru mudur
Linkleri Görebilmeniz İçin Giriş yap veya Üye Ol
Kuvvete dayanamayan adalet aciz, 
Adalete dayanamayan kuvvet zalimdir.
WWW
Cevapla
#2
Merhaba ,
birinci kullanım daha doğrudur çünkü 2nci kullanımda hata kodunu ve hata texti basmak için doLogin fonksiyonunu 2 sefer çağırıyorsun.
Ek bilgi olarak HataKodu ve HataText lere FHataKodu , FHataText diyerek ulaşmışsın ancak doğrusu ilgili değişkenlere yazan ve okuyan property lerin var onları kullanmalısın. (TYakupClass.HataKodu gibi..)
Cevapla
#3
(25-08-2016, Saat: 15:37)vkamadan Adlı Kullanıcıdan Alıntı: Linkleri Görebilmeniz İçin Giriş yap veya Üye OlMerhaba ,
birinci kullanım daha doğrudur çünkü 2nci kullanımda hata kodunu ve hata texti basmak için doLogin fonksiyonunu 2 sefer çağırıyorsun.
Ek bilgi olarak HataKodu ve HataText lere FHataKodu , FHataText diyerek ulaşmışsın ancak doğrusu ilgili değişkenlere yazan ve okuyan property lerin var onları kullanmalısın. (TYakupClass.HataKodu gibi..)

Teşekkürler Volkan Bey,
Linkleri Görebilmeniz İçin Giriş yap veya Üye Ol
Kuvvete dayanamayan adalet aciz, 
Adalete dayanamayan kuvvet zalimdir.
WWW
Cevapla
#4
Sınıf hiyerarşisindeki sıralama;

  
TYakupClass = class
    private
 
    protected

    public

    published

end;

şeklinde olmalı, Umarım bu soruyu sorduğuna pişman olmazsın. Bir çok yorum gelecek gibi.  Shy
While true do; Hayat döngüsü, kısır değildir! Yapılan bir yanlış, o döngünün dışına çıkmanızı sağlayacaktır.
WWW
Cevapla
#5
Smile Gelsin gelsin
Sıralama neden önemli burada ?
Linkleri Görebilmeniz İçin Giriş yap veya Üye Ol
Kuvvete dayanamayan adalet aciz, 
Adalete dayanamayan kuvvet zalimdir.
WWW
Cevapla
#6
(25-08-2016, Saat: 14:57)yhackup Adlı Kullanıcıdan Alıntı: Linkleri Görebilmeniz İçin Giriş yap veya Üye OlBöyle bir Classım var,
TYakupClass = class
    public
     function doLogin( pUserName , pPassword: String ) : TYakupClass ; stdcall;
   private
      FHatakodu : Integer ;
      FHataText : string ;
   published
      property HataKodu : Integer read FHatakodu write FHatakodu ;
      property Dbase : string read FHataText write FHataText ;
 end;

Böyle bir functionum ,
function TYakupClass.doLogin(pUserName, pPassword: String): TYakupClass;
begin
   Result := TYakupClass.Create;
   if (pUserName = '1') and (pPassword = '1') then
   begin
    Result.FHatakodu := 1;
    Result.FHataText := 'Hata Yok';
   end;
end;


Ya bu şekilde kullanıyorum,
var
 a,b:TYakupClass;
begin
   try
     b := a.doLogin('1','1');
     ShowMessage(inttostr(b.FHatakodu) +' - '+ b.FHataText);
   except on E: Exception do ShowMessage(e.Message);
  end;
   end;

Yada Bu şekilde,
var
 a,b:TYakupClass;
begin
   try
      ShowMessage(inttostr(a.doLogin('1','1').FHatakodu) +' - '+ a.doLogin('1','1').FHataText);
   except on E: Exception do ShowMessage(e.Message);
  end;
   end;

Bu Kullanım doğru mudur

Merhaba, bu küçük kod bloğunda birden fazla hatalı kullanım mevcut. Bunları kısaca özetlemek gerekir ise;

  1. Bu bir tercih meselesi(bir hata olarak adledilemez) ama; metod isimlerini küçük harf ile başlatmayın. Örneğin; doLogin metodunuz, DoLogin biçiminde olmalı.
  2. Genelde metodlara geçilen parametreleri const ile geçmeye gayret edin. Aksi durumda (sizin şu anda yaptığınız gibi) parametre olarak geçtiğiniz değerler için stack'da yeni değişkenler bellekte tahsis edilir bu da ilgili metodun yavaş çalışmasına neden olur. Parametrelerinizi const anahtar kelimesi ile geçerseniz; bu durumda metoda geçilen parametreler referans olarak aktarılır(Pointer adresleri aktarılır) dolayısı ile herhangi bir hafıza tahsisatına gerek kalmaz.
  3. Hata'nın kodunu ve açıklamasını içeren property'lerinizin dış dünyaya yazılabilir olarak açılmasının bir anlamı yok gibi görünüyor. Bu property'leri ilgili sınıfın içinde internal olarak ayarladığınıza göre, write kısımlarının olmasına gerek yok. Kısaca, ilgili property'ler read-only olmalı.
  4. DoLogin metodunuzun içinde ilgili sınıfınızı create edip onu döndürüyorsunuz, neden ? Bu metod zaten o sınıfın bir metodu ise bunu yapmamalısınız.
  5. Yine DoLogin metodunun içinde kullanıcı adı ve şifre parametrelerinin 1 olmaması durumunda dönecek varsayılan değerler ayarlanmamış. Bu durumda garip değerler ile karşılaşır iseniz şaşırmayın.
  6. Bir button'un altında ya da kod içinde herhangi bir yerde ilgili sınıfınıza işaret eden bir değişken tanımlamışsınız ve bu değişken üzerinden sınıfın bir üyesi olan DoLogin metodunu çağırmışsınız. Bu durum eğer çok şanslı değilseniz büyük ihtimalle AV(Access Violation) hatası almanıza neden olacaktır. Çünkü, henüz ilgili sınıfı oluşturmamışsınız ve oluşturmadığınız bir sınıfın bir metodunu çağırmaya çalışıyorsunuz. Eğer derleyici, ilgili değişkeni nil harici bir ilk değere atamamış ise bu durumda GPF(General Protection Fault) hataları dahi alabilirsiniz ve hatta programınız kırılabilir bile. Eğer bir sınıfın metodunu o sınıfı create etmeden kullanmak istiyorsanız bu durumda ilgili metod'un class metodu olması gerekir. Örneğin; class function DoLogin... gibi.
  7. Bu kısımda da Volkan bey'in söylediğine katılıyorum, DoLogin metodunu iki kere çağırmanın bir anlamı olmaz.
Sevgilerimle
Mal sahibi, mülk sahibi
Hani bunun ilk sahibi ?
Mal da yalan mülk de yalan
Var biraz da sen oyalan...
WWW
Cevapla
#7
Hiyerarşi demiştim. Object Pascal/Delphi'nin  kod standardı gibi bir şey. 
Mesela 100 satırlık bir class içerisinde private bölümünde bir tanımlama yapacaksanız, fazla aramadan class tanımının hemen altına konumlanmanız yeterli olacaktır. Eğer rastgele bir yerde tanımlarsanız, her projenizde private bölümünü arayıp bulmanız gerekecek.
While true do; Hayat döngüsü, kısır değildir! Yapılan bir yanlış, o döngünün dışına çıkmanızı sağlayacaktır.
WWW
Cevapla
#8
Teşekkürler Tuğrul bey,

4. Create etmediğimde Acess viılation hatası almıştım  bu yüzden create ettim,
nE2Elg.png

5. Düzelttim.
function TYakupClass.DoLogin(pUserName, pPassword: String): TYakupClass;
begin
  Result := TYakupClass.Create;
  Result.FHatakodu := 0;
  Result.FHataText := 'Bir Sorun Var';
  if (pUserName = '1') and (pPassword = '1') then
   begin
    Result.FHatakodu := 1;
    Result.FHataText := 'Hata Yok';
    ShowMessage('doLogin');
   end;
end;

Fakat 2.de takıldım.
[dcc32 Error] Gereksinimler.pas(162): E2356 Property accessor must be an instance field or method

şeklinde hata aldım.
Linkleri Görebilmeniz İçin Giriş yap veya Üye Ol
Kuvvete dayanamayan adalet aciz, 
Adalete dayanamayan kuvvet zalimdir.
WWW
Cevapla
#9
Fonksiyonu kullanmadan önce sınıfı oluşturun.

Örneğin;
var
  a:TYakupClass;
begin
 a:=TYakupClass.Create;
  try
    b := a.doLogin('1','1');
    //Diğer işlemler
  finally
    a.free;
  end;
end;
While true do; Hayat döngüsü, kısır değildir! Yapılan bir yanlış, o döngünün dışına çıkmanızı sağlayacaktır.
WWW
Cevapla
#10
Evet oldu o şekilde,

Fonsiyonun içerisinde create ettiğimde, fonksiyonu çağırırken create etmeden çağırabiliyordum.

Şimdi dediğiniz gibi, Fonsiyonun içerisinde create etmedim, fonksiyonu çağırırken create ediyorum bu iki olay arasında ne fark var her iki durumda da kullanabildim bu şekilde ?

function TYakupClass.DoLogin(pUserName, pPassword: String): TYakupClass;
begin
 Result := TYakupClass.Create;
 Result.FHatakodu := 0;
 Result.FHataText := 'Bir Sorun Var';
 if (pUserName = '1') and (pPassword = '1') then
  begin
   Result.FHatakodu := 1;
   Result.FHataText := 'Hata Yok';
   ShowMessage('doLogin');
  end;
end;

   try
     b := a.doLogin('1','1');
     ShowMessage(inttostr(b.Hatakodu) +' - '+ b.HataText);
   except on E: Exception do ShowMessage(e.Message);
   end;








 a := TYakupClass.Create;
    try
     b := a.doLogin('1','1');
     ShowMessage(inttostr(b.Hatakodu) +' - '+ b.HataText);
   except on E: Exception do ShowMessage(e.Message);
   end;


function TYakupClass.DoLogin(pUserName, pPassword: String): TYakupClass;
begin
  //Result := TYakupClass.Create;
  Result.FHatakodu := 0;
  Result.FHataText := 'Bir Sorun Var';
  if (pUserName = '1') and (pPassword = '1') then
   begin
    Result.FHatakodu := 1;
    Result.FHataText := 'Hata Yok';
    ShowMessage('doLogin');
   end;
end;
Linkleri Görebilmeniz İçin Giriş yap veya Üye Ol
Kuvvete dayanamayan adalet aciz, 
Adalete dayanamayan kuvvet zalimdir.
WWW
Cevapla

Konuyu Paylaş : facebook gplus twitter



Konu ile Alakalı Benzer Konular
Konular Yazar Yorumlar Okunma Son Yorum
  JSON Bilgi Talebi, RAD 10 Seattle Yeni JSON Özellikleri Hakkında eroniko 4 122 13-10-2018, Saat: 21:59
Son Yorum: eroniko
  ClassType hakkında adelphiforumz 1 88 11-10-2018, Saat: 22:27
Son Yorum: sabanakman
  Inherited Formlar Hakkında Bilgi Talebi adelphiforumz 5 149 11-10-2018, Saat: 10:28
Son Yorum: adelphiforumz
  Firedac bileşenleri hakkında canbir 2 363 06-10-2018, Saat: 02:06
Son Yorum: Lord_Ares
  Aynı türden iki class'ı nasıl klonlarız? uparlayan 20 795 15-09-2018, Saat: 10:41
Son Yorum: ismailkocacan



Konuyu Okuyanlar: 1 Ziyaretçi