Swift Fonksiyonu Aşırı Yüklemesi (Örneklerle)

Bu makalede, fonksiyon aşırı yüklemesini, ne zaman aşırı fonksiyon yüklemesine ihtiyacımız olduğunu ve örneklerle nasıl aşırı yükleneceğini öğreneceksiniz.

Aynı ada sahip ancak farklı bağımsız değişkenlere sahip iki veya daha fazla işlev aşırı yüklenmiş işlevler olarak bilinir.

Neden aşırı fonksiyon yüklemesine ihtiyacımız var?

Oyuncunun bıçak, bıçak ve silah kullanarak düşmanlarına saldırabileceği bir nişancı oyunu geliştirdiğinizi hayal edin. Saldırı işlevi için çözümünüz, eylemleri aşağıdaki gibi işlevler halinde tanımlıyor olabilir:

 func attack() ( //… print("Attacking with Knife") ) func attack() ( //… print("Attacking with Blade") ) func attack() ( //… print("Attacking with Gun") ) 

Fakat yukarıdaki programı çalıştırmayı denediğinizde, Swift'de daha önce burada açıklanan 'attack ()' gibi bir derleme zamanı hatası alacaksınız . Ancak, başka bir çözüm, belirli işlevler için farklı işlev adları şu şekilde tanımlanıyor olabilir:

 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") ) 

Yapının ne olduğunu bilmiyorsanız endişelenmeyin. Şimdilik bunu sadece programlamada fiziksel bir nesne oluşturan bir şey olarak düşünün, yani bir bıçak, tabanca ve bıçak yaratıyorsunuz. Daha fazlasını öğrenmek istiyorsanız, Swift Struct'a bakın. Değilse, sonraki bölümlerde buna geri döneceğiz.

Bu çözümle ilgili tek sorun, o belirli saldırı eylemini çağırmak için işlev adlarını hatırlamanız gerekmesidir. Ayrıca seviye yükseldikçe, oyuncu bomba, el bombası, av tüfeği vb. Kullanarak saldırı için ek özelliklere sahip olabilir.

Farklı adlarla işlev oluşturmak zaman alıcıdır ve işlev adını çağırmak için hatırlama yükünü artırır. Sonuç olarak, sezgisel değil.

Aynı isimde ancak her silah için farklı uygulamalarla farklı işlevler oluşturabilseniz çok daha iyi olur. Bu şekilde, bir işlev adını hatırlamak yeterlidir ve diğer silahların işlev adları konusunda endişelenmenize gerek kalmaz.

İşlevsel aşırı yükleme nedir?

Az önce anlattığımız süreç, fonksiyon aşırı yükleme olarak bilinir. Tanım olarak, aynı ada sahip ancak farklı sayıda veya türde parametre geçirilmiş iki veya ikiden fazla işlev oluşturma işlemi, işlev aşırı yüklemesi olarak bilinir.

Bunu aşağıdaki örnekte görelim:

Örnek 1: Fonksiyon Aşırı Yüklemesi

 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()) 

Yukarıdaki programı çalıştırdığınızda, çıktı:

 Silahla Saldırmak Bıçakla Saldırmak Bıçakla Saldırmak 

Yukarıdaki programda aynı isimde üç farklı fonksiyon oluşturduk attack. Ancak, farklı parametre türlerini kabul eder. Bu şekilde attackişlevi çağırmak için adı hatırlamak yeterlidir.

  • Çağrı attack(with: Gun()), işlevin içindeki ifadeyi tetikler func attack(with weapon:Gun).
  • Çağrı attack(with: Blade()), işlevin içindeki ifadeyi tetikler func attack(with weapon:Blade).
  • attack(with: Knife())İşlevin içindeki çağrı ifadesi func attack(with weapon:Knife).

Örnek 2: Farklı parametre türlerine göre Fonksiyon Aşırı Yüklemesi

 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") 

Yukarıdaki programı çalıştırdığınızda, çıktı:

 İnt değeri 2'dir Dize değeri Swift'dir 

Yukarıdaki programda, aynı ada output()ve aynı sayıda parametreye sahip iki işlevimiz var . Bununla birlikte, ilk output()işlev parametre olarak bir tamsayı alır ve ikinci output()işlev Stringbir parametre olarak alır .

Örnek 1'e benzer şekilde,

  • çağrı output(x: 2), işlevin içindeki ifadeyi tetikler func output(x:Int)ve
  • çağrı output(x: "Swift"), işlevin içindeki ifadeyi tetikler func output(x:String).

Örnek 3: Farklı parametre sayısına göre Fonksiyon Aşırı Yüklemesi

 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) 

Yukarıdaki programı çalıştırdığınızda, çıktı:

Günaydın! İyi akşamlar! İyi geceler!

Yukarıdaki programda, fonksiyon output()argüman sayısına göre aşırı yüklenmiştir.

Birincisi output()parametre almaz, ikincisi output()tek bir parametre alır: ve Stringüçüncüsü output()iki parametre alır: Stringve Int.

Parametre adını değiştirerek ancak argüman etiketini şu şekilde tutarak aşırı yüklemeyi deneyelim:

Örnek 4: Aynı bağımsız değişken etiketli fonksiyon aşırı yükleme

 func output(value text:String) ( print(text) ) func output(value num:Int) ( print(num) ) output(value: 2) output(value: "Hello") 

Yukarıdaki programı çalıştırdığınızda, çıktı:

 2 Merhaba

Gördüğünüz gibi, yukarıdaki programda aşırı yüklenmiş fonksiyonlar için aynı argüman etiketini kullanabilirsiniz. Ancak, aşırı yükleme gerektirdiğinden, farklı sayıda parametreniz veya farklı türde parametrelere sahip olmanız gerekir.

Ilginç makaleler...