17 Nisan 2010 Cumartesi

C# ile Sql'e Baglanma

Program yazarken veya -ileride gorecegiz- web uygulamasi yazarken bazi bilgilere ihtiyac duyacagiz. Cok siradan bir ornek vereyim. Bir site yaptik ve bu siteye uye girisi yapmadan erisemiyoruz. Iste o uyelerin kullanici adlarini, sifrelerini ... vs. gibi daha ne gerekli bilgi varsa, onlari icinde saklayan ve istedigimiz zaman da bize bir anne gibi sefkatli kollarini acip bu degerli bilgileri bizimle paylasan sql'e erisebilmemiz icin bir platformdur diyelim Ado.Net icin. Yine C# uzerinde calisacagiz ve yine C# kodlari yazacagiz. Tek fark sql'e baglanip, (aslinda basit mantikla query'e baglanip) gerekli kodlari yazip bilgileri cekmemizi, guncellememizi, silmemizi vs. gibi islemleri saglar. Simdi kisaca sql'e baglanma, sql'e komut yazdirmayi anlatacagim.

Oncelikle sql'e erisebilmemiz icin namespace'mizi ufak bir ekleme yapmamiz gerekecek. Bu ekleme ;

using System.Data.SqlClient;

Namespace'mizi de ekledigimize gore artik kimse mani olamaz sql'e varmamiza. Oncelikle baglantiyi saglayalim;

SqlConnection conn = new SqlConnection(@"integrated security=true;server=Ergin-PC\SQLExpress2005;database=OyunDB");

Ufak bir not, tirnaktan onceki @ isareti, server ismindeki '\' isaretine C#in hata vermesini engellemek icin konulan isarettir. veya '\\' yaparak da cozebiliriz tercih sizin.

Artik sql'e baglanti icin bi engel kalmadiysa cilginlar gibi sql komutu yazabiliriz.

SqlCommand cmd = new SqlCommand( "select count(*) from Oyun",conn);

Her sey hazir. Baglanti yolumuzu belirledik, sifre, isim sorunumuz yok. Satirimizi yazdik. Sadece birinin sql'i acmasi gerekiyor.

conn.Open();

An itibariyle Sql icerisindeyiz. Artik yukarida yazdigimiz sql komutuyla birlikte istedigimiz yere getirtebiliriz degerlerimizi.

SqlDataReader sdr = cmd.ExecuteReader();
while(sdr.Read())
{
lstOyun.Items.Add(sdr["Ad"]); // 0. kolonu gosterir.
}

-Listbox'in items'ina gelen degeri atiyoruz bu kodda. Birden fazla satir etkilendiginden SqlDataReader kullaniyoruz. Tek hucre etkilenseydi ExecuteScalar isimizi gorecekti. Eger bu islemlerden kac satirin etkilendigini ogrenmek istiyorsak ExecuteNonQuery yazmamiz gerekecekti.
-Kisaca while dongusunu anlatmak gerekirse de, debug esnasinda programimiz sdr.Read() ile karsilastiginda, yani bir alt satira gectiginde deger yoksa, yani 'false' gonderene kadar donguyu calistir demek oluyor.Bu ornekte diyelim ki 5 satir gelsin. ilk while'a girdi ilk satir yazildi, ikinci satira gecis sirasinda , sdr.Read()==true oldugundan while'i bir kere daha donduruyor, taa ki 5. satir bittiginde, sdr.Read()==false artik bizim icin ve donguden cikiyoruz.

Son olarak unutmayin, unutturmayin. Actigimiz ne varsa hepsini kapatiyoruz :)

sdr.Close();
conn.Close();
Kapatmasak nolur artislik yapma diyenler icin, programiniz burda sonlaniyorsa sorun olmaz, bosa sql calisir ama hata vermez. Lakin, eger bu satirdan daha sonra tekrar baska classlarda vs. conn.open derseniz cort olur, kodunuz patlar. Bosa sql'e zulum etmemek adina isiniz bitince kapatiniz, nasil gormek istiyorsaniz oyle birakiniz.

Sql Komutlari

