Pada artikel ini, Anda akan belajar tentang function overloading, kapan kita membutuhkan function overloading dan bagaimana cara melakukan overload dengan contoh-contoh.
Dua atau lebih fungsi yang memiliki nama yang sama tetapi argumen yang berbeda dikenal sebagai fungsi yang kelebihan beban.
Mengapa kita membutuhkan function overloading?
Bayangkan Anda sedang mengembangkan game penembak di mana pemain dapat menyerang musuhnya menggunakan pisau, bilah, dan pistol. Solusi Anda untuk fungsionalitas serangan mungkin mendefinisikan tindakan menjadi fungsi sebagai:
func attack() ( //… print("Attacking with Knife") ) func attack() ( //… print("Attacking with Blade") ) func attack() ( //… print("Attacking with Gun") )
Tetapi ketika Anda mencoba menjalankan program di atas, Anda akan mendapatkan kesalahan waktu kompilasi di Swift seperti 'attack ()' yang sebelumnya dideklarasikan di sini . Namun, solusi lain mungkin menetapkan nama fungsi yang berbeda untuk fungsionalitas tertentu sebagai:
struct Knife ( ) struct Gun ( ) struct Blade ( ) func attackUsingKnife(weapon:Knife) ( //… print("Attacking with Knife") ) func attackUsingBlade(weapon:Blade) ( //… print("Attacking with Blade") ) func attackUsingGun(weapon:Gun) ( //… print("Attacking with Gun") )
Jangan khawatir jika Anda tidak tahu apa struct itu. Untuk saat ini anggap saja sebagai sesuatu yang menciptakan objek fisik dalam pemrograman, jadi Anda membuat pisau, pistol, dan bilah. Jika Anda ingin tahu lebih banyak, lihat Swift Struct. Jika tidak, kita akan kembali ke bab selanjutnya.
Satu-satunya masalah dengan solusi ini adalah Anda perlu mengingat nama fungsi untuk memanggil aksi serangan tertentu. Juga saat level naik, pemain mungkin memiliki fitur tambahan untuk menyerang menggunakan bom, granat, senapan, dll.
Membuat fungsi dengan nama yang berbeda memakan waktu dan meningkatkan overhead mengingat nama fungsi untuk memanggilnya. Secara keseluruhan, ini tidak intuitif.
Akan jauh lebih baik jika Anda dapat membuat fungsi yang berbeda dengan nama yang sama tetapi penerapan yang berbeda untuk setiap senjata. Dengan cara ini, mengingat satu nama fungsi sudah cukup dan Anda tidak perlu khawatir tentang nama fungsi untuk senjata lainnya.
Apa itu function overloading?
Proses yang baru saja kami jelaskan dikenal sebagai overloading fungsi. Menurut definisi, proses membuat dua atau lebih dari dua fungsi dengan nama yang sama tetapi memiliki jumlah atau jenis parameter yang berbeda yang dilewatkan dikenal sebagai overloading fungsi.
Mari kita lihat ini pada contoh di bawah ini:
Contoh 1: Fungsi Overloading
struct Knife ( ) struct Gun ( ) struct Blade ( ) func attack(with weapon:Knife) ( print("Attacking with Knife") ) func attack(with weapon:Gun) ( print("Attacking with Gun") ) func attack(with weapon:Blade) ( print("Attacking with Blade") ) attack(with: Gun()) attack(with: Blade()) attack(with: Knife())
Ketika Anda menjalankan program di atas, hasilnya adalah:
Menyerang dengan Senjata Menyerang dengan Pisau Menyerang dengan Pisau
Dalam program di atas, kami telah membuat tiga fungsi berbeda dengan nama yang sama attack
. Namun, ini menerima jenis parameter yang berbeda. Cara ini cukup mengingat attack
nama untuk memanggil fungsi tersebut.
- Panggilan tersebut
attack(with: Gun())
memicu pernyataan di dalam fungsifunc attack(with weapon:Gun)
. - Panggilan tersebut
attack(with: Blade())
memicu pernyataan di dalam fungsifunc attack(with weapon:Blade)
. attack(with: Knife())
Pernyataan panggilan di dalam fungsifunc attack(with weapon:Knife)
.
Contoh 2: Fungsi Overloading berdasarkan jenis parameter yang berbeda
func output(x:Int) ( print("The int value is (x)") ) func output(x:String) ( print("The string value is (x)") ) output(x: 2) output(x: "Swift")
Ketika Anda menjalankan program di atas, hasilnya adalah:
Nilai int adalah 2 Nilai string adalah Swift
Dalam program di atas, kami memiliki dua fungsi dengan nama yang output()
sama dan jumlah parameter yang sama. Namun, output()
fungsi pertama menggunakan integer sebagai parameter, dan output()
fungsi kedua mengambil String
parameter.
Mirip dengan Contoh 1,
- panggilan untuk
output(x: 2)
memicu pernyataan di dalam fungsifunc output(x:Int)
dan - panggilan untuk
output(x: "Swift")
memicu pernyataan di dalam fungsifunc output(x:String)
.
Contoh 3: Fungsi Overloading berdasarkan jumlah parameter yang berbeda
func output() ( print("Good Morning!") ) func output(text:String) ( print(text) ) func output(text:String, num:Int) ( print("(text)(num)!") ) output() output(text: "Good Evening!") output(text1: "Good N", num: 8)
Ketika Anda menjalankan program di atas, hasilnya adalah:
Selamat pagi! Selamat malam! Selamat malam!
Dalam program di atas, fungsi output()
telah kelebihan beban berdasarkan jumlah argumen.
Yang pertama output()
tidak menggunakan parameter, yang kedua output()
menggunakan satu parameter:, String
dan yang ketiga output()
menggunakan dua parameter: String
dan Int
.
Mari kita coba membebani dengan mengubah nama parameter tetapi menjaga label argumen tetap sama seperti:
Contoh 4: Fungsi overloading dengan label argumen yang sama
func output(value text:String) ( print(text) ) func output(value num:Int) ( print(num) ) output(value: 2) output(value: "Hello")
Ketika Anda menjalankan program di atas, hasilnya adalah:
2 Halo
Seperti yang Anda lihat, pada program di atas, Anda dapat menggunakan label argumen yang sama untuk fungsi yang kelebihan beban. Namun, karena kelebihan beban, Anda harus memiliki jumlah parameter yang berbeda atau jenis parameter yang berbeda.