SİTE
İÇİ ARAMA |
|
Blogroll |
|
|
|
C# Kontrol yapıları ve seçme işlemleri. |
|
Gönderiliyor lütfen bekleyin... |
|
|
Bu derste C# dilindeki ifadeler,tipler ve değişkenler
anlatılacaktır. C# dilinde
kullanılan seçme veya kontrol ifadelerini öğreneceksiniz.
Dersimizin
hedefleri :
- "İf" (eğer)
ifadesinin kullanımı "
- "switch" (çoktan-seç)
ifadesini kullanımı "
- "break" ifadesinin
"switch" ifadesi içerisinde nasıl kullanıldığı
- " "goto" ifadesinin
yerinde ve etkili kullanılması
Önceki derslerimizde, her
program belirli ifadeleri sırasıyla çalıştırıp bitiyordu. Program içinde inputlara
veya program içinde yapılan hesaplara göre değişik işlemler yapılmıyordu. Bu
derste öğrendiklerimiz de programlarımızın belirli şartlara göre değişik şekillerde
çalışmasını sağlayacaktır. İlk seçme ifademiz "if". "if" kontrol yapısının 3
temel formu vardır.
Kod 1 : IF yapısının
değişik formlarda kullanımı : IfSelection.cs
using System;
class IfSelect
{
public static void Main()
{
string myInput;
int myInt;
Console.Write("Please enter a number: "); myInput =
Console.ReadLine(); myInt =
Int32.Parse(myInput);
// Single Decision and Action with brackets
if
(myInt
> 0)
{
Console.WriteLine("Your
number {0} is greater than zero.", myInt);
}
//
Single Decision and Action without brackets if
(myInt < 0)
Console.WriteLine("Your
number {0} is less than zero.", myInt);
// Either/Or Decision
if (myInt != 0)
{
Console.WriteLine("Your number {0} is not equal to zero.", myInt);
}
else
{
Console.WriteLine("Your number {0} is equal to zero.", myInt);
}
// Multiple Case Decision if
(myInt < 0 || myInt == 0)
{
Console.WriteLine("Your number {0} is less than or equal to zero.", myInt);
}
else if
(myInt
> 0 && myInt < = 10)
{
Console.WriteLine("Your number {0} is between 1 and 10.", myInt);
}
else if
(myInt > 10 && myInt < = 20)
{
Console.WriteLine("Your
number {0} is between 11 and 20.", myInt);
}
else if (myInt
> 20 && myInt < = 30)
{
Console.WriteLine("Your number {0} is between 21 and 30.", myInt);
}
else
{
Console.WriteLine("Your
number {0} is greater than 30.", myInt);
}
}
}
|
Kod 1'de tüm program boyunca tek bir değişkeni kullanıyoruz, "myInt".
Kullanıcıdan etkileşimli olarak veri almak için önce "Lütfen bir sayı giriniz
:" iletisini konsula yazdırıyoruz. "Console.Readline()" ifadesi ile program
kullanıcıdan bir değer girmesini bekler. Bir rakam yazılınca ve enter tuşuna
basılınca program yazılan değeri önce string tipinde olan myInput değişkenine atanıyor.
String olarak alınan veriyi program tamsayı tipinde bir değişken olarak kullanmak
istediği için "myInput" tamsayı tipine dönüştürülmeli. Bu dönüşüm için
"Int32.Parse(myInput)" komutunu kullandık ( tip dönüşümleri ve Int32 gibi veri
tipleri ileriki derslerde incelenecektir.) Daha sonra, dönüşümün sonucu
"myInt" isimli değişkene aktarılıyor.
Artık istediğimiz tipte bir veriye sahibiz ve
bunu "if" ifadesi içinde işleyebiliriz. "if" ifade bloğunun ilk formu şu
şekildedir : if(mantıksal ifade) { "mantıksal ifade"nin doğru olası durumunda
yapılması gerekenler }. Öncelikle "if" anahtar kelimesi ile başlamalıyız. Sonrası
parantezler arasındaki mantıksal ifade. Bu mantıksal ifadenin doğru veya yanlış
olması bulunur. Biz programımızda kullanıcıdan aldığımız sayının sıfırdan büyük
olup olmadığını kontrol ediyoruz">0" ile. Eğer sayı sıfırdan büyükse, mantıksal
ifadenin sonucu doğrudur ve { } parantezleri arasındaki kod bloğu çalıştırılır.
Eğer mantıksal ifade yanlış bir sonuç üretirse { } arasındaki kon bloğu çalıştırılmadan
bloktan sonraki ifadelere geçer.
İkinci "if" ifadesi aslında birincisi ile aynıdır,
ikincisi sadece blok içinde değildir. Eğer boolean ifade doğru sonuç üretirse,
bu ifadeden hemen sonraki çalışır. Boolena ifadenin yanlış olması durumunda
ise bu ifadeden hemen sonraki ifade çalıştırılmadan bir sonraki ifadeye geçilir
ve o ifade çalıştırılır. Bu şekildeki "if" yapısını, boolean ifadenin doğru
olmasında sadece bir tane ifade çalıştırılacaksa yeterlidir. Buna karşın "if"
ifadesinin sonucuna göre birden fazla ifade işleme konulacaksa blok olarak {
} parentezleri arasında yazılır. Benim kişisel önerim "if" den sonra çalıştırılacak
ifade sayısına bakmadan, bu ifade(leri) her durumda blok olarak yazmaktır. İleride
yeni programın okunmasında ve yeni işlevler eklenmesinde size hatalardan kaçmanıza
yardım eder.
Birçok zaman size eğer/değilse türünde çalışacak
bir "if" yapısı gerekebilir. Üçüncü tip "if" ifadesi eğer doğru değer üretirse
şunları yap, doğru değilse "else" anahtar sözcüğünden sonraki kodları çalıştır
türünde bir yapısı olarak yazılmalıdır.
Birden fazla mantıksal ifadeyi işlememiz gerektiğinde
ise, if/else if/else tipinde bir "if" yapısını kullanmak gerekir. Dördüncü örneğimizde
bu tip bir if yapısını görebilirsiniz. Bu tip yapı yine "if" ve boolean ifadesi
ile başlar. Boolean ifade doğru ise hemen alttaki bloktaki kodlar çalıştırılır.
Bunun yanında, boolean ifadenin değişik durumlarına göre "else if" iç yapısı
kullanılır. "else if" de aynı if gibi bir boolean ifadeyi alır ve sonucu doğru
hemen sonraki bloktaki kodları çalıştırır.
Boolean ifadenin alabileceği tüm ihtimallere göre
bu şekilde "else if" ifadeleri sıralanabilir fakat en sonda bir "else" ile yukarıdaki
tüm şartların yanlış olması durumunda çalıştırılacak kodları belirleriz. Bu dördüncü
"if" yapısında da yine sadece bir tane if/else blok yapısı çalıştırılır.
"switch" yapısı da "if/else if/else" yapısına çok
benzer.
Kod 2 : Switch ifadeleri :
SwitchSelection.cs
using System;
class
SwitchSelect
{
public static void Main()
{
tring myInput;
int myInt;
begin:
Console.Write("Please
enter a number between 1 and 3: ");
myInput =
Console.ReadLine();
myInt = Int32.Parse(myInput);
//
switch with integer type
switch
(myInt)
{
case 1:
Console.WriteLine("Your
number is {0}.", myInt);
break;
case 2:
Console.WriteLine("Your
number is {0}.", myInt);
break;
case 3:
Console.WriteLine("Your
number is {0}.", myInt);
break;
default:
Console.WriteLine("Your number {0} is not between 1 and 3.", myInt);
break;
}
decide:
Console.Write("Type
\"continue\" to go on or \"quit\" to stop: "); myInput =
Console.ReadLine();
// switch with string type
switch (myInput)
{
case "continue":
goto begin;
case "quit":
Console.WriteLine("Bye."); break;
default:
Console.WriteLine("Your
input {0} is incorrect.", myInput);
goto
decide;
}
}
}
|
Kod 2'de birkaç tane "switch" yapısı örneğimiz var.
"switch" yapısı yine "switch" anahtar kelimesi ile başlar ve sınanacak değişkeni
parantez içinde belirtiriz. Switch yapısının çalışması için şu veri tiplerinden
bir tanesini kullanmak gerekir : sbyte,short,ushort,int, long, ulong, char,
string, or enum ( enum daha sonraki bir derste işlenecektir.)
Birinci
örneğimizdeki "switch" yapısı int tipinde bir
değer almaktadır. Tamsayı değişkenimizin alabileceği değerlere göre değişik işlemler
yapabiliriz. "myInt" değişkenimizin herbir ihtimalini değerlendirirken "case"
anahtar kelimesini, muhtemel değerini ve iki nokta üst üste ":" yapısında bir
sınama yapıyoruz. Örneğimizde, "case 1 :", "case 2: ", ve "case 3:" şeklinde yazdık.
Sınama sonuçlarından uygun olanın hemen altında kod bloku yer alır.
Bu kod blokundan sonra ise "break" veya "goto" ifadelerini kullanmamız gerekir.
İsterseniz "default" seçeneğini de "switch"
ifadesi ile birlikte kullanabilirsiniz. "default" ifadesinin altındaki kod bloku,
"defult"'tan önceki "case"'lerin hiçbiri sınamayı geçemediği zaman çalışır ve tüm "case"'lerden
sonra gelir.
Her "case" 'den sonra "break" ifadesinin zorunlu
olduğunu tekrar hatırlatalım. "break" ifadesi "switch" yapısından dışarı çıkmayı
ve alttaki kodlara geçmemizi sağlar. "default" anahtar kelimesinin kod blokundan
hemen sonra "break" koymak programcının isteğine kalmıştır. Switch ifadesinde
iki tane dikkat edilmesi gereken husus vardır.
Birincisi, farklı durumları (case'leri) ard arda aralarına
hiç kod yazmadan sıralamaktır. Aslında burada yapılan iş, değişkenimizin birden
fazla değeri için tek bir "case" kod bloku oluşturmaktır. Bir case ve hemen
arkasına başka bir case yazdığımızda program otomatik olarak bir sonraki "case"
'e geçer. Aşağıdaki kodu incelediğimizde, "myInt" değişkeni 1,2, veya 3 değerlerinden
herhangi birini alırsa kendi değerini ekrana yazdırıyoruz. Diğer durumda ise
değişkenimizin değerinin 1 ve 3 arasında olmadığını ekrana yazdırıyoruz.
switch (myInt)
{
case 1:
case 2:
case 3:
Console.WriteLine("Your
number is {0}.", myInt);
break;
default:
Console.WriteLine("Your
number {0} is not between 1 and 3.", myInt);
break;
}
|
Kod 2'de yer
alan ikinci "switch" yapısı ise "goto" ifadesinin nasıl
kullanılacağını göstermek amacıyla yazılmıştır. "goto" , programın belirli
bir kısmında yer alan, özel etiket (label) ile belirtilmiş kısmına atlamasına
ve oradan itibaren çalışmaya devam etmesine yarar. Programımızda kullanıcı "continue"
yazarsa "begin" olarak belirlenmiş etikete gider ve oradan çalışmaya devam eder.
Aslında bu şekilde "goto" kullanmak etkili bir döngü olur. Eğer kullanıcı "end"
yazarsa program "bye" yazar ve döngüden programımız çıkar.
Açıkça
görülüyor ki "goto" kelimesini kullanmak bize
programda belirli şartlar altında güç kazandırır. Yine de "goto" ifadesini programda
sık bir şekilde kullanmak "sipagetti" kod olarak adlandırılan programlamaya yol
açabilir ki, bu tür kodlama programı hem okurken hem de hataları ayıklarken büyük
sorunlara sebep olabilir.
* Bu makale The
C# Station Tutorial adresinde Joe Mayo tarafından yazılmıştır.
Makale:
C# Kontrol yapıları ve seçme işlemleri. C#, Visual C# ve .NET Ahmet Faruk Nacaroğlu
|
|
|
-
-
Eklenen Son 10
-
Bu Konuda Geçmiş 10
Bu Konuda Yazılmış Yazılmış 10 Makale Yükleniyor
Son Eklenen 10 Makale Yükleniyor
Bu Konuda Yazılmış Geçmiş Makaleler Yükleniyor
|
|
|