Simdi sql'de kullanilan temel komutlarin kullanimini kisaca aciklayarak anlatmaya calisacagim. Ilk olarak aslinda arka planda surekli calisan, bize bilgilerin gosterilmesini saglayan 'select' komutu ile baslayalim.
Select:

select * from Kategori --tum satirlari gosterir
select Id from Kategori -- tum idleri getirir
select * from dbo.Kategori order by 3 , 1 --3. kolona gore siralar, ayni varsa 1. kolona gore tekrar siralar.
-bas harfi A olanlari getiren kod.
select * from dbo.Kategori where Ad like 'a%'
- 3 harfli ve sonunda es olanlari getir.
select * from dbo.Kategori where Ad like '_es'
-icinde act gecen kelimeler.
select * from dbo.Kategori where Ad like '%act%'
-Sonuclarda A ve T harfi gozukmesin
select * from dbo.Kategori where Ad not like '[AT]%'
Insert:

insert into dbo.Kategori (KategoriID,Ad,EklenmeTarihi) values (3,'Action','20101211')

-Yukaridaki koda kisa notlar ekleyeyim. Kolon isimlerini vermeyip direk degerleri girseydik, degerleri kolonlarin sirasina gore atamasini yapacakti. Yani 3 degeri ilk kolonda hangisi varsa onun degeri olacakti.
-Tarih bilgilerinde '/' mi veya '.' mi olacak diye karistirmamak adina direk rakamlari yanyana yazarsak sql kendisi otomatik olarak yil,ay,gun olarak cevirecektir. Tabi burda da yil,ay,gun sirasini unutmamak lazim :)

Update:

update dbo.Kategori set EklenmeTarihi='20090115' where Ad<'B'

Sozluge gore B'den once gelen isimlerin tarihlerini guncelleyen kod yazdik simdi yukarida.

update dbo.Kategori set Ad='Platform Oyunu', EklenmeTarihi='20090101' where KategoriID=1

Ayrica birden fazla da kolonu degistirebiliriz, yukaridaki ornek kodda oldugu gibi.

Delete:

-Id'si 3,4 ve 5 olanlari silen kod.
delete dbo.Kategori where KategoriID in (3,4,5)

-Id'si 1 ve 2 olmayan satirlari silen kod.
delete dbo.Kategori where KategoriID not in(1,2)

-Iki tarih arasindaki kayitlari silen kod.
delete dbo.Kategori where EklenmeTarihi not between '20100303' and '20100404'

11 Nisan 2010 Pazar

Yazilimcinin Kendi Kendini Egitmesi

Bolumumuzun medari iftihari olan, Turkiye'de ve dunyada sayili kisilere verilen MVP unvanina sahip Burak Selim SENYURT'un kendi sitesinde yazdigi ve yazilimi dusunen dusunmeyen herkesin okumasini siddetle tavsiye ettigim makalesini paylasacagim simdi sizlerle.


