BTP205 – Görsel Programlama C# Temelleri
Bugün… Değişkenler ve İfadeler Akış kontrolü Yorumlar Değişkenler Operatörler Namespaces (Ad alanları) Akış kontrolü if, switch while, do-while, for, foreach İkili operatörler
Temel C# Sözdizimi Boşluklar (boşluk, yeni satır, tab) C# derleyicisi tarafından göz ardı edilir İfadeler noktalı virgül (;) ile sonlandırılır C# kodları büyük-küçük harf duyarlıdır C# blok-yapılı bir dildir ve bloklar ayraçlar ile sınırlanır (‘{’ ve ‘}’) Kodlarınızı yazarken okunabilir olması için içerden başlamaya dikkat ediniz yorumlar yazınız
Yorumlar Tip I /* Tek yorum satırı */ /* Çoklu- Yorum Satırı*/ Tip II // Başka bir tekli yorum satırı a = 0; // sayacı sıfırla Tip III /// Dokümantasyon için kullanılan özel yorum satırları
Değişkenler Değişkenleri, verinin içinde saklandığı kutular olarak düşünebiliriz Değişkenlerin tipleri, isimleri ve değerleri vardır int num = 5; Burada, int değişkenin tipi, num ismi ve 5‘de değeridir Bütün değişkenler kullanılmadan önce tanımlanmalıdır
Basit Tipler Basit tipler sayıları Boolean (doğru ya da yanlış) değerleri kapsar Sayıları ifade etmek için birçok tip vardır, çünkü her tipi ifade edebilmek için farklı sayıda byte gerekir
Tamsayı Tipleri (integer) Diğer adı İzin verilen değer aralığı Byte sayısı sbyte System.SByte –128 ve 127 aralığında tamsayı 1 byte System.Byte 0 ve 255 aralığında tamsayı short System.Int16 –32768 ve 32767 aralığında tamsayı 2 ushort System.UInt16 0 ve 65535 aralığında tamsayı int System.Int32 –2,147,483,648 ve 2,147,483,647 aralığında tamsayı 4 uint System.UInt32 0 ve 4,294,967,295 aralığında tamsayı long System.Int64 –9223372036854775808 ve 9223372036854775807 aralığında tamsayı 8 ulong System.UInt64 0 ve 18446744073709551615 aralığında tamsayı u: unsigned-işaretsiz s: signed-işaretli
Noktalı Sayı Tipleri (Floating Point) Diğer Adı Aralığı Byte sayısı float System.Single 4 double System.Double 8 decimal System.Decimal 16
Hassasiyet Tip Hassasiyet float 7-8 basamak double 15-16 basamak decimal 28 basamak Decimal veri tipi genellikle daha yüksek hassasiyet isteyen para birimleri için kullanılır!
Char veri tipinin 2 byte ve Unicode olarak saklandığına dikkat ediniz! Diğer Basit Tipler Tip Diğer adı İzin verilen aralık char System.Char Tekil Unicode karakter, 0 ve 65535 aralığında bir tamsayı olarak saklanır bool System.Boolean Doğru ya da yanlış string System.String Bir karakter dizisi Char veri tipinin 2 byte ve Unicode olarak saklandığına dikkat ediniz!
Değişken Tanımlama, Değer Atama ve Yazdırma Örneği static void Main(string[] args) { int myInteger; string myString; myInteger = 17; myString = "\"myInteger\" is"; Console.WriteLine("{0} {1}.", myString, myInteger); } Burada iki değişken tanımlanıyor Değişkenlere Değerler atanıyor Değişkenler ekrana yazdırılıyor. "myInteger" is 17.
Değişken Değerlerini Yazdırma Değişken değerlerini ekrana yazdırmak için Console.Write() veya Console.WriteLine() metodlarını kullanınız Console.WriteLine() metodu satırın sonuna yeni bir satır ekler Metodların birçok veri tipini yazdırmak üzere farklı suretleri vardır, en uygun olanı kullanınız
Bazı Console.WriteLine() Suretleri
Ekrana bir int yazdırma int x = 17, y = 25; Console.WriteLine(x); Console.WriteLine(x.ToString()); Console.Write(“x = ”); Console.WriteLine(“x = ” + x); Console.WriteLine(“x = ” + x.ToString()); Console.WriteLine(“x = {0}, y = {1}.”, x, y); 17 x = 17 x = 17, y = 25.
Değişken İsimlendirme İlk karakter bir harf ya da alt çizgi (_) olmalıdır Devam eden karakterler harf, alt çizgi ya da sayı olabilir Rezerve edilmiş kelimeler değişken ismi olarak kullanılamaz Eğer rezerve bir kelimeyi değişken ismi olarak kullanmak isterseniz, başına bir at karakteri (@) getirebilirsiniz
Örnek: Geçerli Değişken İsimleri myBigVar VAR1 _test i myVariable MyVariable MYVARIABLE
Örnek: Geçersiz Değişken İsimleri a+b 99bottles namespace double my-result
Anahtar Kelimeler abstract const extern int out short typeof as continue false interface override sizeof uint base decimal finally internal params stackalloc ulong bool default fixed is private static unchecked break delegate float lock protected string unsafe byte do for long public struct ushort case double foreach namespace readonly switch using catch else goto new ref this virtual char enum if null return throw void checked event implicit object sbyte true volatile class explicit in operator sealed try while
C# Bağlamsal Anahtar Kelimeler add ascending async await by descending dynamic equals from get global group in into join let on orderby partial remove select set value var where yield Bağlamsal anahtar kelimeler bazı dil yapılandırmalarında kullanılırlar. Bu yapılandırmalarda tanımlayıcı olarak kullanılamazlar. Aksi taktirde, tanımlayıcı olabilirler.
Macar Notasyonu Değişkenin tipini gösteren bir önek başa eklenir nAge iAge fDelimeter btnClick txtName
Deve Stili İlk kelime küçük harfle başlar, diğerleri byük harfle devam eder age firstName lastName birthDay
Pascal Stili Bütün kelimeler büyük harfle başlar Age FirstName LastName WinterOfDiscontent
Önceleme dizgeleri (Escape Sequences) Önceleme dizgesi Üretilen karakter Unicode Değeri \’ Tek tırnak işareti 0x0027 \” Çift tırnak işareti 0x0022 \\ Ters bölü çizgisi 0x005C \0 Null 0x0000 \a Alarm (bip sesi çıkarır) 0x0007 \b Geri silme tuşu 0x0008 \f Sayfa başı tuşu 0x000C \n Yeni satır 0x000A \r Satır başına getirme 0x000D \t Yatay tab 0x0009 \v Dikey tab 0x000B
Karakter dizileri (string) üzerine… \u sonrasında Unicode karakterler kullanabilirsiniz “Karli\’s string” “Karli\u0027s string” Eğer bir karakter dizisinin önüne @ işareti koyarsanız bütün önceleme dizgeleri yok sayılır “C:\\inetpub\\wwwroot\\” @“C:\inetpub\wwwroot\” “A short list:\nitem 1\nitem 2” @“A short list: item 1 item 2”
Değişken Tanımlama ve Değer Atama int age; age = 25; int age = 25; int xSize, ySize; int xSize = 4, ySize = 5; int xSize, ySize = 5;
Operatörler Toplama, çıkarma vb. işlemler operatörler aracılığıyla yapılır Üç operatör kategorisi vardır: Unary (tekli) – tek terim üzerinde işlem yapar Binary (ikili) – iki terim üzerinde işlem yapar Tertiary (üçlü) – üç terim üzerinde işlem yapar
Matematiksel Operatörler Kategori Örnek + Binary (ikili) var1 = var2 + var3; – var1 = var2 – var3; * var1 = var2 * var3; / var1 = var2 / var3; % var1 = var2 % var3; Unary (tekli) var1 = +var2; var1 = –var2; % : mod (bölümünden kalan) operatörü Örnek: 8 % 3 2.
Artırma ve Azaltma Operatörleri Kategori Örnek ++ Unary (tekli) var1 = ++var2; -- var1 = --var2; var1 = var2++; var1 = var2--; Önce arttır, sonra atama yap Önce atama yap, sonra arttır
Alıştırma var1=25, var2=6, var3=5 int var1, var2 = 5, var3 = 6; var1 = var2++ * --var3; Console.WriteLine("var1={0}, var2={1}, var3={2}", var1, var2, var3); var1=25, var2=6, var3=5
Değişken Değerlerini Yazdırma int var1 = 3, var2 = 5; Console.WriteLine("var1 = {0}, var2 = {1}", var1, var2); var1 = 3, var2 = 5
Değişken Değerlerini Yazdırma int var1 = 3, var2 = 5; Console.WriteLine("{0}{1}{0}{1}{1}", var1, var2); 35355
Metinleri (string) Okuma string userName; Console.Write("İsminiz: "); userName = Console.ReadLine(); Console.WriteLine("Hoş geldin {0}!", userName); İsminiz: Bilge Hoş geldin Bilge!
Tamsayıları (int) Okuma int age; Console.WriteLine("Yasiniz: "); age = int.Parse(Console.ReadLine()); Console.WriteLine("Yasiniz {0}.", age); Eşdeğer kod: Convert.ToInt32(Console.ReadLine());
Double değerleri okuma double w; Console.WriteLine("Agirliginiz (kg.): "); w = double.Parse(Console.ReadLine()); Console.WriteLine("{0} kilogramsiniz", w); Equivalent code: Convert.ToDouble(Console.ReadLine());
Atama Operatörleri Operatör Örnek Eşdeğeri = var1 = var2; += var1 = var1 + var2; -= var1 -= var2; var1 = var1 – var2; *= var1 *= var2; var1 = var1 * var2; /= var1 /= var2; var1 = var1 / var2; %= var1 %= var2; var1 = var1 % var2;
Operatör Öncelikleri Öncelik Operatörler En yüksek ++, -- (son ek olarak), +, - (unary) *, /, % +, - =, *=, /=, %=, +=, -= En düşük ++, -- (ön ek olarak)
Ad Alanları (Namespaces) Hazır kütüphaneleri sağlamanın .NET yolu C ve C++’daki başlık (header) dosyaları Java’daki paketler .NET sınıfları ad alanlarında gruplanmıştır Sin, Cos, Atan, Acos, Pi, Sqrt, vb. Math ad alanı Int32, Double, vb. System ad alanı Windows Forms sınıfları System.Windows.Forms Kayıt defteri (registry) operasyonları Microsoft ad alanı Programlarınızı ya da DLL’lerinizi ayrı bir ad alanı içinde yazabilirsiniz, örneğin şirketinizin isminde
Akış Kontrolü Dallanma (if, switch, üçlü operatörler) Döngüler (for, while, do-while, foreach)
Karşılaştırma Operatörleri Anlamı == Eşittir != Eşit değildir < Küçüktür > Büyüktür <= Küçük eşittir >= Büyük eşittir
Boolean Değişkenler Boolean bir değişken doğru ya da yanlış değerleriniz alabilir bool isWhite = true; isWhite = false; Karşılaştırma sonuçları boolean değişkenlerde tutulabilir bool isLong = (height > 195); bool isWhite = (color == Color.White);
Temel Mantık Operatörleri Adı Örnek && AND – VE (a > 0) && (a < 10) || OR – VEYA (a <= 0) || (a >= 10) ! NOT – DEĞİL !(a < 100)
‘Eğer’ İfadeleri int height; Console.Write("Boyunuzu giriniz (cm.) "); height = int.Parse(Console.ReadLine()); if (height > 190) Console.WriteLine("Siz uzun bir kişisiniz!"); else Console.WriteLine("Boyunuz normaldir!");
‘Eğer’ İfadeleri if (koşul) <koşul doğru ise çalıştırılacak ifadeler>; { <ifade 1>; <ifade 2>; }
if..else if (koşul) < koşul doğru ise çalıştırılacak ifadeler>; < koşul yanlış ise çalıştırılacak ifadeler >; Birden fazla ifade yer alırsa süslü parantez kullanınız.
‘if’ üzerine.. Parantezler (‘(’ and ‘)’) mutlaka gereklidir Süslü parantezler (‘{’ and ‘}’) birden fazla ifade var ise kullanılmalıdır: if (test) { ifade1; ifade2; } else kısmı atılabilir if ifadeleri iç içe yazılabilir
Örnek: 3 sayıdan en küçüğünü bulma int a, b, c, min; Console.WriteLine("3 sayi giriniz:"); Console.Write("a = "); a = int.Parse(Console.ReadLine()); Console.Write("b = "); b = int.Parse(Console.ReadLine()); Console.Write("c = "); c = int.Parse(Console.ReadLine()); if (a < b) { if (a < c) min = a; else min = c; } if (b < c) min = b; Console.WriteLine(«En kucuk sayi {0}.", min);
Koşulları kontrol etme if (var1 == 1) { // bir şeyler yap. } else { if (var1 == 2) { // başka bir şeyler yap. if (var1 == 3 || var1 == 4) { else if (var1 == 2) { else if (var1 == 3 || var1 == 4) {
Sık karşılaşılan hatalar if (var1 = 1) {…} if (var1 == 1 || 2) {…}
‘switch’ İfadeleri switch (<testDegiskeni>) { case <karsilastirmaDegeri1>: <eğer <testDegiskeni > == <karsilastirmaDegeri1> ise calistirilacak ifadeler> break; case < karsilastirmaDegeri2>: <eğer <testDegiskeni > == <karsilastirmaDegeri2> ise calistirilacak ifadeler> . . . case <karsilastirmaDegeriN>: <eğer <testDegiskeni > == <karsilastirmaDegeriN> ise calistirilacak ifadeler> default: <eğer <testDegiskeni> != karsilastirmaDegerleri ise calistirilacak ifadeler> }
Örnek 1 switch (var1) { case 1: // Bir şey yap. break; case 2: // Başka bir şey yap. case 3: case 4: default: }
Örnek 2 switch (secim) { case 1: Console.WriteLine(“1 sectiniz”); break; case 2: Console.WriteLine(“2 sectiniz”); case 3: Console.WriteLine(“3 sectiniz”); default: Console.WriteLine(“1 ile 3 arasinda bir tamsayi seciniz.”); }
break kullanmayi unutmayiniz! switch Örneği C dilinde yalnızca tamsayı değerler koşul olarak kullanılabilir, ancak C# dilinde, metinler de kullanılabilir. switch (mtnMeslek) { case "ogretmen": MessageBox.Show("Siz cocuklari egitiyorsunuz"); break; case "programci": MessageBox.Show("Siz muhtemelen zeki ama anti-sosyalsiniz"); case «muhasebeci": MessageBox.Show("Siz bir sayma makinesisiniz"); default: MessageBox.Show("switch ifadesine uyan meslek bulunamadi"); } break kullanmayi unutmayiniz!
Örnek 3 switch (mtnHayvan) { case “kus”: Console.WriteLine(“2 bacagi vardir.”); break; case “at”: case “kopek”: case “kedi”: Console.WriteLine(“4 bacagi vardir.”); case “kirkayak”: Console.WriteLine(“40 bacagi vardir.”); case “yilan”: Console.WriteLine(“Hic bacagi yoktur.”); default: Console.WriteLine(“Bu hayvanı bilmiyorum!”); }
Üçlü Operatör ? : <test> ? <DogruİseSonuc> : < YanlisİseSonuc > 3 operand üzerinde çalıştığı için Tertiary denir (unary ve binary operatörler sırasıyla 1 ve 2 operand üzerinde çalışırlar) Örnek: if (a < b) min = a; else min = b; min = (a < b) ? a : b;
Döngüler
for Döngüsü for (öndeğerleme; koşul; değiştirme_ifadesi) { <ifadeler> } Örnek: for (i = 0; i < 10; i++) { Console.WriteLine("i = " + i.ToString());
while Döngüsü while (koşul) { <ifadeler> }
do-while Döngüsü do { <ifadeler> } while (koşul);
foreach Döngüsü foreach (<tip> <ad> in <liste>) { <ifadeler> }
for döngüsü ile ayları yazdırma string[] aylar = new string[] {"Ocak", "Şubat", "Mart", "Nisan", "Mayis", "Haziran", "Temmuz", "Agustos", "Eylul", "Ekim", "Kasim", "Aralik" }; for (int i = 0; i < months.Length; i++) { MessageBox.Show(months[i]); }
foreach döngüsü ile ayları yazdırma string[] aylar = new string[] {"Ocak", "Şubat", "Mart", "Nisan", "Mayis", "Haziran", "Temmuz", "Agustos", "Eylul", "Ekim", "Kasim", "Aralik" }; foreach (string ay in aylar) { MessageBox.Show(ay); }
Alıştırma İlk 10 asal sayıyı ekrana yazan bir program yazınız.
Döngüleri kesmek break – döngüyü derhal bitirir continue – döngünün o anki çevrimini bitirir return – fonksiyondan geri döner goto – belirlenmiş bir noktaya sıçrar (kullanmayın)
Sonsuz Döngüler while (true) { … }
Örnek int sayi; while (true) { Console.Write(“1 ile 100 arasinda bir sayi giriniz: ”); sayi = Convert.ToInt32(Console.ReadLine()); if (sayi >= 1 && sayi <= 100) break; else Console.WriteLine(“1 ile 100 arasinda girmelisiniz.”); Console.WriteLine(“Lütfen tekrar deneyin!\n”); }
Bitwise Operatörler & (Bitwise AND) | (Bitwise OR) ~ (Bitwise NOT) ^ (Bitwise XOR)
Örnekler 0110 & 0101 = 0100 (1&1=1, aksi taktirde 0) 0110 ^ 0101 = 0011 (aynı0, farklı1) ~0110 = 1001 (01, 10)
Kaydırma Operatörleri >> (Sağa kaydır) << (Sola kaydır) >>= <<=
Sonuçlar int a = 16; int b = a >> 2; // b 4 olur int c = a << 4; // c 256 olur a >>= 2; // a 4 olur a <<= 4; // a 64 olur