Siz bu tümceyi okurken harcadığınız zaman içerisinde, bilgisayarlar milyonlarca kez sıkıcı görevleri yapmakta harikalar. Sıra kod içindeki görevlerin tekrarına geldiğinde, istersen kodu defalarca kopyala yapıştır yapabilirsin; veya, bir durum doğru olduğu sürece tekrar edecek olan kod blokları olan basit programcılık yapılarını, yani döngüleri kullanabilirsin.
Bunu kanıtlamak için, print()
olarak anılan özel derleme fonksiyonunu tanıtmak istiyorum: Ona, yazdırması için bir metin verirsiniz, o da yazdırır. Bizim gibi siz de bir oyun alanında çalışıyorsanız, metninizin sonuç penceresinde belirdiğini göreceksiniz. Eğer Xcode'da gerçek bir uygulama çalıştırıyorsanız, metninizi Xcode'un log (günlük) penceresinde göreceksiniz. Her şekilde de, bir değişkenin içeriğinin ön görüntüsünü almak için print()
harika bir yol.
Şu koda bir göz atın:
print("1 x 10 is \(1 * 10)")
print("2 x 10 is \(2 * 10)")
print("3 x 10 is \(3 * 10)")
print("4 x 10 is \(4 * 10)")
print("5 x 10 is \(5 * 10)")
print("6 x 10 is \(6 * 10)")
print("7 x 10 is \(7 * 10)")
print("8 x 10 is \(8 * 10)")
print("9 x 10 is \(9 * 10)")
print("10 x 10 is \(10 * 10)")
Çalışması bittiğinde, oyun alanınızın sonuç panelindeki tabloda 10'un katlarını yazdığını göreceksiniz. Ama tabi bu pek yeterli bir kod değil. Aslında closed range operator (kapalı aralık operatörü) adı verilen ve yan yana 3 noktadan oluşan ...
bir rakam aralığı üzerinde döngü yapmak daha temiz bir yoldur.
Kapalı aralık operatörünü kullanarak, tüm bu kodu 3 satırda yeniden yazabiliriz:
for i in 1...10 {
print("\(i) x 10 is \(i * 10)")
}
Sonuç paneli şimdi, 10 kez çalışan döngümüzdeki "(10'un katları)"nı gösteriyor. Eğer döngünün aslında ne yaptığını bilmek isterseniz, 10'un katlarının sağındaki kareye hemen tıklayın. İçinde "10 x 10 is 100" yazan bir kutu göreceksiniz ve eğer sağ tıklarsanız "Value History" (Değer Tarihçesi) seçeneğini göreceksiniz. Şimdi ona tıklayın ve aşağıdaki resmi görün:
1 ve 10'u da içermek üzere, 1'den 10'a kadar sayan döngüde, sayı i
sabitine atanıyor ve ardından süslü parantezlerin içindeki kod bloğu çalıştırılıyor.
Eğer sayının ne olduğunun önemi yoksa, sabit yerine bir altçizgi kullanabilirsiniz. Örneğin, şu şekilde Taylor Swift'in şarkı sözlerinden bazılarını yazdırmak istiyoruz:
var str = "Fakers gonna"
for _ in 1 ... 5 {
str += " fake"
}
print(str)
Bu kod bloğu, döngü devam ettiği sürece metni ekleyecek ve ekrana "Fakers gonna fake fake fake fake fake" yazdıracak.
Eğer Swift her bir sayıyı döngü devam ettiği sürece bir değişkene atamak zorunda değilse, yazdığınız kod biraz daha hızlı çalışır. Sonuç olarak, eğer for i in…
yazıyorsanız ve sonrasında i
kullanmıyorsanız, Xcode _
ile değiştirmeyi önerecek.
"Half open range operator" (yarı açık aralık operatörü) olarak anılan bir kapalı aralık operatörü çeşidi daha var ve kolayca kafa karışıklığına yol açabilir. Yarı açık aralık operatörü ..<
şeklinde gösterilir ve ilk sayıdan başlayıp, ikinci sayıyı içermeden sonlanır. Örneğin 1 ..< 5
ifadesi, 1, 2, 3, 4'e kadar sayacaktır.
Swift, dizideki tüm elemanlar üzerinde döngü yapabilmek için basit bir yol sunar. Çünkü Swift, dizinin zaten ne tür bir veri tuttuğunu bilir ve dizideki her bir elemanın üzerinden geçer, isimlendirdiğiniz sabite atar ve sonrasında kod bloğunuzu çalıştırır. Örneğin, aşağıdaki gibi harika şarkılardan oluşan listeyi yazdırabiliriz:
var songs = ["Shake it Off", "You Belong with Me", "Look What You Made Me Do"]
for song in songs {
print("My favorite song is \(song)")
}
Burada dizi üzerinde isterseniz for i in
şeklinde bir döngü de kullanabilirsiniz, çünkü dizinin içindeki indeksi sabit olarak kullanıyorsunuz. Hatta aşağıda gösterildiği gibi, iki ayrı dizideki indeks üzerinde de kullanabiliriz bu sabiti:
var people = ["players", "haters", "heart-breakers", "fakers"]
var actions = ["play", "hate", "break", "fake"]
for i in 0 ... 3 {
print("\(people[i]) gonna \(actions[i])")
}
Yarı açık aralık operatörlerinin ne için kullanıldığını merak ediyor olabilirsiniz, ama sıfırdan başladıkları için dizilerle çalışmak oldukça kullanışlıdır. Dolayısıyla 0'dan başlayıp 3'e kadar (3 dahil) saymaktansa, 0'dan başlayıp dizi içindeki eleman sayısını hariç bırakarak sayabiliriz.
Unutmayın: Diziler sıfırdan başlar, o yüzden 4 elemanlı bir dizinin indeksi en fazla 3 olabilir; bu da bir döngüde neden hariç bırakarak kullanmamız gerektiğidir.
Bir dizideki elemanları saymak için, someArray.count
ifadesini kullanın. Kodumuzu böylece şu şekilde tekrar yazabiliriz:
var people = ["players", "haters", "heart-breakers", "fakers"]
var actions = ["play", "hate", "break", "fake"]
for i in 0 ..< people.count {
print("\(people[i]) gonna \(actions[i])")
}
İsterseniz, döngüler içine döngüler koyabilirsiniz; hatta o döngülerin içine de döngüler konabilir. Tabi birden kendinizi birşeyi 10 milyon kez yapıyor bulabilirsiniz, o yüzden dikkatli olun!
Şunu oluşturmak için önceki iki döngüyü birleştirebiliriz:
var people = ["players", "haters", "heart-breakers", "fakers"]
var actions = ["play", "hate", "break", "fake"]
for i in 0 ..< people.count {
var str = "\(people[i]) gonna"
for _ in 1 ... 5 {
str += " \(actions[i])"
}
print(str)
}
Bu bize "players gonna play play play play play", ardından da "haters gonna…" çıktısını verir. Ana fikri anladınız sanırım.
Önemli bir not: Programcılar geleneksel olarak döngülerde i
, j
ve hatta k
sabitlerini kullanırlar. İstediğiniz ismi verebilirsiniz, ama lütfen kendini anlatan bir isim olsun: for personNumber in 0 ..< people.count
şeklinde olması kesinlikle daha doğru.
Durmasını söyleyinceye kadar kod bloğunu tekrar tekrar çalıştıran bir üçüncü tür döngüyü göreceksiniz. Oyunlar gibi, ne kadar süre sonra sonlanacağını bilmediğiniz yerlerde kullanılır. Sadece tekrar etmeye devam edersiniz; "dokunuşları kontrol, robotları hareketlendir, ekrana çiz, dokunuşları kontrol et..." gibi. ta ki, sonunda kullanıcının bir butona basıp oyundan çıkarak ana menüye geri dönene kadar.
Bu tür döngüler while
döngüleri olarak anılır ve şuna benzerler:
var counter = 0
while true {
print("Counter is now \(counter)")
counter += 1
if counter == 556 {
break
}
}
Bu kod, break
adı verilen yeni bir anahtar sözcük sunuyor. İstediğiniz bir noktada while
veya for
döngüsünden çıkmak için kullanılır. Bu olmadan kod asla sonlanmaz çünkü durum kontrolünde sürekli "doğru" çıkar ve doğru her zaman doğrudur. break
ifadesi olmaksızın, sonsuz bir döngüye girilir ki, bu da kötü birşeydir.
Bu while
döngüleri, bilinmeyen bir veri kullandığınızda, internetten birşeyler indirdiğinizde, XML gibi bir dosya okuduğunuzda, kullanıcı girişi beklediğinizde veya bunun gibi bir durumda en iyi şekilde çalışır. Yani bu, yalnızca yeteri kadar çalıştıktan sonra döngünün ne zaman duracağınızı bildiğiniz içindir.
break
ifadesinin tam karşıtı continue
ifadesidir. Halbuki bir döngüyü kırmak, çalışmayı hemen durdurur ve döngüden sonrasına doğrudan devam eder. Döngü, sadece o andaki yinelemesinden çıkar. Sonrasında döngünün en başına sıçrar ve oradan başlar.
Örnek olarak aşağıdaki kodu inceleyin:
var songs = ["Shake it Off", "You Belong with Me", "Look What You Made Me Do"]
for song in songs {
if song == "You Belong with Me" {
continue
}
print("My favorite song is \(song)")
}
Bu döngü, Taylor Swift'in 3 şarkısı etrafındadır, ama sadece ikisinin ismini yazdırılacak. Bunun sebebi ise continue
anahtar sözcüğüdür: Döngü "You Belong with Me" adlı şarkı adını kullanmayı denediğinde, continue
çağırılacak, bu da döngünün hemen başlangıcına geri sıçramasına sebep olacak. Böylece print()
asla çağırılmayacak ve bunun yerine doğrudan “Look What You Made Me Do” ile devam edilecek.
SPONSORED Join a FREE crash course for mid/senior iOS devs who want to achieve an expert level of technical and practical skills – it’s the fast track to being a complete senior developer! Hurry up because it'll be available only until September 29th.
Sponsor Hacking with Swift and reach the world's largest Swift community!
Link copied to your pasteboard.