Döngüler Bölüm 1 | while

Döngüler, programlama camiasının vazgeçilmez parçalarındandır. Döngüler sayesinde el ile yapamayacağımız şeyleri otomatik olarak yapabiliyoruz. Örneğin biz, şimdiye dek kullanıcıdan girdi aldıktan sonra program kapandı ve kullanıcı, bunu tekrar tekrar çalıştırmak zorunda kaldı. Bir hesap makinesinin tek seferde sadece bir işlem yapabildiğini ve ondan sonra kapandığını düşünün. İnanılmaz saçma bir durum olur. İşte, bu tarz durumlarda biz, döngü kullanırız.

Döngüler, birkaç bölümden oluşacak ve ilk bölümüz olan bu blogda 'while' döngüsünü ele alacağız. Kendisi, oldukça kullanışlı ve esnek bir döngü çeşididir. Açıkçası, benim de en sevdiğim döngüdür. O zaman iskeletimizi görerek başlayalım.

Gördüğünüz gibi pek karışık olmayan, basit bir iskeletimiz var. İlk anahtar kelimemiz 'while' olacaktır. While kelimesi İngilizce'den gelir ve anlamı 'iken, olduğu sürece' şeklindedir; "Bu olduğu sürece...". Bu anahtar kelimeden sonra koşulumuz neyse onu yazıyoruz ve bir alt satıra geçiyoruz. Bir sonraki anahtar kelimemiz ise 'do' olacaktır. Do kelimesinin anlamı ise 'yapmak'tır. Bu ikisini birleştirdiğimizde karşımıza şu cümle çıkacaktır: "Koşul gerçekleştiği sürece yap"

'do' anahtar kelimesinden sonra bir TAB boşluğu veya iki boşluk bırakıp gereken kodları yazıyoruz. Son olarak 'if - fi', 'case - esac' şeklinde her şeyi kapattığımız gibi bunu da kapatıyoruz ve bunu 'done' anahtar kelimesi ile gerçekleştiriyoruz; anlamı, 'bitir, bitti' şeklindedir.

Şimdi, 1'den 10'a kadar olan sayıları önce döngü olmadan sonra da döngü ile yazdıracağız ve bu işin ne kadar önemli ve gerekli olduğunu göreceğiz.

Elbette, yukarıda gördüğünüz oldukça saçma ve gereksiz bir kullanım olacaktır. Bu, sayılarla yaptığımız basit bir uygulamadır yani pek bir marifeti yoktur ama iş önemli konulara geldiğinde her şeyi el ile yapamazsınız. Şimdi, aynı çıktıyı bir döngü kullanarak almaya çalışalım.

x=1 şeklinde bir değişken ataması gerçekleştirdik. Daha sonra while ifademizi verdik ve koşulumuz "x, 10'dan küçük veya eşitse" şeklinde oldu. Komple bu satırın anlamı; "x, 10'dan küçük veya eşit olduğu sürece...".

Daha sonra 'do' yani 'yap' dedik ve echo $x ile, yapmasını istediğimiz şeyin x değerini yazdırmak olduğunu söyledik. Son olarak döngüyü, 'done' ile kapattık.

Bu kod parçasının çıktısı sizce ne olabilir? Çalıştırıp bakalım.

Neden böyle oldu? Bir sürü '1' yazdırdı ve o kadar yazdırdı ki biz bunu ancak soldaki ok ile gördüğünüz gibi 'CTRL + C' ile durdurabildik. Sağ taraftaki ok işaretine bakın; o kadar çok '1' yazdırdı ki kaydırma çubuğu en aşağıda ve çok küçük duruyor.

Bunun anlamı 'Sonsuz Döngü'dür. Sonsuz döngüler, eğer bir virüs yazmıyorsanız kullanılması sakıncalıdır. Bilgisayarı, yaptığı işe göre inanılmaz şekilde yorabilen bir olaydır. Eğer gerçekten ağır bir iş yapan sonsuz döngüye maruz kalırsanız birkaç dakika içerisinde işlemciniz bile yanabilir.

