Konuyu Oyla:
  • Derecelendirme: 0/5 - 0 oy
  • 1
  • 2
  • 3
  • 4
  • 5
fonksiyon içinde parametreye default değer atama sorunu
#1
Selamlar

Bir fonksiyon içerisinde Defualt olarak Record tipinde tanımlanan bir parametrenin default değerini atamada sorun yaşıyorum
Bu konuyu nasıl aşabilirim.

Teşekkürler

...
...
type
 TFRPreviewRecord = record
   oADOC: TADOConnection;
   sFormAdi : String;
   sRaporAdi : String;
end;
Const
 DefaultFRPreview : TFRPreviewRecord =
   (oADOC : nil;
    sFormAdi : '';
    sRaporAdi : '');

function fn_X(pFR : TFRPreviewRecord = DefaultFRPreview ): Boolean;   //Bu satır derlenmiyor

implementation





Bu dünyada kendine sakladığın bilgi ahirette işine yaramaz. 
Cevapla
#2
Default değer için aynı fonksiyondan bir tane daha yazmalısınız. Yani overload etmelisiniz:
function fn_X(pFR : TFRPreviewRecord): Boolean; overload;

function fn_X: Boolean; overload;

Default değer için olanın implementasyonu:
function fn_X: Boolean;
begin
  fn_X(DefaultFRPreview);
end;
There's no place like 127.0.0.1
WWW
Cevapla
#3
(24-05-2019, Saat: 00:17)SimaWB Adlı Kullanıcıdan Alıntı: Default değer için aynı fonksiyondan bir tane daha yazmalısınız. Yani overload etmelisiniz:
function fn_X(pFR : TFRPreviewRecord): Boolean; overload;

function fn_X: Boolean; overload;

Default değer için olanın implementasyonu:
function fn_X: Boolean;
begin
  fn_X(DefaultFRPreview);
end;
@SimaWB Hocam olayı tam olarak anlıyamadım
Verdiğiniz örnekte default değeri atama olarak gönderiyoruz. Fakat benim yapmak istediğim declerasyon sırasında defult değer vermek
yani çoklu parametrelerde sondaki default değerleri parametre geçmeden bunu sağlamaya çalışmak istiyorum
Bu dünyada kendine sakladığın bilgi ahirette işine yaramaz. 
Cevapla
#4
İlkel (primitive) bir tip oluşturmadığınız için varsayılan argüman olarak bir Record tipi geçmenize izin verilmiyor. Bunu ancak her defasında kullanacağınız fonksiyonu bir sınıf içerisinde yazıp sınıfın oluşturucu metodu (constructor) içerisine parametre olarak geçtiğiniz varsayılan tipi sınıf içinde yerel bir record değişkenine atamasını yapıp overload edilen ana metodun içinden dönüş tipi olarak constructor içine geçtiğiniz argümanı döndürebilirsiniz.

Eğer ilkel (primitive) tipler olsaydı varsayılan olarak fn_X(AStatus: boolean = false) şeklinde kullanılabilirdi.
Cevapla
#5

uses
RecordUnit.pas; // Record tip tanım kütüphanesi

type
TMyClass=class
constructor Create(AOwner:TOwner;ADefaultFRPreview:TFRPreviewRecord);
function fn_X: Boolean; overload;
function fn_X(pFR : TFRPreviewRecord): Boolean; overload;
end;

var
_DefaultFRPreview : TFRPreviewRecord;

constructor Create(AOwner:TOwner;ADefaultFRPreview:TFRPreviewRecord);
begin
inherited;
//...
_DefaultFRPreview := ADefaultFRPreview;
//...
end;

function fn_X: Boolean;
begin
  fn_X(_DefaultFRPreview);
end;

Cevapla
#6
(24-05-2019, Saat: 10:11)adelphiforumz Adlı Kullanıcıdan Alıntı: @SimaWB Hocam olayı tam olarak anlıyamadım
Verdiğiniz örnekte default değeri atama olarak gönderiyoruz. Fakat benim yapmak istediğim declerasyon sırasında defult değer vermek
yani çoklu parametrelerde sondaki default değerleri parametre geçmeden bunu sağlamaya çalışmak istiyorum

Parametrenin default değeri ne zaman kullanılır? Siz o paramtereye değer vermeden kullandığınızda. İşte benim yazdığım da tam olarak bunu yapıyor. Aynı fonksiyonu parametreye değer vermeden kullanabilmeniz için bir tane daha tanımladık.
There's no place like 127.0.0.1
WWW
Cevapla
#7
(24-05-2019, Saat: 11:00)SimaWB Adlı Kullanıcıdan Alıntı:
(24-05-2019, Saat: 10:11)adelphiforumz Adlı Kullanıcıdan Alıntı: @SimaWB Hocam olayı tam olarak anlıyamadım
Verdiğiniz örnekte default değeri atama olarak gönderiyoruz. Fakat benim yapmak istediğim declerasyon sırasında defult değer vermek
yani çoklu parametrelerde sondaki default değerleri parametre geçmeden bunu sağlamaya çalışmak istiyorum

Parametrenin default değeri ne zaman kullanılır?  Siz o paramtereye değer vermeden kullandığınızda. İşte benim yazdığım da tam olarak bunu yapıyor. Aynı fonksiyonu parametreye değer vermeden kullanabilmeniz için bir tane daha tanımladık.

@SimaWB Teşekkürler

(24-05-2019, Saat: 10:48)Abdullah ILGAZ Adlı Kullanıcıdan Alıntı:

uses
RecordUnit.pas; // Record tip tanım kütüphanesi

type
TMyClass=class
constructor Create(AOwner:TOwner;ADefaultFRPreview:TFRPreviewRecord);
function fn_X: Boolean; overload;
function fn_X(pFR : TFRPreviewRecord): Boolean; overload;
end;

var
_DefaultFRPreview : TFRPreviewRecord;

constructor Create(AOwner:TOwner;ADefaultFRPreview:TFRPreviewRecord);
begin
inherited;
//...
_DefaultFRPreview := ADefaultFRPreview;
//...
end;

function fn_X: Boolean;
begin
  fn_X(_DefaultFRPreview);
end;

@Abdullah ILGAZ Teşkkürler
Bu dünyada kendine sakladığın bilgi ahirette işine yaramaz. 
Cevapla


Konu ile Alakalı Benzer Konular
Konular Yazar Yorumlar Okunma Son Yorum
  Cas Terazi Veri gönderimi Delphi sürüm sorunu KUNTAY 12 4.418 08-11-2023, Saat: 00:06
Son Yorum: berkan
  TCMB Kur Almada Explorer Sertifika Sorunu Adem Kurt 3 621 24-10-2023, Saat: 15:14
Son Yorum: RAD Coder
  program exe icon sorunu cvheneburi 9 2.830 19-10-2023, Saat: 15:04
Son Yorum: harunyl
  TThread.Synchronize çalışmama sorunu muratmutlu 3 636 10-10-2023, Saat: 12:16
Son Yorum: Tuğrul HELVACI
Sad Tabsheet içinde Form Create, Close olayları YILDIRIMBEY 0 248 24-08-2023, Saat: 17:26
Son Yorum: YILDIRIMBEY



Konuyu Okuyanlar: 1 Ziyaretçi