18 Oca 2016

C# 'da Veri Tipleri ve Değişken Tanımlama

Veri tipleri hafızada ekonomi yapmamızı sağlar. Aynı zamanda kategorizasyon ve kullanım kolaylığı da sağlamaktadır.
C#’ta değişken tanımlamak 3 şekilde gerçekleşir;
  • VeriTipi değişkenAdı; (Değişkeni tanımlar, fakat hiçbir değer vermez.)
  • VeriTipi değişkenAdı = new VeriTipi( ); (Değişkeni tanımlar ve o veri tipinden yeni bir kopya alır.)
  • VeriTipi değişkenAdı = Değer; (Değişkeni tanımlar ve ona bir değer atar.)
.NET Framework veri tiplerini 3 kategoride toplayabiliriz;
  1. Değer Tipleri (Value Types) : Değer tipi tutan bir değişken hafızada tanımlı olduğu alanda o değişkenin kendisini saklar.  Örnek: int x = 5;
  2. Referans Tipleri ( Reference Types) : Örnek: object y = new object ( ); Bu değişkenin adresini hafızanın heap bölümünde y değişkeni içine saklar ve başka bir heap hafıza alanında da object’in kendisini saklar. y değişkeninden bu adrese referans vermiş olur.
  3. İşaretçi Tipleri (Pointer Types) : Referans tipleri ile aynı özellikleri sağlamanın yanı sıra işaretçi aritmetiği ile ekstra fonksiyonalite sağlarlar. C#’ın güvensiz kabul ettiği kod alanları içine yazılırlar. Daha hızlı çalışırlar fakat C#’ın hafıza ile ilgili sağladığı kolaylıklardan faydalanamazlar.
Data’nın kendisini tanımlı olduğu hafıza alanında saklayan değişkenlere değer tipi, datanın saklandığı yere referansı, tanımlı olduğu hafıza alanında saklayan değişkenlere ise referans tipi veri tipi denir.
BASİT TİPLER
  1. BOOL: Yalnızca true/false değerini alabilir. 1 byte yer kaplar. Kontrol ifadelerinde ve metodların dönüş tipi olarak çok kullanılır.
  2. BYTE, SBYTE: Byte tipi 0-255, Sbyte (Signed Byte) tipi ise -128 ile 127 arası sayıları tutar. 1 byte yer kaplarlar.
  3. INT, UINT: integer tipi -2.147.483.648 ile 2.147.483.647 arası sayıları tutar. uint (Unsigned int) ise 0-4.294.967.295 arası sayıları tutar. Hafızada 4 byte yer kaplarlar.
  4. LONG, ULONG: long tipi, -9.223.372.036.854.775.808 ile 9.223.372.036.854.775.807 arası sayıları tutar. Hafızada 8 byte yer kaplar. 64 bitlik bir veri tipidir. 32 bitlik sistemlerde 2 integer alanı ile hafızada saklanır ve performans kaybına sebep olur. 64 bitlik sistemlerde böyle bir sorun oluşmaz. ulong veri tipi 0-18.446.744.073.709.551.615 arası sayıları tutar.
Long tipi değişenler atanırken sayıların sonuna L/UL son eki eklenerek kullanılır. Zorunlu değildir fakat kodun okunmasında kolaylık sağlar.

Son eklerin diğer bir görevi de metot çağırılırken hangi tiple çağırdığımızı ayırt etmek içindir. Örnek alttaki gibi 2 metodumuz olsun;
public void Add(int number){}
public void Add(long number){}
Bu 2 metod C#’ta yanyana çalışır. Aynı isimde farklı parametrelere sahip metodlara birbirinin Overload’u denir. Kodun başka bir yerinde bu 2 metodu çağırırken aşağıdaki gibi 2 satır farklı işlev gösterir;
Add(5); // otomatik olarak int değişken alan metot çağrılır.

Add(5L); // son eki L olduğu için long değişken alan metot çağırılır.

KAYAN NOKTA TİPLERİ (FLOATİNG POINT TYPES)

  1. FLOAT: float tipinin virgülden sonra 7 hane duyarlılğı vardır. 32 bitlik bir değişendir.  Hafıza da 4 byte’lık yer kaplar fakat floating point işlemlerinde bilgisayarın matematik işlemcisi (FPU) bunu kullanım sırasında 10 byte’a çevirir. F son eki ile tanımlanır. PI’nin sadece 2 basamağını kullanmak istediğimizden float tipinde tanımlıyoruz. Normalde bu iş için Math.PI kullanırız, Math.PI double tipinde ve PI sayısını virgülden sonra 20 hane duyarlılıkla tutar.
  2. DOUBLE: Virgülden sonra 15-16 hane duyarlılığı vardır. Hafızada 8 byte’lık yer kaplar. 64 bitlik bir veri tipidir. D son eki ile tanımlanır. (Mühendisli hesaplamalı vb. şeylerde kullanılır.)
  3. DECIMAL: Virgülden sonra 28-29 hane duyarlılığı vardır. Hafızada 16 byte yer kaplar. 128 bitlik bir veri tipidir. M son eki kullanılır. Daha çok yuvarlamanın anlık yapılması gereken para işlemleri için kullanılır.
