Program Lama

Embed Size (px)

Citation preview

12 3

Grsel Programlama Dilinin Kurulumu ve alma OrtamDeikenler (Variables), leler (Operators) ve Deyimler (Statements) Yntemler Yazmak ve Kapsam Belirlemek Karar fadeleri Yineleme (Iteration) fadeleri ve Dngler Hatalar ve zel Durumlar Ynetmek Snflar (Class) ve Nesneler (Object) Oluturup Ynetmek Deerleri ve Bavurular Anlamak Numaralandrma ve Yaplarla Deer Trleri Oluturmak Diziler (Arrays) Parametre Dizileri Kaltm (Inheritance) p Toplaycs (Garbage Collector) ve Bellek Ynetimi

PROGRAMLAMA

4 5 6 7 8 9 10 11 12 13

NTE 1. Grsel Programlama Dilinin Kurulumu ve alma Ortam nitede Ele Alnan Konular 1. 2. 3. 4. Sistem Gereksinimleri ve Grsel Programlama Dilinin Kurulumu IDE Kavram Visual Studio.NET Ortamn Kullanarak Programlamaya Balamak Windows Form Uygulamas Oluturmak

nite Hakknda C# Programlama Dili, Microsoftun gelitirmi olduu yeni nesil bir nesne ynelimli programlama dilidir. Birok alanda C, C++ ve Javay kendisine rnek alr. Javay kendisine rnek ald alanlardan birisi de derlenen deil yorumlanan bir dil olmasdr. Javay rnek alm olmasna karn baz zelliklerinden dolay Javadan daha fazla kolaylk salamaktadr. zellikle nesne ynelimli programlama kavramnn gelimesine katkda bulunan en etkin programlama dillerinden biridir. .NET ktphanelerini kullanmak amacyla yazlan programlarn alt bilgisayarlarda uyumlu bir ktphanenin bulunmas gereklidir Bu, Microsoftun .Net Framework olabilecei gibi ECMA standartlarna uygun herhangi bir ktphane de olabilir. Yaygn dier ktphanelere rnek olarak Portable.Net ve Mono verilebilir. renme Hedefleri Bu nite tamamlandnda; 1. Grsel bir programlama dili ne demektir renmi olacaksnz. 2. IDE kavramn reneceksiniz. 3. Konsol uygulamas gelitirmeyi reneceksiniz. niteyi alrken niteyi dikkatli ekilde okuyun program kurmak iin gerekli admlar izleyerek program kurunuz ve nitede verilen uygulamalar dnda uygulamalar yaparak becerinizi gelitiriniz. Unutmayn farkl uygulamalar gelitirmek; renmenize yardmc olacaktr. Ve asla denemekten vazgemeyin.

Sistem Gereksinimleri ve Grsel Programlama Dilinin Kurulumu Sistem Gereksinimleri Programlama I ve Programlama II adnda iki dnemde alacanz bu ders iin ncelikle Microsoft Visual Studio 2008 programn kurarak balayalm. Visual Studio 2008i bilgisayarlarnza kurmanz ve problemsiz bir ekilde almalarnz yrtebilmeniz iin ncelikle aada belirtilen sistem zelliklerine sahip bir bilgisayar edinmeniz gerekiyor. Donanm Gereksinimleri: En az 1.6 GHz ilemci En az 2.2 GB kullanlabilir disk alan (3GB ve fazlas nerilir) En az 512 MB RAM kapasitesi (2 GB nerilir) En az 5400 RPM Hard Disk Src En az 1024*768 znrl destekleyen bir monitor.

Visual Studio 2008 aadaki iletim sistemleri zerine kurulabilir: Windows Vista (x86 & x64) Balang srm (Starter Edition ) hari Windows XP Service Pack 3 Balang Srm (Starter Edition) hari

Visual Studio 2008 Kurulumu

Install Visual Studio 2008 seeneine tklayarak kurulum ilemine balyoruz.

Daha sonra kan bu ekranda; eer programda kurulum esnasnda oluan hatalarn tespit edilip Microsofta gnderilmesini istiyorsanz ekrandaki kutucuu iaretlemeniz gerekir. Bu bir zorunluluk deildir istemiyorsanz bo brakp Next butonuna tklayarak devam edebilirsiniz.

Gelen bu ekranda I have read and accept the license terms. (Lisans szlemesini okudum ve kabul ediyorum.) seeneini iaretleyip gerekli yere ismi girdikten sonra Next tuuna basarak kuruluma devam ediyoruz. Gerekli ifre, kurulum DVDsinin zerinde olacaktr. Deneme srmn kuruyorsanz bu alan bo brakabilirsiniz.

Bu ekranda Default, Full, Custom gibi seenekler ile karlaacaksnz. Eer kurulumu Default seerek yaparsanz nerilen zellikler kurulacaktr. Herhangi bir alan skntnz yoksa ve btn zellikleri kullanacanz dnyorsanz Full seenei iaretlenebilir. Custom ise sadece kullanacanz zellikleri kendiniz belirlemeniz iin oluturulmu bir alandr. Default ya da Full kurmanz neririm.

Bu ekranda semi olduunuz kurulum tipine gre btn seenekler srasyla yklenecektir. Bilgisayarnzn hzna bal olarak 20 ile 40 dakika arasnda bir sre ierisinde kurulum tamamlanacaktr.

Gelen bu son ekranda Finish diyerek kurulum ilemini tamamlyoruz.

Bilgisayar yazlm alannda kabul grm olan en gl grsel programlama platformlarndan birini kurmu bulunmaktasnz. Burada yapabilecekleriniz hayal gcnzle ve azminiz ile snrl. Grsel programcln heyecan verici dnyasna ho geldiniz. Giri Kurmu olduunuz Microsoft Visual Studio platformunda Viusal C++, Visual Basic ve Visual C# gibi programlarda uygulamalar gelitirebilirsiniz. Bu ders ieriinde C# program anlatlacaktr. Daha nce C, C++ gibi ortamlarda uygulamalar gelitirmemi bile olsanz ders ierii en temelden balayarak ele alnacaktr. Bu sizler iin iyi deerlendirildiinde bir avantaj olarak grlebilir. Microsoft Visual C#.Net ncelikle Microsoft.Net platformunda alacak uygulamalar gelitirmek isteyen programclar hedef alan gl ve basit bir dildir. Microsoft Visual C#.Net, C++ ve Visual Basicin birok zelliini iinde barndrmakla beraber bu dillerdeki baz tutarszlklar ve hatalar dzelterek daha temiz ve mantkl bir dil ortaya kmtr. Bu ders ieriinde C# dilinin zelliklerini reneceksiniz ve bunlar kullanarak Windows ve Web uygulamalar gelitirebileceksiniz. IDE KAVRAMI

Integrated Development Environment (Tmleik Gelitirme Ortam) bilgisayarprogramclarnn hzl ve rahat bir ekilde yazlm gelitirebilmesini amalayan, gelitirme srecini organize edebilen birok arala birlikte gelitirme srecinin verimli kullanlmasna katkda bulunan aralarn tamamn ierisinde barndran bir yazlm trdr. Tmleik gelitirme ortamlarnda olmas gerekli en temel zellikler: Programlama diline gre szdizimi(syntax) renklendirmesi yapabilen kod yazm editr. Kod dosyalarnn hiyerarik olarak grlebilmesi amacyla hazrlanm gerek zamanl bir dizelge. Tmleik bir derleyici (compiler), yorumlayc (interpreter) ve hata ayklayc (debugger). Yazlmn derlenmesi, balanmas, almaya tmyle hazr hale gelmesi ve daha birok ek ii otomatik olarak yapabilmek amacyla kk ina aralar.

Visual Studio.NET Ortamn Kullanarak Programlamaya Balamak Bir konsol uygulamas gelitirmek iin Visual Studio 2008i aalm (Bundan sonra program olarak bahsedilecektir.). Alan ekranda File mensnden Newi seelim karmza kacak alt menlerden Project seeneine tklayalm. Yeni bir uygulama amak iin Ctrl+Shift+N klavye ksa yoluda kullanabilirsiniz.

New Project iletiim kutusu alacaktr. Bu iletiim kutusu kullanlarak Windows Form Application, ASP.NET Web Application, Console Application gibi oluturmak istediiniz uygulamann trn belirleyen bir ablon seebilirsiniz. Bizim ilk uygulamamz bir konsol uygulamas olacaktr. Uygulamay yaratmak iin aadaki admlar takip ediniz:

Project Types blmesinden Visual C# Projects simgesini sein Templates blmesinden Console Application simgesini sein. Location alanna projelerinizi kaydedeceiniz src ve klasrn adresini yaznz (Bu derste yapacanz tm uygulamalar iin ortak bir klasr kullanmaya zen gsterin. Bu alanda belirttiiniz klasr yoksa Visual Studio.NET sizin iin bu klasr oluturacaktr). Name alanna projenize vermek istediiniz ismi yaznz (rnek: MerhabaDunya), Son olarak OK butonuna bastnzda yeni bir proje ekran alacaktr.

Kodlama ilemine gemeden nce ekran biraz inceleyelim. Menler ve Ara ubuklar: Tm Windows programlarnda olduu gibi menlerin ve ara ubuklarnn bulunduu bir blm var. Bu men ve ara ubuklar komutlara ulamanz salayacaktr. Kodlama Alan: Ekrann orta ksm yani kod blmesi kaynak dosyalar grntler ( Bizim oluturduumuz uygulamada Program.cs sekmesini ve bu uygulamaya ait kodlar gryoruz.). Eer programmz birden fazla dosyadan meydana geliyorsa her kaynak dosyas kendisine ait etiketlenmi bir sekme ile gsterilecektir. Bu durumda seili olan sekmeye ait kodlama ekrannda alabilirsiniz. Solution Explorer: Proje ile ilgili dosyalarn adlarn grntler. Bir projeye ait birden fazla dosya oluturulur. Projeyi oluturduunuz klasr atnzda proje ismi ile oluturulmu bir klasr greceksiniz. Her proje kendine ait bir klasr de tutulur. Solution Explorerda grdnz dosya isimlerini bu projeye ait klasr iinde de grebilir gerekirse buradan ulaabilirsiniz. Bu ekrandaki dosyalar iaretlediinizde bu blmn hemen altnda Properties ekrannda dosyalara ait zellikleri grebilir ve gerektiinde dzenlemeler yapabilirsiniz. Bu blmdeki baz dosyalarn ne ie yaradn aklayalm. MerhabaDunya: Koyu olarak yazlan dosyann zerine tklayn (MerhabaDunya). Properties ekrannda Project File ksmnda MerhabaDunya.csproj ismini greceksiniz. Bu

