İşlem Hatları Oluşturma
Coddy'nin Swift Journey'sinin Mantık ve Akış bölümünün bir parçası — ders 31 / 56.
Topladığınız metotlar, map, filter, reduce, compactMap, flatMap, sorted(by:), günlük Swift araç takımıdır. Gerçek kod bunları birbirine bağlar.
struct Order {
let item: String
let qty: Int
}
let orders = [Order(item: "apple", qty: 3), Order(item: "bread", qty: 0), Order(item: "milk", qty: 5)]
let names = orders
.filter { $0.qty > 0 }
.sorted { $0.qty > $1.qty }
.map { $0.item }
print(names) // ["milk", "apple"]Zinciri yukarıdan aşağıya okuyun: boş olmayan siparişleri tutun, miktara göre azalan şekilde sıralayın, ardından sadece isimleri tutun.
İşlem hatları (pipelines), her adımın tek bir amacı olduğunda başarılı olur. Bir closure içinde aynı anda iki şey yaptığınızı fark ederseniz (eşleme (mapping) ve filtreleme (filtering)), bunları iki adıma bölün. Zincir büyüdükçe okunabilirliğini korur.
Görev
OrtaTek bir giriş satırı okuyun: virgülle ayrılmış name:price:qty girdileri listesi. Bazı girdiler hatalı biçimlendirilmiştir ve atlanmalıdır: fiyatı veya miktarı geçerli bir tam sayı olmayan her girdi.
qty > 0 olan her geçerli girdi için, toplam (price * qty) değerine göre azalan düzende sıralanmış, şu formatta bir satır üreten bir işlem hattı oluşturun:
<name>: <total>Öğe başına satırlardan sonra, genel toplamı içeren bir özet satırı yazdırın: Sum: <n>.
apple:3:2,bread:bad:1,milk:4:5,cheese:8:0,salt:2:7 girdisi için çıktı şöyledir:
milk: 20
salt: 14
apple: 6
Sum: 40Kopya kağıdı
Yüksek seviyeli fonksiyonları (higher-order functions) zincirlemek, her adımın tek bir amacının olduğu okunabilir boru hatları (pipelines) oluşturur:
let names = orders
.filter { $0.qty > 0 }
.sorted { $0.qty > $1.qty }
.map { $0.item }
Yaygın boru hattı metotları: filter → compactMap → sorted(by:) → map → reduce. Eğer bir closure aynı anda iki iş yapıyorsa (örneğin eşleme ve filtreleme), onu iki adıma bölün.
Kendin dene
let entries = readLine()!.components(separatedBy: ",")
// TODO: compactMap (ayrıştırma), filter (miktar > 0),
// sorted (toplam azalan), map (biçimlendirme) kullanarak işlem hattı; satırları + Toplamı yazdır
Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.
Mantık ve Akış bölümündeki tüm dersler
1Stringler Derinlemesine
Sayma ve İndekslerBüyük-Küçük Harf ve KırpmaStringlerde AramaBölme ve BirleştirmeAlt Stringleri DeğiştirmeÖzet - Kullanıcı Adı Kontrolü4Kümeler
Küme OluşturmaBirleşim ve KesişimFark ve Simetrik FarkAlt Küme ve Üst KümeÖzet - Etiket Filtresi7Proje - Alışkanlık Takibi
Projeye Genel BakışTamamlandı Olarak İşaretle10Proje - Quiz Motoru
Projeye Genel BakışSoruları Sorma2Aralıklar ve Adımlar
Kapalı ve Yarı AçıkStride (Adım)Aralık MetotlarıSwitch İçinde AralıklarÖzet - Takvim Izgarası5Yüksek Mertebeden Fonksiyonlar Bölüm 1
MapFilterReduceMap, filter, reduce zincirlemeÖzet - Kelime İstatistikleri3Sözlükler
Sözlük Tanımlamaİsteğe Bağlı AramaSözlükleri GüncellemeSözlükleri YinelemeDeğerleri GruplandırmaÖzet - Envanter6Yüksek Seviyeli Fonksiyonlar Pt. 2
compactMapflatMapsorted(by:)İşlem Hatları OluşturmaÖzet - Liderlik Tablosu