C# Operatörler,Akış kontrol mekanizmaları,Diziler

C# Operatörler,Akış kontrol mekanizmaları,Diziler

Operatörler

  • Operatörler önceden tanımlanmış birtakım matematiksel ya da mantıksal işlemleri yapmak için kullanılan özel karakterler ya da karakterler topluluğudur.
  • Operatörlerin işlem yapabilmek için ihtiyaç duydukları değerlere ise “operand” denir.
  • x+y -> “+” operatör, “x” ve “y” operand
  • ++z -> “++” operatör, “z” operand
  • Operatörler yapılarına ve işlevlerine göre sınıflandırılabilir.
  • Yapılarına göre
  • Unary (tekil) operatörler
  • () , [], ++, _, +, _, !, ~, new, checked , unchecked , typeof, sizeof
  • Binary (İkili) Operatörler
  • *,/,%, + ,-,,>=, as, is, >,==,!=,&, ^ , | ,&&, ||, = ,*=,/=,%=,+=,-=,>=,&=,^=,| =
  •  Ternary(üçlü) Operatörler
  • ? :

Operatörler İşlevlerine göre

  • Aritmetik operatörler 
  • Karşılaştırma  
  • Mantıksal 
  • Bitsel  
  • Atama ve işlemli atama  
  • Özel amaçlı
  • Aritmetik operatörler (++, --, * , /, +, -, %)
  • Karşılaştırma(,!=, == ,as, is)
  • Mantıksal( || ,&&, !)
  • Bitsel (>>,, . , checked, unchecked )
  • Atama ve işlemli atama( *= , %= , -= vs)
  • Özel amaçlı ( ? : operatörü )

Operatör Önceliği

  • Bazı ifadelerde birden fazla operatör kullanılmış olabilir. Bu gibi durumlarda operatörlerin belirli bir çalışma sırası olacaktır.
  • -X = 6 + 8*10
  • Bu ifadeden iki farklı sonuç elde edilebilir:
  • X = (6 + 8)*10 = 140
  • X = 6 + (8*10) = 86
  • Bütün dillerde olduğu gibi C# dilinde de operatör önceliği vardır. Mantıksal bir yol izlenerek operatörlere öncelik sırası verilmiştir.
  • Örneğimizi tekrar yorumlarsak çarpma işleminin toplama işlemine göre daha öncelikli olduğunu söylemek mümkündür. Bu yüzden işlem sonucu
  • X = 6 + (8 * 10) = 86 olacaktır.
  • Eğer ifadelerde paranteze alınmış kısımlar varsa matematik kurallarından da hatırlayacağımız gibi öncelik parantez içindeki işlemlerdedir.
  • y=(7+(6+4)*5)*2
  • İşlemi sonucunda y değeri 114 olacaktır.
  • Bazı operatörlerin öncelik sırası aynı olabilir. Çarpma‐bölme ya da toplama‐ çıkarma gibi operatörler aralarında aynı önceliğe sahiptir. Böyle bir durumda sağdan sola ya da soldan sağa öncelik ilişkisi devreye girer. Atama operatörleri hariç bütün binary operatörler soldan sağa önceliğe sahiptir, işlemler bu yönde yapılır.

Operatör Öncelik Tablosu

 

  • Bir önceki sunuda verilen tablo C# operatörlerinin öncelik ilişkilerini göstermektedir.
  • Yukarıdan aşağı doğru bir öncelik sıralaması vardır. Aynı satırda belirtilmiş olan operatörler ise aynı önceliğe sahiptirler. Bunlar arasında (atama operatörleri hariç) soldan sağa öncelik ilişkisi söz konusudur.
  • using System.Text;
  • namespace ConsoleApplication1
  • {
  • class Program
  • {
  • static void Main(string[] args)
  •  {
  • int i = 4 +-6;
  • Console.WriteLine(i);
  • }
  • }
  • }
  • -2