dosya bir C# proje dosyasdr. Her proje dosyasna ait bir ya da daha fazla sayda kaynak dosyaolabilir. Bir projedeki kaynak dosyalar ayn programlama dili kullanlarak oluturulmaldr. Yani programn bir ksm C# baka bir ksm ise Visual Basic ile hazrlanamaz. Program.cs: Bir C# kaynak dosyasdr. Kodlama ilemi bu dosya zerinde gerekletirilir. Bu blm ierisinde daha sonra bahsedeceimiz ve Visual Studio.NET tarafndan oluturulmu program kodlar mevcuttur. AssemblyInfo.cs: Bu ds bir baka C# kaynak dosyasdr. Bu dosyay, programa ait z nitelikleri belirtmek iin kullanrsnz. Yazar ad, programn yazld tarih vs. Bu bilgilerden sonra Visual Studio tarafndan oluturulan kod bloklarn inceleyelim. Program.cs dosyas Main adl bir yntemi aran Program adndaki bir snf (class) tanmlar. Btn yntemler bir snfn ierisinde tanmlanmaldr. Main yntemi zel bir yntemdir ve programn balang noktasn belirler. Burada kullanlan Main yntemi duraan (statik) bir yntem olmaldr. nemli Not: Yntemler konusu ilerleyen blmlerde ele alnacaktr (Main yntemi, Duraan Yntemler vb.). nemli Not: C# byk kk harf duyarl bir dildir (Case Sensitive). Maini byk M ile yazmalsnz. Bu uygulamada konsolda Merhaba Dnya metnini gsteren kodu yazacaz. Daha sonra bu kodu altrp kod elerini blmlemek iin namespacein (ad alanlarnn) nasl kullanldn reneceiz. Kodlama ilemini gerekletirirken IDEnin bize sunmu olduu teknolojilerden biri olan IntelliSense teknolojisinden faydalanacaz. IntelliSense teknolojisi kod tamamlama teknolojisi olarak adlandrlabilir. Bir program gelitirici olarak daha hzl ve doru kodlar yazmanz salar. Bir IntelliSense nerisini kabul etmek iin alan listeden ok tular yardm ile kullanacanz komutu setikten sonra klavyeden TAB, ENTER ya da BOLUK (SPACE) tularna basmanz gerekir. Seim ilemi fare yardmyla da gerekletirilebilir.using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace MerhabaDunya { class Program { static void Main(string[] args) { } } }

Kodlama alannda Visual Studio tarafndan oluturulan yukardaki kodlar inceleyelim. Using ile tanmlanan alanlar otomatik olarak koda include (dhil) edilmi olan librarylerdir. Program, bloklar halinde oluturulmutur. Bloklarn oluturulduu alanlardaki iaretine tkladnzda o blok kapatlarak + iaretine dnr. Bu iaret zerine yeniden tkladnzda ise blok alr ve bu blok iindeki kodlar grebilirsiniz. Library (Ktphane) programn ihtiya duyduu bir takm zelliklerin almasn salar. rnein Input, Output ilemleri gibi. Buradan sonraki blmler kodlamaya aittir. Bu noktada bizi asl ilgilendiren ksm ise aadaki kod parasdr.static void Main(string[] args) { }

Konsolda Merhaba Dnya metnini grntlemek iin gerekli olan kodu kme parantezleri arasnda oluturacaz. Bu parantezler arasna Console yazmaya baladmz anda IntelliSense listesi ekranda grntlenecek ve yazmaya altnz kod paras karnza kacaktr. Burada class, struct, enum, interface, delegate ve namespaceleri temsil eden semboller karnza kacaktr. Her bir sembol yeri geldiinde detayl bir ekilde aklanacaktr. Bizim bu programda kullandmz Console bir snf (class) temsil etmektedir. Console yazdktan sonra bir nokta koyun bu durumda Console snfnn btn yntemlerini ve zelliklerini ieren yeni bir liste karnza kacaktr. Noktadan Sonra WriteLine yazacaz. Daha ilk karakteri yazdmz anda W ile balayan tm yntemler ve snflar listede belirecektir. Buradan WriteLine yntemini OK tular ile seerseniz sonrasnda klavyeden Tab, Enter ya da Boluk (Space) tularna basarak bu yntemi programnza ekleyebilirsiniz. Bu ilemi fare ile yntem zerine ift tklayarak da gerekletirebilirsiniz. Sonrasnda normal bir parantez anz. Parantez ald anda bir IntelliSense ipucu ekranda belirecektir. Bu ipucu ekran bu blok ierisinde nasl bir kodlama yapmanz gerektii hakknda size bilgi verecektir. Parantez ierisinde ift trnak ierisinde ( ) konsolda grntlenmesini istediiniz metni yaznz. Parantezi kapadktan sonra noktal virgl (;) koyarak satr sonlandrnz. Biz rneimizde programcla balangta klasik hale gelmi olan Merhaba Dnya metnini kullandk. Bu noktadan sonra kodumuz aadaki ekilde grntlenmelidir.static void Main(string[] args) { Console.WriteLine("Merhaba Dnya"); }

nemli Not: Parantezler ierisinde ifadeler olutururken ya da bloklar tanmlarken am olduunuz parantezi nce kapatn ve sonrasnda iine kodu yazmaya balayn. Bylece parantezi kapatmay unutmayacak ve programnzda syntax hatalar ile karlama olasln azaltm olacaksnz. Programmz u anda hazr durumda. View mensnden Output seeneine tklayn ekrana Output adnda bir blm oluturulacaktr.

Sonrasnda Build mensnden Build MerhabaDunya yazan sekmeye tklayn. (Bu ilemin klavye ksa yolunun Shift+F6 olduuna dikkat edin).

Programmz baarl bir ekilde oluturulduunda Output ekrannda aadaki kty greceksiniz. Burada koyu olarak belirtilen blmler sizin ekrannzda ayn ekilde grnyorsa oluturma ilemi baaryla tamamlanm demektir. Yazm olduunuz programlarda kimi zaman Warningler ile karlaabilirsiniz. Warning bir uyardr ve program bu haliyle de alabilir.------ Build started: Project: MerhabaDunya, Configuration: Debug Any CPU -----C:\WINDOWS\Microsoft.NET\Framework\v3.5\Csc.exe /noconfig /nowarn:1701,1702 /errorreport:prompt /warn:4 /define:DEBUG;TRACE /reference:"C:\Program Files\Reference Assemblies\Microsoft\Framework\v3.5\System.Core.dll" /reference:"C:\Program Files\Reference Assemblies\Microsoft\Framework\v3.5\System.Data.DataSetExtensions.dll" /reference:"C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\System.Data.dll" /reference:"C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\System.dll" /reference:"C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\System.Xml.dll" /reference:"C:\Program Files\Reference Assemblies\Microsoft\Framework\v3.5\System.Xml.Linq.dll" /debug+ /debug:full /filealign:512 /optimize- /out:obj\Debug\MerhabaDunya.exe /target:exe Program.cs "Properties\AssemblyInfo.cs"

Compile complete -- 0 errors, 0 warningsMerhabaDunya -> C:\Documents and Settings\ayhanaydn\Desktop\uzaktanegitim\MerhabaDunya\MerhabaDunya\bin\Debug\MerhabaDunya.exe

========== Build: 1 succeeded or up-to-date, 0 failed, 0 skipped ==========

imdi Debug mensnden Start Without Debuggingi tklayn (Ctrl+F5). Programnz Command penceresinde alr ve aadaki gibi bir ekran grnts elde edersiniz. Bu ekrandan kmak iin klavyeden herhangi bir tua basabilirsiniz.

nemli Not: Start Without Debugging yerine Start tklarsanz programnz yine alr fakat ok ksa bir sreliine ekranda grnr ve kaybolur. Ad Alanlarn Kullanmak (NameSpace) Yazm olduumuz programlar bydke iki sorunla karlaabilirsiniz. Bunlardan birincisi, uzun kod ksa koddan daha zor anlalr ve bakm zordur. kincisi ise daha uzun kod daha ok ad, adlandrlm veri, adlandrlm ilev ve adlandrlm snf demektir. Adlarn says arttka projenin oluturulamama olasl artar ve ad akmalar meydana gelebilir. Bu adlar belli kurallar dhilinde uzatmak mmkndr fakat bu iyi bir zm deildir. Ad alanlar tanmlayclar iin adlandrlm bir container (tayc ya da kap) yaratarak bu sorunu zmeye yardmc olur. Aadaki rnei inceleyelim:namespace SampiyonlarLigi { class Fenerbahce { ... } class RealMadrid { ... } }

Burada SampiyonlarLigiFenerbahce adnda bir snf yaratmak yerine SampiyonlarLigi adnda bir ad alan iinde Fenerbahce, RealMadrid gibi snflar yaratmak daha kullanldr. Bu ilem yapldnda istediginiz snfa SampiyonlarLigi.Fenerbahce yani namespace.classad yazarak bavurabilirsiniz. Bu namespace alanna yeni snflar eklemek istediinizde snf yapsn oluturmanz yeterli olacaktr. .NET Framework yazlm gelitirme paketi (Software Development Kit, SDK) tm snf yaplarn ad alanlar iinde oluturmanz nerir ve Visual Studio.NET ortam da projenizin adn en st dzey ad alan olarak alr ( Projeyi olutururken vermi olduumuz isim bizim en st dzey alan admzdr.). nemli Not: Alan ad ile ayn ismi tayan snflar (class) oluturmamaya zen gsterin. Bizim rneimizde kullandmz Console snf System ad alannda yer alr. Yani biz Console snfn kullanmak istediimizde System.Console yazarak kullanabiliriz. Kodumuzu yeniden inceleyerek using System; satrna dikkat edin. Burada using bir ynergedir ve using ynergelerini bir kaynak dosyann en stne veya bir ad alannda ilk ifade olarak ekleyebilirsiniz. nemli Not: Kodunuzda aklama satrlar oluturmak istediinizde (Bu ksm derleyici tarafndan elenir.) // ile tek satrlk aklamalar ekleyebilirsiniz. Eer kodun birka satrnda aklama bloklar oluturmak istiyorsanz /* ile balayp */ ile bu aklama blounu sonlandrabilirsiniz.

