Memahami Method Overloading Dan Default Parameter


Function dan procedure merupakan bagian penting di Delphi. Sejak Delphi 4, Delphi mengijinkan kita bekerja dengan functions dan procedure yang mendukung  default parameters , and mwmungkinkan dua atau lebih function atau procedure dengan nama yang sama persis (dengan parameter beda) namun berfungsi berbeda.

Nanti kita akan lihat bagimana Overloading dan default parameters akan membantu kita membuat kode yang lebih baik

Overloading
Secara sederhana, dengan overloading kita bisa membuat method dengan nama yang sama (berbeda di parameter) namun berfungsi berbeda.

Sebagai contoh, lihat kode berikut :


{Overloaded routines must be declared
with the overload directive}

function SumAsStr(a, b :integer): string; overload;
begin
  Result := IntToStr(a + b) ;
end;

function SumAsStr(a,b : extended;Digits:integer): string; overload;
begin
  Result := FloatToStrF(a + b, ffFixed, 18, Digits) ;
end; 

Deklarasi di atas akan menghasilkan dua fungsi, keduanya bernama SumAsStr. Kedua fungsi tersebut mempunyai jumlah parameter berbeda dan tipe data juga berbeda. Ketika kita memanggil rutin overloading, compiler akan memberikan saran rutin mana yang akan kita panggil.

Sebagai contoh, SumAsStr(6, 3) akan memanggil fungsi SumAsStr pertama, karena argumen/parameternya bernilai integer.

Delphi akan membantu kita untuk memanggil fungsi dengan implementasi yang benar dengan fitur auto complete nya.

Dengan kata lain, jika kita mencoba memanggil fungsi  SumAsStr dengan cara :

SomeString := SumAsStr(6.0,3.0) 
kita akan mendapatkan error  : "there is no overloaded version of 'SumAsStr' that can be called with these arguments", karena fungsi SumAsStr tidak menerima dua parameter bertipe double, yang ada adalah fungsi SumAsStr dengan dua parameter integer, dan fungsi SumAsStr dengan dua parameter double dan sebuah parameter integer.

Catat : hanya ada satu aturan ketika kita akan menulis rutin overloading yaitu : sebuah rutin overloading harus berbeda pada minimal satu tipe parameter. Nilai kembalian (return type), tidak bisa dipakai untuk membedakan dua rutin.

Two units - one routine
 
Misalkan kita mempunyai sebuah rutin di unit A, dan unit B uses unit A, tapi pada unit B juga ada fungsi dengan nama yang sama. Deklarasi fungsi pada unit B ti does tidak perlu diperlakukan sebagai fungsi overloading. Lalu bagaimana caranya memanggil fungsi (dengan nama yang sama) yang ada di unit A ? Untuk memanggil fungsi di unit A kita harus menyertakan nama unit sebelum nama fungsi. Perhatikan kode di bawah ini :

unit B;
...
uses A;
...
procedure RoutineName;
begin
  Result := A.RoutineName;
end; 

Default / Optional Parameters
 
Untuk menyederhanakan penulisan fungsi, kita bisa menggunakan default parameter. Parameter ini sifatnya opsional, bisa diisi bisa juga tidak.Untuk menggunakan default parameter , akhiri penulisan deklarasi parameter dengan simbol "=" (sama dengan) diikuti dengan nilai defaultnya.

Sebagai contoh, diberikan deklarasi sebuah function sbb : 


function SumAsStr (a,b : extended; Digits : integer = 2) : string; 
the following function calls are equivalent.

SumAsStr(6.0, 3.0) 

SumAsStr(6.0, 3.0, 2)

Catatan: parameterdengan nilai default harus ditulis pada akhir deklarasi parameter, dan harus diberi nilai default dari sebuah nilai atau constanta. Nilai yang mengambil dari sebuah parameter tidak bisa dijadikan nilai default.

Overloading with Default Parameters
Pada saat menggunakan fungsi/prosedur overloading dan mengandung parameter default, jangan membuat deklarasi yang ambigu.

Perhatikan deklarasi di bawah ini :
procedure DoIt(A:extended; B:integer = 0) ; overload;

procedure DoIt(A:extended) ; overload; 

Kenapa deklarasi di atas ambigu? Tuliskan jawaban anda dengan memberikan komentar terhadap artikel ini.

Diterjemahkan dari http://delphi.about.com/od/objectpascalide/a/overloading.htm

2 comments:

Download Android Apps Gratis said...

Wah Overloading bisa juga ya gan?? mantaaap ijinkan saya belajar :D

top1 said...

trim, lama menggunakan delphi baru tahu fungsi dan procedure bisa di overloading juga. bisa di kasih nilai default.
selama ini saya kira hanya bisa dilakukan ketika harus memakai oop

Post a Comment