Aritmetik Operatörler

  • + , ‐, * ve / operatörleri:
  • Toplama, çıkarma, çarpma ve bölme operatörleridir. İstenilen tipteki sayısal değerlerle kullanılabilir. Bölme işleminde kullanılan değerin tipine göre farklı sonuçlar elde edilebilir.

  • % operatörleri:
  • Bölümden sonra kalanı bulmak yani “mod” almak amacıyla kullanılır Tüm sayısal türler için kullanılabilir.
  • x=10 % 3 -> x= 1
  • y= -7 % 4 -> y= -3
  • f=2.5f % 1.2f ->f = 0.1
  • ++ ve ‐‐ Operatörleri:
  • Önüne ya da sonuna geldiği değişkenin değerini 1 arttırır ya da 1 azaltır. İki şekilde kullanılırlar: Önek (prefix) ve Sonek (postfix). Bütün sayısal değerlerde kullanılabilir.
  • using System;
  • namespace ConsoleApplication1
  •  {
  • class Program
  • {
  • static void Main(string[] args)
  • {
  • int a = 5; int b = 10; int c = 20; int d = 50; float f = 3.4f;
  • a++; ++b; c--; --d;
  • f++;
  • Console.WriteLine("{0}\n{1}\n{2}\n{3}\n{4}\n", a, b, c, d, f);
  • Console.WriteLine(“a+c=,0-”,a+c);
  • }
  •  }  
  • }

Karşılaştırma Operatörü

  • İki sayısal değerin birbirlerine göre büyüklüğünü, küçüklüğünü ve eşitliğini kontrol eder. Bu operatörlerin ürettiği değerler “true” ve “false” değerleridir.

 

Mantıksal Operatörler

  • && (VE) Operatörü:
  • “true” ya da “false” değerindeki operandları mantıksal VE ile işler. Operandlardan biri “false” ise “false” değeri üretir.
  • Kullanımı: &&
  • Mantıksal VE işleminindoğruluktablosu
  • 1.Operand 2.Operand Sonuç
  • True True True
  • True False False
  • False True False
  • False False False
  • bool b1 = 25 < 15 && 5 == 50 ;
  • false
  • bool b2 = 25 > 15 && 5 != 50 ;
  • true

 

  • || (VEYA) Operatörü:
  • “true” ya da “false” değerindeki operandl arı mantıksal VEYA ile işler. Operandlardan biri “true” ise “true” değeri üretir. Kullanımı: ||
  • Mantıksal VEYA işleminin doğruluk tablosu:
  • 1.Operand 2.Operand Sonuç
  • True True True
  • True False True
  • False True True
  • False False False
  • bool b1 = 25 < 15 || 5 == 50 ;
  • false
  • bool b2 = 25 > 15 || 5 != 50;
  • true

 

! (Değil) Operatörü

  • Tek operand alır ve mantıksal Değil (NOT) işlemini uygular. Kullanımı: !
  • Mantıksal DEĞİL işleminin doğruluk tablosu
  • Operand Sonuç
  • True False
  • False True
  • bool b1 = ! (25 < 10) ;
  • True
  • bool b2 = ! (10 != 20) ;
  • false

Bit Tabanlı Operatörler

  • Bitsel operatörler ise sayıları ikilik olarak ele alır ve her bitlerinde işlem gerçekleştirirler.
  • Bitsel operatörler tamsayılarda kullanılır, gerçek sayılarda kullanılamaz.
  • Bitsel operatörlerde bool türünden ifadeler kullanılırsa mantıksal işlemler gerçekleştirir.
  • Bu operatörler bitlerin durumlarını öğrenmek veya belirli bitlerin değerlerini değiştirmek için kullanılabilir.
  • Örn: bool a= false && false ile bool a= false & false aynıdır.

 

  • <<(Bitsel Sola Kaydırma) Operatörü:
  • Verilen bir tamsayının bitlerinin istenilen sayıda sola doğru ötelenmesini sağlar. İki operandı bulunur. İşlem yapılacak değer ve kaydırılacak bit sayısı. İşlem yapılırken en düşük değerlikli bit sıfır ile tamamlanırken en yüksek değerlikli bitten taşanlar atılır. Kullanımı:
  • ifade << öteleme sayısı
  • byte b = 0xFF // 1111 1111 (255)
  • byte c = (byte)(b<<4) // 1111 0000
  • >> (Bitsel Sağa Kaydırma) Operatörü:
  • Verilen bir tamsayının bitlerinin istenilen sayıda sağa doğru ötelenmesini sağlar. İki operandı bulunur. İşlem yapılacak değer ve kaydırılacak bit sayısı. İşlem yapılırken en yüksek değerlikli bit sıfır ile tamamlanırken en düşük değerlikli bitten taşanlar atılır. Kullanımı:
  • ifade >> öteleme sayısı
  • byte b = 0xFF // 1111 1111
  • byte c = (byte)(b>>4) // 0000 1111