Uygulama: Projenizin ilk satrnda bulunan using System; satrnn bana // ekleyerek Build mensnden Build komutuna tklayn oluturma ileminin baarsz olduunu greceksiniz. Output blmesinde oluturma ileminin baarsz olduunu gsteren aklama satrlarnn son ikisi aadaki gibi grntlenecektir. Compile complete -- 1 errors, 0 warnings == Build: 0 succeeded or up-to-date, 1 failed, 0 skipped == Ekrannzdaki Error List blmnde ise hataya neden olan tanmlama iletisini grrsnz. Bu ileti zerine ift tklayarak hataya neden olan satra gidin ve bu satr System.Console.WriteLine("Merhaba Dnya"); eklinde deitirin. Kodu yeniden Build edin ve oluturma ileminin gerekletiini gzlemleyin. Sonrasnda Debug mensnden Start Without Debuggingi tklayarak programnz yeniden altrn. nemli Not: Bu programlama dilini renirken kimi zaman bilerek hatalar yapn. Bu ekilde renmek ileride karlaacanz hata mesajlarnda nasl davranacanz konusunda sizlere yardmc olacaktr. WINDOWS FORM UYGULAMASI Daha nce oluturduumuz Merhaba Dnya rneini bu sefer Visual Studio.NET Visual Designern kullanarak yeniden oluturalm. Visual Studio.NET ortam bu uygulama iin gerekli olan her eyi kullanclarna salamaktadr. imdi srasyla aadaki admlar takip ederek uygulamay oluturalm ve kodlama ilemine balayalm. Birinci uygulamada olduu gibi New sekmesinin altndan Projecti seerek New Project iletiim kutusunu aalm. Project Types blmesinde C# n seili olduundan emin olun ve Templates blmnden Windows Application tklayn. Location alanna alma klasrnz gsterin ve programnz iin bir isim verip OK tuuna tklatn.

Bo bir Windows formu yaratlp Design Viewde yukardaki gibi grntlenecektir. Bu ekranda ilk gzmze arpan noktalar sol taraftaki Toolbox ve oluturulan Form nesnesidir. Uygulamamz oluturmaya balayalm. Sol taraftaki Toolbox mensnden All Windows Forms sekmesinin yanndaki + iaretini basn ve bu menye ait tm zellikleri grntleyin. nemli Not: Semi olduunuz alma dzenine bal olarak ekran grnm farkllklar gsterebilir. Toolbox yazsnn sanda bulunan simgeleri inceleyin bu simgeler bu mennn ekranda nerede bulunaca, gizli ya da grnr olmas; ya da kapatlmasyla ilgili ilemleri gerekletirir. Buradaki bir adet TextBox ve bir adet Butonu ya srkleyerek ya da nce Toolbox blmnde iaretleyip sonrada Form zerine tklayarak aadaki ekilde ekrannza yerletiriniz.

imdi formunuzun zerinde farenin sa tuuna tklayarak View Code sekmesini tklayn. imdi ekrannzda bir Form1.cs birde Form1.cs[Design] adnda iki sekme grlecektir (Bu ilemi Solution Explorer zerinde Form1.cs seip bu blmn stnde bulunan ksa yol simgeleri ile de gerekletirebilirsiniz). Form1.cs sekmesini tklayn burada Visual Studio.NET tarafndan otomatik olarak oluturulan kodlar greceksiniz. Buradaki using ynergelerini dikkatli bir ekilde inceleyin. imdi Form1.cs[Designer] zerinde oluturduunuz objelerin zelliklerini grmek iin zerine tklayn sa tarafta Properties alannda bu objelere ait zellikleri greceksiniz. Buton1 nesnesini seip Properties ekranndan bu objenin textini(metnini) OK olarak deitirin ve form zerinde bo bir alana tklayn. Buton ismi OK olarak deiecektir. Form zerinde butonun zerine ift tklayn kodlama ekranna dneceksiniz ve aadaki gibi bir yap ile karlaacaksnz.private void button1_Click(object sender, EventArgs e) {

}

Burada aadaki kodlamay yapn.private void button1_Click(object sender, EventArgs e) { textBox1 .Text } = ("Merhaba Dunya");

Oluturduumuz formda textbox nesnesinin text alan botu (Properties alanndan kontrol edin.). Biz yazdmz kod ile bu nesnenin textinin Merhaba Dnya olmasn istedik. Uygulamamz altrlmaya hazr. Debug mensnden Start Debugging, klavyeden F5 ya da kodlama alannn hemen zerinde bulunan Play butonuna tklayarak uygulamay test ediniz. Bu ilem sonucunda Formunuz ekranda grntlenecek ve OK butonuna basldnda Merhaba Dnya metni grntlenecektir.

ZET Visual Studio programnn kurulumu ve IDE ortamndan bahsedilmitir. Bir adet konsol ve bir adet de Windows uygulamas yaplarak kullanlan platform zelliklerinden sz edilmitir. Visual Studio.NET ve C# programlama dilinin baz zellikleri anlatlmtr.

DEERLENDRME SORULARI 1. Bir blok halinde aklama yapmak iin aadaki sembollerden hangileri kullanlr? a. // b. /* */ c. */ d. * e. / 2. Console snf hangi namespacee (alan ad) aittir? a. Writeline b. Input/Output c. Program d. System e. Linq 3. C# . .. duyarl bir dildir. (Byk Kk Harf)

1

Grsel Programlama Dilinin Kurulumu ve alma Ortam

23

Deikenler (Variables), leler (Operators) ve Deyimler (Statements)Yntemler Yazmak ve Kapsam Belirlemek Karar fadeleri Yineleme (Iteration) fadeleri ve Dngler Hatalar ve zel Durumlar Ynetmek Snflar (Class) ve Nesneler (Object) Oluturup Ynetmek Deerleri ve Bavurular Anlamak Numaralandrma ve Yaplarla Deer Trleri Oluturmak Diziler (Arrays) Parametre Dizileri Kaltm (Inheritance) p Toplaycs (Garbage Collector) ve Bellek Ynetimi

PROGRAMLAMA

4 5 6 7 8 9 10 11 12 13

NTE 2. Deikenler (Variables), leler (Operators) ve Deyimler (Statements) nitede Ele Alnan Konular 1. Anahtar Szckleri (Keywords) ve Deikenler 2. Temel Veri Trleri ve Aritmetik leler nite Hakknda Bu nitede ifadeler, anahtar szckler (keywords) ve tanmlayclar (identifiers) gibi Microsoft Visual C# syntax (szdizimi) ve dil yapsnn paralarn tanyacaksnz. Ayrca deiken tanmlamay ve kullanmay greceksiniz. C#n zellii olan aritmetik operatrleri ve deerleri deitirmek iin operatr kullanmay,iki ya da daha fazla operatr ieren deyimleri kontrol etmeyi reneceksiniz. renme Hedefleri Bu nite tamamlandnda; Verileri (bilgileri) saklamak iin deiken kullanmay reneceksiniz. + ve gibi aritmetik operatrleri kullanacaksnz. Bir ya da daha fazla operatr birletirmeyi greceksiniz.

niteyi alrken Mutlaka uygulamalar gelitiriniz ve ilk defa karlatnz terimleri farkl kaynaklardan da okuyarak bilgi sahibi olunuz.

fadeleri Anlamak fade, eylemi gerekletiren komuttur. fadeler yntemlerin iinde bulunurlar. Yntem bir snf iinde adlandrlm ve sralanm ifadeler olarak dnlebilir. lk blmde Main Ynteminden ksaca bahsedilmiti. C#taki ifadeler, iyi tanmlanm bir kurallar kmesine uymaldr. Bu kurallar topluca syntax (szdizimi) olarak bilinirler. C# syntax kurallarndan en nemlisi her ifadenin bir noktal virgl ile bitmesidir. Aadaki ifade sonunda noktal virgl olmazsa program tarafndan derlenmez.Console.WriteLine("Merhaba Dnya");

Herhangi bir dilde program yazmann pf noktas; ncelikle o dilin syntax yapsn renmek ve o dili deyimsel yolla kullanmaktr. Tanmlayclar (Identifiers) Kullanmak Tanmlayclar, eleri programlarda tanmlamak iin kullanlan adlardr. C#da tanmlayclar belirlerken aadaki syntax kurallarna uymanz gerekir. Yalnzca harfleri (byk ya da kk) ve rakamlar kullanabilirsiniz. Bir tanmlayc, bir harf ile balamaldr (Alt izgi bir harf olarak kabul edilebilir.).

RNEK: durum, _durum, ikiKelime, eryaman3 geerli, durum%, ikiKelime$ ve 3eryaman ise geersiz tanmlamalardr. nemli Not: C# kk -byk harfe duyarl bir programlama dilidir. Ankara ile ankara zde tanmlayclar deildir. Anahtar Szckleri Tanmlamak C# dili birok tanmlaycy kendi kullanm iin ayrmtr. Bunlara, anahtar szck (keywords) ad verilir. Bunlarn her birinin zel bir anlam vardr. Kodlama alannda bu tanmlayclar kullandnz anda mavi renkte gsterilirler. rnein; class, using, namespace anahtar szcklere rnek olarak verilebilir. Bu anahtar szckler aadaki tabloda gsterilmitir. Bu anahtar szcklere program gelitirildike yenileri eklenebilmektedir.abstract as base bool break byte event explicit extern false finally fixed new null object operator out override struct switch this throw true try

case catch char checked class const continue decimal default delegate do double else enum

float for foreach goto if implicit in int interface internal is lock long namespace

params private protected public readonly ref return sbyte sealed short sizeof stackalloc static string

typeof uint ulong unchecked unsafe ushort using virtual volatile void while

Deikenleri Kullanmak Deiken (variables), bir deeri saklayan depolama alan olarak adlandrlabilir. Deikenleri geici bilgi saklayan kutular gibi dnebilirsiniz. rnein saysal bir deeri, programnzn herhangi bir yerinde kullanmak iin bir deikene atayabilirsiniz x=5; gibi. Programnzda kullandnz deikenler benzersiz olmaldrlar. Deiken tanmlama iin Framework baz neriler sunmutur. Bunlar; Deikenleriniz alt izgi ile balamasn. Yalnzca koula bal olarak deiken tanmlayc yaratmayn. rnein ayn anda kullanmak iin degisken ve Degisken adnda iki farkl deiken oluturmayn. Ad kk harfle balasn. Birden ok szckten oluan tanmlayclarda ikinci ve daha sonraki szckleri byk harfle balatn ( Bu camelCase gsterim biimi olarak bilinir.).

Macar gsterim biimini kullanmayn ( C++ kullanan kiiler bu gsterime aina olabilirler. Bu gsterimde deikenlerin isimlerinin balarna trn belirten bir nek getirilmesi veya fonksiyon isimlerinin yapaca ii belirtecek ekilde seilmesi gibi neriler vardr.).

Deiken Bildirimi Deikenleri ilerinde deer tutan kutulara benzetmitik. C# birok farkl trden deeri ileyebilir. rnein int (tamsay), float(kayan noktal say) ve char ( karakter dizisi) bunlardan bazlardr. Bir deiken bildirimi yaplrken bu deikenin iinde ne tr bilgi tutacan da belirlemek gerekir. Bir deikenin ad ve tr bir tanmlama ifadesi iinde bildirilir. Aadaki ifade age adnda ve int (tamsay) deerler tayan bir deikeni bildirmektedir.int age;