Merhaba Arkadaşlar,
İster üniversite öğrencisi olun ister yeni mezun, yazılım sektörünün henüz başındaysanız eğer, kendinizi yandaki şekilde görülen yolun başında bekleyen birisine benzetebilirsiniz. Ne yolun uzunluğu bellidir ne de gidebileceğiniz yönler. Açıkçası buna baştan karar verebilmek çok zordur. Yaşantınızı ektileyen pek çok neden bu belirsizliğe sebebiyet verebilir. Hatta yazılım alanında hangi yöne doğru ilerleyeceğinize karar verdiğinizde aradan bir kaç yıl geçmiş olabilir. Tüm bu yaşam döngüsü içerisinde unutlmaması gereken bir noktada sizin öğrenme süreçlerinizdir. Pek çok yazılım sevdalısı arkadaşımız çabucak panikleyip bir yerlerden eğitim almaya çalışabilir. Bunun gerekli olduğu veya olmadığı durumlar vardır. Açıkçası Mühendislik nosynonunu Üniversite öğrenimi sırasında kazanmış olanlar avantajlıdır. Ancak onlar içerisinde bile eğitim almak için parasını harcamaktan çekinmeyen kişiler olabilir. Bu yazımızda yine teknik olmayan bir konuya değiniyor olacağım. Sizin bir yazılımcı olarak kendi kendinizi nasıl eğitebileceğinizi anlatmaya çalışacağım. Uzun bir süre eğitimcilik yaptığım için yazıda yer alan ip uçlarını faydalı bulacağınızı düşünüyorum. Tavsiyelerime kulak verin. Wink
Yaşananlardan : 90 lı yılların başlarında üniversite öğrencisiydim ve bilgisayar programcılığına olan merakım her geçen gün katlanarak artıyordu. Açıkçası 64 Kb sınırı altında yaşayan ve oyun yazan programcılara fazlasıyla imreniyordum. O yıllarda Türkçe yazılım kitaplarını bulmak zordu. Şimdi çok kitabımız var ancak aradan kaliteli olanları seçmek istediğinizde aslında çok az kitabımız var. Yabancı kitapları Türkiye' ye getirtmekte bir meseleydi. Özellikle fiyatları düşünüldüğünde. Yurt dışı kanalı ile tedarik ettiğim ilk bilgisayar kitabım Delphi 2.0 Unleashed idi. (Eski bir Delphi programıcısı olduğumu ama Anders Hejslberg' in izinden gittiğimi belirtmek isterim) 1400 sayfaya yaklaşan bu kitabı Taksim' de bulunan Elit kitabevinden tedarik etmiştim. O günü çok net hatırlıyorum. Ahşap tabanda yürürken raflarda gördüğüm sayısız kitabın çoğunu satın almak istemiştim. Ama elimde o kadar çok param yoktu. Yine de isabetli bir atış yapmaya çalışmış ve gerçekten ilgilendiğim konuya ait bir tanesini tedarik edebilmiştim. Bu bulunmaz bir nimet gibiydi.
Kitaplar
Yazılımcıların en büyük dertlerinden birisi de çok hızlı gelişen ve sürekli olarak bizi ötelemeye zorlayan teknoloji. Programlama dilleri, Framework' ler, yazılım metodolojileri sürekli olarak değişmekte veya yenilenmekte. Bunun için uzağa gitmemize gerek yok. C#' ın bir kaç sene içerisinde 4ncü versiyonuna nasıl geldiğini gayet iyi biliyoruz. Dolayısıyla bir yazılımcının çok sık kitap okuması ve takip etmesi gerekiyor. Bu anlamda Amazon gibi Amerika veya İngiltere üzerinden kitap getirtebilmemizi sağlayan sitelerin sunduğu ingilizce kaynaklar hem profesyonellikleri hem de anlatımları yönünden son derece kuvvetli ve yeterli. Size tavsiyem bir kaç arkadaş birleşip birden fazla kitap getirterek taşıma ücretini mümkün olduğunca hafifletmeniz Wink
Yaşananlardan : Üniversitedeki eğitimimi Türkçe almıştım. Mezun olduğumda 1 senelik ingilizce hazırlık eklenmişti. Aslında tüm eğitim hayatım boyunca devlet okullarında öğrenci olmuştum. Ne acıdır ki, orta okul yıllarında hoca yetersizliğinden veya anlaşmazlıklardan dolayı ingilizce derslerimizin yarısından çoğu boş geçmişti. Hal böyle olunca insan çok doğal olarak yabancı dil sorununu tek başına halletmek zorunda kalıyor. Az önce bahsettiğim Delphi 2.0 kitabı bir kaç ay içerisinde kara kalem çalışmasına dönmüştü. Çünkü bilmediğim her kelimenin yanına kurşun kalem ile ne anlama geldiğini yazmıştım. Bu sonraki kitapta, ondan sonrakinde ve sonrakinde de devam etti. Ama bir süre sonra altı çizili kelimeler azalmaya başladı. Yani biraz azmetmem gerekmişti. Bu noktada pek çok rakibinizden geride kaldığınızı düşünebilirsiniz. Ama inanın bir noktadan sonra onları yakalayabilir ve hatta kazandığınız çalışma disiplini ile geçebilirsiniz. Çünkü sıkılmadan yapacağınız ve sözlükten bulduğunuz kelimeleri yazarak harcayacağınız zaman içerisinde standart bir disipline sahip olursunuz. Bu disiplinin içeriği basittir. Sıkılmamak, konsantre olmak, hedefe ulaşmak. Ödülü ise basittir; okuduğunuzu anlamak. Laughing
Tabi burada mutlaka dikkat edilmesi gereken bir nokta var. Çok fazla kitap almaktan ziyade isabetli kitapları seçmek daha önemlidir. Yoksa yandaki resimde görüldüğü üzere kitap sayfaları arasında rahatlıkla kaybolabilir ve işi daha da karmaşık bir hale sokabilirsiniz. Bu noktada belkide daha tecrübeli kişilere danışmak uygun bir davranış olarak görülebilir. Ne de olsa artık günümüzde pek çok yetkin kişiye mailler aracılığıyla ulaşabilmekteyiz.
Eğitim
Kitaplar her zaman için faydalı olan kaynaklardandır ama tek başlarına yeterli olmayabilirler. Çoğu zaman konuyu daha uzman birisinden dinlemek isteyebilirsiniz. Dinlediğiniz kişinin bu anlamda tecrübeli olması geçmiş proje deneyimlerini konu anlatımları üzerine serpiştirmesi de çok önemlidir. Hatta konu ile ilişkili olarak lab çalışması yapılabilmesi size çok fazla değer katacaktır.
Yaşananlardan : Uzun süre bir eğitim firmasında yazılım eğitmeni olarak görev aldım. Eğitimler sırasında özellikle kitaplardan anlatılan konularda öğrencilerimin en çok yakındıkları veya sevmedikleri konu lab çalışmalarının olmasıydı. Aslında Microsoft tarafından sunulan kitaplarda yer alan lab çalışmalarının çoğu, konu ile ilişkili olarak baştan sona bir projenin tamamlanmasını, öğrenilenlerin pekiştirilmesini, hangi malzemeler ile neler yapılabileceğinin görülmesini sağlamaktaydı. Üstelik bu sağlanırken gerçek hayat pratikleri de kazanılmaktaydı.Bu nedenle aldığınız eğitimler içerisinde lab çalışmaları var ise bunları görmezlikten gelmeyin.
Açıkçası bu tip eğitmen bulduğunuzda yakasını eğitim süresi boyunca bırakmamanızda ve söylediklerini yapmanızda fayda vardır. Ne yazık ki günümüzde pek çok eğitim firması işlerini su istimal etmektedir. Açıkçası bu işi hafife alanlardan tutunda, tamamen ticari çıkarlara dönüştüren, rekabet etmek isterken eğitimin kalitesini düşüren firmalar söz konusudur. Ancak tüm bu firmalar her zaman için kendilerinin en iyi eğitmenlere sahip olduklarını ve son teknolojileri aktardıklarını ifade ederler. Aslında gerçek sadece şudur; siz eğitim kurumuna değil eğitmenine para vermelisiniz. Gerçekten o eğitim kurumunun almak istediğiniz eğitimle ilişkili olan konuda son derece saygın, size fayda sağlayacak, deneyimli bir eğitmeni varsa bu durumda eğitimden gerekli yararı sağlayabilirsiniz.
Uzmanlaşmak
Yazılımcının kendisini eğitmesi sırasında yaşadığı önemli güçlüklerden biriside uzmanlaşmadır. Yazılım çok geniş bir dünyadır hatta bir evrendir. Bu sebepten yazılımcıların galakside kendilerini kaybetmeleri son derece doğaldır. Dolayısıyla yazılım içerisinde de belirli konularda uzmanlaşmak gerekebilir. Bu artık bir mecburiyet halini almıştır. Söz gelimi .Net Framework cephesinde servis tabanlı çözümlerde, Web veya Windows tabanlı uygulamalarda ya da Mobil cihazlar üzerinde uzmanlaşılabilir. Aslında buradaki uzmanlaşma fikri bir aşçının uzmanlığına benzetilebilir. Sadece Fransız veya Çin mutfağında ortalığı kasıp kavuran bir aşçı kendi istekleri doğrultusunda seçtikleri alanlarda uzmanlaşmıştır denilebilir. Ancak burada kaçınılmaz bir gerçek vardır. Birden fazla mutfakta uzmanlaşmış olan bir açşı diğerlerine göre çok daha fazla kazanacaktır. Wink Aynı prensip yazılımcılar için de geçerlidir.
Yaşananlardan : Çok yakın zamanda başlayan ama bir süre sonra iptal edilmek zorunda kalınan bir projede, .Net tabanlı bir iş akışı geliştirme sisteminin yazılması istenmekteydi. Projenin en ilginç noktası sistemi kullanacak firma yöneticilerinin onay mekanizmasına Blackberry cihazları ile dahil olmak istemeleriydi. Bu noktada Blackberry cihaz üzerinde otomatik bildirimde bulunacak ve onaylama, red etme, geri gönderme gibi fonksiyonellikleri sunacak bir yazılımın olması gerekmekteydi. Dolayısıyla bizim Blackberry cihazlarında geliştirme konusunda bir şeyler öğrenmemiz bekleniyordu. Zaman azdı ve projede analiz ile çözüm tasarım süreçleri bitmek üzereydi. Güvendiğim tek şey geçmiş yazılım tecrübem, programlama disiplinlerine olan hakimiyetim, çözüm tasarımı yeteneğim, analizi iyi kavramış olmam ve öğrenme isteğimdi. Sizlerde zaman içerisinde bu gibi durumlara düşebilirsiniz. Burada kendi kendinizi eğitme ve yetiştirme teknikleriniz ön plana çıkıp öğrenme sürecinizi belirleyecektir. 
Güvenilir Bilgi
Yazılımcının kendi kendisini geliştirmesinde internet tabanlı kaynaklarında yeri büyüktür. Bu alanda sayısız Community ve Blog mevcuttur. Ancak burada güvenilir olan bilgiye ulaşmak gerekmektedir. Bu sebepten dolayı yazılımcılar olarak sizlerin çok daha seçici davranması gerekmektedir. Ne yazık ki en büyük yanlış, yayınlanan teknik içeriklerin denetlenmemesidir. Eğer düzenli olarak yerli siteleri takip ediyorsanız teknik içerikli makale veya günlük girdilerine yabancı sitelerdekine oranla çok daha az sayıda yorum yapıldığını ve geri bildirimde bulunulduğunu görebilirsiniz.  Oysaki pek çok güvenilir yabancı kaynaklı sitede, yayınlanan içerikten daha uzun yorumlar olduğunu ve geri dönüşler bulunduğunu fark edebilirsiniz. Bu da yazının kaliteli olması halinde sizin için çok daha doyurucu bir içerik oluşması anlamına gelmektedir. Nitekim o konu üzerinde farklı kişilerin görüşlerini de almış olursunuz.
Peki güvenilir sitelere nasıl ulaşabilirsiniz? Dikkat edebileceğiniz ilk nokta yazarın künyesi olacaktır. Microsoft içerisinden gelen, RD, MVP gibi ünvanlara sahip olan yabancı yazarların çoğu sizlere tatmin edici içerikler sunacaktır. Özellikle güvenilirliğinden emin olduğunuz kişilerin varsa bloklarını veya feed' lerini yardımıcı bir program aracılığıyla düzenli olarak takip edebilirsiniz. Örneğin benim kullanmakta olduğum FeedReader programını bu anlamda değerlendirebilirsiniz.
Gördüğünüz üzere değerli meslektaşlarım yazılımcıların her daim kendilerini öğrenci olarak görmelerinde yarar vardır. Gerçekten yazılımı bir yaşam biçimi olarak düşündüğünüzde aslında uzun yıllar boyunca sürecek bir Go oyununa dahil olduğunuzu da görebilirsiniz. Go oyununda öğrenci olarak 30 kyu' dan başlayıp ilerlersiniz. Ancak DAN mertebesi alana kadar öğrencisinizdir ve bu seviyeye ulaşmak hayatınızın bir kaç yılına mal olabilir. Dan aldıktan sonra ise ulaşabileceğiniz en yüksek nokta 9ncu Dan' dır. Tabi oyunun sizin yazılım hayatınıza benzerliği açısından önemli olan katkısı şudur; hep kendinizden daha iyi birisi ile oynayarak ve dolayısıyla kendinizi zorlayarak kademe atlayabilirsiniz. Dan'lara geçtikçe siz artık öğretmen olmaya başlarsınız. Bu da aslında çevrenizdeki yazılımcılara yardım edip onların size danışması anlamında düşünülebilir.
Yazının bu son noktasında halen daha nereden başlayacağınızı bilemeyebilir ve kafanızda çelişkiler yaşayabilirsiniz. Öyleyse şunu deneyin. Yazılım alanında gelmek istediğiniz noktaya odaklanın. Odaklandığınız nokta şu andan 3 yıl sonrası olabilir. Görebildiğiniz kadar ilerisi.(Görebildiğiniz kadar çünkü başta da belirttiğimiz üzere teknolojinin hızı neredeyse ışık hızına yakın) Şimdi geriye doğru gelin. Nelere ihtiyacınız olduğunu not etmeye başlayın. Not ettikleriniz bahsettiğiniz hedefe ulaşmanız için gerekenlerdir. Şimdi bu notlarda yazılanları öğrenmek için neler yapmanız gerektiğini düşünün. Gerekli kitaplar, ilgili siteler, blog adresleri, kişiler, kurumlar...Şu anda en azından nelere ihtiyacınız olduğunu tespit ettiniz. Şimdi aradan uygun olanı seçip sıralı olarak devam edebilir ya da bir kaçına birden başlayarak paralel yürüyebilirsiniz. Kolay gelsin. Zorlu bir maratona başladınız...

