Döngü Deyimleri

C#’ta 3 döngü deyimi vardır: while döngüleri, for döngüleri ve foreach döngüleri.
Döngüler:
1. while döngüleri
a. Kontrolün başta yapıldığı
b. Kontrolün sonda yapıldığı (do – while)
2. for döngüleri
3. foreach döngüleri

Kontrolün Başta Yapıldığı while Döngüleri
Programlama dillerinde while döngüleri bir koşul sağlandığı sürece yinelenen döngülerdir.

while anahtar sözcüğünden sonra parantez içersinde bool türden bir ifade bulunmak zorundadır. Döngü içersinde tek bir deyim vardır. while döngüsü şöyle çalışır: Derleyici while parametresi içersindeki ifadenin değerini hesaplar. Bu değer true ise döngü deyimini çalıştırır ve başa döner. false ise döngü deyiminin çalışması biter.


Not:
Bazen bir değeri önce atayıp, sonra atanan değeri karşılaştırmak isteyebiliriz. Bunun için atama işlemi paranteze alınarak önceliklendirilmelidir. Örneğin:

Bazen yanlışlıkla while döngüsünün boş deyimine kapatılmasıyla karşılaşılmaktadır. Örneğin:

Burada noktalı virgül boş deyimdir ve artık while döngüsünün döngü deyimi haline gelmiştir.
Örneğin klavyeden girilen 10 sayının toplamını bulalım.

Kontrolün Sonda Yapıldığı while Döngüleri
do-while döngüleri denilmektedir. do-while döngüleri seyrek kullanılmaktadır.

do anahtar sözcüğünden sonra tek bir deyim bulunmak zorundadır. while parantezinden sonra noktalı virgül atomunun bulunması gerekir. bu noktalı virgül boş deyim değildir, ayraçtır. Örneğin:

Burada kontrol noktası sondadır. Yani döngü deyimi en az bir kez yapılmaktadır. Eğer do anahtar sözcüğü olmasaydı bu, derleyici tarafından kontrolün başta yapıldığı while döngüsü olarak algılanırdı. Fakat bazen kontrolün sonda yapılması daha uygun olabilir. Örneğin:

for Döngüleri
for döngüleri aslında while döngülerinin daha genel bir biçimidir. Yani for döngüleri while döngülerini kapsamaktadır. for döngülerinin genel biçimi şöyledir:

for anahtar sözcüğünden sonra parantezler içersinde 2 tane noktalı virgül bulunmak zorundadır. Buradaki noktalı virgüller boş deyim değildir, ayraç görevindedir. Bu 2 noktalı virgül, for döngüsünü 3 kısıma ayırır. İkinci ksıımdaki ifade bool türden olmak zorundadır. ford döngüsü aşağıdaki gibi çalışmaktadır:

Birinci kısımdaki ifade döngüye girişte bir kez yapılır, bir dahada yapılmaz. Döngü, ikinci kısımdaki ifade true olduğu sürece yinelenir. ifade2 true ise döngü deyimi çalıştırılır. Sonra üçüncü kısımdaki ifade çalıştırılır ve başa dönülür. for döngüsü en çok aşağıdaki kalıpta kullanılmaktadır.

Şüphesiz, for döngüsünün birinci ve üçüncü kısımda ifade tanımına uyan her türlü ifade bulunabilir.
for döngüsünün çeşitli kısımlarındaki ifadeler hiç yazılmayabilir. Fakat iki noktalı virgül her zaman bulunmak zorundadır. Örneğin; birinci kısımdaki ifade döngüye girişte yalnızca bir kez yapılacağına göre, bunu çıkartıp yukarıya koymak eşdeğerliği bozmaz.

for döngüsünün üçüncü kısmındaki ifade mademki her döngü deyiminden sonra bir kez yapılmaktadır. O halde onu oradan alıp döngü deyiminin sonuna yerleştirirsek eş değerlik bozulmaz.

Zaten birinci ve üçüncü kısmı olmayan for döngüleri while ile eşdeğerdir.
for döngüsünün ikinci kısmındaki ifade yazılmazsa, koşulun her zaman sağlandığı kabul edilir. Yani ikinci kısma bir şey yazmamakla true yazmak aynı anlamdadır. Nihayet for döngüsünün hiçbir kısmı yazılmayabilir. Bu da bir sonsuz döngü belirtir.
for döngüsünün birinci kısmında bildirim yapılabilir. Fakat diğer ksımlarında ve diğer deyimlerin parantezlerinde bildirim yapılamaz.
Birinci ksıımda yapılan bildirimde ilk değer verilmek zorundadır. Örneğin:

for döngüsünün birinci kısmında bildirilen değişkenlerin faaliyet alanı döngüyle sınırlıdır.
Standartlara göre:

döngüsü ise aşağıdaki tamamen eşdeğerdir.

