Yazilim Mutfagi Dersleri (C#) Ders 2 – Degisken Tipleri, Degisken Tanimlama ve Operatörler

C# Hakkinda Temel Bilgiler

Bu dersimizde C# dili hakkinda temel bilgiler ögrenecegiz. Biraz açarsak bu dersimizde veri tipleri, degiskenler ve operatörleri nasil kullanacagimizla ilgili bilgiler verecegiz.

Temel Veri Tipleri ve CTS(Common Type System) Karsiliklari

C# da iki çesit veri tipi vardir:

  • Deger Tipleri (Value type)
  • Referans Tipleri(Reference Type)

Degiskenler bellekte bulunan verilerdir. Bir degiskeni kullandigimiz zaman o degiskenin bellekte bulundu yerdeki bilgiyi kullaniriz. Deger tipleri veriyi direk olarak bellek bölgesinden alirken referans tipleri baska bir nesneye referans gösterirler. Yani referans tipleri içinde veri degil adres bilgisi tutarlar. Veri tipleri stack dedigimiz bellek bölgesinde tutulurlar, referans tipleri ise heap bellek bölgesinde saklanirlar. int, double, float gibi veri tipleri deger tiplerine örnek gösterilebilir. Herhangi bir sinif türü ise referans tipine örnek gösterilebilir. Deger tipleri birbirine esitlenirken degiskenin barindirdigi deger bir diger degiskene kopyalanir. Böylece iki farkli bagimsiz degisken olusur. Referans tipleri ise esitleme sirasinda degiskenlerin tasidiklari veri degil heap bölgesinde isaret ettikleri adres kopyalanir. Böylece eger iki referans degiskeni birbirine esitledi isek ve daha sonra bunlardan birinde bulunan veriyi degistirdi ise otomatik olarak diger referans degiskeninin degeri de degisir. Çünkü adresde bulunan veri degisince bu adresi isaret eden iki degiskende yeni veri bilgisine ulasir.

Bir önceki dersimizde Common Type System hakkinda bilgi vermistik. C# da tanimlanan veri tipleri ve bunlarin CTS deki karsiliklarini tablo halinde asagida bulabilirsiniz. C# da toplam 15 veri tipi vardir bunlardan 13 ü deger tipindedir, 2 si ise referans tipindedir.

.

Deger Tipleri:

C# Adi CTS Karsiligi Açiklama Max ve Min aralik yada degeri
sbyte System.Byte 8 bit isaretli tamsayi -128 : 127
short System.Int16 16 bit isaretli tamsayi -32.768 : 32.767
int System.Int32 32 bit isaretli tamsayi -2.147.483.648 : 2.147.483.647
long System.Int64 64 bit isaretli tamsayi -9.223.372.036.854.775.808 : -9.223.372.036.854.775.807
byte System.Byte 8 bit isaretsiz tamsayi 0,177083333
ushort System.UInt16 16 bit isaretsiz tamsayi 0 : 65.535
uint System.UInt32 32 bit isaretsiz tamsayi 0 : 4.294.967.295
ulong System.UInt64 64 bit isaretsiz tamsayi 0 : 18.446.744.073.709.551.615
float System.Single 32 bit tek kayan sayi +yada – 1,5*10-45 : + ya da – 3,4*1038
double Sytem.Double 64 bit çift kayan sayi +yada – 5*10-324 : + ya da – 1,7*10308
decimal System.Decimal 128 bit ondalikli sayi +yada – 1,5*10-28 : + ya da – 7,9*1028
bool System.Boolean true ya da false
char System.Char Karakterleri temsil eder 16 Unicode karakterleri

Referans Tipleri:

C# Adi CTS Karsiligi Açiklama
object System.Object Bütün veri türlerinin türedigi kök eleman
string System.String Unicode karakterlerinden olusan string

Degiskenler:

Bir program çalistirirken tüm veriler geçici olarak hafizada tutulur. Degiskenler bu verilerin isimlendirilmesi islemidir. C# da degiskenler asagidaki yapida tanimlanirlar.

 <veri tipi><degisken adi>;
 

Örnegin;

 int i;
 

Yukaridaki ifade bir integer veri tipini saklamak için programin diger asamalarinda i ismi ile ifade edilecek hafizada 4 bytelik bir alan açar. Bir degiskene tanimlarken deger atayabilirsiniz, ayrica bir veri tipi altinda birden fazla isimle farkli degiskenler tanimlayabilirsiniz.

bool dogruMu = false;
double yuzde = 98.32, ortalama = 35.32;
char karakter = 'A';

Diger modern programlama dilleri gibi C# dada degiskenleri kullanmadan önce tanimlamak zorundasiniz.  Ayrica eger bir yerel degisken (Bir method içinde tanimlanan degiskenler) tanimliyorsaniz bu degiskeni kullanmadan önce bir deger atamasi yapmak zorundasiniz.

static void Main(string[] args)
{
      int kilo;
      //kilo = 78;
      Console.WriteLine(kilo);
}

 

Yukaridaki kod parçacigi kilo degiskenine deger atamadiginiz için hata verecektir çünkü kilo degiskeni yerel bir degiskendir. Eger //kilo = 78; açiklama satirindaki // isaretlerini siler ve bu satiri koda dahil ederseniz hatanin ortadan kalktigini görürsünüz. Buradan da anlasilacagi gibi C# yerel degiskenlere ilk atama islemini otomatik yapmak global degiskenler de ise ilk deger atamasi degisken tipine göre otomatik olarak yapilir. Örnegin integer bir tip için 0 gibi.

.

Sabit Degiskenler:

Sabit degiskenler içinde buluna veri degisken ömrü tamamlanana kadar degismez. Bir sabit tanimlamak için const anahtar kelimesini kullaniriz. Ilk tanimlandiklari sirada ilk deger atamasi yapmak zorundayiz, uygulamamizin herhangi bir kisminda sabit degiskenin içerigini degistiremeyiz.

const double PI = 3.14;
const double PI;

Yukaridaki tanimlamalardan birincisi dogru ikincisi ise yanlis bir tanimlamadir. Ilk atamalari yapilmak zorundadir.

Sabitler genellikle büyük harflerle tanimlanirlar. Bu bir zorunluluk degildir.

Degiskenler ve Metotlar için Isimlendirme Konvansiyonlari

Microsoft degisken isimlendirmesi için Camel Notasyonu methotlar için ise Pascal Notasyonunu tavsiye ediyor.

Camel notasyonunda isim küçük harfle baslar, eger degisken isminde birden fazla kelime geçiyor ise isimdeki diger kelimeler büyük harfle baslar.

Camel Notasyonu:

maas;
maasMiktari;
massMiktariAciklama;
 

Pascal Notasyonunda kelime büyük harfle baslar. Camel Notasyonunda oldugu gibi diger kelimelerde büyük harfle baslar.

Pascal Notasyonu:

Maas();
MaasHesapla();
 

Bu notasyonlarin kullanimi mecburi degildir. Fakat sürekli olarak bu tür bir notasyona uyarak kodlarinizi yazarsaniz, kodlariniz daha anlasilir bir hale girer.

C# da Operatörler

Aritmetik Operatörler

Operatör Açiklama
+ Ekleme
Çikarma
* Çarpma
/ Bölme
% Kalan veya modül
++ Birer Birer Arttirma
Birer Birer Eksiltme

Yukaridaki tablodaki operatörlerin kullanimi ile ilgili örnek kod asagidadir. Ayrica kodu buradan indirerek kendiniz deneyebilirsiniz.

public static void Main()
{

    int toplam = 0, fark = 0, carpim = 0, kalan = 0;
    float bolum = 0;
    int sayi1 = 0, sayi2 = 0;
        
    Console.WriteLine("Sayi Biri Giriniz : ");
    sayi1 = Convert.ToInt32(Console.ReadLine());

    Console.WriteLine("Sayi Ikiyi Giriniz : ");
    sayi2 = Convert.ToInt32(Console.ReadLine());

    toplam = sayi1 + sayi2;
    fark = sayi1 - sayi2;
    carpim = sayi1 * sayi2;
    kalan = sayi1 % sayi2;
    bolum = sayi1 / sayi2;
        
    Console.WriteLine("Girilen Sayilar: Sayi 1 = {0}, Sayi 2 = {1}", 
    		sayi1, sayi2);
    Console.WriteLine("Sayilarin Toplami = {0}", toplam);
    Console.WriteLine("Sayilarin Farki (sayi1 - sayi2) = {0}", fark);
    Console.WriteLine("Sayilarin Çarpimi = {0}", carpim);
    Console.WriteLine("Sayilarin kalan (sayi1 in sayi2 ye bölümgnden kalan)= {0}"
    		, kalan);
    Console.WriteLine("Sayilarin Bölümünden (sayi1 / sayi2) Bölüm = {0}", bolum);

    sayi1++;
    sayi2--;
    Console.WriteLine("Sayi 1 in bir fazlasi = {0}", sayi1);
    Console.WriteLine("Sayi 2 in bir eksigi = {0}", sayi2);
}
 

Yukaridaki kodu inceleyecek olursaniz. Console.WriteLine("Açiklama Metni {0}" , sayi1); gibi bir yapi görürsünüz. String ifadelerde stringIfade1 + stringIfade2 seklinde birlestirme yapmak yerine bu formatta stringleri birlestirebilirsiniz. {0}  seklindeki ifade virgülden sonra yazilan ilk degiskenin degerini buraya yaz demek oluyor. Eger ikinci bir degisken varsa {1} seklinde yazarak onunda degerini baska bir kisma yerlestirebiliriz. Dikkat etmeniz gereken {} ifadesinin içindeki sayilar sirasi ile gitmeli. Yani 0, 1, 2,..

	sayi1++ ifadesi

ile

	sayi1 = sayi1 + 1;
 

ayni anlama gelmektedir. Ayrica bir sayiya herhangi bir sayi eklemek istiyorsak örnegin sayi1 e 5 ekleyelim.

	sayi1 = sayi1 +5
 

yazmak yerine;

	sayi += 5;
 

daha kisa ve dogrudur.

Ön Ek ve Arka Ek Olarak Kullanma

++ ve – operatörleri en ve arka ek olarak kullanilabilir. Örneklerle anlatacak olursak;

sayi2 = 3;
sayi1 = ++sayi2;//sayi1 = 4, sayi2= 4 olur.
sayi1 = --sayi2;//sayi1 = 2, sayi2= 2 olur.
  

Örnekte görüldügü gibi eger operator ön ek olarak kullanilirsa derleyici önce operatörün görevini yapar daha sonra ise atama islemini gerçeklestirir. Böylece sayi1 = ++sayi2 ifadesinde sayi2 önce bir arttirilir daha sonra sayi1’e sayi2 nin degeri atanir.

sayi2 = 3;
sayi1 = sayi2++; //sayi1 = 3, sayi2= 4 olur.
sayi1 = sayi2--; //sayi1 = 3, sayi2= 2 olur.
 

Operatör arka ek olarak kullanildiginda ise önce atama islemi yapilar daha sonra operatörün görevi yerine getirilir. sayi1 = sayi2++ isleminde önce sayi2 nin degeri sayi1’e atanir, daha sonra sayi2 bir arttirilir.

Atama Operatörleri

Atama Operatörleri degiskenlere deger atamak için kullanilirlar.

Operatör Açiklama
= Basit esitleme
+= Sagdaki Sayi ile topla sonra toplami esitle
-= Sagdaki Sayi yi çikar sonra sonucu esitle
*= Sagdaki Sayi ile çarp sonra toplami esitle
/= Sagdaki Sayi ile böl sonra bölümü esitle
%= Sagdaki Sayi ile bölümünden kalani bul sonra kalani esitle

Iliskisel(Karsilastirma) Operatörleri

Iliskisel Operatörler genelde kosul ifadelerinde karsilastirma için kullanilirlar. C#da kullanilan iliskisel operatörler asagidakilerdir.

Operatör Açiklama
== Esittir
!= Esit Degildir
Büyüktür
Küçüktür
>= Büyük Esittir
<= Küçük Esittir

Iliskisel Operatörler her zaman true veya false olmak üzere boolean bir deger döndürürler.  Örnekle anlatmamiz gerekirse;

int sayi1 = 6, sayi2 = 4;
sayi1 == sayi2 //false;
sayi1 != sayi2 //true;
sayi1 > sayi2 //true;
sayi1 < sayi2 //false;
sayi1 >= sayi2 //true;
sayi1 <= sayi2 //false;

Iliskisel operatörler sadece birbiri ile uyumlu tipteki degiskenleri karsilastirabilir. Bir boolean tipi ile integer tipindeki iki degiskeni karsilastiramazsiniz.

Mantiksal ve Bit Düzeyinde (Logical and Bitwise) Opeatörleri

Bu operatörler mantiksal islemleri ve bit düzeyindeki islemleri yapmak için kullanilirlar.

Operatör Açiklama
& Bit bazinda ve islemi
| Bit bazinda or islemi
^ Bit bazinda xor islemi
! Bit bazinda not islemi
&& Mantiksal ve islemi
|| Mantiksal or islemi
.

Bit bazindaki operatörler degiskene ait degeri bit bazinda isleme tabi tutarlar. Mantiksal operatörler ise bildigimiz mantik kavrami kapsaminda bu ve su dogrumu veya bu veya su dogrumu gibi karsilastirma yaparlar.

bool sonuc = (i > 3 && j < 5) || (i < 7 && j > 3);

Mantiksal operatörlerde;

Dogru ve Dogru = Dogru;
Dogru ve Yanlis = Yanlis;
Yanlis ve Dogru = Yanlis;
Yanlis ve Yanlis = Yanlis;
Dogru veya Dogru = Dogru;
Dogru veya Yanlis = Dogru;
Yanlis veya Dogru = Dogru;
Yanlis veya Yanlis = Yanlis;

Mantiksal And islemlerinde eger kosullardan herhangi biri yanlis ise and islemine tabi tutulan diger kosullar true olsa bile sonuç falsedur. Or isleminde ise kosullardan herhangi birinin true olmasi diger kosullarin ne olduguna bakmaksizin sonucun true olmasini saglar.

C# Mantiksal operatörler Kisa Devre mantigiyla çalisir. Mantiksal islemlerde kosullar soldan saga dogru kontrol edilir. Yukaridaki paragraftaki bilgiye göre; bir and islemi kontrol ediliyorsa ve kosullardan birisi false ise sagda kaç adet daha and kosulu olmasina bakmaksizin sonucu false olarak belirleyebiliriz. C# derleyicisi de bu yöntemi kullanarak and isleminde ilk false gördügü anda or isleminde ise ilk true gördügü anda islemi keser ve sonucu döndürür. Bu büyük uygulamalarda çok fazla kosul oldugu zamanlar uygulamamizin daha hizli çalismasini saglar.

C# da Kullanilan Diger Operatörler

Operatör Açiklama
>>  Bit bazinda saga kaydirma
<<  Bit bazinda sola kaydirma
, Nesnelerin özelliklerine ulasmak için
[] Indeks numarasi ile dizi ve kolleksiyonlarin elemanlarina ulasmak
() Çevrim Operatörü. Tip çevrimleri için kullanilir.
?: Kosul Operatörü. if else kosulunun kisa yazimi. Ilerde anlatilacak

Operatörlerde Çalisma Önceligi

Tüm operatörlerin çalisma önceligi ayni degildir. Matematik kurallarinda geçerli olan çarpma, bölme, çikarma toplama islemlerindeki öncelik sirasi operatörler içinde geçerlidir. Öncelikleri belirlemek için islemleri parantez içinde yazmamiz gerekir. Örnegin


int i = 3 + 2 * 6; 
// önce 2 ile 6 çarpilir daha sonra çarpima 3 eklenerek 15 bulunur.

int j = (3 + 2) * 6; 
// önce 3 ile 2 toplanir daha sonra toplam 6 ile çarpilarak 30 bulunur.

28 thoughts on “Yazilim Mutfagi Dersleri (C#) Ders 2 – Degisken Tipleri, Degisken Tanimlama ve Operatörler

  1.  c# toplama yapmak icin + operatorunu kullanirsiniz. ama once hangi sayilari toplayacaksiniz sayilarin yazildigi textboxlari convert methoduyla double degisken tipine cevirmeniz lazim ve deger atamaniz lazim.

    Butunun icine bu kodlari yazioruz

    double sayi1 = Convert.ToDouble(textBox1.Text );

    double sayi2 = Convert.ToDouble(textBox2.Text );

    double toplam=sayi1+sayi2;

    textBox3.Text=toplam.ToString();

    Textbox3 te sonucumuz butono bastgmzda cikar

  2.  c# toplama yapmak icin + operatorunu kullanirsiniz. ama once hangi sayilari toplayacaksiniz sayilarin yazildigi textboxlari convert methoduyla double degisken tipine cevirmeniz lazim ve deger atamaniz lazim.

    Butunun icine bu kodlari yazioruz

    double sayi1 = Convert.ToDouble(textBox1.Text );

    double sayi2 = Convert.ToDouble(textBox2.Text );

    double toplam=sayi1+sayi2;

    textBox3.Text=toplam.ToString();

    Textbox3 te sonucumuz butono bastgmzda cikar

  3. hocam c# da nokta tanimlamasi nasil yapiyor.örnegin; iki nokta arsindaki mesafe, kordinatlari nedir bunnlari

    bulmam için noktayi nasil  tanimlama lazim.kisaca programi yazabilirmisiniz.

  4. Insanin bildiklerini paylasmaya çalismasi bence çok güzel bir hareket. bu düsünce ile yola çikiyor olman bile güzel. Yazilarini bekleriz.

  5. C# ögrenmeye yeni basladim. Aslinda bugün basladim ve bu site yani yazilimmutfagi.com gayet yararli oluyor su anda benim için. Kisa bir süre sonra ne kadar ilerledigimi de buraya yazarak bir feedback saglayacagim 🙂 Umarim kisa sürede istedigim çiktilari almaya baslayabilirim.

  6. CSharpda iki sayiyi toplamak için + kullanmalisin.

    Örnegin

    int a = 8;

    int b= 10;

    int toplam = a+b;

  7. ahmet merhaba. bu aralar geçekten çok yogunum. umarim diger arkadaslar yardimci olacaklardir.

  8.  iyi günler hocam bi sorum olacak randomla harf çeviriyorum durduruyorum listbox a atiyorum ve kendi harflerimle karsilastirma yapiyorum harfler dogruysa  labelde tebrikler dogru bildiniz yanlissa üzgünüz bilemediniz diyen programin kodlarini bide sizden ögrene bilirmiyim rica etsen ben yaptim hata veriyoo..çok acele simdiden tskler…

  9. mustafa kardes senin yatdimina ihtiyacim var . dizilerle ilgili bir kaç sorum olacak .bana yardimci olursan sevinirim. benim problemim ;bir dizim var bu dizide yer alan sayilarim var  102 107 120 160 gibi  ben bunu  baska dizideki elemanla karsilastirip ilk dizideki yerini bulabiliyorum ama ben bunu bi degiskenle karsilastiramiyorum bana yardimci olabilirmisin msn adresim karmak_alanya@hotmail.com    0543 682 13 70 cep numaram

  10. Okul numarasi son rakami tek (1,3,5,7,9) olanlar için:

    Kullanici tarafindan girilen bir metnin (en fazla 10 karakterden olusan) kullanicinin belirledigi karakterden kullanicinin belirledigi karakter kadar olan kismini ekrana yazdiran programin kodlari lazim arkadaslarim c++ bilgim hiç yok kuzenim yardim istedi ona yardimci olmam lazim buda sizin sayenizde olacak..

    Örnek:

    Metin=Sakaryam

    Baslangiç=2

    Karakter sayisi=3

    Ekrana

  11. kardes soruyu yanlis yere yazmissin.   Forum bölümüne yeni baslik açarsan daha hizli  yardim alabilirsin

  12. arkadslar ben bisey soracaktim yardimci olursaniz sevinirim.. 5 tane checkbox var bunlardan biri true oldugunda labele fiyati yaziyor ben iki yada üçü true oldugunda toplam fiyatini yazsin istiyorum kodlari nasil olur yardimci olur musunuz.

  13. Güzel olmusta benim isime yaramiyooo c# da hesap makinesi kodlari lazim bana sizde varsa bi zahmet verirmisiniz:::: 

  14. Msdn den alinti : Although string is a reference type, the equality operators (== and !=) are defined to compare the values of string objects, not references

    Bu adresten tamamina bakabilirsin.

    Referans tip demek class demek degildir.

  15. selam arkadasim string bir referans tipi degildir, bir yapi nesnesidir, yani class degildir cunku;

    string [ ] dizi = new string[2];

    gibi bir tanimlamadan sonra,

    this.text= dizi[1];  sonucunda sonuc null dur, ancak bu stringin bir class oldugunu gostermez cunku null deger referans gosterememe sonucunda cikar, yani string aslinda bir dizi oldugundan ve diziler bir diziye atanirken ilk dizi index numarasindaki adrese gore atandiginda ve burda herhangi bir string dizi baslangic adresi dizi[1] e atanmadigindan sonucta null cikacaktir. yani bu onun bir class olusundan ve referansa gore atama yapacagi anlamina gelmez.

    int [ ] dizi = new int[2];

    gibi bir tanimlamadan sonra

    this.text=dizi[1].tostring(); sonucunda sonuc null olmaz 0 olur varsayilan yapicidan kaynaklanir,burdan farki anlayabilirsin. ancak string tipde varsayilan yapici yoktur.buda onun bir yapi nesnesi oldugunu gosterir.

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir