Delphi'de Yöntem Aşırı Yükleme ve Varsayılan Parametreler

Fonksiyonlar ve prosedürler Delphi dilinin önemli bir parçasıdır. Delphi 4'ten başlayarak Delphi, varsayılan parametreleri destekleyen işlevler ve prosedürlerle çalışmamızı sağlar ( parametreler isteğe bağlı) ve iki veya daha fazla rutinin aynı ada sahip olmasına ancak tamamen farklı çalışmasına izin verir rutinleri.

Aşırı yükleme ve varsayılan parametrelerin daha iyi kodlamanıza nasıl yardımcı olabileceğini görelim.

fazla yükleme

Basitçe söylemek gerekirse, aşırı yükleme aynı ada sahip birden fazla rutin bildiriyor. Aşırı yükleme, aynı adı paylaşan ancak farklı sayıda parametre ve tür içeren birden fazla rutine sahip olmamızı sağlar.

Örnek olarak, aşağıdaki iki işlevi ele alalım:

{Aşırı yüklenmiş rutinler bildirilmelidir. aşırı yük direktifi ile}fonksiyon SumAsStr (a, b: tamsayı): sicim; aşırı yükleme; başla Sonuç: = IntToStr (a + b); son; fonksiyon SumAsStr (a, b: uzatılmış; Basamak: tamsayı): sicim; aşırı yükleme; başla Sonuç: = FloatToStrF (a + b, ffFixed, 18, Basamak); son; 

Bu bildirimler, her ikisi de SumAsStr adı verilen ve farklı sayıda parametre alan ve iki farklı türde olan iki işlev oluşturur. Aşırı yüklenmiş bir rutin dediğimizde, derleyici hangi rutini çağırmak istediğimizi söyleyebilmelidir.

instagram viewer

Örneğin, SumAsStr (6, 3) ilk SumAsStr işlevini çağırır, çünkü bağımsız değişkenleri tamsayı değerlidir.

Not: Delphi, kod tamamlama ve kod bilgileri yardımıyla doğru uygulamayı seçmenize yardımcı olacaktır.

Öte yandan, SumAsStr işlevini aşağıdaki şekilde çağırmaya çalışıp çalışmadığımızı düşünün:

 SomeString: = SumAsStr (6.0,3.0) 

"Şeklinde bir hata alırız."bu argümanlarla çağrılabilecek aşırı yüklü bir 'SumAsStr' sürümü yoktur."Bu, ondalık noktadan sonraki basamak sayısını belirtmek için kullanılan Basamaklar parametresini de eklememiz gerektiği anlamına gelir.

Not: Aşırı yüklenmiş rutinleri yazarken yalnızca bir kural vardır ve aşırı yüklenmiş bir rutinin en az bir parametre tipinde farklı olması gerekir. Bunun yerine dönüş türü, iki rutini ayırt etmek için kullanılamaz.

İki Ünite - Bir Rutin

Diyelim ki A biriminde bir rutinimiz var ve B birimi A birimini kullanıyor ancak aynı ada sahip bir rutin bildiriyor. B birimindeki bildirimin aşırı yük yönergesine ihtiyacı yoktur - B biriminden rutin A sürümüne çağrıları nitelemek için A biriminin adını kullanmalıyız.

Bunun gibi bir şey düşünün:

birim B;... kullanımları A;... prosedür RoutineName; başla Sonuç: = A.RoutineName; son; 

Aşırı yüklenmiş rutinleri kullanmanın bir alternatifi, genellikle yazmak ve bakım yapmak için daha az kodla sonuçlanan varsayılan parametreleri kullanmaktır.

Varsayılan / İsteğe Bağlı Parametreler

Bazı ifadeleri basitleştirmek için, bir fonksiyonun veya prosedürün parametresi için varsayılan bir değer verebiliriz ve rutini parametre ile birlikte veya parametre olmadan çağırarak isteğe bağlı hale getirebiliriz. Varsayılan bir değer sağlamak için, parametre bildirimini eşit (=) sembolü ve ardından sabit bir ifade ile sonlandırın.

Örneğin, beyan verildiğinde

fonksiyon SumAsStr (a, b: uzatılmış; Basamak: tamsayı = 2): sicim; 

aşağıdaki işlev çağrıları eşdeğerdir.

 SumAsStr (6.0, 3.0) 
 SumAsStr (6.0, 3.0, 2) 

Not: Varsayılan değerlere sahip parametreler, parametre listesinin sonunda yer almalı ve değere göre veya sabit olarak iletilmelidir. Bir başvuru (var) parametresinin varsayılan değeri olamaz.

Birden fazla varsayılan parametreye sahip rutinleri çağırırken parametreleri atlayamayız (VB'deki gibi):

fonksiyon SkipDefParams (var Dizi; B: tamsayı = 5, C: boolean = Yanlış): boolean;... // bu çağrı bir hata mesajı veriyor
CantBe: = SkipDefParams ('delphi',, Doğru); 

Varsayılan Parametrelerle Aşırı Yükleme

Hem işlev hem de yordam aşırı yüklenmesi ve varsayılan parametreleri kullanırken, belirsiz rutin bildirimler uygulamayın.

Aşağıdaki beyanları göz önünde bulundurun:

prosedür DoIt (A: genişletilmiş; B: tamsayı = 0); aşırı yükleme; prosedür DoIt (A: uzatılmış); aşırı yükleme; 

DoIt (5.0) gibi DoIt yordamına çağrı derlenmez. İlk yordamdaki varsayılan parametre nedeniyle, bu yordam her iki yordamı da çağırabilir, çünkü hangi yordamın çağrılması gerektiğini söylemek mümkün değildir.

instagram story viewer