Her ne kadar Swift bir işleve dayalı bir dil gibi gözükse de aslında çok gelişmiş bir nesneye dayalı dildir. Büyük abisi Objective-C‘den aldığı güçle bu konuda oldukça gelişmiştir ve yeni yapısıyla çok daha hızlıdır. Şimdi bu kavramın ilk elemanı olan fonksiyonlardan bahsedeceğiz.

Bilindiği üzere genelde fonksiyonlar arayüz kısmında tanımlanır ve tanımlama kısmında içi doldurularak geliştirilir. Bu kavramı Java ile bir farklılık gelmiş ve sınıflar kendi içlerinde hem arayüz hem de tanıma dönüşmüşlerdi. Swift de bu modeli benimsiyor ve eskisi gibi .h ve .m dosyları yerine artık tek bir .swift dosyası içinde tüm sınıf tanımlanabiliyor ve fonksiyonlar da tanımlandıkları yerde tüm sınıf için erişilebilir hale geliyor.

Öncelikle fonksiyon tanımlamanın şekli alışılmışın dışında, bunun nedenlerini birazdan anlatacağım, ama önce nasıl gözüktüğüne bakalım. Alışık olduğumuz durumda önce fonksiyonun döndüreceği objenin tipini sonra fonksiyonun ismini sonra da aldığı parametreleri yazıyorduk çoğu dilde.

string monthName(int month)
- (NSInteger)average:(NSInteger)lhs with:(NSInteger)rhs

Fakat Swift ile bir script yazar gibi önce fonksiyon için bir temel tanım yapıp sonra ismini, sonra parametrelerini en sonunda da döndüreceği tüm objelerin tiplerini yazıyoruz. Evet yanlış okumadınız birden fazla obje döndürmek artık mümkün.

func greet(name: String, day: String) -> String {
    return "Hello \(name), today is \(day)"
}
func istatistik(notlar: [Int]) -> (min: Int, max: Int, toplam: Int) {
    //Verileri değerlendiren bir kod parçası
}

let veriler = istatistik([13, 27, 5, 67, 45])
veriler.toplam  //sum ismindeki obje
veriler.2 //2 index'indeki obje

Aynı tipte veri alacak olan ve sınırlamak istemediğiniz fonksiyonlar için de çözüm üretilmiş:

func toplam(sayilar: Int..) -> Int{

//sayilar dizilimi üzerinde for-in ile toplama yapan kod

}

toplam()  //0
toplam(7, 29, 81)  //117

Fonksiyon içinde fonksiyon yaratmak da mümkün hatta fonskiyon içinde yaratılan fonksiyonu sonuç olarak döndürmek te mümkün:

func makeIncrementer() -> (Int -> Int) {

    func addOne(number: Int) -> Int {
        return 1+number
    }
    return addOne
}

var incrementer = makeIncrementer()  //Döndürülen fonksiyonu bir değişkende tutuyoruz

//Fonksiyon olarak çağırıyoruz gerekli paramatrelerle
incrementer(7)  //8 basar konsola

Barış Altop
Barış Altop
Matematik tutkusunu yazılım sanatına dönüştürmeyi hedef seçmiş, bilgisayar mühendisliği doktora öğrencisi. Biraz Apple tutkunu, ama teknoloji düşkünü yazılımcı.