Burada int deiken tr anahtar szcklere bir rnektir. Deikeni bildirdikten sonra ona bir deer atayabilirsiniz aadaki ifade age deikenine 20 deerini atyor. age=20; nemli Not: = iareti sandaki deeri solundaki deikene atayan bir atama operatrdr. rnek: Aadaki kodu Console uygulamasnda yaznz ve sonucu ekranda grntleyiniz.int age; age = 20; Console.WriteLine(age);

nemli Not: Fare iaretisini kodlama alannda bir deikenin zerinde tutarsanz deikenin trn gsteren bir ipucu ekran belirir. Temel Veri Trleriyle almak C# dilinde nceden tanmlanm(C# dilinde var olan tipler) veri tipleri, deer tipleri ve referans tipleri olmak zere ikiye ayrlr. Bu iki veri tipi arasndaki fark ok iyi kavramak gerekir. Daha nce dediimiz gibi deikenler bellekte bulunan verilerdir. Aslnda bir deikeni kullanrken o deikenin bellekte bulunduu adresteki veriye ulayoruz. Deer tipleri deikenin deerini dorudan bellek blgesinden alrlar. Referans tipleri ise baka bir nesneye referans olarak kullanlrlar. Yani referans tipleri aslnda bir eit bellek blgesi olan heap alannda yaratlan veri trlerinin (bunlara ksaca nesne de diyebiliriz) adreslerini saklarlar. Deer tipleri yaratldklarnda stack dediimiz bellek blgelerinde oluturulurlar; referans tipleri ise kullanm biraz daha snrl olan heap dediimiz bellek blgesinde saklanrlar. C ve C++ dillerine aina olan arkadalarn da tahmin ettii gibi gsterici kavram ile referans veri tipleri arasnda ok fazla fark yoktur. Fakat C# dilinde kullancnn dorudan kullanabilecei bir gsterici veri tr tanmlamak yoktur. Bunun yerine baz deikenler deer tip, bazlar ise referans tipi olarak ilem grrler. Peki, bunlar nelerdir? Temel veri tipleri olan int, double, float ve yap nesneleri gibi veri trleri deer tipler; herhangi bir snf tr ise referans trdr. ki deer tipi nesnesini birbirine eitlerken deikenlerde saklanan deerler kopyalanarak eitlenir ve bu durumda iki yeni bamsz nesne elde edilmi olur; yani

birinin deerini deitirmek dierini etkilemez. Fakat iki referans tipini birbirlerine eitlediimizde bu nesnelerde tutulan veriler kopyalanmaz. lem yaplan yer, nesnelerin heap blgesindeki adresleridir; yani iki nesne de aslnda heap bellek blgesinde ayn adresi gsterecekleri iin birinde yaplan deiiklik dierini de etkileyecektir. Referans tiplerini tanmlarken herhangi bir adresi gstermediini belirtmek iin null deere atanrlar. (rnein: y = null ;)

CTS (Common Type System) Tipleri .NET bir yazlm gelitirme platformudur. Aslnda btn veri tipleri CTS dediimiz bir sistem ile tannrlar. Yani C# dilinde ki veri trleri aslnda CTS 'deki veri trleri iin birer ara yz gibidirler. CTS sayesinde .NET platformu iin gelitirilen btn diller ayn veri tiplerini kullanrlar; tek deien, veri trlerini tanmlama yntemi ve sytaxdr. Bu yzden bizim C# dili ile tanmlayacamz her veri tipinin CTS 'de bir karl mevcuttur. Bu veri trleri ve CTS karlklar aada tablolar halinde mevcuttur.

C#daki ad sbyte short int long byte ushort uint ulong float double decimal bool char

CTS Karl System.Byte System.Int16 System.Int32 System.Int64 System.Byte System.UInt16 System.UInt32 System.UInt64 System.Single Sytem.Double

Aklama 8 bit iaretli tamsay 16 bit iaretli tamsay 32 bit iaretli tamsay 64 bit iaretli tamsay 8 bit iaretsiz tamsay 16 bit iaretsiz tamsay 32 bit iaretsiz tamsay 64 bit iaretsiz tamsay 32 bit tek kayan say 64 bit ift kayan say

Max ve Min Aralk ya da Deeri -128: 127 -32.768: 32.767 -2.147.483.648: 2.147.483.647 -9.223.372.036.854.775.808: 9.223.372.036.854.775.807 0: 255 0: 65.535 0: 4.294.967.295 0: 18.446.744.073.709.551.615 +ya da - 1,5*10-45 : + ya da - 3,4*1038 +ya da - 5*10-324 : + ya da - 1,7*10308 +ya da - 1,5*10-28 : + ya da - 7,9*1028 true ya da false ( 0 ya da 1) 16 Unicode karakterleri

System.Decimal 128 bit ondalkl say System.Boolean bit System.Char Karakterleri temsil eder

Atanmam Yerel Deikenler: Bir deikeni bildirdikten (oluturduktan) sonra siz o deikene herhangi bir deer atamam olsanz bile bu deiken rastgele bir deer tar. C ve C++ iin deikene deer atanmam olmas bile programn derlenmesine engel deildi. Bu aslnda byk bir hatadr. C# buna izin vermez eer C# da bildirdiiniz deikene deer atamazsanz programnz derlenmez. Bu gerekliliin ad Kesin Atama Kural (Definite Assignment Rule )dr. rnein aadaki gibi bir ifade derleme zamannda hata verecektir

int age; Console.WriteLine(age);

RNEK: Konsol uygulamanzdaki kodu aadaki ekillerde yazarak yeniden derlemeye aln ve sonular dikkatli bir ekilde inceleyin ( Ksuratl ya olur mu demeyin ben syleyenleri duydum. ).int age; age = 20.5; Console.WriteLine(age); double age Age=20.5; Console.WriteLine(age);

Aritmetik Operatrleri (leleri) Kullanmak Bildiimiz toplama, karma, arpma ve blme ilemlerinin simgeleri (+, -, *, /) aritmetiksel operatrler olarak tanmlanr.int hesap; hesap=3*5;

Burada * operatrmz (ile) 3 ve 5 ise operand (ilenen) deerlerimizdir. Bir operatr bir deer zerinde kullanabilmek o deerin trne baldr. Aritmetik operatrlerin tmn char, int, long, float, double ve decimal trlerdeki deerlerde kullanabilirsiniz. Bir istisna durum hari string ve bool trndeki deerler iin bu operatrleri kullanamazsnz. RNEK: Konsol uygulamasnda aadaki kodlar yazarak programnz derleyiniz.Console.WriteLine(Ankara-Erzurum); // Derleme zaman hatas Not: operatr + yaparakda deneyin Console.WriteLine(22 + 3); Program alr ve 223 grntler

Grld gibi + operatrnn stringleri (dize ya da karakter katar) birletirmek iin kullanlmas bir istisnadr. nemli Not: String olarak tutulan deerleri aritmetik hesaplamalarda kullanmak isterseniz Int32.Parse yntemini kullanarak string trndeki deeri tamsayya evirebilirsiniz. Ayrca C# az kullanlan baka bir operatr daha destekler. Bu operatr, % semboln kullanan modls (kalan) operatrdr. Bir rnekle aklamak gerekirse x % y ileminin sonucu xin yye blmnden kalan deerdir. Uygulama: Aadaki program alma klasrnze indirip Mathoperators.sln dosyasna ift tklayarak anz. Program altrp aadaki uygulamalar yapnz ve sonular yorumlaynz.

Blm2/MathOperators klasrne indirme linki KOYUN Sol operand (ilenen) alanna 48 yazn. Sa operand alanna 14 yazn. Yapmak istediiniz ilemin yanndaki kutucuu iaretleyip sonular gzlemleyin. Toplama, karma ve arpma ilemleri sonucunda beklenen sonular grm olmanz gerekiyor. Peki ya blme ilemi? Evet sonu 3.4285 kmas gerekiyor ama sonu 3. Evet, buras gerek hayat deil. C# da bir tam sayy baka bir tamsayya bldnzde sonu tamsaydr. imdi kalan ilemi (moduls) yapn sonu 48in 14 e blmnden kalan 6 olmal.

Kodlar nceleyelim; Formunuz zerinde farenin sa tuuna tklayp View Codeu seerseniz kodlama ekran alacaktr. Kodumuzun st ksmlarnda bulunan;private System.Windows.Forms.TextBox lhsOperand; private System.Windows.Forms.TextBox rhsOperand;

eklindeki iki ifadeyi bulun. Bu ifadeler, lhsOperand ve rhsOperand adnda ve TextBox trnde iki deikeni bildirir. Her ikisi de girdiiniz deerleri Text zelliklerinden dolay string (dize) olarak tutar. Kod blmesinde multiplyValues yntemini bulun.private void multiplyValues() { int lhs = int.Parse(lhsOperand.Text); int rhs = int.Parse(rhsOperand.Text); int outcome; outcome = lhs * rhs; expression.Text = lhsOperand.Text + " * " + rhsOperand.Text; result.Text = outcome.ToString(); }

Bu yntemdeki ilk ifade, lhs (left hand side; sol operand) adnda bir int deikeni bildirir. Bu deikenin ierisine text zellii olan deer, parse edilerek inte dntrlr ve atlr. kinci satrda da benzer bir ilem gerekletirilir ve sa operand text kutusuna yazlan deer int olarak parse edilip rhs (right hand side) deikenine atanr. nc ifade outcome adnda bir deikeni bildirir. Drdnc ifade lhs deikeni ile rhs deikenini arplp sonucun outcome deikenine atld ifadedir. Beinci ifade Gsterim alannn kodlamasdr. Bu alann texti lhsnin text i ve rhsnin texti arasna * sembol konularak ekrana yazlmtr. Altnc ifade ise outcome deikenini string bir ifadeye dntrp result.Text (Sonu) alannda grntler.

Text zellii ve ToString Yntemi Form zerinde grntlenen metin alanlarnn ieriklerine ulaabilmenizi salayan zelliin ad Text zelliidir. rnein result.Text zellii form zerindeki Sonu alannn ieriini ifade eder. Metin alanlarnn, metin alannn form zerindeki yeri ve boyutu gibi birok zellii vardr. Her snfn bir ToString yntemi vardr. ToStringin amac, bir nesneyi string (dize) gsterimine dntrmektir. rneimizde outcome tamsay nesnesini, ToString yntemiyle string bir ifadeye dntrdk. Bu ilem, deerin Sonu alannda gsterilmesi iin zorunluydu. nk Text alanlar sadece string ifadeler ierebilir.

