İOS Swift

Swift Instance Metotlar & Lokal ve Dış Parametreler

Metotlar

Metotlar belirli bir tip özelinde çalışan fonksiyonlardır. Fonksiyonların ne olduğunu ilgili yazımdan ayrıntılı olarak öğrenebilirsiniz. Sınıflar, structlar ve enumların hepsinde metotlar tanımlanabilir ve kullanılabilir. Swift programlama dilinde metod tanımlama, Objective C’deki sınıf metodlarına çok benzer. Dikkat etmeniz gereken fark ise şu; Swift programlama dili içerisinde sctructların ve enumların metod tanımlayabilmesi.

swift metotlar

Instance Metotlar

Instance metotlar bir sınıfın, structure’ın yada enum un instancelarından birine ait olan fonksiyonlardır. Bu metotların hepsi, ait oldukları bu instanceların fonksiyonelliklerini destekler. Instance metotların hepsi fonksiyonları tanımlarken kullandığımız syntax’ın birebir aynısını kullanır. Fonksiyonlarda göstermiş olduğum syntax :

func sayHello(personName: String) -> String {
    println("Hello World !")
}

Instance metot konusunu daha ayrıntılı anlatabilmek için örnek üzerinden gitmek istiyorum.

class Counter {

var count = 0

func increment() {
    count++
}

func incrementBy(amount: Int) {
    count += amount
}

func reset() {
count = 0
}

}

Üstteki örnekte bulunan Counter sınıfı 3 tane instance metoda sahiptir.

  • increment : counter’ı 1 artırır
  • incrementBy(amount: Int) : counter’ı bizim parametre olarak verdiğimiz değer kadar artırır
  • reset : counter’ı sıfırlar.

Bunların yanında counter sınıfı 1 tane count isminde değişkene sahiptir.

Metotları Çağırma

Metotlarımızı nokta syntax’ını kullanarak çağırıyoruz. Counter sınıfımızda bulunan count property’sini arttırmak veya sıfırlamak için bu metotları çağıralım.

let counter = Counter()
// counter’ın başlangıç değeri 0

counter.increment() 
// counter’ın şu anki değeri 1, çünkü increment metotu 1 artırıyor

counter.incrementBy(5)
// counet’ın şu anki değeri 6. Çünkü incrementBy() metodu ile 5 artırdık.

counter.reset()
// counter’ın şu anki değeri 0, reset metotu ile değerini sıfırladık.

Metodlar İçin Lokal ve Dış Parametre İsimleri

Metotlar için local ve dış parametre konusuna girmeden önce lokal ve dış parametre konusunu biraz açmak istiyorum.

Lokal Parametre

func join(s1: String, s2: String, joiner: String) -> String {
return s1 + joiner + s2
}

join("Merhaba", "Dünya", ", ")
// Konsola "Merhaba, Dünya" yazdıracaktır.

Dış Parametre

func join(string s1: String, toString s2: String, withJoiner joiner: String)-> String {
return s1 + joiner + s2
}

join(string: "Merhaba", toString: "Dünya", withJoiner: ", ")
// Konsola "Merhaba, Dünya" yazdıracaktır.

Üstteki 2 örneğe baktığınız zaman alttaki örnekte string, toString, withJoiner dış parametrelerin durumlarını daha anlaşılır kılmak için kullanıldığını görebilirsiniz. Yani göndermiş olduğunuz değişkenin açıklaması gibi kullanabiliyor.

[alert style=’red’]Eğer metot için dış parametre tanımlanmışsa, metot çağrılırken mutlaka kullanılmalıdır.[/alert]

Dönelim konumuza, Metolar İçin Local ve Dış Parametlerin Kullanımı Nasıl Oluyor?

Tıpkı fonksiyonlarda olduğu gibi metotlarda da local ve dış parametreler kullanılabiliyor ancak bu parametrelerin default davranışı fonksiyonlar ve metotlarda farklı.

Swift, metodlardaki ilk parametre değerini local parametre, ikinci ve sonraki parametre değerlerini local ve dış parametre olarak tanımlıyor. Bunu bir örnek üzerinde inceleyecek olursak,

class Counter {
var count: Int = 0

func incrementBy(amount: Int, numberOfTimes: Int) {
count += amount * numberOfTimes
}

}

Counter ismindeki sınıfımızda incrementBy adında bir metodumuz var ve bu metod amount, numberOfTimes adlarında 2 parametre alıyor.

İlk parametre local, sonrakiler hem local hem de dış parametre oluyor demiştik. Bunu görebilmek için metodumuzu çağıralım.

let counter = Counter()

counter.incrementBy(5, numberOfTimes: 3)
// counter değeri 15 oldu.

Gördüğünüz gibi 5 değerini local, numberOfTimes değerini de dış parametre gibi girdik 🙂 Bunu anlamak için 3 ve 5 rakamlarının öncesine bakabilirsiniz. 5’in öncesinde herhangi bir şey yok, ancak 3’ün öncesinde numberOfTimes dış parametre kullanımını var.

self Propertysi

Her instance’da üstü kapalı olarak self property’si bulunur. Bu self property’si direkt olarak instance’ın kendini işaret eder.

Bizde sınıfımız içerisindeki increment metodunu şu şekilde yazabiliriz:

func increment() {
    self.count++
}

Normalde Count sınıfımızda tanımladığımız

var count = 0

değişkenini işaret etmek için self.count şeklinde kullandık. Normal kullanımda da self yazmamıza gerek kalmıyor. O yüzden count++ şeklinde kullanabiliyoruz.

Ancak instance metotlarda parametre ismi ve instance’a ait olan property’nin ismi aynı olduğundahata ile karşılaşılır. Bu durumda self kullanarak instanceımızın property’sini işaret etmemiz gerekir.Burası kritik bir nokta, atlanılmamalı.

Yorum Ekle

Yorum Yap