Diziler

Bu kelimeyi ilk olarak 1. sinifta C dersinde gordugumde ben de gulumseyip o meshur espriyi yapmistim ama gel gelelim ki 3-4 sene sonra kendilerine ne kadar haksizlik ettigimi ogrendim :) Dizilerin islevselligi, gorevleri, programa getirdigi kolaylikla ogrenilmesi gereken konularin basinda geliyor. Simdi kisaca, yine kodlar yardimiyla dizilerin tanimlanmasi, ornekler uzerinde kullanilisini gosterecegim.

Bu sefer kolaydan baslamayalim. Dizinin boyutunu kullanici girsin mesela.


Console.WriteLine("Hesaplanacak dizinin eleman sayısı kaç olacak?");
int elemanSayisi = int.Parse(Console.ReadLine());

Parse kavramina yabanci olanlar icin kisaca aciklayalim, bizim kullanicidan alacagimiz deger char olacaktir, tek bir karakter. bunu parse yardimiyla integer'a cevirip kac elemanli bir dizi yapacagimiza karar verecegiz. Kisacasi kullanicidan almamiz gereken deger bir sayi olmali.

Sayimizi aldigimiza gore hemen dizimizi tanistiralim sizlerle.

int[] sayilar = new int[elemanSayisi]; //sayilar isimli dizi yarattik