lem ncelii: ncelik bir deyim iindeki operatrlerin gerekletirilme srasdr. Aadaki rnekte + ve * operatrlerini kullanan deyimi dnn. 4+2*5 Bu deyim, sonucu belirsiz olmaya aday bir deyimdir; Burada 2 solundaki 4 deerine + operatr ile mi yoksa sandaki 5 deerine * operatr ile mi baldr? lemlerin sras nemlidir; nk sonucu etkiler. + operatr * operatrnden ncelikli ise 2 + operatrne baldr ve toplama sonucu (4+2) * ileminin sol operand (ilenen) deikenini oluturur. Tm deyimin sonucu 6*5 =30 olur. * operatr + operatrnden ncelikli ise 2 * operatrne baldr ve arpmann sonucu (2*5) + ileminin sa operand deikenini oluturur. Tm deyimin sonucu da 4+10=14 olur.

Matematikten bildiimiz gibi *, /, % gibi operatrler +, - gibi operatrlere gre daha nceliklidir. C# iinde bu durum geerlidir. Yani sonu ikinci maddede verilen ekildedir. Ayralar kullanarak ilem nceliini istediiniz bir operatre verebilirsiniz rnein ifadenizi (4+2)*5 eklinde oluturursanz ilem ncelii + operatrnde olacaktr. Ayn ncelikli Operatrler in Birleim zellii: Birleim, bir deyimin operatrlerinin balanacaklar yndr (sol ya da sa). Aadaki rnei inceleyelim: 3 / 2 * 5 bu deyimde sonuc belirsiz eklinde tanmlanabilir. Burada 2, solundaki / operatrne mi yoksa sandaki * operatrne mi baldr? Her iki operatrn de ilem ncelii ayn olmasna ramen burada ilem hangi srayla yaplacaktr? 2, / operatrne balysa blme ileminin sonucu (3/2) * operatrnn sol operand deeri olur. Bu durumda deyimin sonucu 15/2 olur.

2, * operatrne balysa arpma ileminin sonucu (2*5) / operatrnn sa operand olur ve deyimin sonucu 3/10 olur.

Anlalyor ki ayn ncelie sahip operatrlerin nasl ele alnacana karar vermek iin baka tanmlar yapmak zorundayz. Bu tanmn ad da Birleim zelliidir. * ve / operatrlerinin her ikisi de operandlarn soldan saa ileneceini gsteren sola birleim zellii tar. Buna gre ileme, deyimin solundan balamamz gerekiyor rneimize bakarsak nce 3/2 sonucu elde edilecek ve bu sonu 5 ile arplacaktr ve sonu, 15/2 olacaktr. lerleyen blmlerde karlaacamz operatrler iin de birleim zellikleri detayl bir ekilde verilecektir.

ZET Programlama dillerinin temel zellikleri olan keywords, deiken ve deyim kavramlarndan bahsedilmitir. C ve C++ da karmza kan baz zorluklarn C# ile nasl giderildii anlatlmtr. Veri trleri ve aritmetik operatrlerden bahsedilmitir. DEERLENDRME SORULARI S.1. zel anlam olan tanmlayclar olarak adlandrlrlar. a. Keywords b. Deiken c. Operatr d. Operand e. fade

S.2. C# da 4*2+3*5 deyiminin sonucu nedir? a. 55 b. 23 c. 100 d.50 e. 32

S.3. 2 / 3 * 4 deyiminin sonucu nedir? a. 2/12 b. 6 c. 8/3 d. 8 e. 3

1 2

Grsel Programlama Dilinin Kurulumu ve alma Ortam Deikenler (Variables), leler (Operators) ve Deyimler (Statements)

PROGRAMLAMA

34 5 6 7 8 9 10 11 12 13

Yntemler Yazmak ve Kapsam BelirlemekKarar fadeleri Yineleme (Iteration) fadeleri ve Dngler Hatalar ve zel Durumlar Ynetmek Snflar (Class) ve Nesneler (Object) Oluturup Ynetmek Deerleri ve Bavurular Anlamak Numaralandrma ve Yaplarla Deer Trleri Oluturmak Diziler (Arrays) Parametre Dizileri Kaltm (Inheritance) p Toplaycs (Garbage Collector) ve Bellek Ynetimi

NTE 3. Yntemler Yazmak ve Kapsam Belirlemek nitede Ele Alnan Konular 1. 2. 3. 4. Yntem Oluturmak ve armak Yntemlere Bilgi Aktarmak Bir yntemden Bilgi Almak Yntemlerle alrken lerine Girmek ya da kmak in Visual Studio.NET Tmleik Hata Ayklama Aracn Kullanmak

nite Hakknda Bir nceki blmde deikenleri bildirmeyi, operatrler kullanarak deyimler yaratmay ve ilem nceliinin birden ok operatr ieren deyimleri nasl etkilediini grdk. Bu blmde yntemler hakknda birok eyi greneceksiniz. renme Hedefleri Bu nite tamamlandnda; Bir ynteme bilgi aktarmak iin bamsz deikenlerin ve parametrelerin kullanmn ve dn ifadeleriyle yntemlerden bilgi almay reneceksiniz. Visual Studio.NETin tmleik hata ayklama aracn kullanarak yntemlerin iine girmeyi ya da kmay reneceksiniz.

niteyi alrken Konuyu tekrar ederek ve farkl uygulamalar gelitirerek alnz.

Yntemleri (Methods) Bildirmek Yntem, adlandrlm ifadeler gurubudur. Her yntemin bir ad ve bir gvdesi vardr. Yntem gvdesi, yntem arldnda gerekletirilecek ifadeleri ierir. Yntemin ad, yntemin genel amacn belirten anlaml bir tanmlayc olmaldr (rnein: SnfOrtalamas). Birok yntem, ilemek zere veri alr ve ilemin sonucu olan verileri dndrr. Yntemler ok temel ve gl yaplardr. Yntem Bildirme Syntax (Szdizimi) Yaps Visual C# iin yntemlerin syntax yaps aadaki gibidir: dnTr { // yntem ifadeleri } dnTr: Bir tr addr ve yntemin hangi trden bilgi dndreceini belirtir. Bu int ya da string gibi herhangi bir tr ad olabilir. Bir deer dndrmeyen yntem yazlyorsa, dn tr yerine void yazlr. yntemAd: Yntemi armak iin kullanlacak addr. Yntem adlar da deiken adlarnn uymas gereken tanmlayc kurallarna uymaldr. rnein addValues geerli, add$Values geersiz birer yntem addr. Yani camelCase yntem adlarn kullann; yntem adlarn aklayc olarak verin ve mmknse bu yapya uymak iin bir yklem ile balayn; rnein, displayCustomer. parametreListesi: Yntemin kabul edecei ve seime bal bilgilerin trn ve adn tanmlar. Parametreleri parantez iinde deiken tanmlamas yapar gibi nce tr ad sonra da parametre ad olacak biimde bildirebilirsiniz. Yazlan yntemin iki ya da daha fazla parametresi var ise bunlar virglle ayrmalsnz. Yntem gvdesi: Yntem arldnda altrlacak satrlardr. Blok (kme) parantezleri arasna yazlr. yntemAd (parametreListesi )

nemli Not: C, C++ ve Visual Basic ile program gelitirenler, C#n genel yntemleri desteklemediine dikkat etmelidir. Derlenebilmeleri iin btn yntemlerinizi bir class iinde yazmalsnz. Aada, lhs ve rhs (left-hand side ve right-hand side) adl iki parametre alan ve bir int deer dndren addValues adl bir yntemin tanm gsterilmektedir.int addValues(int lhs, int rhs) { ... // Yntem ifadeleri }

Sadece answer adnda bir int parametre alan ve bir deer dndrmeyen showResult ynteminin tanm ise aadaki ekilde yaplabilir. Bu yntemi sadece sonular gstermek iin kullanabilirsiniz geriye herhangi bir deer dndrmemektedir.void showResult(int answer) { ... // Yntem ifadeleri ... }

nemli Not: Visual Basic ile program gelitirenler C#n deer (function) dndren ve dndrmeyen yntemler (procedure ya da subroutine) iin farkl keywords (anahtar szck) kullanmadna dikkat etmelidirler. Burada ya bir dn deeri belirtilmeli ya da void keywordn kullanmalsnz. Return fadeleri Yazmak Ynteminizin bir bilgi dndrmesini istiyorsanz, yntemin ierisine bir dn ifadesi yazmak zorundasnz. Burada dikkat edilmesi gereken nokta bir ilev (function) ya da yntem int deer dndryorsa return ifadesi de int deer dndrmelidir. Aksi takdirde program derlenmez.int addValues(int lhs, int rhs) { ... // Yntem ifadeleri return lhs + rhs; }

return ifadesi yntemimizin sonunda olmaldr; nk yntemin sonlanmasna neden olur. Yani bu ifadeden sonraki hibir ifade altrlmaz.Bu ekilde bir tanmlama yapm olsanz bile derleyici, sizleri uyaracaktr. Ynteminizin bir deer dndrmesini istemiyorsanz yntemden kmak iin return ifadesinin sonuna sadece ; noktal virgl koyabilirsiniz.void showResult(int answer) { .... if (....) return; ....

}

Farkl bir ekilde ise return ifadesini kullanmayabilirsiniz. nk yntem sondaki kme parantezine ulald anda sonlanacaktr. Bu sklkla kullanlan bir yol olmasna karn doru bir kullanm ekli deildir.

Uygulama: Aadaki program bilgisayarnza indirin ve burada tanmlanm yntemleri (Methods) inceleyin. Bu program, bir nceki blmde oluturulmu uygulamann yntemler ile yeniden ele alnm halidir. Yntemler Kodlamann yntemlere ait blm aada verilmitir.private int addValues(int lhs, int rhs) { expression.Text = lhs.ToString() + " + " + rhs.ToString(); return lhs + rhs; } private int subtractValues(int lhs, int rhs) { expression.Text = lhs.ToString() + " - " + rhs.ToString(); return lhs - rhs; } private int multiplyValues(int lhs, int rhs) { expression.Text = lhs.ToString() + " * " + rhs.ToString(); return lhs * rhs; } private int divideValues(int lhs, int rhs) { expression.Text = lhs.ToString() + " / " + rhs.ToString(); return lhs / rhs; } private int remainderValues(int lhs, int rhs) { expression.Text = lhs.ToString() + " % " + rhs.ToString(); return lhs % rhs; } private void showResult(int answer) { result.Text = answer.ToString(); } private void quit_Click(object sender, System.EventArgs e) { Application.Exit(); } }

Kod blmesinden addValues yntemini bulun;private int addValues(int lhs, int rhs) { expression.Text = lhs.ToString() + " + " + rhs.ToString(); (1.ifade) return lhs + rhs; (2. ifade) }

