Professional Documents
Culture Documents
Page 1 of 46
2 / 46
3 / 46
imdi de deikenler iin belirlenebilecek veri tipi eitlerini inceleyelim: .NET dnyasnda 5 ana tip olduundan bahsedilmiti. Bunlar tekrar saylacak olursa; Snf (class) Yap (struct) Numaralandrc (enumaration) Arayz (interface) Temsilci (delegate)
olduu grlr. Bir deiken tanmlarken belirtilmesi gereken veri tipi, bu 5 ana tipten birinde oluturulmu olur. Yanl anlalmasn; saylan bu 5 ana tipte deiken oluturulmaz; bu ana tiplerde oluturulan veri tipleri kullanlr. rnek vermek gerekirse C#da tam say olarak veri saklamak istendiinde veri tipi olarak, bir ok programlama dilinde var olan int kullanlabilir. int, .NET Frameworku tarafndan uygulama gelitiricilerin temel programlama grevlerinde kullanmalar iin nceden oluturulan bir veri tipidir. Bellekte kaplayaca alan bellidir: 4 byte (32 bit). zellii, tam say datalarn saklayabilmesi ve bunu yaklak olarak -2 milyar,+2 milyar aralndaki saylar iin yapabilmesidir. Ayrca int, bir yapdr (struct). int tipinde oluturulacak bir deikenin alabilecei minimum, maksimum deerleri ve daha sonra grlecek tip dnmlerde kullanlan yeleri intin bir struct olmasnn getirileridir. nceden tanml veri tiplerine bir baka rnek olarak metin tabanl ver ilerin saklanabilecei string verilebilir. stenilen uzunlukta karakterlerden oluan bu veri tipinin tayabilecei veri uzunluu snrszdr. (Ya da uygulama belleiyle snrldr) Btn dillerin alfabelerindeki karakterleri, rakamlar, matematiksel ilemlerde kullanlan simgeleri metin olarak karakter dizisi eklinde veri saklayabilen bu tipin bellekte ne kadar yer kaplayaca int veri tipi gibi nceden belli deildir; alma zamannda belli olur. String ile ilgili verilebilecek son bilgi de bir snf (class) olduudur. Yine birok programlama dilinde herhangi bir formda yer alan mantksal veri tipi C#da bool olarak yer almaktadr. Tayabilecei deerler iki tanedir: True ve False. Ondalkl saylar saklamak iin double veri tipi, tek bir karakter tutmak iin char veri tipi vardr. Bir de btn tiplerin babas saylabilecek object tipi vardr ki tayabilecei deerlerde snr yoktur; btn tip lerin tayabilecei deerleri zerinde tutabilir. rnein object tipinden oluturulmu bir deiken 5 (saysal tip), bilgisayar (string tip), s (char tipi), ahmet isminde Personel tipinde kullanc tanml vb. deiken deerleri tayabilir. Object tipini daha ok duyacanza emin olabilirsiniz.
4 / 46
Blm : Deiken Tanmlama ve Deikenlere Balang Deeri Verme Konu : Deiken Tanmlama
5 / 46
Deiken Tanmlama
Deiken tanmlamak iin takip edilmesi gereken szdiziminin; veriTipi degiskenAdi; olduunu grmtk. Bunu C# veri tipleriyle rneklemek gerekirse; int sayac; ya da string adres; Deiken tanmlamalar ile ilgili rnekleri test ederken Main() metodu ierisinde yazld varsaylr. Deiken tanmlamas bir satrda tek bir deiken iin yaplabilirken, ayn tip iin olmak kaydyla birden fazla deiken iin de yaplabilir. double basariOrani, katilimYuzdesi; C#da bir deiken tanmlandnda saklayaca veri iin veri tipinin boyutu kadar bellekte yer ayrlr (baz tiplerin bellekte ne kadar yer kaplayaca nceden belliyken int, bool gibi- baz tiplerin ki alma zamannda belli olur string gibi-) ve o bellek alanna daha sonra eriim iin bir isim verilir (deiken ad); ancak bu bellek alannn ii henz botur. Bu yzden; int sayac; Console.WriteLine("Sayacn u anki deeri : {0}",sayac); eklinde yazlacak bir kod derlenmeyecektir; nk henz o deiken iin balang deeri verilmemitir.
6 / 46
Blm : Deiken Tanmlama ve Deikenlere Balang Deeri Verme Konu : Deikenlere Balang Deeri Verme
7 / 46
Eer ayn satrda birden fazla deiken tanmlanp balang deerleri de verilmek istenirse aadaki yol takip edilmelidir: double basariOrani = 88.8, katilimYuzdesi = 52.4;
8 / 46
Blm : Deiken Kapsama Alan (Variable Scope) Konu : Deiken Kapsama Alan
9 / 46
10 / 46
Blm : Deiken Kapsama Alan (Variable Scope) Konu : Deikenlerin Tanmlandklar Blok erisinde Kullanlmas
11 / 46
... { int a = 5; } Console.WriteLine(a); ... //a deikeni bellekte yerini alr. // a deikeni, bellekten der. //Dizayn-zaman hatas !!!
Yukardaki kod blounda a deikeni tanmlanp balang deeri verili r ve blok sonuna kadar kullanlr. Tanmland blok sonunda ise bellekten otomatik olarak der; sonrasnda a deikeni kapsama alan dnda kald iin, kullanlmaya alldnda henz dizayn zamannda buna izin verilmez. Burada yalnz bana kullanlan blok, anlamsz gibi gzkse de aslnda lokal deikenlerin, iinde kullanlabilecei metot ya da daha sonra renilecek deyimler ve dier yeleri temsil etmektedir. ... { int b; b = 23; } { int b; b = 1; } ... //b adnda bir deiken bellee yeniden karlr. //b deikeni bellee kar.
Yukardaki kod blounda yaplanlar tamamen legaldir. Burada birbirinden bamsz iki tane blok yer almaktadr. lk blok ierisinde bellekte 4 bytelk bir yer ayrlr ve buraya 23 deeri atlarak blok ierisinde kullanlr. Blok sonuna gelinince bellekteki 4 bytelk alan tamamen silinir; dolaysyla hem bellek ierisinde saklanan deer hem de bellek alanna erimek iin verilen isim (deiken ad b) yok edilmi olur. Artk uygulamann ilerleyen satrlarnda yer alacak yeni bir kod blounda b deiken isminin kullanlmamas iin herhangi bir sebep yoktur.
12 / 46
... { int b; b = 23; { int b; //Derleme-zaman hatas. } } ... Bu blokta nce b isimli deiken bellekte yerini alr ve balang deeri verilir. Ardndan b deikeninin kapsama alannda bulunduu bloun ierisinde yeni bir blok alr ve burada bellee yeniden b adnda bir deiken karlmaya allr. Ancak bellek blgesinde ayn anda ayn isimli iki deikenin yer almasna izin verilmez; nk deiken deerlerine eriim, bellek blgelerine verilen deiken isimleri ile salanr ve eer ayn isimli birden fazla deikene izin verilseydi iler karrd. Dolaysyla yeni bir deiken ihtiyac varsa b deil de farkl isimde bir deiken adyla bu salanabilir: ... { int b; b = 23; { int c; //Sorun yok. c = 23; } } ... erdeki blokta b deikeni hala eriilebilir olduu iin ayn isimli bir deiken tanmlanamamasna ramen bu blokta b deikeninden faydalanlabilir: ... { int b; b = 23; {
13 / 46
Console.WriteLine(b); } } ...
imdi de deiken kapsama alan kombinasyonlar iin son rnei inceleyelim: ... { { int b; b = 23; } int b = 42; //Derleme zaman hatas !!! } ... Burada ierdeki blokta tanmlanan b deikeni ayn zamanda dardaki bloun da kapsama alanndadr. O yzden ierdeki bloun sonuna gelindiinde b hala bellektedir; dolaysyla ayn isimli deiken oluturulmasna izin verilmeyecei iin derleme zamannda bununla ilgili hata alnr. Ayrca beklenilenin aksine ierdeki bloktan kp b kullanlmak istendiinde de kullanlamayacaktr.
14 / 46
erdeki blokta tanmlan bir deikene blok sonunda, dardaki bloun kapsama alan dahilinde ol sa da eriilemez. b deikeni yukarda grld gibi ierdeki blokta kullanlp bloun darsnda eriilmeye alld zaman eriilemez; bunun sebebi b aslnda halen bellekte olmasna ramen tanmland isel bloun dnda eriilip ynetilememesidir.(debug edilerek bu grlebilir b deikeninin ilk tanmland satra bir kesme iareti <breakpoint> koyup uygulama F5 ile altrlr ve ardndan F11 ile satr satr ilerlenerek Locals penceresinden <Menlerden DebugWindowsLocals ile alabilir> - deikenin durumu daha salkl bir ekilde gzlemlenebilir. Ya da kesme iareti koymak yerine uygulama dorudan F11 ile balatlarak da ayn ilemler yaplabilir)
15 / 46
Blm : nceden Tanml Veri Tipleri (Pre-defined Data Types) Konu : nceden Tanml Veri Tipleri Tablosu
16 / 46
Aral-Kapsam - 128' den 127 0'dan 255 - 32.768'den 32.767 0'dan 65535 -2.147.483.648'den 2.148.483.647 0'dan 4.294.967.295 9,223,372,036,854,775,808den - 9,223,372,036,854,775,807 0'dan 18.446.744.073.709.551.615 3.4. x 10e 5 x 10e
28 -38
38
-308
308
16-bit unicode tek karakter Unicode karakter kmesi temsil eder .NET'deki btn tiplerin temel snf.
strin g obje ct
17 / 46
Blm : nceden Tanml Veri Tipleri (Pre-defined Data Types) Konu : Veri Tipleri le lgili nemli Bilgiler
18 / 46
Bu veri tipleri ile ilgili aadaki bilgiler nemlidir: C#, negatif deer almayan veri tiplerini destekler. Bu veri tipleri her ne kadar ortak dil spesifikasyonlar dnda olsa da kullanl olduklar kesindir. rnek vermek gerekirse kullanc yalar bir deiken ierisinde tutulmak istenildiinde bu deikenin muhtemel deerleri arasnda negatif saylarn olmayaca, iaretsiz tiplerden en uygun olanyla salanabilir. Ortak dil spesifikasyonlar (CLS Common Language Spesification-), .NET tabanl dillerin aralarnda anlaabilmeleri iin desteklemeleri gereken minimum ortak tip listesi (CTS Common Type System-) kurallar olarak zetlenebilir. Yukardaki bilgiden karlacak sonu u olmaldr : C#da gelitirilmi bir kod ktphanesi, (.NETin sunduu zgrlk erevesinde) baka bir programlama dili ile gelitirilen bir uygulamada kullanlmak istendiinde C#da olup dier dilde olmayan zellikler sorun tekil eder, bunun en gzel rnei de iaretsiz tipler olarak verilebilir. te diller aras etkileimde bu sorunun dert amamas iin ortak dil spesifikasyonlar listesi mevcuttur ve bu liste btn dillerin destekledii zelliklerin bir listesidir. Dolaysyla baka diller ile gelitirilen uygulamalarda kullanmak iin snf ktphaneleri gelitirirken ortak dil spesifikasyonlar erevesinde bunu gerekletirmek gerekmektedir. Veri tipleri listesindeki onbe tipin sekizi tamsay (sbyte, short, int, long, byte, ushort, uint, ulong), ondalk say (float, double, decimal), ikisi karakter tabanl (char,string),biri mantksal (bool), biri de btn seenekleri kapsayan (object) verileri tutabilecek tiplerdir. Ondalk tipler arasnda double, varsaylandr. Yani bir deikene ondalk deere sahip veri atanrsa eitliin sa tarafndaki verinin tipi her zaman double olarak alglanr. Bu yzden float ve decimal veri tiplerindeki deikenlerin deerlerinde eer ondalk ksm varsa verinin sonuna bitiik olarak veri tipini belirten bir son-ek koyulmaldr. Bu sayede deerin double deil dier ondalk veri saklayabilen tiplerden biri olduu anlalabilmektedir. Bu son ekler float iin f ya da F iken; decimal iin m ya da M dir. double ondalikDouble = 23.56; //Double iin son-eke gerek yok.
decimal tamSayiDecimal = 34; //Ondalk ksm olmayan decimal ve float iin de sorun yok. float ondalikFloat = 23.45F; //Ondalk ksm olan float ve decimal //iin sonekler koyulmal; yoksa derleme decimal ondalikDecimal = 67.89M; //zaman hatas alnr.
C#, deikenlerin uygun veri tipleri ile birlikte saklanmas sayesinde tip gvenli bir dildir. Ayn bellek blgesi iin yanllkla farkl tiplerde veriler tutulmasna msaade edilmez. Object tipinde oluturulan bir deikene istenilen tipte veri atanabilir. Bu snf, .NET FrameWork ierisinde tanmlanm btn tiplerin ve kendi tanmlayacamz tiplerin temelidir. Dikkat edilirse tabloda tipler iin iki tane kolon var: Biri System tipleri, dieri de C# ksaltmalar bir baka deyile C# takma adlar (alias). Yazlan kodlar csc.exe derleyicisi ile ortak bir ara dile (CIL Common Intermediate Language-) evrilir ve ortak alma zamannn (CLR Common Language RunTime-) ele ald kod CIL kodu olur; bu noktadan sonra C# kodunun bir ilevi kalmaz. Bu senaryo dier btn diller iin de tabi ki geerlidir. yleyse herhangi bir dilin kaynak kodu kendi derleyicisi ile CILe derlenir ve o noktada dile zel hibir bilgi kalmaz. Sre, ortak alma zaman (CLR) kontrolnde ortak tip sistemi (CTS) kurallar erevesinde ortak ara dilde (CIL) yrr . Yani belli bir noktadan sonra her ey standarttr. (Bu yzden .NETde performans diller belirlemez.) te kendi oyun alanmzda tipler iin int, bool, float gibi anahtar kelimeler kullanrken, kontrol CLRa geince hepsinin ad dier btn diller dzeyinde ortak olacaktr. rnein C#ta tamsay deikenler int anahtar szc ile tanmlanabilirken, VB.NET Integer kelimesini kullanr. Her iki dilin derleyicileri kaynak kodlarn
19 / 46
derleyip CILe evrilince tipler System.Int32 olur. Bu standartlar belirleyip takip eden mekanizmann ad ortak tip sistemidir (CTS Common Type System-). Demek ki deikenlerin tipleri iaretlenirken ortak tip sisteminin destekledii adlaryla iaretlenir, deikenin bellekteki deeri gncellenecei zaman tip gvenlik kontrol System isim alan altndaki orijinal adlaryla yaplr. Bunun salamasn grmenin en basit yollarndan biri Visual Studio kullanarak uygulama gelitirirken imleci tanmlanacak bir deikenin zerine getirip bilgiyi okumak olacaktr.
Bir deiken CLR tarafndan System isim alanndaki edeer tipi ile de kullanlabilir. unu da belirtmekde fayda var ki; bir deiken tanmlamasnda veri tipi olarak C# takma ad float ya da ortak tip sistemindeki karl System.Single belirtilebilir. float oran = 12.9f; ya da Single oran2 = 12.9f; //(Uygulamann en stnde using System; olduu varsaylmtr) Listedeki tiplerden string ve object snf, geri kalan 13 tip structtr. .NET Framework ierisinde yukardaki tabloya ek olarak birok yap, snf vb. tipler bulunmaktadr. Bu listedekiler hem temel programlama grevlerini gerekletirmek iin en sk bavurulan tipler, hem de C# anahtar kelimesi olan tiplerdir. rnein System.DateTime struct, tarih bilgilerini tutmak iin sk sk kullanlan bir tip olmasna ramen C# ksaltmas yoktur. Be ana tipte oluturulan veri tiplerine ek olarak uygulama gelitirici ihtiya duyduu ye rde kendi tiplerini de yazabilir; ki zaten bir .NET uygulamas, daha nce yazlm olan tipler ve onlar kullanarak programcnn yazd tiplerin etkilemeleri ile oluan btndr. lerleyen konularda zel numaralandrc (enumaration), yap (struct) ve snflarn (class) nasl yazlaca incelenecekken; temsilci (delegate) ve arayz (interface) gelitirmek ise bu kitabn kapsam dnda kalmaktadr.
20 / 46
21 / 46
Aritmetik Operatrler
C#, basit aritmetik ilemlerin yaplmasn salayan toplama ( + ), karma ( - ), arpma ( * ), blme ( / ) operatrlerinin yannda bir de kalan ( % ) operatrn desteklemektedir. Kalan operatrnn ilevi, bir sayn n baka bir sayya blmnden kalan sayy vermektir. Operatrler sol ve sana aldklar deerler zerinde ilem yaparlar ve sonucunda yeni bir deer retirler. Operatrlerin, zerinde ilem yapt bu deerlere operand ad verilir. Aadaki rnekte toplamSaat deikeninin deeri, alnan bir eitimin bir gndeki ders saati ile toplam eitim gn says arplarak elde edilmektedir. ... int toplamSaat; toplamSaat = 5 * 60; Console.WriteLine("Eitim toplam saati : {0}",toplamSaat); ...
Aritetik operatr kullanmna rnek Bu ilemde 5 ve 60 ilemin operandlar iken, * aritmetik operatr, = ise atama operatrdr. lem, deikenler zerinden de gerekletirilebilir: ... int toplamSaat; int gunlukDersSaati = 5; int toplamGun = 60; toplamGun = gunlukDersSaati * toplamGun; Console.WriteLine("Eitim toplam saati : {0}",toplamGun); ... kt yukardaki ile ayn olur. Aadaki kod, kalan operatrnn ilevini ele almaktadr. ... int kalan; kalan = 8 % 3; Console.WriteLine("(8 % 3) --> 8'in 3 ile blmnden kalan : {0}",kalan); ...
22 / 46
Kalan operatrnn kullanmna rnek Kalan operatr, solundaki operand sandaki operanda blp, blme ilemi sonucunda kalan deeri verir. Bu rnekte de 8 saysnn 3 ile blmnden kalan deerini vermitir. Deikenler zerinden aritmetik ilemler yaplken dikkat edilmesi gereken bir nokta vardr. Aadaki kodu inceleyelim: ... short a = 23; short b = 24; short c = a + b; ... Tamamen geerli grnen bir kod olmasna ramen derlenmeyecektir. Sebebi ise iki tane short tipli deikenin toplamnn int deeri aralna girebileceidir. Dolaysyla byk tr, kk tre bilinsiz olarak dntrme durumu sz konusudur ki; buna zaten izin verilmemektedir. Bu nedenle bilinli ekilde tip dnm yaplmaldr. ... short a = 23; short b = 24; short c = (short) a + b; ... Yukardaki kod yine derlenmez; cast operatr sadece a deikeni iin alr ve bir ey deimez. Yine iki tane short tipli deiken toplanp int tipinde bir sonu elde edilir. a + b kodu eer parantez ierisine alnrsa cast operatrnn, bu iki deikenin toplamndan elde edilen deere uygulanmas gerektii salkl bir ekilde derleyiciye iletilmi olur. ... short a = 23; short b = 24; short c = (short) (a + b); ...
23 / 46
Burada tabiki elde edilen sonucun short tipinin tayamayaca bir deer olma olasl mevcut. Dolaysyla bu tarz bir ilem yaparken checked anahtar kelimesine ihtiya duyulabilir. Deiken kullanmadan aritmetik ileme sokulan iki say eer tam say ise bu deerlerin tipleri derleyici tarafndan otomatik olarak int olarak alglanr ve ilem sonular ona gre retilir. rnein; Console.WriteLine(5 / 2); gibi bir ilemin sonucu 2.5 deil 2 olacaktr; nk 5 ve 2 deerleri int olarak hesapl anacak ve sonular da int olacaktr. Dolaysyla int tipli bir deer 2.5 sonucunun ondalk ksmn tayamayaca iin sonu 2 olarak retilecektir. Eer ilem; Console.WriteLine(5.0 / 2.0); olarak yaplsayd bu sefer ondalk saylarn varsaylan tipi devreye girecektir; bu tip ise double dr. Blme ileminin operandlarnn tipleri double olaca iin sonu double tipinde olacak ve 2.5 olarak elde edilecektir. Peki ya bir operand tam say, dieri ondalk say ise? Derleyici byle bir ilemle karlanca sonucun varsaylan tipini double olarak belirler ve; Console.WriteLine(5 / 2.0); sonucu 2.5 olarak retir. Yukarda verilen bilgilerden de anlalaca zere btn aritmetik operatrler btn veri tipleri ile kullanlamamaktadr. Bunlara ek olarak aritmetik operatrler string ve bool tipleri zerinde de kulanlamaz. Ancak bir istisna vardr, o da art ( + ) operatrnn string tipindeki deerler iin kullanldnda farkl bir anlama gelmesidir: ... string deger1 = "YunanISTAN"; string deger2 = "BULgaristan"; Console.WriteLine(deger1 + deger2); ...
Art operatrnn string tipi ile kullanmna rnek Art operatr string tipindeki deerlerle kullanldnda sandaki ve solundaki deerleri text olarak birletirme zelliine sahiptir. Buna string concatenation (birletirme) denir. Dolaysyla aadaki gibi string iki saynn toplam tam say olarak iki saynn toplanmasndaki sonucu vermeyecektir.
24 / 46
Console.WriteLine("23" + "24");
25 / 46
26 / 46
Bu tip uyumazl durumu sbyte,byte,ushort,short ve int tiplerinin birbirleriyle ve aralarnda yaptklar ilemlerde geerlidir. Saylan tiplerde deikenlerin birbirleriyle ve aralarnda yaptklar ilemlerde elde edilen deerin tipi int olacaktr. uint tipli bir deiken ile sbyte,byte,ushort,short tipli deikenlerden herhangi biri arasnda yaplan aritmetik ilemde oluan sonu uint tipinde olur. uint tipli bir deiken ile int tipli deiken arasnda yaplan aritmetik ilemde oluan sonu l ong tipinde olur. long tipli bir deiken ile ulong hari dier btn tam say tiplerindeki deikenler arasnda yaplan aritmetik ilemde oluan sonu long tipinde olur. long tipli bir deiken ile ulong tipli deiken aritmetik ileme sokulamaz. float tipli bir deiken ile btn tam say tipli ve kendi tipinde deikenler ile yaplacak aritmetik ilemlerde oluan sonu float tipinde olur. double tipli bir deiken ile btn tam say tipli deikenler,float ve kendi tipindeki bir deiken arasnda yaplacak ilemler sonucunda oluacak sonu double tipinde olur. decimal tipli bir deiken ile ondalkl saylar tutan double ve float tipli deikenler arasnda aritmetik ilem yaplamaz. decimal tipli bir deiken ile btn tam say tipli deikenler arasnda yaplacak ilemler sonucunda oluan sonu decimal tipinde olur.
27 / 46
28 / 46
Bir deikenin deerini bir say ile basit aritmetik ileme sokma C#, bu atamay yapmann daha kolay bir yolunu nermektedir: ... int sayi = 23; sayi += 24; //sayi = sayi + 24 ile edeer Console.WriteLine("say : {0}",sayi); ... Bu birleik atamalar, btn aritmetik operatrler iin geerlidir: sayi += 2; sayi -= 2; sayi *= 2; sayi /= 2; sayi %= 2;
29 / 46
30 / 46
Bir saysal tipli deikenin deerini 1 arttrmak Bir deikenin deerini 1 arttrmann C#da daha kolay bir yolu vardr: Artrm operatr bu ii yapmak iin zellemitir: sayi++; Ayn ekilde bir deikenin deerini 1 azaltmak iin de kullanlabilir: Sayi--; Arttrma ve azaltma operatrleri deikene son ek olarak gelebildii gibi n ek olarak da gelebilir. Byle olduunda davran biraz farkl olacaktr: ... int sayi = 23; int baskaSayi = sayi++; Console.WriteLine("say : {0} <---> baskaSayi : {1}",sayi,baskaSayi);
31 / 46
... Sayi deikeninin deeri 1 arttrlarak 24 yaplr; ama nemli olan nokta baskaSayi deikenine, arttrlm deerini mi geiridii yoksa arttrlmadan nceki deerini mi geirdiidir? te burada operatrn n ek mi son ek mi olduu nemlidir; nk atama operatr ile arttrm operatr arasnda bir ncelik sras mevcuttur. Bu sra, arttrm operatr son ek olduunda atamann; n ek olduunda ise arttrmndr. Dolaysyla yukardaki kod rneinde arttrm operatr son ek olduu iin ncelik atama operatrnn olur ve nce sayi deikeninin deeri baskaSayi deikenine 23 olarak atanr; daha sonra ise sayi deikeninin deeri arttirilir. Ekranda kts aadadr:
Arttrma operatrnn son-ek olarak kullanld durum. Tam tersi, yani arttrm operatrnn n-ek olarak kullanld durumda ise; ... int sayi = 23; int baskaSayi = ++sayi; Console.WriteLine("say : {0} <---> baskaSayi : {1}",sayi,baskaSayi); ... nce sayi deikeninin deeri 1 arttrlp 24 yaplr ve ardndan 24 deeri baskaSayi isimli deikene atanr; dolaysyla her iki deiken de ayn deer sahip olur.
32 / 46
33 / 46
likisel Operatrler
C#da ilikisel operatrler unlardr: < > <= >= Kktr Byktr Kk eittir. Byk eittir.
likisel operatrler iki deeri karlatrmada kullanlrlar ve ortaya mantksal bir sonu karrlar; bu sonu bool deikeni ile temsil edilebilir ya da daha sonra grlecek kontrol ve dng deyimlerinde youn olarak kullanlabilir. ... int sayi1 = 23; int sayi2 = 42; bool buyukMu = sayi1 > sayi2; Console.WriteLine("sayi1 = 23 <---> sayi2 = 42\n"); Console.WriteLine("sayi1 > sayi2 : {0}",buyukMu); ... Yukardaki kod blounda sayi1 deikeninin deeri sayi2 deikeninin deerinden daha kktr ve dolaysyla sayi1 > sayi2 gibi bir nerme yanl olur. Ekran kts da dogruMu mantksal sonu deikeninin deerinin false kmasyla bunu destekler.
likisel operatrler
34 / 46
35 / 46
Koul Operatrleri
C#da mantksal ifadelerin ierisinden birinin ya da her ikisinin birden doruluu kontrol edilmek istenirse koul operatrlerinden faydalanlr. Koul operatrleri; && (Ve operatr) || (Veya operatr) VE (&& - AND) VEYA (|| - OR)
36 / 46
37 / 46
Bu operatrlerin en youn ekilde kullanld yer kontrol deyimleridir. (if kontrol gibi). Ayrca koul operatrleri, mantksal sonu deikeni ile de kullanlabilir; zaten ilikisel, koul ve eitlik operatrlerinin getii her yerde bool bir sonu ortaya kar. ... int sayi1 = 23; int sayi2 = 42; int sayi3 = 34; bool dogruMu = (sayi1 > sayi2) || (sayi3 <= sayi1) ; Console.WriteLine("sayi1 = 23 <---> sayi2 = 42 <---> sayi3 = 34\n"); Console.WriteLine("(sayi1 > sayi1) || (sayi3 <= sayi1) : {0}", dogruMu); ... Burada geen dogruMu adl deikenin deeri bir dizi mantksal ifadenin sonucunda hesaplanmaktadr. || (veya) operatrnn sandaki ya da solundaki ifadelerden bir tanesinin mantksal (bool) olarak doru (true) sonu retmesi, dogruMu deikenin doru (true) deer almas iin yeterlidir; nk || (veya) operatr, operandlarndan bir tanesinin doru dnmesi ile toplamda doru bool sonucunu retir. Ancak burada ayr ayr bakldnda hem sayi1 deikeni sayi2 deikeninden byk deil; hem de sayi3 deikeni sayi1den kk ya da eit deil. || (veya) operatrnn her iki tarafndaki ifade de yanl (false) sonu rettii iin dogruMu deikeni de yanl (false) deer alr.
Koul operatrleri
38 / 46
39 / 46
Eitlik Operatrleri
Bu balk altnda yer alan iki operatr unlardr: == (Eittir operatr) != (Eit deil operatr)
Bu operatrler, sandaki ve solundaki operandlarn ayn deerlere sahip olup olmadklarn kontrol eder. Ayn deere sahip iki deer == operatr ile karlatrlrsa sonuc bool olarak doru (true) olacaktr. Ayn iki deer, != operatr ile karlatrldklarnda ise sonu yanl (false) olur. C# dndaki birok dilde atama ile eitlik kontrol ayn operatrle yaplr. C#da atamalar = operatr ile yaplr. Bu iki operatrn ayrlmas ile kartrlmalar nlenmi olup, alma zamannda oluacak istek d atamalarn ve istenildiinde gereklemeyen atamalarn nne geilmi olmaktadr. ... int stok = 25; int ihtiyac = 50; Console.WriteLine("stok = {0}; ihtiya = {1}\n",stok,ihtiyac); bool esitMi = (stok == ihtiyac); Console.WriteLine("stok == ihtiya : {0}",esitMi); bool esitDegilMi = (stok != ihtiyac); Console.WriteLine("stok != ihtiya : {0}", esitDegilMi); ... Yukardaki kod blounda her iki operatrn rnek kullanmna rnek yer almaktadr. Bu operatrlerin en sk kullanld yer, koul ve ilikisel operatrlerde olduu gibi kontrol ve dng deyimleridir. Operatrlerin Kullanld Deyimlerde Parantezler Yukardaki kodda dikkat edilmesi gereken bir nokta da eitlik operatrlerinin kullanld yerin parantez ierisine alnmasdr. Bu zorunlu yaplmas gereken bir ey deildir. Parantezler kullanlmasa da burada uygulama salkl bir ekilde alr. Kullanlmalarnn amac ise atama operatr ile eitlik operatrlerinin ncelik snrlarn kesin olarak izmektir. Daha uzun deyimler kullanldnda parantezlerle hem olas hatalarn nne geilmi olur; hem de kodun okunurluu arttrlm olur. Bu parantezler sadece eitlik operatrleri ile deil dier btn operatrler ile kullanlmaldr.
40 / 46
Blm : Kullancdan Alnan Veriler (User-Data Interaction) Konu : Kullancdan Deer Alnmas
41 / 46
Ardndan ENTERa baslr ve kodun devam alr. Kullancdan saysal bir deer alnrsa, bu deer string tipinde bir deiken zerinde tanabilir ve matematiksel bir ilemde kullanlamaz. Console.Write("rn fiyatn giriniz : "); string fiyat; fiyat = Console.ReadLine(); Bu kodun devamnda aadaki gibi bir matematiksel ilem gerekletirilemez. int zamliFiyat = fiyat + 15; //Derleme-zaman hatas !!!
42 / 46
nk toplama gibi bir matematiksel ileme sokulmaya allan deikenin deeri 15 olmasna ramen veri tipi herhangi bir tamsay ya da ondalk say deil bu saynn text tabanl temsilini yapan string dir. Burada yaplmas gereken; 15 verisini doru tipte ele alabilmektir. Tam bu soruna ynelik bir zm vardr: Parse() metodu. Bu metot, doru tipte ele alnmas gereken nceden-tanml tipler zerinden arlabilen (yukardaki senaryoda int zerinden) bir yedir. Btn nceden tanml tiplerin Parse() metotlar vardr. Kullanmn incelemek zere aadaki kod incelenebilir:
Parse() metodunun kullanm yleyse artk kullancdan alnan fiyat bilgisi bir tamsay deikeni zerine alnp, matematiksel ilemlerde kullanlabilir formata getirilebilir: Console.Write("rn fiyatn giriniz : "); string fiyat; fiyat = Console.ReadLine(); int fiyatInt = int.Parse(fiyat); int zamliFiyat = fiyatInt + 15; Console.WriteLine("Eski fiyat :{0}, yeni fiyat :{1}",fiyatInt,zamliFiyat); Bu kodun ekran kts aadaki gibidir:
43 / 46
Kullancdan alnan string deer, parse edilerek int tipte deikene alnr ve matematiksel ilem sonucu zaml fiyat hesaplanp kullancya gsterilir. Parse() metodu btn nceden tanml tipler zerinden arlabilir; hangi tip zerinden arlmsa verinin string temsilini, arld tipe evirir. Bylece verinin kendine zg zelliklerinden faydalanlmas salanm olur. Console snfnn Read() ve ReadLine() metotlar sadece string verileri okurken; Write() ve WriteLine() metotlar da sadece string verileri ekranda gsterebilir. Peki o zaman nasl oluyor da Console.WriteLine("Eski fiyat :{0}, yeni fiyat :{1}",fiyatInt,zamliFiyat); satr ile ekrana int tipinde iki deikenin deeri yazdrlabiliyor? Bu sorunun cevab Console.WriteLine() metodunun, ekrana yazlmas iin kendisine verilen string olmayan verileri otomatik olarak stringe evirip verilerin string temsillerini ekrana yazdrmasnda gizlidir. Dolaysyla ekrana yazdrlmak istenen tiplerin string olmayanlar her seferinde kontrol edilir ve Parse() ileminin tersi bir davranla ekranda tamamen string tipte veriler yer alr. Buras iin kk de olsa performansa katk salamak i in string olmayan veriler ekrana yazdrlmak istendiinde, ToString() metodu arlrsa arka tarafta yaplan kontrol ve dnmlerden kurtulmu olunur. Btn nceden tanml deer tipli deiken verileri zerinden ToString() metotlar arlabilir ve veri lerin string temsilleri elde edilebilir, gerekirse string deiken zerine alnabilir. yleyse nceki rnek iin WriteLine() metodunun kullanld ikinci satr u ekilde yeniden dzenlenebilir : Console.WriteLine("Eski fiyat : {0}, yeni fiyat : {1}",fiyatInt.ToString(), zamliFiyat.ToString()); Bu blmde bahsi geen Parse() metodunun btn nceden tanml tipler zerinden arlabilmesi ve benzeri ekilde ToString() metodunun btn tiplerde oluturulan deikenler zerinden arlabilmesi, C#n nesne ynelimli bir dil olmasnn getirilerindendir.
44 / 46
45 / 46
Parse() metodunun kullanmna bir rnek daha verelim. Bu sefer string formatnda bulunan doum tarihi bilgisi System.DateTime tipine Parse() edilsin. //Doum tarihi format varsaylan olarak allan bilgisayarn lokal //ayarlarndan elde edilir. Buradaki format ay/gn/yl'dr. DateTime dogumTarihi = DateTime.Parse("02.23.2003"); Console.WriteLine("Doum tarihi bilginiz {0} olarak alnd",dogumTarihi); Bu Parse() ileminin kts aadaki gibi olur :
DateTime.Parse() metodunun almas ile tarih bilgisinin System.DateTime tipindeki bir deiken ile yeniden kullanlmas DateTime tipindeki dogumtarihi deikeni ekrana yazdrlrken Console snf yine bizim iin ToString() metodunu arr ve deikenin deeri ekrana string temsili ile yazdrlr. Bu ekliyle deikenin deerinde doum tarihi bilgisi ile birlikte saat,dakika,saniye bilgileri de gelir. Eer gelmesi istenmiyorsa ya da biraz daha ayrntl ekilde gelmesi isteniyorsa bunlarn belirtilecei yer, DateTime tipindeki deiken zerinden arlabilecek ToLong... ve ToShort kelimeleri ile balayan metotlardr. rnein saatin tarih bilgisi ile birlikte gelmesi istenmiyorsa ToShortDateString() metodundan aadaki ekilde faydalanlabilir: Console.WriteLine("Doum tarihi bilginiz {0} olarak alnd", dogumTarihi.ToShortDateString()); Tarih bilgisi DateTime structn kullanm iin yazlrken ayra olarak .(nokta), /(bl) kullanlabilir. -(tire) ve
Bu ders notu, Ak Akademi projesi erevesinde TCM tarafndan Microsoft Trkiye iin hazrlanmtr. Tm haklar Microsoft Trkiye ye aittir. zinsiz oaltlamaz, para ile satlamaz.
46 / 46