Atama ve İşlemli Atama Opreratörleri

  • = (Atama) Operatörü:
  • Bir değişkene herhangi bir değer atamak için kullanılır. Çok bilinen ve kullanılan bir operatördür. Kullanımı ile dikkat edilmesi gereken en önemli nokta = operatörü atama yaptığı değeri üretir. operatörler işlemli atama operatörleri olarak geçer ve işlem sonucunun işlenen operanda atandığı durumlarda kullanılır
  • -x = x + y; ifadesi yerine x+=y;
  • a = a * b; ifadesi yerine a *= b;
  • b = b << n; ifadesi yerine b<<=n;
  • gibi ifadeler örnek olarak verilebilir.

Özel Amaçlı Operatörler​

  • ? : (Ternarty) Operatörü:
  • Bir koşulu karşılaştırıp doğru ya da yanlış olduğu durumlar için farklı değerler üretmeyi sağlayan operatördür. Üç tane operanda sahiptir. Kullanımı:
  • koşul ? doğru değeri : yanlış değeri
  • sayi < 10 ? “10dan küçük” : “10 a eşit ya da büyük”
  • () Operatörü (Tür Dönüştürme):
  • İfade önüne yazıldığında tür dönüştürme operatörü olarak çalışır
  • [] Operatörü (İndeks):
  • Dizilerde elemanın indeksini belirtmek için kullanılır
  • + ve - (İşaret Operatörleri):
  • Bir değişkenin içeriğindeki değerin negatif ya da pozitif olarak işlem görmesini sağlar. + aynı zamanda stringlerde ekleme için de kullanılan bir operatördür.
  • &,*,‐> ve sizeof Operatörleri:
  • C/C++ dilindeki işaretçileri (pointer) C# dilinde de kullanmak mümkündür. Güvensiz (unsafe) kod yazarken bu operatörler de kullanılabilir.
  • . Operatörü:
  • Bir sınıfın ya da yapının elemanlarına ulaşmak için kullanılır
  • Console.WriteLine(); gibi…
  • new Operatörü:
  • Yeni bir nesne oluşturmak için kullanılan operatördür.
  • Değer ve referans tiplerden yeni bir nesne oluşturmak için kullanılabilir
  • OrnekSinif s = new OrnekSinif();

Akış Kontrol Mekanizmaları

  • Koşul ifadeleri – if deyimi – switch deyimi
  • Döngü yapıları (loops) – for döngüsü – while döngüsü – foreach döngüsü
  • Atlama(jump) – break, continue, goto, return
  • Programlar içersinde bazı durumlarda programın akışının değişmesi ya da farklı işlemlerin yapılması gerekebilir. Bazen de seçimlerin yapılması ya da belirli işlemlerin belli sayıda tekrar edilmesi gerekebilir.
  • Bu gibi işlemleri gerçekleştirmek için koşul ifadeleri ve döngü yapıları kullanılır.
  • C# dilinde koşula bağlı olarak işlemler gerçekleştirmek için iki farklı deyim kullanılabilir:
  • if deyimi
  • switch deyimi

​Döngüler(Loops)​​

  • Program içersinde belirli işleri tekrar tekrar yapılmasını sağlayan kod bloklarıdır. Döngüler sonsuz olabileceği gibi belli bir koşul ile kontrol etmek de mümkündür. C# dilinde dört tip döngü yapısı bulunur:
  • for
  • while
  • do while
  • foreach

Diziler (Arrays)

  • Dizilerin boyutu C ve C++ dillerinde derleme sırasında bilinmek zorundadır. Böylece derleyici, dizi için bellekte dizinin boyutuna göre yer ayırmaktadır. Ancak C# ‘ta ise diziler referans tipi olduğu için dizi boyutları çalışma zamanında belirlenebilir.

 

Çok Boyutlu Diziler

  • İki türlü çok boyutlu dizi bulunur. Her boyutta eşit miktarda elemanın olduğu düzenli diziler (matrisler) ve her boyutta farklı sayıda eleman barındıran düzensiz diziler(jagged arrays). Aslında düzensiz diziler elemanları da dizi olan dizilerdir.
  • Çok boyutlu dizi tanımı için tanımlama esnasında * + içine verilecek boyut kadar ‘,’ değeri eklenir. “* , , +” şeklinde yazılır.

Matris Dizileri

  • int [,] dizi = {{1,2},{3,4},{5,6}};
  • Şeklinde tanımlanan bir 3x2’lik dizinin elemanları:

 

