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
  Locate ve Lookup TR Karakter sorunu narkotik 3 1.494 15-06-2020, Saat: 16:49
Son Yorum: samsaros@gmail.com
  Firebird - İçinde veri olan bir alanın tipini değiştirme habikus 3 459 07-06-2020, Saat: 23:32
Son Yorum: habikus
  Delphi 10.3 Rest Debugger sorunu varyemez 4 548 31-05-2020, Saat: 01:36
Son Yorum: varyemez
  [Ödüllü Soru] Object türüne göre nesne üreten fonksiyon Abdullah ILGAZ 0 262 18-05-2020, Saat: 23:22
Son Yorum: Abdullah ILGAZ
  OrangeUI çoklu dil sorunu nguzeller 0 289 17-05-2020, Saat: 12:15
Son Yorum: nguzeller



Konuyu Okuyanlar: 1 Ziyaretçi