You are on page 1of 46

ETM : DEKENLER VE VER TPLER

Blm : Veri Tipi (Data Types)

Konu : Veri Tipi Nedir?

Page 1 of 46

Veri Tipi (Data Types)


Veri tipi, bir deiken iin bellekte ayrlacak blgenin hangi ierikteki ve formattaki verileri saklayacan bildirmek iin kullanlr. rnein bir kitabn sayfa says, uygulamann ilerleyen aamalarnda kullanmak amacyla saklanmak istenirse tanmlanacak deiken iin bellekte ayrlacak alana sadece saysal verilerin girebileceini belirtmek gerekir. Bu alann saysal veriler iin ayrlmasna ek olarak, tam say m ondalk say m olaca, saysal aralklar gibi kriterleri belirtilerek snrlar daha da kesinletirilmelidir. Kitabn ad iin ayrlacak bellek alan metin tabanl veriler iin olacaktr. Bu yolla kitabn sayfa says iin bellekte alan alana ondalk say ya da text tabanl bir deer girilmesinin; kitabn ad iin ise saysal bir de er girilmesinin nne geilmi olup deerin istenilen ierik ve formatta tutulaca garanti edilmi olur. te bunlar garanti eden kavram veri tipidir.

2 / 46

ETM : DEKENLER VE VER TPLER

Blm : Veri Tipi (Data Types)

Konu : Temel Veri Tipleri

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

ETM : DEKENLER VE VER TPLER

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

ETM : DEKENLER VE VER TPLER

Blm : Deiken Tanmlama ve Deikenlere Balang Deeri Verme Konu : Deikenlere Balang Deeri Verme

7 / 46

Deikenlere Balang Deeri Verme


Bir deikene deer vermek iin atama operatr kullanlr. Atama operatr C#da = dir. yleyse yeni tanmlanm bir deikene balang deeri aadaki gibi verilebilir: int sayac; sayac = 1; Deikenin balang deeri ayn zamanda deiken tanmland anda da verilebilir: int sayac = 1; string isim = "Keskin C";

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

ETM : DEKENLER VE VER TPLER

Blm : Deiken Kapsama Alan (Variable Scope) Konu : Deiken Kapsama Alan

9 / 46

Deiken Kapsama Alan (Variable Scope)


ncelike u ayrm yapmak gerekir. Bir metot ierisinde tanmlanm (rnein Main() metodu) deiken lokal deiken (local variable) adn alrken; bir snfn ya da bir yapnn yesi olarak tanmlana n deiken alan (field) adn alr. u ana kadar ki btn rnekler Main() metodu ierisinde test edildii iin kullanlan deikenler lokal deikenlerdir. Ayrca daha sonra grlecek dng ve kontrol deyimleri, zellik (property),indeksleyici (indexer) gibi snf ya da yap yelerinin ierisinde tanmlanan deikenler de lokal deikenlerdir. Lokal deikenlerin tanmlanmalar ile birlikte bellein stack blgesine yerletiini artk biliyoruz. Peki, bu deikenler ne kadar sre orada kalyorlar. Acaba uygulama kapanana kadar m? Yoksa bizim ihtiyacmz kalmayncaya kadar m? Aslnda ikisi de deil. Lokal deikenler, tanmlandklar ssl parantezler arasnda eriilebilirdirler. Evet, kulaa ilgin geliyor ama tam aklamas byle. Bu deikenler tanmlandklar bloa zeldirler ve programda kontrol, bu bloun sonuna geldiinde blok ierisinde bellee karlm olan btn lokal deikenler otomatik olarak bellekten der. zetlemek gerekirse lokal deikenler sadece tanmlandklar blok ierisinde kullanlabilirler.

10 / 46

ETM : DEKENLER VE VER TPLER

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.

//b deikeni bellekten der.

//Yeni b deikeni bellekten der.

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); } } ...

//Geerli bir kullanm.

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

ETM : DEKENLER VE VER TPLER

Blm : nceden Tanml Veri Tipleri (Pre-defined Data Types) Konu : nceden Tanml Veri Tipleri Tablosu

16 / 46

nceden Tanml Veri Tipleri


imdi de .NET Frameworkn uygulama gelitiricilere sunduu nceden tanml veri tiplerinin tam listesini ve baz zelliklerini inceleyelim: C# Ksaltma sbyt e byte shor t usho rt int 16 System.Int32 System.UInt uint long ulon g float dou ble deci mal bool char mal System.Bool System.Char System.Strin g System.Obje ct ble System.Deci 64 System.Singl e System.Dou 32 System.Int64 System.UInt e System.Byte System.Int16 System.UInt Kullanm ve Bellek Alan aretli say aretsiz 8-bit tam say aretli 16-bit tam say aretsiz 16-bit tam say aretli 32-bit tam say aretsiz 32-bit tam say aretli 64-bit tam say aretsiz 64-bit tam say 32-bit ondalkl say 64-bit ondalkl say 128-bit ondalkl say Doru ya yanll temsil eder iaretli da 8-bit tam