Düzensiz Diziler(Jagged Arrays)

  • Dizilerin elemanları da farklı diziler olabilir. Bu durumda tanımlanan dizinin birbirinden farklı boyutlarda alt elemanları olabilir. Bu gibi yapılara düzensiz diziler ismi verilir.

System.Array Sınıfı

  • Dizi nesneleri System.Array sınıfından türemişlerdir. Dolayısıyla bu sınıfın bazı özellik ve metotlarını bünyelerinde barındırırlar.

 

CreateInstance( )

  • CreateInstance metodu ile aşağıdaki gibi dizi nesnesi oluşturulabilir:
  • Array dizi=Array.CreateInstance(typeof(int),5);
  • 5 elemanlı int türünden bir dizi tanımlanır.
  • İlk parametre her zaman Type türünden olmalıdır. Yukarıdaki gibi bir kullanımda, typeof() operatörü yardımıyla int türünün type sınıfındaki karşılığı elde edilmiş olmaktadır. Örn:
  • CreateInstance(Type,int,int,int);
  • 3 boyutlu bir dizi oluşturulmakta.
  • Array dizi=Array.CreateInstance(typeof(int),3,5);
  • int tipinde 2 boyutlu bir dizi tanımlanır.

 

CopyTo ( )

  • CopyTo metodu ile bir dizinin tamamı, başka bir dizinin istenilen yerine kopyalanabilir. Örn:
  • int[ ] dizi1= {1,2,3,4,5,6,7};
  • int dizi2=new int[10];
  • dizi1. CopyTo(dizi2,3);
  • dizi1’in elemanlarını dizi2’nin 3. indisinden itibaren kopyalanır.
  • Aynı işlem Copy() metodu kullanılarak da gerçekleştirilebilir.
  • Copy (Array dizi1,Array dizi2,int uzunluk);
  • Bu şekildeki bir kullanım, uzunluk kadar elemanı dizi1’den dizi2’ye kopyalar. Kopyalama işlemi 0. indekten başlar.
  • Copy (Array dizi1, int x, Array dizi2, int y, int uzunluk);
  • dizi1’in x. İndeksinden sonraki uzunluk kadar elemanı dizi2’nin y. İndeksinden sonrasına kopyalar.
  • Array.Copy(dizi1,2,dizi2,3,1); // dizi1’in 2. indisinden itibaren, 1 elemanı, dizi2’nin 3. indis elemanından itibaren kopyalanır.

 

Array.Sort ( )

 

  • Dizileri küçükten büyüğe sıralamaya yarar. Sort() metodunun birçok kullanım biçimi vardır. Temelde aşağıdaki şekilde kullanımı yaygındır. Örn:
  • Array.Sort(Array);
  • Array Dizi=Array.CreateInstance(typeof(string),3);
  • Dizi.SetValue(“Ali”,0);
  • Dizi.SetValue(“Veli”,1);
  • Dizi.SetValue(“Sami”,2);
  • Array.Sort(Dizi);
  •  foreach(string s in array) Console.WriteLine(s);

 

Array.BinarySearch

  • Sıralı dizilerde arama işlemi yapar. BinarySearch metodunun iki önemli kullanım biçimi vardır.
  • BinarySearch(Array dizi, object nesne);
  • Bu yapı, dizi içerisinde nesneyi arar; eğer aranan nesne bulunursa bulunduğu index ile geri dönülür. Eğer bulunamazsa negatif bir sayıyla geri dönülür.
  • BinarySearch(Array dizi, int baslangic, int uzunluk, object nesne);
  • Bu yapı ise, nesneyi başlangıç indeksinden itibaren uzunluk kadar eleman içerisinde arar.

Diğer Metotlar

  • Clear() metodu, belirtilen indis aralığındaki elemanları sıfırlar. Bir dizi elemanını , 0, Boşluk (Null) ya da false yapar.
  •  Array.Clear(dizi,1,3);// 1. elemandan itibaren 3 elemanı sıfır yapar.
  • Array.Clear(dizi,0,2);// Sıfırıncı elemandan itibaren 2 elemanı sıfır yapar.
  • Reverse() metodu, dizinin tümünü yada belirtilen indis aralığındaki elemanları ters çevirir.
  • Array.Reverse(dizi); veya
  • Array.Reverse (dizi,1,3);
  •  Alttaki gibi bir kullanımda ise,1. elemandan itibaren ilk 3 elemanı ters çevirir.

0 Yorum Yapıldı

Yorum Yollayın