addValues yntemi iki ifade ierir. lk ifade, dizenin birletirilmesiyle oluan dizeyi expression.Text zelliine atar. kinci ifade sol operand (lhs) ve sa operand (rhs) deerlerini + operatrn kullanarak toplar ve bu toplam sonucunu dndrr (return). Burada lhs ve rhs iki int deerdir. Bu iki int deerin yeni bir int deer yarattna dikkat edin bu int deer oluturulan addValues yntemidir. imdi kod blmesinde showResult yntemini bulun;private void showResult(int answer) { result.Text = answer.ToString(); }

ncelikle void bir yntem olduunu gzlemleyin. Yani herhangi bir deer dndrmemektedir. Bu yntem, answer parametresini string (dize)e dntrr ve dntrlm bu deeri result.Text zelliine atar. Yntemleri armak Bir yntemi grevini gerekletirmesi iin adn kullanarak arabilirsiniz; yani altrlmasn salayabilirsiniz. Yntem bilgi gerektiriyorsa (parametreleriyle belirtildii gibi), verileri istendii biimde sunmalsnz. Yntem bir bilgi dndryorsa, bu bilgiyi bir biimde yakalamalsnz. Bir Yntemin arl Syntax Yapsn Belirlemek C#da yntemlerin arl syntax yaps aadaki gibidir: yntemAd (bamszDeikenListesi) yntemAd: arlacak yntemin ad olmaldr. Bu noktada C#n byk kk harf duyarl bir programlama dili olduunu gz ard etmeyiniz. bamszDeikenListesi: Yntemin alaca bilgiyi saklar. Bu blm istee baldr. Her parametre iin bamsz bir deiken vermeniz gerekir ve her bamsz deikenin deeri kendine karlk gelen parametrenin trne uygun olmaldr.