System Tipi System.SByt

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

'den 3.4 x 10e

38

-308

'den 1.7x 10e


28

308

10e- den 7.9 x 10e true ya da false U0000'den Uffff

16-bit unicode tek karakter Unicode karakter kmesi temsil eder .NET'deki btn tiplerin temel snf.

strin g obje ct

Uygulama bellei ile snrl

Herhangi bir tip tutulabilir. nceden tanml veri tipleri

17 / 46

ETM : DEKENLER VE VER TPLER

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

ETM : DEKENLER VE VER TPLER

Blm : Operatrler (Operators)

Konu : Aritmetik Operatrler

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

Yukardaki kodun kts aadaki gibi olacaktr :

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

//Derleme zaman hatas

//Yine derleme zaman hatas

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");

String tipindeki iki saynn art operatr ile kullanm

25 / 46

ETM : DEKENLER VE VER TPLER

Blm : Operatrler (Operators)

Konu : Bilinmesi Gerekenler

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

ETM : DEKENLER VE VER TPLER

Blm : Operatrler (Operators)

Konu : Birleik Atamalar (Compound Assigment)

28 / 46

Birleik Atamalar (Compound Assignment)


Bir deikenin deerinin, zerine bir say eklenerek deitirildii durumlarda yazacamz kod aadaki gibi olacaktr: ... int sayi = 23; sayi = sayi + 24; //deikenin deeri 24 arttrlyor. Console.WriteLine("say : {0}",sayi); ...

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

ETM : DEKENLER VE VER TPLER

Blm : Operatrler (Operators)

Konu : Artrma Azaltma Operatrleri

30 / 46

Arttrma Azaltma Operatrleri


Bir deikenin deeri 1 artrlmak istenirse izlenecek yol muhtemelen u olacaktr: ... int sayi = 23; sayi = sayi + 1; //Deikenin deeri 1 arttrlr. Console.WriteLine("say deikeninin son deeri : {0}",sayi); ... ya da ... int sayi = 23; sayi += 1; //Deikenin deeri 1 arttrlr. Console.WriteLine("say deikeninin son deeri : {0}",sayi); ...

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.

Arttrm operatrnn n-ek olarak kullanld durum.

32 / 46

ETM : DEKENLER VE VER TPLER

Blm : Operatrler (Operators)

Konu : likisel Operatrler

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

ETM : DEKENLER VE VER TPLER

Blm : Operatrler (Operators)

Konu : Koul Operatrleri

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)

0 && 0 = 0 0 || 0 = 0 0 && 1 = 0 0 || 1 = 1 1 && 0 = 0 1 || 0 = 1 1 && 1 = 1 1 || 1 = 1 Matematikte VE ile VEYA operatrlerinin kullanm

36 / 46

ETM : DEKENLER VE VER TPLER

Blm : Operatrler (Operators)

Konu : Koul Operatrlerinin Kullanld Yerler

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

ETM : DEKENLER VE VER TPLER

Blm : Operatrler (Operators)

Konu : Eitlik Operatrleri

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

ETM : DEKENLER VE VER TPLER

Blm : Kullancdan Alnan Veriler (User-Data Interaction) Konu : Kullancdan Deer Alnmas

41 / 46

Kullancdan Alnan Deerler ve Parse() Metodu Kullanm


Kullancdan bir deer alndnda (imdilik konsol ekranndan, daha sonras iin masast ve web uygulamalarnda textBox gibi bir kontrolden olabilir) bu deerin istenilen deikene doru tipte atldnn garanti edilmesi gerekir. Console.ReadLine() ile okunan veriler daha nce grld gibi her halkarda text tabanl olacaktr ve dorudan bir deikene atlmak istenirse bu deikenin tipi (eer ekstra efor harcanmazsa) sadece string olabilir : Console.Write("Adnz giriniz : "); string isim; isim = Console.ReadLine(); Console.WriteLine("Ekrandan girdiiniz isim : {0}",isim);

Console.ReadLine() olduu iin kullancdan ENTER beklenir.

Kullanc giriini yapar.

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:

Kullancdan fiyat bilgisi istenir.

43 / 46

Kullancnn veriyi girmesiyle deer string deiken zerine alnr.

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

ETM : DEKENLER VE VER TPLER

Blm : Kullancdan Alnan Veriler (User-Data Interaction) Konu : Parse() Metodu

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

You might also like