AppSwift

İleri Düzey Swift Fonksiyonları (Reduce, Filter, Map, FlatMap)

20 Kasım 2018 Yazar: 0 Yorum

Swift’te ve birçok dilde, koleksiyonlar programlamanın kalbidir. Swift ise birbiri ile ilişkili dataları tutmamız için bize 3 farklı koleksiyon tipi sunar. Objective-C’nin de sahip olduğu bu koleksiyon tiplerini sıralamak gerekirse Array, Set ve Dictionary diyebiliriz. 

Bunları birer cümlede özetleyecek olursak;

Array, dataları belirli bir sırada tutmamıza olanak verir ve aynı datayı birden fazla kez içerisinde barındırabilir. 

Set, dataları herhangi bir sıra gözetmeksizin içerisinde tutar ve aynı datayı birden fazla kez bünyesinde barındıramaz.

Dictionary ise yine Setler gibi sıra gözetmez fakat datayı key-value temelinde saklar.

Koleksiyon tiplerini kısaca özetledikten sonra asıl konumuza gelirsek, bu koleksiyonlarda yapabileceğimiz işlemleri for döngüsü yerine daha kısa ve keyifli şekilde nasıl yapacağımıza bir bakalım.

Reduce

Reduce’tan bahsedecek olursak, örneğin elimizdeki arrayden geriye tek bir değer döndürmesini istediğimiz durumda bunu kullanabiliriz. Mesela içerisinde Int değer barındıran bir arrayimiz olsun ve biz bu arraydeki tamsayıların toplamına ulaşalım. Bunu normal bir şekilde for döngüsü ile yapalım dersek,

let sayilar = [12,13,14,15,16]
var toplamDeger = 0

for i in sayilar {
    toplamDeger += i
}

print(toplamDeger)

Bu kodu yazmak zorunda kalacağız.

Bir de bunu Reduce kullanarak yapalım.

print(numbers.reduce(0, {$0 + $1}))

Hepsi bu kadar. 

Reduce fonksiyonunu açıklamak gerekirse, ilk kullandığımız 0 değeri, bizim sayıları üzerinde topladığımız değerdir. Yani ilk örnekteki toplamDeger değişkeni reduce’un içinde zaten barınmaktadır. $0 ve $1 ise burada toplamını aldığımız 2 sayıdır.

Filter

Burada ise yine for döngüsü ile uzun uzun yapabileceğimiz koşula göre datayı ayıklama işlemini tek satırda yapabileceğiz. Kısaca adından da anlaşılabileceği üzere datayı filtreleyebileceğiz. Örnek ile açıklamak gerekirse;

Şehirleri barındırdığımız bir arrayimiz olsun. Bir de ikinci bir boş arrayimiz olsun. Şehirleri barındırdığımız arrayde “i” harfi ile başlayan şehirleri ikinci arraye aktaralım. Bunu geleneksel şekilde for döngüsü ile şu şekilde yapabiliriz:

let sehirler = ["ankara", "istanbul", "izmir", "eskisehir"]
var iSehirler = [String]()

for sehir in sehirler {

    if sehir.first == "i" {
        iSehirler.append(sehir)
    }

}

print(iSehirler)

Şimdi de aynı işlemi Filter ile yapalım.

print(sehirler.filter({$0.first == "i"}))

Burada da kısaca arraydeki ilk karakteri “i” olan elemanları konsolumuza yazdırdık.

Map

Map fonksiyonu bizim, arrayimizdeki tüm elemanlara müdahale edebilmemizi sağlıyor. Örnek ile anlatmamız gerekirse, içerisinde sınav notları bulunan bir arrayimiz olsun. Ve biz tüm notlara 5 puan ekleyelim. Daha sonra da eklenmiş halini yeni bir arraye dolduralım. Bunu yine önce for döngüsü ile yapalım dersek;

let notlar = [80, 75, 90, 65]
var yeniNotlar = [Int]()

for not in notlar{
    yeniNotlar.append(not + 5)
}

Şimdi ise Map ile bir örneğine bakalım;

yeniNotlar = notlar.map({$0 + 5})

Bu kadar!

FlatMap

FlatMap’te ise array içinde bulunan aynı türde değer tutan arrayleri tek satırda birleştirebileceğiz. Örnek ile uzun yoldan açıklamak gerekirse;

let cars = [["Audi", "BMW", "Mercedes"], ["Opel", "Ford", "Toyota"], ["Hyundai", "Fiat", "Volvo"]]
var allCars = [String]()

for car in cars {
    allCars  += car
}

print(allCars)

Aynısını FlatMap ile yapacak olursak;

print(cars.flatMap({$0}))

Hepsi bu kadar.

Bu yazımızda Swift’te Higher Order Functions adıyla geçen, üst düzey fonksiyonları inceledik. Verimlilik ve zaman kazandırması açısından çok faydalı olduğunu düşünüyoruz. Çalışmalarınızda faydalı olması dileklerimizle. Herkese iyi kodlamalar!



0 Yorum "İleri Düzey Swift Fonksiyonları (Reduce, Filter, Map, FlatMap)"


Düşüncelerinizi paylaşmak ister misiniz?

E-posta hesabınız yayımlanmayacak. Lütfen gerekli alanları doldurunuz *

Bir cevap yazın

css.php