nemli Not: Yntemleri bamsz deikenleri kullanmadan armanz gerekirse bile parantez kullanmanz gerekir. rnein; yntemAd ( ) eklinde. Yeniden rneimize dnelim;int addValues(int lhs, int rhs) { //... }

addValues ynteminin iki tane int parametresi vardr ve onu arrken virglle ayrlm iki bamsz deikenle armanz gerekir. addValues(39, 3) eklinde yntemi arabiliriz. Bu ilgili yntem iin doru bir arma eklidir. Bu yntemi baka ekillerde arrsanz baarl olamazsnz. Aada bununla ilgili birka tane rnek verilmitir. addValues addValues ( ) addValues( 39) addValues (39, 3) //derleme zaman hatas, parantezler (ayralar) yok //derleme zaman hatas, yetersiz bamsz deiken // derleme zaman hatas, yetersiz bamsz deiken //derleme zaman hatas, yanl trler

addValues yntemi, int trnde bir deer dndrr. Bu int deer, int deerlerin kullanabilecei her yerde kullanlabilir. rnein; result = addvalues(39, 3); showResult(addValues(39, 3)); olarak. // Bir atamann sa tarafnda // baka bir yntemin arlmasnda bamsz deiken

Kodu incelerken toString ynteminin bamsz deikeni olmad halde toString ( ) eklinde parantezler kullanldna dikkat edin. rnein showResult ynteminde answer.ToString( ) ifadesi ile answer nesnesine ait ToString yntemi arlyor. Scope (Kapsam) Kavram Bir yntem iinde bir deikenin oluturulabileceini grdk. Deiken kendini tanmlayan ifadede oluturulur ve yntem iinde daha sonra gelen ifadeler bunu kullanabilir. Yntem sona erdiinde ise deiken yok edilir. Baka bir ekilde ifade edecek olursak deiken grlr biimde olduu srece belirli yerlerde kullanlabilir. Bir deikenin ne zaman grlr biimde olduunu ve kullanlabileceini belirleyen bir takm kurallar vardr ve bunlara scope (kapsam) ad verilir. Herhangi bir identifier (tanmlayc), program iinde belirli bir yerde kullanlabiliyorsa identifier orada scope iindedir. Bu scope alan identifierin program iinde kullanlabilir olduu yerdir. Scope kavram sadece deikenler iin deil ayn zamanda yntemler iin de geerlidir. Bir Yntem ile Yerel Kapsam Oluturmak Yntem blounu oluturan sa ve sol { } kme parantezleri bir kapsama (scope) alann belirler. Bir yntem blou ierisinde bildirilen btn deikenler o yntemin kapsamna eklenir. Bu ekilde oluturulan deikenlere yerel deikenler ad verilir. Yani bu yntem blou ierisinde yereldirler ve baka bir yntemin kapsamnda deildirler. Baka bir ifaddeyle bu ekilde oluturulan deikenler, yntemler arasnda kullanlamaz ve bu deikenler sadece oluturulduu yntem blouna aittir. rnein;

class Ornek { void Yontem() { int degisken; ... } void baskaYontem() { degisken = 42; //Derleme zaman hatas } }

Bir Snf (Class) ile Snf Kapsam Oluturmak Snf blounu oluturan sa ve sol { } kme parantezleri de bir kapsam (scope) alan olutururlar. Bir snf blou ierisinde (yntem ierisinde deil) bildirilen btn deikenler o snf kapsamna eklenirler. Bu ekilde tanmlanan deikenler o snf ierisinde tanml tm yntemler tarafndan kullanlabilirler. rnein;class Ornek { int degisken; void Yontem() { degisken=42; } void baskaYontem() { } } degisken = 42; //Derleme zaman hatas

Tanmlayclar (Identifiers) Ar Yklemek (Overloaded) ki tanmlayc ayn ada sahipse ve ayn scope alan iinde bildirilmi ise bu tip tanmlayclar iin ar ykl (overloaded) olduklar sylenebilir. Genellikle ar ykl bir tanmlayc, derleme zaman hatas olarak karmza kar. rnek olarak; ayn yntem blou ierisinde ayn isimde iki yerel deiken bildirilirse derleme zaman hatas oluur. Benzer ekilde ayn snf iinde ayn isimde iki alan ya da ayn snf iinde tmyle ayn iki yntem tanmlanrsa yine derleme zaman hatas ile karlalr. Peki, neden bu kadar uzun bahsedildi bu konudan? Bir tanmlaycy ar yklemenin hem faydal hem de nemli bir yntemi vardr. Bir yntemi; ancak iki yntem farkl parametrelere sahipse farkl sayda parametreleri varsa ya da parametre trleri farklysa ar ykleyebilirsiniz. Bir yntemi ardnzda, virglle ayrlm bamsz deikenleri ve bamsz deikenlerin saysn ve trlerini vererek hangi yntemi seecei belirtilebilir. Buna en gzel rnek Console snfnn WriteLine yntemidir. WriteLine yntemi ar ykldr. Konsola bir string (dize) deer yazlmak istenirse, string bamsz deikeni WriteLine yntemine gnderilir ve WriteLine(string s) otomatik olarak arlr. Konsola bir

integer deer yazlmak istenirse WriteLine yntemine int bamsz deikeni gnderilir ve WriteLine(int i) otomatik olarak arlr. Burada derleyici her eyi dzenler. Derleme zamannda; derleyici, gnderilen bamsz deikenlere bakar ve parametreleri uyan yntemi arr. rnein;static void Main() { Console.WriteLine("Cevap"); Console.WriteLine(42); }

Bir yntemin parametreleri ar yklenebilse de dn tr ar yklenemez. Dier bir deyile, yalnzca dn trleri farkl olan ayn ada sahip iki yntem bildirilemez. Yntemleri Yazmak ve armak imdi yapacanz rneklerde, sabit bir gnlk ile alan bir danmana alt gn saysna bal olarak ne kadar deme yaplacan hesaplayan baz yntemler yazacaksnz. Daha sonra bu yntemleri bir konsol uygulamasnda altracaksnz ve son olarak yntemler alrken ilerine girmek ve kmak iin Visual Studio. NET hata ayklaycsn kullanacaksnz. Aadaki link de verilen projeyi bilgisayarnza ykleyin ve an. Yntem Oluturma

Yukardaki kodlamay greceksiniz. imdi adm adm kendi yntemlerimizi oluturalm.

void run ( ) yntem bloundan sonra aadaki readDouble (doubleOku) yntemini oluturalm.public double readDouble(string vade) { Console.Write(vade); string line = Console.ReadLine(); return double.Parse(line); }

Bu yntem, parametre olarak vade adnda string trnde bir deer alyor. Bu kodu yazdktan sonra Build mensnden Build Solution tklayn ve oluturulan yntemin hatasz bir ekilde derlendiinden emin olun. readInt (intOku) adnda bir yntem tanmlayalm.public int readInt(string vade) { Console.WriteLine(vade); string line=Console.ReadLine (); return int.Parse(line); }

Burada line adnda string bir deiken oluturuldu ve bu deikene konsoldan okunan deer atld. Sonrasnda bu deer int deere dntrld (Integer olarak Parse edildi.). Bu kodlamadan sonra yeniden Build Solution kullann ve derlemenin hatasz bir ekilde gerekletirildiinden emin olun. calculateFee (ucretHesapla) adnda bir yntem oluturalm.public double calculateFee(double dailyRate, int noOfDays) { return dailyRate * noOfDays; }

Oluturulan yntem bir double trnde birde int trnde iki parametre iermektedir. Burada danmann gnlk kazan oran ile gn says arplarak return deerimiz oluyor. Yeniden Build Solution tklayarak hatasz bir derleme ilemi gerekletiinden emin olun. writeFee (ucretYaz) adnda bir yntem oluturalm.public void writeFee(double fee) { Console.WriteLine("Danmann gnlk creti {0}", fee * 1.1); }

creti yazdrmak iin oluturulan bu yntem double bir parametre iermekte ve ekrana danmann cretini yazdrmaktadr. {0}ifadesinden daha sonra bahsedilecektir (video dersi izleyin) ama program tamamladktan sonra bu satr; eklinde deitirin ve sonucu gzlemleyin.Console.WriteLine("Danmann gnlk creti {0} {0}", fee * 1.1);

Code blmesinde run yntemine dnn ve bloklar arasna aadaki ifadeyi yazn.public void run() { double dailyRate=readDouble("Gnlk Oran Giriniz:"); int noOfDays=readInt ("Gn Saysn Giriniz:"); writeFee(calculateFee (dailyRate, noOfDays )); }

Burada dailyRate adnda double bir deiken ve noOfDays adnda int bir deiken tanmland. Gnlk oran double bir deer, gn says ise int deer olarak okunup ilgili deikenlere atand. Bu aama tamamlanncance Build Solution kullanarak hata olmadndan emin olun sonrasnda Debug mensnden Start Without Debugging ile programnz altrn. Gnlk Oran Giriniz ksmna 418 yazn ve Enter tuuna basn. Gn Saysn Giriniz ksmna 21 deerini yazn ve Enter tuuna basn program komut penceresinde aadaki deerleri yazm olmal.

Visual Studio.NET Hata Ayklaycsn Kullanmak Bu blmde son olarak program yava bir biimde altrmak iin Visual Studio.NET Hata Ayklaycsn kullanalm. Burada yukardaki rneimiz iin yntemlerin ne zaman arldn ve her return ifadesinin aran ifadeye denetimi nasl aktardn izleyeceksiniz. Yntemlerin iine girerken ve karken Debug ara ubuundaki aralar kullanacaksnz. Bu ara ubuu programda bir hata ayklamaya baladnz anda belirir. Bu ilemi manuel olarak View mensnden Toolbars oradan da Debug tklayarak gerekletirebilirsiniz. imdi aadaki admlar srasyla programnz zerinde uygulaynz. Code blmnden run yntemini bulun. Fare iaretisini bu yntem iindeki ilk ifadeye gtrn ve bu satrda herhangi bir yerde farenizin sa tuuna tklayp alan menden Run To Cursor seeneini tklayn. Program, imlecin olduu satra kadar alr ve code blmesinin sol tarafnda hangi

ifadenin etkin olduunu belirten sar bir ok grnr ve ayn zamanda bu satrda sar bir zemin rengi ile kaplanr.double dailyRate=readDouble("Gnlk Oran Giriniz:");

Debug ara ubuunu kendi penceresinde grntlemek iin sol kenarndan tutup code blmesinin zerine doru srkleyin. Ekrannzda Debug ara ubuunu ayrt edemiyorsanz nce View mensnden Toolbarsn iinden gizleyin ve sonra yeniden grnmesini salayarak hangisi olduunu bulun.

Debug ara ubuundan Step Into (F11 ksayolu) dmesine tklayn ( Btn bu ilemleri Debug mens altndan da gerekletirebilirsiniz.). Sar imle readDouble yntem blounun ilk satrna gider. Debug ara ubuunda Step Out (Shift+F11) dmesine tklayn. Program konsol penceresinde Gnlk Oran Giriniz satr grntlenir. Konsol penceresinde 418 yazp Enter tuuna basn. Denetim yeniden Visual Studio.NET programlama ortamna dner. Sar imle, readDouble ynteminin dna kp run ynteminin ilk ifadesine gider. Debug ara ubuunda yeniden Step Into dmesini tklayn. Sar imle, run ynteminin ikinci ifadesine atlar:int noOfDays=readInt ("Gn Saysn Giriniz:");

Debug ara ubuundan Step Into dmesine tklayn. Sar imle, readInt ynteminin ilk ifadesine atlar. Debug ara ubuunda Step Out dmesine tklayn. Program konsol penceresinde Gn Saysn Giriniz satrn grntler; 18 yazp Enter tuuna basnz. Denetim yeniden programlama ortamna geer. Sar imle, readInt ynteminin dna kp run ynteminin ikinci ifadesine dnmtr. Debug ara ubuundan Step Into dmesine tklayn. Sar imle, run ynteminin nc satrna atlar.writeFee(calculateFee (dailyRate, noOfDays ));

Debug ara ubuundan Step Into dmesine tklayn. Sar imle, calculateFee ynteminin ilk ifadesine atlar. Debug ara ubuundan Step Out dmesine tklayn. Sar imle, run ynteminin nc ifadesine atlar.

Debug ara ubuundan Step Into dmesine tklayn. Sar imle, writeFee ynteminin ilk ifadesine atlar. Debug ara ubuundan Step Out dmesini tklayn. Sar imle, run ynteminin son ifadesine atlar.

Konsol penceresinde programn hesaplad sonucu grrsnz. Son olarak Debug ara ubuunda Stop Debugging i tklayarak hata ayklama (debug) ilemini sona erdirin.

ZET Yntemler C#da olduka nemli bir yer tutmaktadr. Yntemleri olutururken bir snf ierisinde tanmlayn. Bir yntemin deer dndrmesi isteniyorsa mutlaka return ifadesine sahip olmaldr. Yntemleri armak da belirli kurallar erevesinde olmaldr. Bir yntemi armak iin yntemin adn ve daha sonra da yntemin istedii bamsz deikenleri tanmlamak zorundasnz. Debug ilemi, yazm olduunuz yntemlerin iine girmek hatalar varsa tespit etmek iin olduka kullanl bir zelliktir. DEERLENDRME SORULARI S.1. Bir yntemin iinden deer dndrmek iinreturn. anahtar szc kullanlr. S.2. Deer dndrmeyen bir yntem yazarken dn tr yerine void. yazlr. S.3. Yazlan yntemin iki ya da daha ok parametresi varsa bu parametreler aadakilerden hangisi kullanlarak ayrlr? a. , b. : c. ; d. . e. Hibiri S.4. Yntem bir deer dndrmeyecekse return ifadesi kullanlmayabilir. Doru/Yanl S.5. Console.WriteLine ar ykl bir yntemdir. Doru/Yanl

1 2 3

Grsel Programlama Dilinin Kurulumu ve alma Ortam Deikenler (Variables), leler (Operators) ve Deyimler (Statements) Yntemler Yazmak ve Kapsam Belirlemek

PROGRAMLAMA

45 6 7 8 9 10 11 12 13

Karar fadeleriYineleme (Iteration) fadeleri ve Dngler Hatalar ve zel Durumlar Ynetmek Snflar (Class) ve Nesneler (Object) Oluturup Ynetmek Deerleri ve Bavurular Anlamak Numaralandrma ve Yaplarla Deer Trleri Oluturmak Diziler (Arrays) Parametre Dizileri Kaltm (Inheritance) p Toplaycs (Garbage Collector) ve Bellek Ynetimi

NTE 4. Karar fadeleri nitede Ele Alnan Konular 1. Boolean Operatrleri 2. Karara fadeleri ve If ifadeleri 3. Karmak Karar fadeleri in Switch fadeleri nite Hakknda Bir nceki blmde yntemlerden bilgi alabilmek iin return ifadelerinin kullanmn rendiniz. Bu yntemler ne kadar yararl olsalar da bir eksiklikleri vardr. Hep ayn eyi yaparlar. Programlarn karmak ve uzun problemleri zmesi gerekebilir. Bu karmakl dzenleyebilmek iin koullara bal olarak farkl zamanlarda farkl eylemler gerekletiren seici yntemler yazabilmelisiniz. Bu blmde bu ilemin nasl yaplacan greceksiniz. renme Hedefleri Bu nite tamamlandnda; Boolean deikenlerini tanmlamay reneceksiniz. Boolean deyimlerinin sonularna gre karar verme ilemleri iin if ifadeleri yazmay greceksiniz. Daha karmak karar verme ifadeleri iin switch ifadelerini reneceksiniz. niteyi alrken Daha nceki bilgileriniz ile burada rendiklerinizi karlatrn. Farkllklar olup olmadna karar verin.

Bool Deikenlerini Bildirmek Programlamada bir ey ya dorudur ya da yanltr. Bunu herhangi bir sorunun cevab ya evet ya da hayrdr eklinde de yorumlayabilirsiniz. Gerek dnyann aksine burada baka bir olaslk yoktur. rnein x deikenine 20 deeri atayp daha sonra x, 10dan kk m diye sorarsanz yant kesinlikle hayr olacaktr. Bir Boolean deyiminin sonucu her zaman doru ya da yanltr. Bu durumdan yola karak C#n, deerleri doru ya da yanl olan deikenleri bildirmek iin kulland ve bool olarak adlandrlan temel veri trn ele alalm. Bir bool deikenine deer atamak iin true ya da false anahtar szcklerini kullanabilirsiniz. Aadaki rnei inceleyelim;bool havaYagmurlu; havaYagmurlu = true; Console.WriteLine(havaYagmurlu); // True yazar

Bu rnekte havaYagmurlu adnda bir deiken tanmladk. Bu deikene true deerini atadk ve son olarak bu deikenin deerini konsola yazdrdk. Boolean Operatrlerini Kullanmak Boolean operatrnn sonucu her zaman doru (true) ya da yanl (false)tr. C# da birok Boolean operatr vardr. En basit Boolean operatr, ! semboln kullanan NOT (DEL) operatrdr. NOT (!) operatr bir Boolean deere uygulanrsa sonu o deerin tersi olur. Baka bir ekilde ifade edilecek olursa yanl olan sonu doru; doru olan sonu ise yanl olarak elde edilir. nemli Not: Tek bir operand (ilenen) zerinde ilem gerekletiren operatrlere tekli (unary) operatrler, iki operand zerinde ilem gerekletiren operatrlere ise ikili (binary) operatrler ad verilir. Eitlik ve likisel Operatrleri Anlamak Boolean operatrlerinin uygulamada ok kullanlan bir baka iki rnei ise eitlik ve eitsizlik operatrleridir. Bu operatrler ayn trden iki deerin birbirine eit mi yoksa farkl m olduunu bulmak iin kullanlr. Bu operatrler ile yakndan ilgili dier operatrlere ise ilikisel (relational) operatrler ad verilir. Bu operatrler ayn trden iki deikeni karlatrr ve bunlarnn birinin dierinden byk, kk, kkeit, ya da bykeit gibi ilikilerini gstermek iin kullanlr. Bu operatrlerin C# daki kullanm aadaki tabloda verilmitir.

le == != < >= Eittir.

Anlam

rnek not==80 not!= 60 not=30

not 70 ise sonu false true true false false true

Eit deil. Kktr. Kk ya da eittir. Byktr. Byk ya da eittir.

nemli Not: Eitlik operatrn (= =), atama operatr (=) ile kartrmayn. Eitlik operatr bir deerin baka bir deere eit olup olmadnn denetimini yapar; eer sonu doru ise true yanl ise false deeri dndrr. Atama operatr ise bir deikene x=y ya da x=70 gibi deerleri atamak iin kullanlr. Mantksal Operatrler Boolean operatrlerine rnek olarak verebileceimiz iki farkl operatr ise && semboln kullanan mantksal AND (VE) operatr ve || semboln kullanan mantksal OR (VEYA) operatrdr. Bu operatrler, Boolean operatrlerini birletirerek daha byk deyimler oluturmak iin kullanlrlar. Bu operatrler sonularn true ya da false olmas ynyle ilikisel operatrlere benzeseler de bu operatrlerin gerekletirecei ilem deerlerinin kendileri true ya da false olmak zorundadr. Aadaki rnek bir rencinin bir dersteki ortalamasnn 70 ile 74 arasnda olmas durumunda CC deikenine true deerini atar.bool CC; CC=(ortalama >=70) && (ortalama= Byk ya da eittir Eitlik = = Eittir != Eit Deil && Mantksal AND Boolean Atama || Mantksal OR = Sol Sa Sol Sol

if fadelerini Kullanmak (if Statement) if (eer) ifadesi, bir Boolean deyiminin sonucu true olduunda bir ya da daha ok ifadeyi oluturmak iin kullanlr. Burada Boolean deyiminin sonucu false olduunda else anahtar szc ile balayan blmde oluturulan ifadeler ele alnr. if ifadesinin genel kullanm formu aada gsterildii gibidir;if (booleanDeyimi) lk ifade // boolenDeyimi sonucu true (Doru) ise altrlacak blm else kinci ifade //boolenDeyimi sonucu false (Yanl) ise altrlacak blm

Eer else kullanlmaz ve booleanDeyiminin sonucu yanl olursa program, hibir ilem gerekletirmez. Aadaki rnei inceleyelim. Bu rnekte bir saatin saniyelerini artran bir if ifadesi gsteriliyor. imdilik dakikalar ele alnmad.

int saniye; ... if (saniye==59) saniye=0; else saniye=saniye+1;

Bir if ifadesindeki deyimler mutlaka parantez iinde yazlmaldr ve deyim mutlaka Boolean bir deyim olmaldr. C ve C++ if ifadelerinin iine tamsay deyim yazmanza izin verir ve tamsay deeri derleme esnasnda true (sfrdan farkl) ya da false (sfr) olarak deitirir. C# da bu ekilde bir tanmlama yaparsanz program kesinlikle derlenmeyecek ve bir derleme zaman hatas oluturacaktr. Ayrca bir if ifadesinin iinde eitlik snamas yerine atama ilemi yapmaya kalkarsanz C# derleyicisi, hatanz mutlaka yakalar.int saniye; ... if (saniye==59) // Doru Kullanm ... if (saniye=59) // derleme zama hatas

fadeleri Gruplamak in Bloklar Kullanmak Baz durumlarda Boolean deyimi doru olduunda birden ok ifade altrmak istersiniz. Bu ifadeleri bir yntem iinde gruplayabileceiniz gibi bir blok iinde de gruplayabilirsiniz. Aadaki rnek bu ekilde kullanm gsterir burada saniye deeri 59a eit olduunda bu blok alr ve blok ierisindeki iki atama ilemi gerekletirilir.int saniye; int dakika; ... if (saniye==59) { saniye=0; dakika=dakika+1; } else saniye=saniye+1;

nemli Not: Yukardaki if ifadesi kme parantezleri kullanlmadan yazlrsa C# derleyicisi yalnzca saniye=0 ifadesini if deyimi ile ilikilendirir. Sonraki ifade bamsz olarak ele alnr ve her zaman alr. Kimi zaman derleyici else anahtar szcn yakalayp herhangi bir ilemde yapamayabilir ve bu durumda da bir szdizimi hatasyla karlarsnz. if fadelerini Basamaklamak if ifadeleri baka if ifadeleri ile i ie kullanlabilir. Bu ilem yaplarak Boolean deyimleri true sonucunu verene kadar art arda farkl karlatrmalar yaplabilir. Aadaki rnekte hafta gnlerinin ad ile ilgili bir program vardr.

if (gun==0) gunAdi="Pazar"; else if (gun==1) gunAdi="Pazartesi"; else if (gun==2) gunAdi="Sal"; else if (gun==3) gunAdi="aramba"; else if (gun==4) gunAdi="Perembe"; else if (gun==5) gunAdi="Cuma"; else if (gun==6) gunAdi="Cumartesi"; else gunAdi="Bilinmiyor";

Bu rnekte eer gun deeri sfr ise ilk snama true deerini verir ve gunAdi deikenine Pazar deeri atanr. gunn deeri sfr deilse snama baarsz olur ve denetim, ikinci if ifadesini altrp gun deerinin 1e eit olup olmadna bakar. kinci if ifadesine sadece birinci snama false olduunda baklr. lem, bu ekilde sonuna kadar devam eder. rnek: Aadaki link de verilen program bilgisayarnza indiriniz. Bu rnekte, basamakl if ifadelerini kullanan iki tarihi birbiriyle karlatran bir uygulama yaplacaktr. Seim rnei Program bilgisayarnza ykledikten sonra Farm1.cs yi an. Sonra Debug mensnden Start Without Debugging komutunu tklayn (Ctrl+F5). Oluturulan form zerinde birinci tarih ve ikinci tarih adl iki adet DateTimePicker denetimi vardr. Her ikisi de bugnn tarihini gsterir. Karlatr dmesini tklayn. Programnz aadaki ekilde grntlenmelidir.

Sonular inceleyecek olursak bu karlatrma ilemi sonucunda sadece kktr, byktr ve bykeit operatrleri doru sonucu vermi gibi grnmektedir. Aslnda ilk seenein yani Birinci Tarih = = kinci Tarih seeneinin Boolean deyimi true olmaldr. Programdan kn Visual Studio.NET ortamna dnn ve form zerinde farenin sa tuuna tklayp View Code seeneini kullanarak kodlama ekranna gein. Code blmesinde aadaki yntemi bulunuz.private int dateCompare(DateTime lhs, DateTime rhs) { // TO DO return 42; }

Bu yntemi, tarihleri doru karlatracak ekilde uygulamamz gerekiyor. DateTimePicker tarihle ilgili yl, ay ve gn bilgilerini tutmaktadr. Karlatrma ilemi yaparken her bir deeri ayr ayr karlatrmamz gerekiyor. ncelikle aadaki yntemi inceleyin;if lhs < rhs, sfrdan kk bir tamsay dndrr. if lhs==rhs, sfr dndrr if lhs>rhs, sfrdan byk bir tamsay dndrr

Bu bilgilerden sonra dateCompare yntemini aadaki ekilde kodlayn.int sonuc; if (lhs.Year < rhs.Year) sonuc = -1; else if (lhs.Year > rhs.Year) sonuc = +1; else if (lhs.Month < rhs.Month) sonuc = -1; else if (lhs.Month > rhs.Month) sonuc = +1; else if (lhs.Day < rhs.Day) sonuc = -1; else if (lhs.Day > rhs.Day) sonuc = +1; else sonuc = 0; return sonuc;

Program ilk olarak yl bilgisine bakacak Birinci Tarih yl kinci Tarih ylndan kk ise sonu -1 deeri alacak byk ise +1 deeri alacak eer kk ya da byk deilse ay bilgisini sonra da gn bilgisini kontrol edecek. Bunlarn hibiri birbirinden farkl deilse yani yl, ay ve gn bilgileri ayn ise program sonu deikenine 0 deerini alacak ve bunu return edecektir. Program yeniden altrp karlatr butonuna tkladnzda aadaki ekran grmelisiniz.

Programmz doru alyor gzkyor. Farkl tarih bilgileri girerek programnz yeniden altrn ve sonularn doru olup olmadn gzlemleyin. switch fadeleri Basamaklanm bir if ifadesi yazldnda kimi zaman tm if ifadelerinin benzer grndn fark edersiniz; hepside benzer deyimleri karlatrrlar. Tek farklar, her if ifadesinin ayn deyimin sonucunu farkl bir deerle karlatryor olmasdr. rnein;if (gun==0) gunAdi="Pazar"; else if (gun==1) gunAdi="Pazartesi"; else if (gun==2) gunAdi="Sal"; else if (gun==3) ... else gunAdi="Bilinmiyor";

Bu gibi durumlarda programn daha etkin ve kolay okunur biime dntrlmesi iin switch ifadeleri kullanlabilir. Switch ifadelerinin genel kullanm aadaki gibidir.switch (denetimDeyimi) { case sabitDeyim: ifadeler break; case sabitDeyim: ifadeler break; case sabitDeyim:

ifadeler break; ... default ifadeler break; }

Yukardaki rnek gsterimde switch, case, default ve break anahtar szcklerdir. Buradaki gsterimde denetimDeyimi bir kez deerlendirilir ve sabitDeyimin deeri denetimDeyiminin deerine eit olan casein altndaki ifadeler break ifadesine kadar altrlr. Sonra switch ifadesi sonlanr ve program switch ifadesinin bitiini gsteren son kme parantezinden sonra almaya devam eder. Hibir sabitDeyimin deeri, denetimDeyiminin deerine eit deilse seime bal olarak default deerinin altndaki ifadeler altrlr. default deyimi programda kullanlmak zorunda deildir. Hibir deyimin deeri hibir durumu karlamazsa ve programda default deyimi oluturulmamsa program hata vermez kme parantezinden sonraki blmden itibaren almaya devam eder. Daha nce if ifadesi ile oluturulan rneimizi switch ile yeniden ele alalm;switch (gun) { case 0: gunAdi="Pazar"; break; case 1: gunAdi="Pazartesi"; break; case 2: gunAdi="Sal"; break; ... default gunAdi="Bilinmiyor"; break; }

Switch fadesi Kurallar switch ifadeleri ok kullanl olmasna karn bir takm kurallara uygun oluturulmak zorundadr. Bu kurallar aada verilmitir: switch ifadelerini yalnzca temel veri trleriyle (int gibi) ve string ile kullanabilirsiniz. switchi dier veri trleriyle kullanmak isterseniz if ifadesini kullanmalsnz. Durum (case) etiketleri, 12 ya da 12 gibi sabit deyimler olmal. Durum etiketlerini altrma esnasnda hesaplamak isterseniz, if ifadesini kullanmalsnz. Durum etiketleriniz benzersiz deyimler olmaldr. Yani ayn deere sahip iki durum etiketi yaratamazsnz.

Ayn ifadeleri birden ok deer iin altrmak istiyorsanz durum etiketi syntax(szdizimi)n tekrarlamanz gerekir. Yani durum etiketi deerlerini gruplamann bir yolu yoktur. rnein:

switch (koz) { case Kalp: case Karo: // Hata renk="Krmz"; break; case Maca: case Sinek: // Hata renk = "Siyah"; break; }

Baarszlk yok. ( no fall-through) kuralnn anlam, bir switch ifadesinin anlamn deitirmeden blmlerini istediiniz gibi deitirebilirsiniz. break ifadesi switch ifadesinin her durumu iin (default dhil) kullanm zorunlu bir ifadedir. C ve C++da break ifadesini kullanmazsanz, program bir sonraki duruma geer ve o ifadeleri altrmaya devam eder. Gnmzde bilinen en byk ve en pahal bilgisayar hatasnn C programnda unutulan bir break ifadesi olduudur. C# da ise bu durum bir derleme zaman hatas olarak karmza gelir. Bu ilem iin default yerine baka yntemler kullanlabilir olsa da ok fazla nerilmez ve bu ierikte yer verilmeyecektir. rnek: Aadaki program bilgisayarnza indirin. Bu program bir dizenin karakterlerini okuyan ve her karakteri XML karln eleyen bir program olacaktr. rnein =70)&&(ortalama