Yüksek mertebeli fonksiyonlar, parametreleri fonksiyon olan fonksiyonlardır.
Map
Bir koleksiyon üzerinde döngü oluşturmak ve koleksiyondaki her öğeye aynı işlemi uygulamak için kullanılabilir.
let numbersArray = [1,2,5,8,9,3]
let mappedArray = numbersArray.map {$0 * 3}
map sayesinde dizi içindeki her elemanı($0) gezerek 3 ile çarpılmasını sağlar ve bize dizinin yeni halini geri döndürür. Bu şekilde for döngüsüne ihtiyaç duymayız.
Başka bir örnek ise;
let names = ["Atakan", "Erkan", "Mustafa", "Kerim"]
let namesLowercase = names.map {$0.lowercased()}
Sonuç olarak;
print(namesLowercase) // ["atakan", "erkan", "mustafa", "kerim"]
CompactMap
CompactMap, Map işleviyle aynıdır ancak isteğe bağlı kullanım özelliğine sahiptir. Dönüşümünüz isteğe bağlı bir değer dizisi almak için bu yöntemi kullanırız.
let possibleNumbers = ["1", "2", "5", "//7//" , "merhaba"]
let compactMapped = possibleNumbers.compactMap {Int($0)}
print(compactMapped) //[1, 2, 5]
Flatmap
Bir dizi içinde farklı diziler varsa bunları tek dizide birleştirir.
let numbers = [[1,2,3],[4,5,6]]
let flatMapped = numbers.flatMap {$0}
print(flatMapped) //[1,2,3,4,5,6]
NOT: flatMap deprecated olduğundan yerine compactMap kullanılmaktadır
Filter
Filter ile dizide istediğimiz koşula uyan elemanları yeni bir dizide toplamamızı sağlar.
var numbersArray = [1,2,5,8,9,3]
let filteredArray = numbersArray.filter {$0% 2 == 0}
print(filteredArray) //[2,8]
Sayısal değerlerde işlemlere göre filtreleyebildiğimiz gibi metinsel değerlerde de koşula uygun olarak filtreleme sağlayabiliriz;
var namesArray = ["Atakan", "Erkan", "Mustafa", "Kerim"]
let namesFiltered = namesArray.filter {$0.first == "A"}
print(namesFiltered) // ["Atakan"] A harfiyle başlayan ilk bulduğu değeri getirdi.
Reduce
Dizideki değerleri işleme sokup tek bir değer elde etmemizi sağlar. Reduce yöntemi iki değer alır, bir başlangıç değeri (initialResult) ve bir birleştirme kapanışı (nextPartialResult). Nereden başlayacağını söylemek için ilk sonuca ihtiyaç duyulur ve daha sonra yöntem kapanıştaki mantığa dayanarak bu sonuç üzerinde çalışır. Sonuç, herhangi bir türün nihai birleşmiş değeridir.
var numbers = [1,2,3,4,5,6]
let totalNumbers = numbers.reduce(0, {$0 + $1}) // ilk verilen değer işleme alındığından toplamada etkilemesin diye 0 verildi.
let multiplyNumbers = numbers.reduce(1, {$0 * $1}) // ilk verilen değer işleme alındığından çarpmada etkilemesin diye 1 verildi.
print(totalNumbers) //21
print(multiplyNumbers) //720
Sort
Sıralama işleminde kullanılır. Default olarak artan sıralama (küçükten büyüğe) sağlar.
var names = ["Mustafa", "Kerim", "Atakan", "Erkan"]
let namesSorted = names.sorted()
print(namesSorted) // ["Atakan", "Erkan", "Kerim", "Mustafa"]
Sıralama işlemini küçükten büyüğe yapmak için;
let namesSorted = names.sorted(by: >)
print(namesSorted) // ["Mustafa", "Kerim, "Erkan", "Atakan"]
Contains
Dizinin verilen değeri karşılayan bir öğe içerip içermediğini gösteren bir Boolean değeri döndürür.
var names = ["Atakan" , "Erkan", "Mustafa", "Kerim"]
let startWithC = names.contains{$0.first == "C"}
print(startWithC) //False
let startWithA = names.contains{$0.first == "A"}
print(startWithA) //True
Drop
Koşul doğru geldiğinde diziden öğeleri at, yanlış döndürdüğünde dur.
var fruits = ["Kiwi","Pineapple","Coconut","papaya","Banana","Rambutan"]
let fruitDrop = fruits.drop { $0.contains("K") }
//["Pineapple","Coconut","papaya","Banana","Rambutan"]
//["Pineapple","Coconut","papaya","Banana","Rambutan"]
Chaining
Zincirleme, henüz yeni öğrendiğiniz tüm Yüksek Mertebeden İşlevleri tek bir kod satırında birleştirme yeteneğidir.
var names = ["Stefano", "Brian", "Sean", "Kate", "Luca", "Zoe"]
let namesStartingWithS = names.filter{$0.first == "S"}.map{$0.uppercased()}.sorted()
print(namesStartingWithS) // ["Sean","Stefano"]
Closures yapılarını daha iyi kavrayabilmek için Closure Eğitimini buraya tıklayarak inceleyebilirsiniz.
Hiç yorum yok:
Yorum Gönder
Yorumunuz için teşekkür ederim.