Hafızada çalışacak Cache Uygulamaları vs. kodluyorsak her değişkeni olabilecek en küçük byte değerini kullanacak şekilde kullanmalıyız.
Önce veritabanı tasarlanmış ve veri tipleri belliyse, veritabanımızda hangi tip varsa onun C# karşılğını kullanmalıyız.
DİĞER TİPLER

  1. CHAR: Tek karakterlik veri tutmak için kullanılır. 1 byte yer kaplar. 16 bitlik bir veri tipidir. Unicode işlemler için kullanılır. Birçok farklı şekilde karakter tanımı yapılabilir. Örnek olarak aşağıda tanımladıklarımızın hepsi aynı karakter değeri olan X’i işaret eder.
  2. STRING: string tipi, Unicode karakterlerden oluşan bir diziyi tanımlar. string değişken tipi tanımlama ifadesi System.String sınıfının bir kısayoludur. Tanımladığımız değişken bu sınıfın bir kopyası olacaktır.
  3. ENUM: Aslında bir enumeration (sayılı veya isimli liste) tanımlamak için kullanılır. Namespace içinde kullanılabileceği gibi class veya struct içinde de tanımlanabilir. Örnek:enum Gunler {Ptesi, Sali, Çar, Per, Cum, Ctesi, Pazar};
  4. NULLABLE: nullable tipler, yukarıdaki bütün referans veri tiplerinin ayrıca null değerler de alabilenleridir. Genelde sayılar için kullanılır. Hiçbir değer atanmayan sayı 0 değil null ile ifade edilir. Böylece atama yapılıp yapılmadığının kontrolü daha da kolaylaşır. int x = null;
  5. DATETIME: DateTime, anlık bir veriyi saklayan bir struct(yapı)’dır. Hafızada 8 byte yer kaplar.  Struct tipleri değer tipleri olup sınıflar gibi davranırlar fakat sınıflar referans tipleridir. DateTime içinde 1 Ocak 0001 ‘den 31 Aralık 9999’a kadar tarih tanımlanabilir ve bu tarih milisaniye duyarlılıkta saklanır. Değer tipi olduğu için null değer kabul etmez. DateTime değerleri string değişkenler olarak atanamaz. Constructor kullanarak atanmak zorundadır.
  6. GUID: Guid tipi de bir sınıf ve bu da veritabanı sistemlerinde değişken tipi olarak geçiyor. Verileri saklarken hepsine bir ID veririz. Çoklu sistemleri bir araya getirip birleştirmeye çalıştığımızda bu sayılar birbirine karışacaktır. Her 2 veritabanında da farklı veriler aynı ID’lere sahip olabilir. Bu durumda unique(tekil) bir değişkene ihtiyaç duyuyoruz. İşte GUID(Globally Unique Identifier) burada kullanılıyor. Hafızada 16 byte yer kaplar.  
Şimdi bu değişken tiplerinde nasıl veri tanımlandığını örneklerle görelim;

int sayi1 = 2;
decimal sayiDec = 2.2M;
double sayiDouble = 2.2;
float sayiFloat = 2.2F;
string isim = “GÖKALP”;
char karakter = ‘G’;
DateTime zaman = DateTime.Now();    -> Şuanı alır ve zaman değişkenine atar.
DateTime zaman1 = DateTime.Now.AddDays(1);    -> Şuana 1 gün ekler ve zaman1’e atar.
DateTime zaman2 = DateTime.Now.Date();    -> Şuanın sadece tarihini zaman2 değişkenine atar.
bool varMi = true;    //sadece true ya da false değeri atanabilir.


 Bir değişken önce tanımlanıp ardından değer ataması da yapılabilir;

int sayi;
sayi = 5;

Eğer aynı veri tipindeyse değişkenler aşağıdaki gibi toplu olarak da tanımlanabilir.

int sayi1, sayi2, sayi3;
string ad1, ad2, ad3;

Hiç yorum yok:

Yorum Gönder