YZM 2105 Nesneye Yönelik Programlama Yrd. Doç. Dr. Deniz KILINÇ Celal Bayar Üniversitesi Hasan Ferdi Turgutlu Teknoloji Fakültesi Yazılım Mühendisliği 1
BÖLÜM - 2 C# Programlama Dili Elemanları Bu bölümde; Veri tipleri Değişkenler ve Sabitler Tip Dönüşümleri Operatörler Akış Kontrol Mekanizmaları ve Döngüler Diziler Yapılar (Struct) ile ilgili konular anlatılacaktır. 2
Sabitler Sabitler, içeriği sabit olan değer ve ifadelerin saklanması için kullanılan değişken türleridir. Başlangıçta sabit değişkene bir değer vererek, ihtiyaç duyulduğunda bu değişkeni kullanabiliriz. Değerini sonradan değiştirmek istediğimizde derleyici, derleme zamanı hatası verir. 3
Sabitler Sabit değişkenlerinin tanımlandığı satırda değer verilmek zorundadır. C# programlama dilinde const anahtar sözcüğü kullanılarak tanımlanır. 4
Değişkenler Program içerisinde üretilen değerleri bellekte geçici olarak saklamak için kullanılırlar. İlk değerlerinin atanması zorunlu değildir. Program içerisinde de sonradan değer ataması yapılabilir. Aynı satırda aynı tipte birden fazla değişken tanımlaması ve değer ataması yapılabilir. Global olarak tanımlanmayan değişkenler sadece tanımlandıkları metot içerisinde kullanılabilirler. Değişkenlerin tipini öğrenmek için GetType() metodu kullanılır. 5
Değişkenlerin Tanımlanması [değişkenin tipi] [değişkenin adı] = [ilk değer] ; int yarıcap = 12; float alan; int yukseklik = 2, taban = 4 ; string adsoyad ; string ad = " Deniz", soyad = " Kılınç"; 6
Değişken Türleri Değişken Türü Boyutu CTS Değer Aralığı Örnek byte 1 bayt System.Byte 0,..., 255 (tam sayı) byte a=5; sbyte 1 bayt System.Byte -128,..., 127 (tam sayı) sbyte a=5; short 2 bayt System.Int16-32768,..., 32767 (tam sayı) short a=5; ushort 2 bayt System.UInt16 0,..., 65535 (tam sayı) ushort a=5; int 4 bayt System.Int32-2147483648,..., 2147483647 (tam sayı) int a=5; uint 4 bayt System.UInt32 0,..., 4294967295 (tam sayı) uint a=5; long 8 bayt System.Int64-9223372036854775808,..., 9223372036854775807 (tam sayı) long a=5; ulong 8 bayt System.UInt64 0,..., 18446744073709551615 (tam sayı) ulong a=5; float 4 bayt System.Single ±1.5*10-45,..., ±3.4*10 38 (reel sayı) double 8 bayt System.Double ±5.0*10-324,..., ±1.7*10 308 (reel sayı) float a=5f; veya float a=5f; double a=5; veya double a=5d; veya double a=5d; decimal 16 bayt System.Decimal ±1.5*10-28,..., ±7.9*10 28 (reel sayı) decimal a=5m; veya decimal a=5m; bool 1 bayt System.Boolean True ya da False bool cevap = False; char 1 bayt System.Char 16 Bit Unicode Karakter char harf = 'a'; 7
Değişken Türleri (devam ) Değişken tanımlamaları istenirse programlama diline ait değişken tipi tanımlamasıyla, istenirse.net uygulama geliştirme platformunun bir özelliği olan CTS (Common Type System) tanımlaması ile yapılabilir. 8
Common Type System.NET uygulama geliştirme platformunda programlama dilleri arasındaki standardizasyonu CTS dediğimiz sistem sağlar. C#.NET ile program yazarken tamsayı veri tipinde değişken tanımlamak için int ifadesini kullanırız. VB.NET'te ise tamsayı veri tipi Integer olarak geçer. Her iki dil farklı olsa dahi CTS dediğimiz sistem sayesinde int ve Integer tanımlamalar MSIL'e çevrilirken CTS sisteminde tanımlanan System.Int32 olarak aradile çevrilecektir. 9
Değişken Tipi Dönüşümleri 10
Değişken Tipi Dönüşümleri a) Bilinçsiz (İmplicit) Tür Dönüşümü b) Bilinçli (Explicit) Tür Dönüşümü (Type-casting) c) Tostring() Metodu İle Tür Dönüşümü d) Convert Sınıfı İle Tür Dönüşümü 11
Bilinçsiz (İmplicit) Tür Dönüşümü Değişkenin tanımlandığı veri tipinden daha yüksek kapasiteli bir veri tipindeki değişkene atanabilir. Bu duruma Bilinçsiz (İmplicit) Tür Dönüşümü denir. 12
Bilinçli (Explicit) Tür Dönüşümü Bilinçli Tür Dönüşümü, derleyicinin izin vermediği durumlarda kullanılır. Bir diğer adı type-casting olan bu yöntemde veri kaybı yaşanabilir. [Değişken] = [hedef tür] [değişken adı] i = (int) a; j = (char) b; 13
Bilinçli (Explicit) Tür Dönüşümü (devam ) 14
ToString() Metodu İle Tür Dönüşümü ToString() metodu Bir değişken veya sabitin değerini string veri tipine dönüştürerek tutar. Kullanımı: [değişken adı]. ToString(); 15
ToString() Metodu İle Tür Dönüşümü (devam ) 16
Convert Sınıfı İle Tür Dönüşümü System isim alanının altındaki Convert sınıfı tür dönüşümü yapılabilen metotları içeren bir sınıftır. Bu metodlar ile hemen hemen her türü, her türe CTS karşılıklarını kullanarak dönüştürülür. [değişken] = Convert. [hedef tür] ( [değişken] ); 17
Convert Sınıfı İle Tür Dönüşümü (devam ) 18
Convert Sınıfı İle Tür Dönüşümü (devam ) 19
Operatörler 20
Operatörler Programlama dillerinde tek başlarına herhangi bir anlamı olmayan ancak programın işleyişine katkıda bulunan karakter ya da karakter topluluklarına operatör denir. Örneğin a+b ifadesinde + işareti bir operatördür. Operatörlerin etki ettikleri sabit ya da değişkenlere ise operand denir. Örneğin a+b ifadesinde a ve b birer operanddır. 21
Operatörler Operatörler ( )! + - ++ -- * / % + - < <= > >= is as ==!= & ^ &&?: = *= /= %= += -= &= ^=!= En Yüksek En Düşük Operatörlerde İşlem önceliği 22
Operatörler a) Aritmetik Operatörler b) Aktarma Operatörü c) Mantıksal Operatörler d) Karşılaştırma Operatörleri e) «as» ve «is» Operatörleri f) typeof operatörü g) Bitsel Operatörler 23
Aritmetik Operatörler Operatör Açıklama + Toplama - Çıkarma * Çarpma / Bölme % Mod Alma 24
Aktarma Operatörleri Operatör += -= *= /= Açıklama Eşitliğin sağındaki ve solundaki değeri toplar ve solundaki değişkene atar Eşitliğin sağındaki ve solundaki değeri çıkarır ve solundaki değişkene atar Eşitliğin sağındaki ve solundaki değeri çarpar ve solundaki değişkene atar Eşitliğin sağındaki değeri solundaki değerine bölerek solundaki değişkene atar 25
Mantıksal Operatörler Operatör Açıklama && Ve Veya! Değil ^ Özel Veya?? Null coalescing?: Koşul 26
&& (Ve) Operatörü İlk ifade ve sonraki ifadeler doğru ise True değerini döndürür. Herhangi bir koşul False değerini taşıyorsa geriye False değerini döndürür. 1 && 1 = True (5 < 6 ) && (4 < 4) = False (2^4 < 3) && (6/2 < 4) = False 27
(Veya) Operatörü İlk ifade veya sonraki ifadelerden herhangi birisi doğru ise True değerini döndürür. 1 1 = True (5 < 6 ) (4 < 4) = False (2^4 < 3) (6/2 < 4) = True 28
! (Değil) Operatörü Koşulun değerini tersine çevirir. ( 8 < 3 ) (4/8 < 3/9)! = False (False)! = False True = True 29
?? Null Coalescing Operatörü Eğer ilk değişken NULL ise ikinci ifade eşitliğin solundaki değişkene atanır. 30
?: Koşul Operatörü Verilen koşula göre verilen değerlerden birini çalıştırır. [koşul]? [doğruysa_değer] : [yanlışsa_değer] 31
Karşılaştırma Operatörleri Operatör Açıklama < Küçüktür > Büyüktür <= Küçük Eşittir >= Büyük Eşittir == Eşittir!= Eşit Değildir --> Uzaklaşma Operatörü 32
Akış Kontrol Mekanizmaları 33
Akış Kontrol Mekanizmaları 1. Karar Yapıları a) if - else Yapısı b) switch - case Yapısı 2. Döngüler a) for Döngüsü b) foreach Döngüsü c) while Döngüsü d) do while Döngüsü 34
Karar Yapıları 35
if else Yapısı If ve else karşılaştırma deyimidir. else kullanımı isteğe bağlıdır. Sorgulanan koşul olumlu ise if den sonraki bölüm ; olumsuz ise else den sonraki bölün işleme konulur. Tek satır deyim içeren bloklarda {} sembolünün kullanımına gerek yoktur. 36
switch case Yapısı Bir değişkenin değerini sabitlerle karşılaştırılması sonucunda farklı işlemler yapılacak ise switch case yapısı kullanılır. switch case ile yapılan kontroller if else kontrol yapısıyla da yapılabilir fakat switch case yapısı sabit değerler karşılaştırılacağında kodun okunabilirliğini arttırır. Kontrol edilen sabitler double ve float olamaz. Aynı sabit değer ayrı case bloklarında bulunamaz. 37
switch case Yapısı Genel yazım biçimi şu şekildedir: Switch ( [koşul] ) { case [sabit] : [işleme alınacak komutlar]; break; case [sabit] : [işleme alınacak komutlar]; break;... } default : [sabitlerle eşleşmeyince işleme alınacak komutlar]; break; 38
Döngüler 39
for Döngüsü Bir veya birden fazla kod satırının belirtilen koşulları sağladığı sürece artış ve ya azalım değeri kadar tekrarlanmasını sağlayan döngüdür. Başlangıç ve bitiş değerleri olmak zorundadır. Başlangıç değeri, koşul, artış veya azalım kısımları farklı bir yerde tanımlanmak istenirse boş bırakılabilir. Fakat noktalı virgüller kesinlikle olmalıdır. 40
for Döngüsü Genel yazım biçimi şu şekildedir: for ( [başlangıç değeri ] ; [koşul] ; [artış veya azalım] ) {... [işleme alınacak komutlar]; }... 41
foreach Döngüsü foreach döngüsü bir dizinin ve ya koleksiyonun her elemanı için bulundurduğu komutları çalıştıran döngüdür. Dizinin her elemanının değerini geçici bir değişkene atayarak bu değişken üzerinde işlemler yapmamızı sağlar. foreach döngüsü ile dizi veya koleksiyondaki elemanların değerleri değiştirilemez. Sadece «read only» işlemler yapılabilir. Dizi veya koleksiyonların eleman sayıları bilinmediğinde kullanılır. 42
foreach Döngüsü Genel yazım biçimi şu şekildedir: foreach ( [değişkenveritipi] [değişkenadı] in [dizi/koleksiyon] ) {... [işleme alınacak komutlar]; }... 43
foreach Döngüsü Örnek: Bir dizinin tüm elemanlarının ekrana yazdırılması 44
while Döngüsü while döngüsü bir koşulun doğru olduğu durumlarda belirli işlemlerin tekrarlanması için kullanılan döngüdür. Koşul yanlış olduğunda döngüden çıkılır. Döngünün başlayabilmesi için başlangıçta koşulun sağlanması / koşulun doğru olması gereklidir. for döngüsünün yalnızca koşuldan oluşan halidir. 45
while Döngüsü Genel yazımı şu şekildedir: while ( [koşul] ) {... [işleme alınacak komutlar] ; [arttırım / azalım] ; }... 46
do - while Döngüsü while döngüsü ile aynı mantıktadır. Koşul sağlanmasa da komutlar en az bir kez çalışması istendiğin kullanılan döngüdür. 47
do - while Döngüsü Genel yazımı şu şekildedir: do {... [işleme alınacak komutlar] ; [arttırım / azalım] ;... } while ( [koşul] ) ; 48
Döngülerde Kullanılan Deyimler 49
break Deyimi Döngü devam ederken döngünün koşuluna bakılmaksızın döngüden çıkılmasını sağlayan deyimdir. Tüm döngü türlerinde kullanılabilir. Genel kullanımı şu şekildedir: {... break; //burada döngüden çıkılır sonrasındaki komutlar işleme alınmaz }... 50
continue Deyimi Döngüde bir adım atlamak için kullanılır. Döngüde sıra bu deyime geldiğinde, continue ardından döngü sonuna kadar olan komutlar atlanır ve döngüye sonraki adımdan devam edilir. Genel kullanımı şu şekildedir: { }... continue; //burada sonraki komutlar işletilmez sonraki döngü adımına //atlanır... 51
Diziler 52
Diziler Aynı veri tipindeki değişkenlerin sıralı bir şekilde saklanması ve erişilmesi için kullanılan yapılardır. Boyutlarına göre diziler: 1. Tek Boyutlu Diziler 2. Çok Boyutlu Diziler a) Düzenli Diziler (Matris) 53
Tek Boyutlu Diziler Tek Boyutlu Dizilerin bildirimi şu şekilde yapılır: [diziveritipi] [] [diziadı] = new [diziveritipi][elemansayısı]; int[] telefonnumaralari = new int[25]; İstenirse eleman sayıları belirtilmeden de dizi bildirimi yapılabilir: string [] cumle; bool [] devamsizlik; 54
Tek Boyutlu Diziler (devam ) Diziler tanımlandıktan sonra dizinin her elemanına tanımlandıkları veri tipinin varsayılan değerleri atanır. Sayısal veri tipleri için 0, Object veri tipi için NULL, String veri tipi için " ", Char veri tipi içim (boşluk), Bool veri tipi için False atanır. 55
Tek Boyutlu Diziler (devam ).NET uygulama geliştirme platformunda C de olduğu gibi dizi indisleri 0 dan başlar. dizi[0] dizinin 1. elemanı, dizi[4] dizinin 5. elemanı olarak kullanılır. Dizi bildirimlerinde dizi boyutu bir değişkene bağlı olabilir. int a = 20; int[] dizi = new int[a*2] ; 56
Tek Boyutlu Diziler (devam ) Dizi tanımlanırken dizi elemanlarının başlangıç değerleri verilebilir. Dizininin veri tipine göre dizi elemanı değerlerini aralarında virgül varken ; Sayısal veri tip ise olduğu gibi string veri tipi ise çift tırnak (" ") işaretleri arasında, char veri tipi ise tek tırnak ( ) işaretleri arasında yazılmalıdır. [diziveritipi] [] [diziadı] = { [dizi elemanlarının değerleri] }; 57
Tek Boyutlu Diziler (devam ) string[] mevsimler = {"yaz", "kış", "güz", "bahar"}; int[] ogrnumara = { 2146, 2112, 2121, 1112211}; char[] harf = { a, b, c } ; Örneklerdeki gibi dizinin eleman sayısı belirtilmeden tanımlanan dizilerde dizinin boyutu girilen değerlerin sayısı kadardır. Mevsimler dizisi 4 elemanlı, ogrnumara dizisi 4 elemanlı, harf dizisi ise 3 elemanlı olarak tanımlanır. 58
Düzenli Diziler(Matris) Çok boyutlu diziler her bir elemanı bir dizi şeklinde olan dizilerdir. Her bir dizi elemanının eşit sayıda dizi içerdiği dizilere düzenli dizi (matris) denir. Matrisler boyutlarına göre aşağıdaki gibi gruplandırılır: İki boyutlu matrisler Üç Boyutlu matrisler n boyutlu matrisler 59
Düzenli Dizilerin (Matris) Bildirimi Genel bildirim biçimi şu şekildedir: [veri tipi] [, ] [dizi adı]= new [veri tipi] [ [satır], [sütün] ] ; int [,] carpimtablosu = new int [9,9]; int [,] sayilar = new int [4,4]; char [,] kelime = new char [10, 29]; string [,,] takvim = new string [12, 30, 24]; 60
Yararlanılan Kaynaklar Sefer Algan, HER YÖNÜYLE C#, Pusula Yayıncılık, İstanbul, 2003 Milli Eğitim Bakanlığı «Nesne Tabanlı Programlama", 2012 http://www.algoritmaveprogramlama.com 61