elemanSayisi kullanicidan aldigimiz sayi bilgisi olacaktir.Buna gore dizimiz elemanSayisi uyeli bir dizi olacaktir.

Simdi dizinin tum uyelerine erismeye calisalim. Ornegin dizinin elemanlarini belirleyelim. Bunun icin bir donguye ihtiyacimiz olacak. Ilk tercihim her zaman for'dur, for ile eriselim.


for (int i = 0; i < sayilar.Length; i++)
            {
                Console.Write("{0}. elemanı giriniz: ", i+1);
                sayilar[i] = int.Parse(Console.ReadLine());
            }

Ustteki koda gore tum dizilerin elemanlarina erisebiliyoruz. Ornegin dizimiz 3 elemanli ise 1., 2. ve 3. elamanlarin degerlerini gordugunuz gibi girebiliyoruz. Console.Write 'in icine i+1 yazmamizin sebebi de dizilerin ilk elemaninin 0 dan baslamasi. Yani 0. elemani giriniz goze pek hos gorunmediginden 1 den baslattik yine biz.

Yine dizilerle oynamaya devam edelim. Ornegin dizideki elemanlarin toplamini ekrana getiren kodu yazalim simdi de. Bunun icin gerekli olan malzemeler 1 adet dongu, 1 adet ekrana yazdirmak icin kod  ve toplami tutmaya yarayan degisken. Hemen kodumuza bakalim;


 int toplam = 0;

            for (int i = 0; i < sayilar.Length; i++)
            {
                toplam += sayilar[i];
                Console.WriteLine(sayilar[i]);
            }

            //elde edilen degerlerin toplamini ekrana yazdiralim
            Console.WriteLine("Toplam: {0}",toplam);