Peki, madem sonsuz döngü dediğimiz olay bu kadar zararlı; bunu nasıl önleriz? Kodumuzu tekrar görelim.

'x' adında bir değişken tanımladık ve buna '1' değerini verdik. Daha sonra dedik ki; "x, 10'dan küçük veya ona eşit olduğu sürece x'i yazdır". Bu durumda x değişkeninin tuttuğu '1', her zaman için 10'dan küçük olacaktır çünkü öyle tanımladık. Çıktı kısmında binlerce '1' görmenizin sebebi budur.

Bu sorunu değişken ile oynayarak çözebiliriz. Dolayısıyla biz, sayıları sırasıyla görmek istiyorsak bunu birer birer artırmamız gerekir. Nasıl olduğuna bakalım.

Birer birer artırma işlemini '(( x++ ))' komutu ile yapıyoruz. Bunun anlamı; "x'i, birer birer arttır" şeklindedir. Kodumuzun bu hâlini çalıştırıp bakalım.

Kodumuz, beklediğimiz çıktıyı başarılı bir şekilde verdi. Peki, burada gerçekten neler oldu?

x'i tanımladıktan sonra while döngüsüne geçtik. Bu noktada Bash, while koşuluna baktı ve x'in, 10'dan küçük olması veya ona eşit olması gerektiğini anladı. Daha sonra bunu, 'echo $x' ile yazdıracağını anladı.

Bash, 1'i yazdırır yazdırmaz bu değeri '(( x++ ))' komutu sayesinde 2 yaptı ve tekrar while döngüsünün başına döndü. Daha sonra tekrar x değerine baktı ve 2 olduğunu gördü. Bunu gören Bash, tekrar while içindeki komutları çalıştırdı; önce x'i yazdırdı (2) daha sonra tekrar bir artırarak onu 3 yaptı. Bu durum, while içerisindeki koşul sağlanana kadar gerçekleşti durdu. En sonunda birer birer artırılan x değeri 10 olduğunda Bash, while döngüsünü sonlandırdı.

Yani döngüler; koşul ne diyorsa, baştan sona olmak üzere gerekirse yüzlerce defa bunu yapacaktır.

Peki, eğer bir sayıyı ikişer ikişer veya daha fazla artırmak istersek o zaman ne yapabiliriz?

Gördüğünüz gibi 1, 3, 5... şeklinde bir çıktı aldık yani sayıları ikişer ikişer atlayarak yazdırdı. Bunu sağlayan şey; '(( x=x+2 ))' komutudur. Bunu gören matematik istifa etti. Şimdi, bunun nasıl çalıştığını anlayalım.

Dikkatli bakalım. İlk etapta x=1 eşitliği söz konusu. x = x + 2 eşitliğinin sağındaki x'e 1 değerini verdiğimizde işlemimiz şuna dönüşecektir: x = 1 + 2. Bu da, x'in yeni değerini 3 yapacaktır.

Daha sonra aynı mantıkla x = x + 2 eşitliğinin sağındaki x'in yerine yeni değeri olan 3'ü koyacağız. Bu durumda eşitlik şunun gibi olacaktır: x = 3 + 2. İşlemi yaptığımızda x'in yeni değeri 5 olacaktır.

Bu, koşul sağlanana kadar böyle sürecektir. Kısacası; eşitliğin sağ tarafında yer alan x'e değer veriyoruz ve işlemi gerçekleştirdiğimizde x'in yeni değerini elde ediyoruz. Elde ettiğimiz bu değeri, diğer eşitliklere de uyguluyoruz. Yani her sonuca '2' ekliyoruz.

"Bir insan bu konuyu niye bu kadar uzun anlatır ki?" şeklindeki sorularınızı duyar gibiyim ama çok daha iyi anlamanız için anlatmak istedim.


Yayınlanma Tarihi: 2022-09-16 14:45:16

Son Düzenleme Tarihi: 2022-10-27 17:38:02