Bu durumda bir for döngüsünü aynı biçimde aşağıya kopyalarsak bir sorun olmaz.
for döngüsünün birinci ve üçüncü kısmı virgül atomuyla çoğaltılabilir.


Break Deyimi

break deyimi döngülerin içersinde ya da switch deyiminin içersinde kullanılabilir. Kullanım biçimi şöyledir

break;
Programın akışı break anahtar sözcüğünü gördüğünde döngünün çalışması sonlandırılır. Yani programın akışı döngü dışındaki ilk deyimle devam eder.

Bazen döngülerden çıkmak çok değişik koşulları gerektirebilir. Bu durumda döngüyü sonsuz döngü yapıp, içeriden break deyimiyle çıkma yoluna gidilebilir. Örneğin:

işleminin eş değeri şu şekilde oluşturulabilir.

continue Deyimi
continue deyimi yalnızca döngüler içersinde kullanılabilir. Kullanımı şöyledir: continue;
continue deyimi çalışmakta olan döngü deyimi sonlanmış gibi bir etki yaratır. Yani programın akışı continue deyimini gördüğünde, sonraki yenilemeye geçer.

continue, seyrek kullanılan bir deyimdir.

Not: Konsol sınıfının ReadKey isimli static metodu, bir tuşu basar basmaz almak için kullanılabilir. Bu metodun çalışması üzerinde durulmayacaktır fakat işlem şöyle yapılabilir:

, isimlendirme kuralına uygun herhangi bir isim olabilir. , goto deyiminin yukarısına ya da aşağısına yerleştirilebilir.

goto deyimiyle ancak aynı metodda başka bir yere atlanabilir.. Farklı bir metoda atlama yapılamaz. Aynı etikete birden fazla yerden goto yapılabilir. Aynı metodda, aynı isimli birden fazla etiket bulunamaz. Ayrıca goto etiketinden sonra bir deyim bulunmak zorundadır.
goto kullanılmasının tavsiye edildiği bir kaç durum vardır. Örneğin; iç içe döngülerden ya da söngü içerisindeki switch deyiminden tek hamlede goto ile çıkılabilir.

goto deyimi ters sırada boşaltım uygulamak içinde uygulanabilir. Fakat burada değinilmicektir.
goto deyimiyle dış bloktan iç bloğa atlama yapılamaz. Fakat iç bloktan dışa bloğa atlama yapılabilir.

switch Deyimi
switch deyimi bir ifadenin çeşitli sayısal değerleri için farklı işlemlerin yapılması amacıyla kullanılmaktadır. Genel biçimi şöyledir:

switch anahtar sözcüğünden sonra parantez içersinde bir ifade bulunması gerekir. Bir switch deyimi case bölümlerinden ve default bölümlerinden oluşur. default bölüm bulunmak zorunda değildir.
Not: Yalnızca sabitlerden ve operatörlerden oluşan gruplara sabit ifadeleri denir. 10, 20+10, ‘a’, ‘a’+1 birer sabit ifadedir. Sabit ifadelerinin sayısal değeri derleme aşamasında belirlenebilir.

case ifadeleri sabit ifadesi olmak zorundadır. Örneğin: case 10+x: biçiminde bir case bölümü olamaz.
switch deyimi şöyle çalışır:
Derleyici switch parametresinin içersindeki değeri hesaplar.
Bu değere eşit olan bir case bölümü araştırır.
case bölümleri adeta birer goto etiketi gibidir.
Uygun bir case bölümü bulunursa oraya goto yapılır.
break deyimi switch içerisinden çıkmakta da kullanılır.
Eğer switch ifadesine tam eşit bir case bölümü yoksa, fakat default bölüm varsa akış, defult bölüme yönlendirilir.
defult bölüm bulunmak zorunda değildir. default bölüm de yoksa akış, switch deyimine girdiği gibi çıkar.
case bölümlerinin sıralı olması ya da defult bölümün sonda bulunması zorunlu değildir.

C#’ta, akışın bir case bölümünden diğerine geçmesi error oluşturur. Oysa C’de ve C++’ta aşağıya düşme (fall through) geçerlidir. İşte aşağıya düşmeyi engellemek için break deyimi kullanılabilir. Aslında akışın aşağıya doğru düşmesini engellemek için goto, return hatta sonsuz döngü bile kullanılabilir. Fakat tipik break kullanılır.

Eğer iki case bölümü arasında hiçbir deyim yoksa bu durumda istisna olarak aşağıya düşme kuralı uygulanmaz. Yani:

Farklı case değerleri için aynı işlemin yapılması böyle sağlanabilir. Bazen farklı case bölümleri için ortak işlemlerin yapılması gerekebilir. Bunun için goto case deyimi düşünülmüştür. Benzer biçimde goto default biçiminde bir deyimde vardır. Şüphesiz goto case ve goto default deyimleri yalnızca switch deyiminin içinde kullanılabilir.

Leave a Reply

Site Footer