Opera Kullanicilari Icin

Site anlamadigim bi sebep yuzunden Opera tarayicisinda bazi bolgeleri kaymis sekilde cikiyor. Tam performans icin Mozilla, Explorer veya Chrome ile takip ediniz. :)

Donguler

C# dilinde de diger tum dillerde oldugu gibi program yazmamizi kolaylastiran, 30 satirda yapacagimiz islemi tek satira indirgememizi saglayan yardimci programlar digebiliriz donguler icin. Baslicalari for,while,do-while ve switch'tir. For ve while'i artik bakkala giderken bile kullaniyoruz ama do-while ve switch yapilarini unutmamak icin veya ilerde hatirlamak icin ornek kodlarini aciklamalariyla birlikte koyuyorum buraya.

for kullanimi:
for (int t = 0; t<=9;t++)
{
Console.WriteLine(t);
}
kisaca kodu anlatirsak, t= 0'dan 10a kadar birer birer artarak dongu icindeki islemi bize yaptiriyor. t'nin 0 dan baslayip 9a kadar gelmesi 10 islem oldugundan, ekrana alt alta 0dan 9a kadar sayilari yazdiracaktir bu ornegimiz.

ayni ornek uzerinden

while kullanimi :
while (i <10)
{
Console.WriteLine(i);
i++; //i'yi bir artir.
}

Bu kodun aciklamasi ise, i= 10dan kucuk olana kadar dongudeki islemleri yap demektir. Aslinda yukarida int i=0 tanimlamasi yapilmistir. Dongu icerisindeki i++ da i'nin artisini saglar. Yine ayni sekilde 0'dan 9a kadar 10 kere bu dongude doneceginden, alt alta 0'dan 9'a kadarki tum sayilari yazdiracaktir bize.

do-while kullanimi:

do
{
Console.WriteLine("Sıralama yönünü seçiniz (1/2):");
Console.WriteLine("1) Artan");
Console.WriteLine("2) Azalan");
secim = Console.ReadLine();
}while(secim != "1" && secim != "2");

Bu kodumuzun da kisaca anlattigi sey, secimimiz 1 veya 2 olmadigi surece icerideki islemleri yap demektir. Gordugunuz uzere secimi kullanicidan almak icin donguye ne olursa olsun mutlaka girmek zorunda. Bu ozellik de do-while dongusunun diger dongulerden avantajini getirtiyor bize. Once islemi yapip, daha sonra kontrol eder.

switch kullanimi:
switch (birler)
{
case 0: Console.WriteLine(""); break;
case 1: Console.WriteLine("bir"); break;
case 2: Console.WriteLine("iki"); break;
case 3: Console.WriteLine("uc"); break;
case 4: Console.WriteLine("dort"); break;
case 5: Console.WriteLine("bes"); break;
case 6: Console.WriteLine("alti"); break;
case 7: Console.WriteLine("yedi"); break;
case 8: Console.WriteLine("sekiz"); break;
case 9: Console.WriteLine("dokuz"); break;
default: Console.WriteLine("0-9 arasi deger girmeliydiniz.."); break;

}

Yukarida goruldugu gibi kullanicinin secimi dogrultusunda yapilmasi gereken islemler kolayca ekrana yazdirilmistir. Swtich olmasa 10 ayri if blogu acip ayri ayri yazdiracaktik fakat goruldugu gibi kod okunulurlugu ve zaman yonunden oldukca kolaylastirmistir bu yol. En alttaki default'u aciklamak gerekecek sanirim sadece. 1-den 9a kadar sayi girilmesi istenecek kullanicidan, eger bunlardan biri girilmezse ekrana o uyari mesaji verilecek. Kisaca default, yukaridaki case'lerden birine uymayan secime gore istenilen gorevi yapan koddur.