C# ile Bilgisayar Programlama Temelleri

advertisement
SVETLIN NAKOV & CO.
C# ile Bilgisayar
Programlama Temelleri
ÇEVİREN : AYŞEGÜL TUNÇ
fotoğraf: Brian J. Skerry, http://travel.nationalgeographic.com
C# İle Bilgisayar Programlama Temelleri
İçindekiler Tablosu
Yazar Hakkında 8
Önsöz 9
Bölüm 0: Giriş 10
Bu Kitapta Kimler Hedefleniyor? 10
Öncesinden Bilgi Gerekli Değildir! 11
Bu Kitabın Kapsamı Nedir? 12
Bu Kitabın Öğretmedikleri Nelerdir? 13
.NET Platformu 13
Yazılım Mühendisliği, Takım Çalışması 13
WEB Teknolojileri, Veritabanları 13
Bilgi Nasıl Sunulmuştur? 14
C# ve .NET Platformu 14
C# Programlama Dili 15
Neden C#? 17
C# veya Java? 17
Neden PHP Değil? 17
Neden C veya C++ Değil? 18
C# Avantajları 19
Örnekler Visual Studio 2012 İçin C# 5 Dilinde Verilmiştir 20
Bu Kitabı Nasıl Okumalısınız? 21
Alıştırmaları Asla İhmal Etmeyin! 22
Bu Kitaptan Öğrenmek İçin Ne Kadar Zamana İhtiyacınız Var? 22
Karmaşık veya Kolay? 23
Neden Veri Yapıları ve Algoritmaların Önemi Belirtilmiştir? 24
Google’da İş Görüşmeleri 24
Microsoft’ta İş Röportajları 24
Gerçekten Bir Programcı Olmak İster Misiniz? 25
Bir Programcı Olmak İçin Motive Olun yada Bir Başka İş Bulun! 27
Kitabın İçindekilerine Bir Bakış 28
Bölüm 0: Önsöz 28
Bölüm 1: Programlamaya Giriş 28
Bölüm 2: Temel Türler ve Değişkenler 29
Bölüm 3: İşleçler ve İfadeler 29
Bölüm 4: Konsol Giriş ve Çıkış 30
www.nakov.com
Page 2 / 151
C# İle Bilgisayar Programlama Temelleri
Bölüm 5: Koşullu İfadeler 30
Bölüm 6: Döngüler 31
Bölüm 7: Diziler 31
Bölüm 8: Sayısal Sistemler 32
Bölüm 9: Metotlar 32
Bölüm 10: Özyineleme 33
Bölüm 11: Nesneleri Oluşturma ve Kullanma 33
Bölüm 12: İstisnai Durum İşleme 34
Bölüm 13: Dizeler ve Metin İşleme 34
Bölüm 14: Sınıfları Tanımlama 35
Bölüm 15: Metin Dosyaları 35
Bölüm 16: Doğrusal Veri Yapıları 36
Bölüm 17: Ağaçlar ve Grafikler 36
Bölüm 18: Sözlükler, Karma Tabloları ve Kümeler 37
Bölüm 19: Veri Yapıları ve Algoritma Karmaşıklığı 37
Bölüm 21: Yüksek Kalite Programlama Kodu 38
Bölüm 22: Lambda İfadeleri ve LINQ 39
Bölüm 23: Problem Çözme Metodolojisi 39
Bölüm 24, 25, 26: Örnek Programlama Sınavı 40
Bölüm 27: Sonuç 40
Bölüm 1: Programlamaya Giriş 41
Bölümün İçindekileri 41
Bilgisayarlar Bilgiyi Nasıl İşler? 41
“Programlama” Ne Demektir? 41
Bilgisayarı Yönetmek 42
Programlamanın Özü 42
Yazılım Geliştirme Aşamaları 43
Dokümantasyon 47
Yazılım Geliştirme Kodlamadan Daha Fazlasıdır 47
İlk C# Programımız 48
Main() Metotunu Tanımlamak 49
C# Büyük ve Küçük Harf Arasında Ayrım Yapar! 50
Program Kodu Doğru Biçimli Olmalıdır 50
Başlıca Biçimlendirme Kuralları 52
Dosya Adları Sınıf Adlarına Karşılık Gelir 53
C# Dili ve .NET Platformu 53
C# Dili 53
Anahtar Sözcükler 54
www.nakov.com
Page 3 / 151
C# İle Bilgisayar Programlama Temelleri
Otomatik Bellek Yönetimi 54
Ortamdan ve Programlama Dilinden Bağımsızlık 55
Common Language Runtime (CLR) – .NET’in Kalbi 56
.NET Framework’u Nasıl Edineceğim? 56
.NET’in Çekirdek Kurulumu (21MB) 56
.NET Framework SDK (134 MB) 57
.NET Teknolojileri 57
Hangi İşletim Sistemlerinde Çalışıyor? 57
Verinin görselleştirilmesi 58
Yazılım teknolojileri 58
.NET teknolojisi 58
The Base Class Library - Temel Sınıf Kütüphaneleri 59
Uygulama Programlama Arayüzü (API) 60
Windows Konsolunda C# Programları Oluşturma 61
Windows Üzerinde C# Programları Derleme 64
Windows Üzerinde C# Programları Derleme ve Çalıştırma 65
Windows Üzerinde Sistem Yollarını Değiştirme 66
Visual Studio Tümleşik Geliştirme Ortamı (IDE) 70
Tümleşik Geliştirme Ortamları 70
Visual Studio Nedir? 70
Yeni bir C# Projesi Oluşturma 74
Kaynak Kodun Derlenmesi 77
Projeyi Başlatma 78
Programda Hata Ayıklama 79
Diğer .NET Dilleri 82
Bölüm 2: Temel Türler ve Değişkenler 84
Bölümün İçindekileri 84
Değişken Nedir? 84
Veri Türleri 84
Veri türleri aşağıdakilerle karakterize edilir: 85
C# temel veri türleri aşağıdaki türlerle belirlenmiştir: 85
C# ve .NET Türleri Arasındaki İlişki 86
Tamsayı Türleri 86
Kayan Noktalı Gerçek Sayı Türleri 89
Gerçek Sayı Türü: Float 89
Gerçek Sayı Türlerinin Özel Değerleri 90
Gerçek Sayı Türü: Double 90
Kayan Noktalı Gerçek Sayı Türleri - Örnek 91
www.nakov.com
Page 4 / 151
C# İle Bilgisayar Programlama Temelleri
Gerçek Sayı Türlerinin Duyarlılığı 91
Gerçek Sayı Türlerinin Doğruluğu - Örnek 92
Gerçek Sayı Türlerinin Sunumu Hakkında 93
Gerçek Sayı Türleri ile Hesaplamalarda Hatalar 93
Ondalık Duyarlıklı Gerçek Sayı Türleri 94
Boole Türü 95
Boole Türü – Örnek 96
Character Türü 97
Character Türü – Örnek 97
Dizeler 98
Dizeler – Örnek 98
Object Türü 98
Object Kullanımı – Örnek 98
Nullable Türler 99
Değişkenlerin Özellikleri 101
Değişkenlerin Adlandırılması – Kurallar 102
Değişkenlerin Adlandırılması – Öneriler 102
Değişkenlerin Bildirilmesi 104
Değer Atanması 105
Değişkenlerin Başlatılması 105
Standart Değişken Değerleri 105
Değer ve Referans Türleri 107
Değer ve Referans Türleri ve Bellek 108
Simgedeğerler 111
Değer ve Referans Türleri 111
Gerçek Sayı Türlerinin Özel Değerleri 111
Boole Simgedeğeri 111
Boole Simgedeğerleri – Örnek 112
Integer Simgedeğerleri 112
Tamsayı Simgedeğerleri – Örnek 112
Gerçek Sayı Simgedeğerleri 113
Gerçek Sayı Simgedeğerleri – Örnekler 113
Karakter Simgedeğerleri 113
Kaçma Karakterleri 114
Kaçma Karakterleri – Örnek 115
Dize Simgedeğerleri 115
Dize Simgedeğerleri – Örnek 116
Bölüm 3: İşleçler ve İfadeler 118
www.nakov.com
Page 5 / 151
C# İle Bilgisayar Programlama Temelleri
Bölümün İçindekileri 118
İşleç Nedir 118
C# İşleçleri 118
İşleçler 118
İşleç Kategorileri 119
Argüman Sayısına Göre İşleç Türleri 119
İşleçler – Örnek 120
C# İşleç Önceliği 120
Aritmetik İşleçler 122
Aritmetik İşleçler - Örnek 123
Mantıksal İşleçler 123
Mantıksal İşleçler - Örnek 124
De Morgan Kuralları 125
Dizileri Bitiştirmek İçin İşleçler 125
Dizileri Bitiştirmek İçin İşleçler – Örnek 126
Bitsel İşleçler 127
Bitsel İşleçler ve Performansları 128
Bitsel İşleçler – Örnek 129
Karşılaştırma İşleçleri 129
Karşılaştırma İşleçleri – Örnek 130
Atama İşleçleri 130
Atama İşleçleri – Örnek 131
Peşpeşe Atama 131
Bileşik Atama İşleçleri 132
Koşullu İşleç ?: 133
Koşullu İşleç “?:” – Örnek 133
Diğer İşleçler 134
“.” İşleci 134
[] Kare Köşeli Parantez İşleci 134
() Parantez İşleci 134
Türü Dönüştürme İşleci 134
“as” İşleci 134
“new” İşleci 135
“is” İşleci 135
“??” İşleci 135
Türü Dönüştürme ve Türe Zorlama 136
Türü Örtük Dönüştürme 137
Türü Örtük Dönüştürme – Örnekler 137
www.nakov.com
Page 6 / 151
C# İle Bilgisayar Programlama Temelleri
Olması Mümkün Örtülü Dönüşümler – Örnekler 138
Türü Açıkça Dönüştürme 138
Türü Açıkça Dönüştürme – Örnek 139
Türü Dönüştürme Sırasında Veri Kayıpları 140
Türe Zorlama Sırasında Taşma İstinasının Fırlatılması 141
Olması Mümkün Açık Dönüşümler 141
String Türüne Dönüştürme 142
String Türüne Dönüştürme – Örnek 142
İfadeler 143
İfadelerin Yan Etkileri 143
İfadeler, Veri Türleri ve İşleç Öncelikleri 144
Sıfıra Bölme 144
Kodu Daha Anlaşılır Yapmak İçin Parantezlerin Kullanılması 145
Bölüm 4: Konsol Giriş ve Çıkış 148
Bölümün İçindekileri 148
Kullanıcı ve Program Arasındaki İletişim 148
Ne Zaman Konsol Kullanılmalıdır? 148
Konsol Nedir? 148
Konsol Nasıl Başlatılır? 149
Konsollar Hakkında Daha Fazlası 150
Temel Konsol Komutları 151
Windows Konsol Komutları 151
www.nakov.com
Page 7 / 151
C# İle Bilgisayar Programlama Temelleri
Yazar Hakkında
S
VETLIN NAKOV has 15 years technical background as software
engineer, software project manager, consultant, trainer, and entrepreneur with rich experience with the .NET and Java EE platforms,
information systems, databases, Web development and software engineering. He is author of 7 books on computer programming and
software technologies, C# and Java, and tens of technical and scientific publications. Svetlin has been a speaker at hundreds of conferences, seminars, courses
and other trainings.
„The book Introduction to ProHe holds a PhD degramming with C# is fundamengree in computer
tal computer programming book
science, medals from
that focuses on the concepts of
the International Inthe computer programming, data
formatics Olympiads
structures and algorithms. It is the
(IOI) and the Bulgarecommended start for junior deverian President’s award
“John Atanassoff”. He
lopers and is entirely free. ”
has been a part-time
lecturer in Sofia University, New Bulgarian University and the Technical University of
Sofia. Currently Svetlin drives the largest training center for software
engineers in Bulgaria – Software University where he teaches young
people in computer science, software development and information
technologies.
www.nakov.com
Page 8 / 151
C# İle Bilgisayar Programlama Temelleri
Önsöz
Eğer programlamayı ciddiye almak istiyorsanız, doğru kitabı edindiniz. Gerçekten! Bu kitapla
programlamaya ilk adımları yapabilirsiniz. Böylece modern programlama dillerini ve yazılım
geliştirme teknolojilerini öğrenmeniz için uzun yolculuğa uçan bir başlangıç ​​alacaksınız. Bu kitap,
programlamanın son 15 yıl içinde önemli ölçüde değişmeyen temel ilke ve kavramlarını öğretir.
C
# takip etmek istediğiniz dil olmasa bile
bu kitabı okumak için tereddüt etmeyin.
İlerleyeceğiniz dil hangisi olursa olsun, burada size vereceğimiz bilgi geçerli olacaktır,
çünkü bu kitap size programcılar gibi
düşünmeyi öğretecek. Biz size pratik algoritmik problemlerin çözümü için nasıl program
yazılacağını öğreteceğiz ve algoritmaları
ortaya atma (ve uygulama) becerilerini size
öğreteceğiz ve algoritmaları ortaya atma (ve
uygulama) becerilerini sizde oluşturacağız
ve çeşitli veri yapılarını kullanacağız.
Size
göründüğü kadar
imkansız gelecek
ama, bilgisayar programları yazmanın tüm temel
prensipleri son 15 yıl içinde çok değişmedi.
www.nakov.com
Programlama
dilleri
değişiyor,
teknolojiler
modernize oluyor,
entegre geliştirme ortamları daha
gelişiyor,
ancak
programlamanın
temel prensipleri aynı kalmıştır. Yeni
başlayanlar
algoritmik
düşünmeyi
öğrendikleri zaman, ve sonra bir sorunu
çözmek için içgüdüsel olarak bir dizi
adımlar içine bölmeyi öğrendikleri
zaman, bunun yanı sıra uygun veri
yapılarını seçmeyi öğrendikleri zaman
ve
yüksek-kaliteli
programlama
kodu
yazdıklarında
programcı
olurlar. Bu becerileri kazandıktan
sonra, kolayca yeni bir dil ve çeşitli
teknolojileri öğrenebilirsiniz - Web
programlama, HTML5 ve JavaScript
gibi, mobil geliştirme, veritabanları
ve SQL, XML, REST, ASP.NET, Java
EE, Python, Ruby ve daha yüzlercesi.
Page 9 / 151
C# İle Bilgisayar Programlama Temelleri
Bölüm 0: Giriş
B
u kitap, bir programcı gibi düşünmeyi size öğretmek için tasarlanmıştır ve C# dili, Java, C++, PHP veya Python gibi diğer modern programlama dilleri ile yer değiştirebilecek sadece
bir araçtır. Bu programlama üzerine bir kitaptır, C# üzerine bir kitap
değildir!
Bu Kitapta Kimler Hedefleniyor?
Bu kitap yeni başlayanlar için uygundur. Bugüne kadar
programlamayı ciddi olarak yapmayan bunu yapmaya
başlamak isteyen herkes için tasarlanmıştır. Bu kitap sıfırdan
başlar ve programlama temellerini adım adım tanıtır. Bir yazılım
mühendisi olmak için kesinlikle gereken herşeyi ve bir yazılım
firmasında çalışmayı size öğretmeyecektir, ama o teknolojik
bilgi ve becerileri kurabileceğiniz zemini hazırlayacaktır ve
onlar aracılığıyla programlamayı mesleğiniz haline getirmeniz
mümkün olacaktır.
Eğer hiç bir bilgisayar programı yazmamışsanız, merak etmeyin.
Bu kitap programlamayı size en baştan öğretecektir. Öncesinden
herhangi bir bilgi ya da yetenek gerekli değildir. Tüm ihtiyacınız,
bazı temel bilgisayar okuma yazma ve programlama becerisidir.
Kalan kısmı kitaptan elde etmeyi bekleyebilirsiniz.
Bu
kitap
gönüllü
yazılım
mühendislerinden oluşan büyük bir
ekip tarafından aslında Bulgarca
yazılmış ve İngilizce’ye çevrilmiş
nüshası daha sonra Türkçe’ye
çevrilmiştir.
Çevirmenin
anadili
İngilizce olmadığı için pek çok hatalar
ve özensiz çeviri bulabilirsiniz. Lütfen
bizi bağışlayın! Çoğu Bulgar olan
70’i aşkın kişi bu kitabın asıl projesine
katıldı. Tüm ekip bu kitabı okumayı
seçtiğiniz için sizi tebrik ediyor ve
içeriğinin
bulabileceğiniz
küçük
hatalar ve yanlışlıklardan daha önemli
olduğuna inanıyor. Tadını çıkarın!
Eğer zaten basit programlar yazıyorsanız veya resmi bir
kurumda (okul, üniversite vb.) programlama okuma tecrübeniz
varsa, veya arkadaşlarınızla kodlamışsanız, herşeyi bildiğinizi
düşünmeyin! Bu kitabı okuyunca kaçırdığınız çok şeyin farkında
olabilirsiniz. Bu kitap yeni başlayanlar içindir, ancak deneyimli
profesyonel programcıların bile eksikliğini duyduğu beceri ve
kavramları öğretebilir. Yazılım şirketleri kendi kendini eğitmiş
nice insanlarla yürütülüyor, yıllardır programlama yapmak için
maaş almış olmalarına rağmen, programlama temellerine dair
hiçbir kavrayışa sahip olmamalarına rağmen, ve bir karma
tablo nedir hiçbir fikirleri olmamalarına rağmen, çokbiçimliliğin
nasıl çalıştığına ve bit düzeyinde işlenen operasyonlar ile nasıl
çalışacaklarına dair hiçbir fikirleri olmamalarına rağmen. Onlar
gibi olmayın! Önce programlama temellerini öğrenin ve ardından
teknolojileri. Aksi takdirde programlama becerileriniz riskte
kalacaktır, yaşamınız boyunca değilse bile az yada çok yıllar
boyunca.
www.nakov.com
Page 10 / 151
C# İle Bilgisayar Programlama Temelleri
Öncesinden Bilgi Gerekli Değildir!
B
u kitabı okumaya başlamadan önce okuyuculardan herhangi bir programlama bilgisine sahip olmalarını beklemiyoruz. Kitap içeriğini okuyabilmeniz
ve kavrayabilmeniz için bilgi teknolojisi veya bilgisayar bilimi okumanız da gerekli değildir. Kitap sıfırdan başlar ve yavaş yavaş sizde programlama ilgisi uyandırır ve diğer kaynaklardan onları bulup çıkarmanız gerekli değildir. Derleyici,
hata ayıklayıcı, entegre geliştirme ortamı, değişken, dizi, döngü, konsol, dize, veri
yapısı, algoritma, algoritma karmaşıklığı, sınıf veya nesne hakkında herhangi bir
şey bilmiyorsanız, telaşa kapılmayın. Bu kitaptan, tüm bu terimleri öğreneceksiniz
ve daha birçoğunu ve yavaş yavaş günlük işlerinizde sürekli onları kullanmaya
alışacaksınız. Sadece kitabı sürekli okuyun ve egzersizleri mutlaka yerine getirin.
„Biraz dahi olsa, İngilizce öğrenmeden programcı
olmayı umuyorsanız yanılıyorsunuz! Bu sadece naif
bir beklentidir. Eğer İngilizce bilmiyorsanız, İngilizce
öğreten bir ders alınız ve daha sonra teknik literatür okumaya başlayın, bilmediğiniz sözcükleri yazarak öğrenmeye alışınız. Teknik İngilizce’nin kısa
sürede öğrenmesi kolay olduğunu anlayacaksınız.”
Temel bilgisayar okur yazarlığına sahip olmanız bekleniyor, çünkü dosya, sabit disk
ve ağ bağdaştırıcısının ne olduğunu açıklamayacağız, ne de fareyi nasıl taşıyacağınızı
veya bir klavyede nasıl yazılacağını. Bir bilgisayar ile nasıl çalışacağınızı ve İnternet’i
nasıl kullanacağınızı bilmenizi bekliyoruz.
Okuyucuların İngilizce’yi en azından temelde bilmeleri önerilir. Programlama
üzerine hazırlanmış web sitelerinde bulunan her gün kullanacağınız ve her zaman
okuyabileceğiniz tüm belgeler ve tüm dokümantasyon büyük ihtimalle İngilizce
dilinde yazılmış olmalıdır. Bir programcının mesleğinde, İngilizce kesinlikle
gereklidir. Ne kadar çabuk öğrenirseniz, o kadar iyidir.
www.nakov.com
Page 11 / 151
C# İle Bilgisayar Programlama Temelleri
Bu Kitabın Kapsamı Nedir?
B
u kitap programlama
temellerini kapsamaktadır. Değişkenleri nasıl tanımlayacağınızı ve kullanacağınızı, basit veri yapıları (sayılar
gibi) ile nasıl çalışacağınızı, mantıksal ifadeler, koşullu ifadeler ve döngüleri nasıl düzenleyeceğinizi, konsola
nasıl yazdıracağınızı, dizileri
nasıl kullanacağınızı, sayı sistemleri ile nasıl çalışacağınızı, yöntemleri nasıl tanımlayacağınızı ve kullanacağınızı
ve nesneleri nasıl oluşturacağınızı ve kullanacağınızı öğretecek. Temel programlama
bilgisi ile birlikte, bu kitap
dize işleme, istisnai durum işleme, karmaşık veri yapılarını (ağaçlar ve karma tabloları gibi) kullanmak, metin
dosyaları ile çalışmak, isteğe uyarlı sınıf tanımlamak, ve LINQ sorguları ile çalışmak gibi daha
karmaşık kavramları anlamanıza yardımcı olacaktır. Nesne yönelimli programlama kavramları - modern yazılım geliştirme için kurulu bir yaklaşım derinlemesine ele alınacaktır. Son olarak, yüksek kalitede programlar yazma alıştırmaları ve gerçek dünya programlama sorunlarını çözmek ile karşı karşıya olacaksınız. Bu kitap programlama problemlerinin çözümü ile genel
olarak algoritmik problemlere yönelik tam bir metodoloji sunar, ve bunun bir kaç örnek konu
ve programlama sınavları ile nasıl uygulanacağını gösterir. Programlama üzerine başka bir kitapta aramanıza gerek yoktur!
www.nakov.com
Page 12 / 151
C# İle Bilgisayar Programlama Temelleri
Bu Kitabın Öğretmedikleri Nelerdir?
.NET Platformu
Yazılım Mühendisliği,
Takım Çalışması
WEB Teknolojileri,
Veritabanları
• İlk söz olarak, ancak önemsiz de-
• Bu kitaptan, yazılım mühendisli-
• Meslektaşlarınızın bazıları doğru-
lışmasını ve bir yazılım şirketinin
lar ve veritabanları ile programla-
ğil, bu kitap “Yazılım Mühendisliği” ünvanı derecesi adına size
herhangi bir ödül vermeyecektir!
Bu kitap .NET platformunu size
anlatmayacaktır, veritabanları ile
nasıl çalışmanız gerektiğini, dinamik web sitelerini nasıl oluştura-
cağınızı ve mobil uygulamalar geliştirmeyi, window tabanlı grafik
kullanıcı arayüzünü (GUI) nasıl
oluşturacağınızı ve zengin Inter-
net uygulamalarını (RIA) size öğretmeyecektir. Skype, Firefox, MS
Word veya Facebook gibi sosyal
ağlar ve Amazon.com gibi satış sitelerine ait olan karmaşık yazı-
lım uygulamaları ve sistemleri geliştirmeyi öğrenmeyeceksiniz. Ve
başka hiçbir kitap tek başına bunu
başaracak gibi görünmüyor! Bu
tür projelerin yürütülmesi için gerekli olan çalışmaların tümü çok
uzun yıllar boyu sürer. Bu kitapta yeralan bilgi ve deneyim gelecekteki müstakbel programcılar
için sadece harika bir başlangıçtır.
ğini öğrenmeyeceksiniz, takım çagerçek projeler üzerinde çalışmak
için sizi hazırlamasını anlamak da
pek mümkün değildir. Tüm bunları öğrenmek için birkaç kitap
daha ve ekstra dersler gerekir, ancak bu kitapta harcayacağınız zaman için pişman olmanıza gerek
yok, çünkü programlama temelleri ile başlayan doğru seçimde
zaten bulundunuz. Web geliştirme, mobil uygulamalar ve veri-
tabanları ile ilk etapta etkileşmek
daha kötü sonuçlara mal olabilir-
di. En azından uzman programcı
olma şansınız var, bunun için derinlemesine programlama ve teknoloji bilgisine sahip olacaksınız.
Programlama temellerini bir kere
elde ettikten sonra, veritabanla-
rı, ardı sıra web uygulamalarını
dan web ya da mobil uygulamamaya başlamışlardır, bir dizi, bir
liste veya karma tablo ne olduğunu bilmek onların harcı olmasa
da, bunu zor yoldan yapmak için
baştan yola çıkarlar. PHP ve My-
SQL ile düşük kaliteli web sitele-
rini yapmayı öğrendikten profesyonel olmak için de bir çok yol
denerler. Web teknolojileri ve veritabanlarını sizin için güzel bir
öğrenme alanıdır, ancak önce
programlama öğrenilmelidir!
Çünkü eğer algoritmik düşünmeye zaman ayırırsanız, programlama sorunlarını çözmeyi bildikten
sonra bir teknoloji öğrenmek te-
melleri bilirseniz sizin için kolaylaşır. Bu her şeyden daha önemlidir.
okumak ve anlamak nispeten size
kolay gelecektir. SQL, ASP.NET,
AJAX, XAML veya WinRT ile durum böyle değildir.
“Web uygulamaları ve/veya veritabanları ile programlamaya başlangıç bir
yabancı dili öğrenmek için yeni başlayanların onu dilin kendi alfabesinden veya bir ders kitabından okumaya başlamak yerine bir klasik romandan okumaya başlamaları kadar yanlış bir görüş teşkil etmektedir. Bu
imkansız değildir, ancak temel eksikliği varsa, bina inşa etmek güç olur.
Yüksekle muhtemel sonuçları hayati temel bilgi eksikliği ve meslektaşları/
yaşıtlarının önlenemez gülüşlerine maruz kalmaktır.”
www.nakov.com
Page 13 / 151
C# İle Bilgisayar Programlama Temelleri
Bilgi Nasıl Sunulmuştur?
Ç
ok sayıda yazar, yardımcı yazar ve editör olarak kitabın her bölümünü benzer ve anlaşılır tarzda yazmak için elimizden geleni yaptık. İçerik iyi yapılandırılmış bir şekilde sunulmuştur; anlaşılabilir ve
metin içinde bilgiyi aramanın oldukça kolay olduğu birçok başlık ve
alt başlıklar halinde işlenmiştir.
B
u kitap programcılar için programcılar tarafından yazılmıştır. Yazarlar, aktif yazılım geliştiricilerdir ve arkadaşları hem yazılım geliştirme hem de gelecekteki programcıları eğitmek konusunda gerçek
deneyim sahibidirler. Kendiniz göreceğiniz gibi, bu nedenle, içerik sunum kalitesi, çok iyi düzeydedir. Tüm yazarlar olarak programlama
üzerine bir kitapta en önemli şeylerden birinin örnek kaynak kod olduğunun belirgin bilincindeyiz. Bu çok önemli nedenle metne pek çok
örnek, çizim, açıklama, resim ve şekiller eşlik ediyor.
C# yazılım uygulamalarının geliştirilmesi için
modern bir programlama dilidir.
C# ve .NET Platformu
Bu kitap programlama ile ilgilidir. Programcı olarak
düşünmeyi, kod yazmayı, veri yapılarını ve algoritmaları
düşünmeyi ve sorun çözmeyi size öğretmek için
tasarlanmıştır.
C# ve Microsoft .NET platformunu (C# arkasındaki
platform) sadece programlama kodunu yazmak için
kullanacağız ve dilin özelliklerini incelemeyeceğiz. Bu
elinizdeki kitap Java ve C++ gibi diğer diller için de
yazılmış olabilir, ancak farkları bariz değil önemsizdir.
Bununla birlikte, kısa bir C# (telaffuzu “see sharp”)
tanımını verelim. “C#” ve “.NET Platformu” terimleri
eğer sizin için bilinmeyense, ayrıntılarını ve bağlantılarını
sonraki bölümde öğreneceksiniz. Şimdi kısaca C#, .NET,
.NET Platformu, CLR ve C# ile ilgili diğer teknolojileri
açıklayalım.
www.nakov.com
Page 14 / 151
C# İle Bilgisayar Programlama Temelleri
C# Programlama Dili
C#, .NET platformu ile birlikte Microsoft
tarafından
oluşturulan
ve
geliştirilen,
modern nesne yönelimli, genel amaçlı bir
programlama dilidir. C# ve .NET platformu
üzerinde geliştirilen çok çeşitli yazılım
vardır: ofis uygulamaları, web uygulamaları,
web siteleri, masaüstü uygulamaları, mobil
uygulamalar, oyunlar ve diğerleri.
C#, Java ve C++ benzeri yüksek seviyeli bir
dildir ve bir ölçüde Delphi, VB.NET ve C
dillerine benzerdir. Tüm C# programları nesne
yönelimlidir. Bunlar yöntemleri tanımlanmış
bir küme sınıftan oluşur ve yöntemler program
mantığını – bilgisayarın yürüttüğü talimatları
içerir. Bir sınıf, yöntem ve C# programları ile
ilgili detayları fazlasıyla bir sonraki bölümde
bulacaksınız.
Günümüzde C# en popüler programlama
dillerinden biridir. Dünya çapında milyonlarca
geliştirici
tarafından
kullanılmaktadır.
Microsoft’un .NET platformu için uygulama
geliştirmek ve yürütmek için geliştirdiği C# dili
Microsoft odaklı şirketler arasında yayılmıştır,
şirketler ve bireysel geliştiriciler tarafından da
yaygın olarak kullanılır. İyi de olsa kötü de olsa,
bu kitabın yazıldığı zaman itibariyle, C# dili ve
.NET platformu tamamen Microsoft tarafından
yönetilmektedir ve sürdürülmektedir ve
üçüncü kişilere açık değildir. Bu nedenle,
IBM, Oracle ve SAP gibi tüm diğer büyük
yazılım şirketleri Java platformunda kendi
çözümlerini temellendirmiş ve kendi yazılım
ürünlerini geliştirmek için birincil dil olarak
Java kullanmışlardır.
www.nakov.com
C# ve .NET Platformunun aksine, Java dili
ve platformu yazılım şirketleri, kuruluşlar
ve bireysel geliştiricilerinin bütün bir toplum
içinde yer aldıkları açık kaynak projeleridir.
Java dünyasındaki standartlar, teknik özellikler
ve tüm yeni özellikler, tek bir şirket (C# ve .NET
Platformu’nda olduğu gibi) yerine, tüm Java
toplulukları üzerinden oluşturulan çalışma
grupları tarafından geliştirilmiştir. C# dili üzerinde yürütüldüğü Yürütüm Süresi
Ortak Dili (Common Language Runtime:
CLR) adında özel bir çevre ile birlikte dağıtılır.
.NET Platformu temel işlevsellik sağlayarak,
derleyici, hata düzeltici ve diğer geliştirme
araçlarından oluşan standart kütüphaneleri
içerir. CLR .NET Platformu’nun bir parçasıdır.
Neyse ki platform üzerindeki CLR programları
taşınabilirdir, ve bir kere yazıldığında işletim
sistemleri üzerinde küçük değişikliklerle
veya hiçbir değişiklik yapmadan çeşitli
donanım platformları üzerinde çalışabilir. C#
programları en yaygın olarak MS Windows
üzerinde çalışır, ancak .NET Platformu ve CLR
aynı zamanda cep telefonlarını ve Windows
Mobile, Windows Phone ve Windows 8
tabanlı diğer taşınabilir cihazları da destekler.
C# programları hala serbest .NET Platformu
uygulaması olan Mono ile Linux, FreeBSD,
iOS, Android, MacOS X ve diğer işletim
sistemleri üzerinde çalıştırılabilir, ancak, bu
resmen Microsoft tarafından desteklenmiyor.
Page 15 / 151
C# İle Bilgisayar Programlama Temelleri
C# dili bağımsız bir ürün halinde dağıtılmamıştır – Microsoft .NET Platformu’nun (“Microsoft
nokta Net Platformu” olarak telaffuz edilir) bir parçasıdır. .NET Platformu genellikle C# ile veya
.NET uyumlu bir başka dilde (VB.NET, Yönetilen C++, J# veya F# gibi) yazılmış programların
geliştirilmesi ve yürütülmesi için bir ortam oluşturur.
Şu bileşenleri vardır:
.NET programlama dilleri
(C#, VB.NET ve diğerleri);
C# programlarını kontrollü bir
şekilde çalıştıran kodun (CLR)
yürütülmesi için yönetilen bir
ortam;
C#
programlarını
CLR’in
anlayabileceği bir ara koda
(MSIL adında) dönüştüren
csc derleyicisi gibi bir dizi
geliştirme aracı;
• Veritabanlarına erişime izin veren ADO.NET gibi standart
bir kitaplık seti (MS SQL Sunucu veya MySQL gibi) ve stan-
dart iletişim platformları yoluyla uygulamaları bağlayan WCF
ve HTTP, REST, JSON, SOAP ve
TCP gibi soketleri içeren protokoller.
.NET Platformu her modern Windows dağıtımının bir parçasıdır ve farklı versiyonları
mevcuttur. Son sürümü Microsoft’un web sitesinden indirilebilir ve yüklenebilir. Bu
kitabın yayın tarihi itibariyle, .NET Platformu’nun son sürümü 4.5’tir. Windows Vista
paketi – .NET Platformu 2.0, Windows 7 – .NET 3.5 ve Windows 8 – .NET 4.5 içermektedir.
www.nakov.com
Page 16 / 151
C# İle Bilgisayar Programlama Temelleri
Neden C#?
C# veya Java?
Neden PHP Değil?
Kitabımız için C# seçmemizin
birçok nedeni vardır. Bu
tüm dünyada milyonlarca
programcı tarafından yaygın
olarak kullanılan modern
bir
programlama
dilidir.
Aynı zamanda, C# (C ve
C++ aksine) öğrenmek için
çok basit ve kolaydır. Yeni
başlayanlar için uygun ve
birçok büyük şirket tarafından
endüstride hâlâ yaygın olarak
kullanılan bir dil ile başlamak
doğaldır, bu özelliği onu
günümüzde
en
popüler
programlama dillerinden biri
haline getirmiştir.
Bu
yoğun
olarak
tartışılabilmesine
rağmen,
Java’nın C# için en ciddi rakip
olduğu kabul edilmektedir.
Java ile C# arasında bir
karşılaştırma yapmayacağız,
çünkü C# tartışmasız daha
iyidir,
daha
güçlüdür,
zengindir ve mühendisliği
daha iyidir. Ancak, bu
kitabın amaçları için, biz
her modern programlama
dilinin
programlama
ve
algoritmaları öğrenmek için
yeterli olacağını vurgulamak
zorundayız. C# seçtik çünkü
öğrenmesi daha kolaydır ve
son derece kullanışlı, ücretsiz
bir entegre geliştirme ortamı
ile dağıtılmıştır (örneğin,
Visual C# Ekspres Baskısı).
Java tercih edenler için bu
kitabın Java sürümü www.
introprogramming.info
adresinde mevcuttur.
Programlama
dillerinin
popülaritesi ile ilgili olarak,
C# ve Java’nın yanı sıra, bir
başka yaygın olarak kullanılan
dil de PHP’dir. Küçük web
siteleri ve web uygulamaları
geliştirmek için uygundur,
ancak büyük ve karmaşık
yazılım
sistemlerinin
uygulanmasında
ciddi
zorluklar
doğurmaktadır.
Yazılım
sektöründe
PHP
küçük projeler için ilk olarak
ve en önemli şekilde kullanılır,
çünkü geliştiricilerin kötü,
düzensiz ve bakımı kolay
olmayan
kod
yazmasına
yol açabilir, daha önemli
projeler için sakıncalı olabilir.
Bu konu da tartışmalıdır,
ancak genel olarak kabul
edilmektedir ki, inşa edildiği
eskimiş kavram ve kökenler
nedeniyle ve çeşitli evrimsel
nedenlerle,
PHP
düşük
kaliteli programlama eğilimi
içinde olan bir dildir, kötü
kod yazma ve bakımı kolay
olmayan yazılım oluşturmaya
neden olabilir. PHP kavramsal
olarak yordamsal bir dildir
ve modern nesne yönelimli
programlama paradigmalarını
desteklemesine
rağmen
PHP
programcılarının
çoğu yordamsal kod yazar.
www.nakov.com
Page 17 / 151
C# İle Bilgisayar Programlama Temelleri
PHP’nin yazılım mühendisliği mesleğindeki adı “kod maymunu” dili olarak bilinir, çünkü PHP
programcıları korkutucu oranda en düşük kaliteli kod yazar. Düşük kaliteli, kötü yapılandırılmış
ve kötü organize edilmiş programlama kodu yazmak eğilimi nedeniyle, PHP dili ve platformunun
bütün kavramları yanlış kabul edilir ve ciddi şirketler (Microsoft, Google, SAP, Oracle ve onların
ortakları gibi) bundan kaçınırlar. Bu sebeple ciddi bir yazılım mühendisi olmak istiyorsanız, C #
veya Java ile başlayın ve (mümkün olduğunca) PHP’den kaçının.
Elbette, PHP’nin programlama dünyasında kullanımları vardır, (örneğin, WordPress ile blog
oluşturma, Joomla veya Drupal ile küçük bir web sitesi, veya PhpBB ile bir tartışma panosu)
ancak tüm PHP platformu, .NET ve Java gibi büyük sistemler için iyi organize edilmemiş ve
tasarlanmamıştır. Web tabanlı olmayan uygulamalar ve büyük endüstriyel projelere gelince, PHP
mevcut seçenekler arasında uzun bir atış değildir. PHP’yi doğru kullanmak ve onunla yüksek
kaliteli profesyonel projeler geliştirmek için çok tecrübe gereklidir. PHP geliştiricileri genellikle
öğreticiler, makale ve düşük kaliteli kitaplardan öğreniyor ve kötü uygulama ve alışkanlıkları
seçip bulurken onları daha sonra ortadan kaldırmak kolay olmaz. Bu nedenle, ilk geliştirme dili
olarak PHP öğrenmeyin. C# veya Java ile başlayın.
Yazarların kolektif büyük deneyimlerine dayanarak C# ile programlamaya başlamanızı ve C,
C++ ve PHP gibi dilleri bunları kullanmaya başlamak zorunda kalacağınız ana kadar görmezden
gelmenizi tavsiye ediyoruz.
Neden C veya C++ Değil?
Tartışma götürse de, C ve C++ dilleri oldukça ilkel, eski ve çürüyen olarak kabul edilir.
Onların hâlâ kendi kullanımları vardır ve düşük seviyeli programlama için uygundur (örneğin
özel donanım aygıtları için programlama) ama onları izlemenizi tavsiye etmiyoruz.
Eğer bir işletim sistemi yazmak istiyorsanız, veya bir gömülü cihazı programlamak istiyorsanız,
alternatiflerin eksikliği nedeniyle ve donanımı çok dikkatli kontrol etmek gerektiği için saf C
programlayabilirsiniz. C dili manevi olarak eskidir ve hiçbir şekilde onunla programlamaya
başlamak için bir tavsiyeye rastlamazsınız. Saf C kodlayan programcının verimliliği C# ve Java
gibi modern genel amaçlı programlama dilleri altındaki verimlilik ile karşılaştırıldığında birçok
kez çok daha düşüktür. C’nin bir değişiği Apple/iPhone geliştiricileri arasında kullanılır, ama iyi
bir dil değil olduğundan değil, hiçbir iyi alternatif olmadığı içindir. Çoğu Apple odaklı programcı
Objective-C sevmiyor ama bir başka şey yazmak konusunda başka hiçbir seçimleri olmadığı için
bu işi gerçekleştiriyorlar.
Donanım ile çok yakın çalışmayı gerektiren uygulamalar ile programlamak zorunda kalındığında
veya (3D oyunlar gibi) özel performans gereksinimleri olduğunda C++ kabul edilebilir. Her
bağlamda (Web uygulamaları geliştirme veya iş yazılımları gibi) C++ olağanüstü yetersizdir.
www.nakov.com
Page 18 / 151
C# İle Bilgisayar Programlama Temelleri
Eğer şimdi programlamaya başlıyorsanız bunu sürdürmenizi tavsiye etmiyoruz. Hala bazı
okullarda ve üniversitelerde çalışmalar yapılmasının nedeni kalıtsaldır, çünkü bu kurumlar çok
muhafazakardır. Örneğin, Uluslararası Bilişim Olimpiyatı (IOI) programlama yarışmalarında
izinli kullanımlı tek dilin C++ olmasını teşvik etmeye devam ediyor, C++ nadiren endüstride
kullanılır olmasına rağmen. İnanmıyorsanız, bazı iş arama siteleri aracılığıyla bakabilirsiniz ve
C++ ile verilen iş ilanları yüzdesini sayın.
C++ dilinin popülerliğini kaybetti çünkü başlıca nedeni hızla geliştirilen kaliteli yazılımın
uygulanabilirliğinin yetersiz kalmasıdır. C++ dilinde yüksek kaliteli yazılım yazmak için,
inanılmaz akıllı ve deneyimli programcı olmak zorunda kalırsınız, aynı tez C# ve Java için
kesinlikle gerekli değildir. C++ öğrenme daha fazla zaman alır ve çok az programcı gerçekten
iyi biliyor. C++ programcısının verimliliği C# programcısına kıyasla birçok kere daha düşüktür
ve bu yüzdendir ki C++ zemin kaybediyor. Bu nedenlerden dolayı, C++ dili yavaş yavaş
kayboluyor ve bu nedenle bunu öğrenmek için tavsiyede bulunmuyoruz.
C# Avantajları
C# nesne yönelimli bir programlama dilidir. Ciddi yazılım sistemleri için kullanılan modern
programlama dillerinin hepsi (Java ve C++ gibi) nesne yönelimlidir. Nesne yönelimli
programlamanın avantajları kitap boyunca birçok alıntılar halinde dile getirilmiştir, buna rağmen
şu an için, size gerçek dünyadan nesneleri ile çalışma izni veren dil olarak nesne yönelimli dilleri
düşünebilirsiniz (örneğin öğrenci, okul, ders kitabı, kitap ve diğerleri için). Nesneler (örneğin
isim, renk, vb) özelliklere sahiptir ve (örneğin, hareket, konuşma, vb) eylemleri gerçekleştirebilir.
C# ve .NET Platformu ile programlamaya başlayarak, perspektifi çok yüksek bir yola sapmış
oluruz. Programcılar için iş teklif eden bir web sitesi açarsanız, C# ve .NET uzmanları için çok
büyük ve Java programcıları için yakın bir talep olduğunu kendiniz göreceksiniz. Aynı zamanda,
PHP, C++ ve diğer teknoloji talebini C# ve Java mühendisleri talebi ile kıyasladığımızda daha
düşük bir rakam ortaya çıkmaktadır.
İyi programcı için, kullandıkları dilin önemi bir anlam taşımamaktadır, çünkü programlamayı
bilirler. İhtiyaç duydukları dil ve teknoloji ne olursa olsun onlar hızlı uzmanlaşacaklardır.
Amacımız C# öğretmek değil, programlama öğretmektir! Programlama temellerinde
uzmanlaştıktan, algoritmik düşünmeyi öğrendikten, diğer programlama dilleri ile tanıştıktan
sonra, onların C# ile ne kadar ortak noktaları olduğunu göreceksiniz ve öğrenme modeliniz
kolaylaşacak. Bu kitap programlamanın değişmeyen temellerini öğretiyor.
www.nakov.com
Page 19 / 151
C# İle Bilgisayar Programlama Temelleri
Programlamayı
öğrenirken hangi
C# ve Visual
Studio sürümünü
kullanacağınız
hiçbir büyük önem
taşımamaktadır.
Önemli olan
programlama
ve algoritmik
düşünme ilkelerini öğrenmektir!
Örnekler Visual Studio 2012 İçin C# 5 Dilinde Verilmiştir
Bu kitapta verilen örneklerin hepsi bu kitabın yayınlanması itibariyle C# dili ve .NET Platformu
4.5 sürümü ile ilgilidir. Visual Studio tümleşik geliştirme ortamını kullanmaya dair tüm örnekler
ürünün 2012 sürümü ile ilgilidir. Bu kitabın yazılması sırasında en son bu sürümler vardı.
Microsoft Visual Studio 2012 tümleşik geliştirme ortamının (IDE) başlangıç düzeyindeki C#
programcıları için uygun olarak düşünülmüş Windows Masaüstü için Microsoft Visual Studio
Express 2012 adı verilen bir de ücretsiz sürümü vardır. Ücretsiz ve ücretli (ticari bir yazılım
ürünü olan) Visual Studio sürümleri arasındaki fark bu kitapta kullanmamızı gerektirmeyen bazı
işlevlerin kullanılabilirliğinde yatmaktadır. C# 5 ve Visual Studio 2012 kullanmalarına rağmen
bu kitaptaki örneklerin çoğu .NET Platformu 2.0 / 3.5 / 4.0 ve C # 2.0 / 3.5 / 4.0 altında sorunsuz
çalışacaktır ve Visual Studio 2005/2008/2010 altında derlenebilir.
Programlamayı öğrenirken hangi C# ve Visual Studio sürümünü kullanacağınız hiçbir büyük
önem taşımamaktadır. Önemli olan programlama ve algoritmik düşünme ilkelerini öğrenmektir!
C# dili, .NET Platformu ve Visual Studio tümleşik geliştirme ortamı sadece araçlardır ve herhangi
bir zamanda bunlarla başkalarını takas edebilirsiniz. Bu kitabı okursanız ve VS2012 şu anda
en son sürüm değilse emin olun ki neredeyse bu kitabın tüm içeriği geriye dönük uyumluluk
nedeniyle yine aynı olacaktır.
www.nakov.com
Page 20 / 151
C# İle Bilgisayar Programlama Temelleri
Bu Kitabı Nasıl Okumalısınız?
Bu kitabı okuma sırasında birçok uygulama beraberinde geliyor. Programlamayı öğrenmek
kolay değildir! Yüzmeyi bir kitaptan nasıl okuyarak öğrenmek mümkün değilse gerçekleştirim
olmadan çalışıyor olmak da mümkün değildir. Bocalarsanız ama başka çaresi olmaz! Her
bölümden sonra sorunlar üzerinde çalışarak bu kitaptan daha fazla şey öğreneceksiniz.
Burada okuduğunuz her şeyi bir bilgisayarda kendiniz için denemelisiniz. Aksi takdirde
öğrenemezsiniz. Örneğin, basit bir program yazmak için Visual Studio ile ilgili ilk okuduğunuzda,
Microsoft Visual Studio (veya Visual C# Ekspres) yükleyin ve programınızı yazmak için deneyin,
bunu yapmanız gerekiyor. Aksi takdirde öğrenmeniz sorunlu olabilir! Teoride, her şey kolay
gibi görünüyor, ancak programlama uygulama
anlamına gelir. Bunu hatırlayın çünkü bu kitapta o „Alıştırma yapmadan bu kitabı
sorunları çözmek için çalışacağız. Bu sorunlar özenle
okursanız bir anda anlam taşımaz!
seçilmiştir – ne sizi vazgeçirecek kadar çok zor, ne
Program yazma hakkında metde çok kolaydır, böylece bir meydan okuma olarak
onları çözmeyi algılamaya motive olacaksınız. Eğer
ni okuduğunuzdan çok daha fazla
zorluklarla karşılaşırsanız, Telerik Yazılım Akademisi
zaman harcamak gerekir. Bir taşıt
“C # Programlama Temelleri” eğitim kursunun
aracını sürmeyi öğrenmek gibitartışma grubu yardımına bakın: http://forums.
dir: hiç kimse kitap okuyarak sürüş
academy.telerik.com (Forum Bulgar geliştiriciler için
tasarlandı, ancak o insanlar “yaşam”larında İngilizce
öğrenemez. Sürüş öğrenmek için
konuşuyorlar ve endişelenmeyin, bu kitapla ilgili
farklı durumlar, yollar, arabalar, vb.
sorularınıza cevap vereceklerdir. Binlerce öğrenci her
için birçok kez sürücülüğü denemeyıl bu kitaptan egzersizleri çözmek istiyorlar böylece
niz gerekir. Programlama öğrenmek
her problem için kitaptan birçok çözüm bulabilirsiniz.
Bu web sitesinde kitaptaki her alıştırma için resmi
için, programlamak gerekiyor!”
çözümler + testler de yayınlayacak.
Herkes okulda matematik okudu ve matematik problemlerini çözmeyi öğrenmek için nasıl bir
pratik gerektiğini herkes bilir. Ne kadar olursa olsun öğretmenlerinizi izler ve dinleseniz de,
oturup sorunları çözmeden onları öğrenemezsiniz. Aynısı programlama için geçerlidir. Çok
alıştırmaya ihtiyacımız var. Sorunları çözmeniz, deney yapmak için, çaba göstermek için ve
sorunlarla mücadele etmek için, hata yapmak ve onları düzeltmek için, denemek ve başarısız
olmak için, yeniden denemek ve nihayet işlerin yolunda gittiği zaman o anları deneyimlemek
için çok yazmanız gerekiyor. Çok alıştırmaya ihtiyacımız var. İlerleme kaydetmenin tek yolu
budur!
Bir geliştirici olmak için insanlar der ki en az 50.000 – 100.000 satır kod yazmaları gerekir. Doğru
sayı değişebilir. Bazı insanlar hızlı öğrenir yada sadece problem çözme deneyimleri vardır.
Diğerleri için daha fazla pratik gerekebilir, ancak her durumda programlamayı uygulamak çok
önemlidir! Sorunları çözmek için ve bir geliştirici olmak için kod yazmak gerekir. Başka yolu
yoktur!
www.nakov.com
Page 21 / 151
C# İle Bilgisayar Programlama Temelleri
Alıştırmaları Asla İhmal Etmeyin!
Her bölümün sonunda hatırı sayılır derecede çok alıştırma bulunmaktadır. Onları ihmal etmeyin!
Alıştırmalar olmadan, bir şey öğrenemezsiniz. Bir bölümü okuduktan sonra bilgisayar önünde
oturmanız ve kitapta gördüğünüz örneklerle oynamanız gerekir. Sonra belirlediğiniz sorunları
çözme konusunda kendinizi ayarlamalısınız. Hepsini çözemezseniz en azından denemelisiniz.
Eğer gerekli zamanınız yoksa, en azından her bölüm için ilk birkaç sorunun çözümüne çalışmanız
gerekir. Her bölümden sonra sorunların çözümü olmadan devam etmeyin, bu sadece anlamsız
olur! Sorunlar okuduğunuzu şeyleri uygulayacağınız mümkün olan en küçük geçerli durumdır.
Uygulamada programcı olduğunuzda, daha büyük ve daha karmaşık ölçekte her gün benzer
sorunları çözeceksiniz.
„Maliyeti ne olursa olsun kitabın her bölümünden
sonra gelen alıştırma problemlerini çözmeniz için
çaba sarf etmeniz gerekir! Aksi takdirde hiçbir şey
öğrenememe ve sadece zaman harcama riski ile
karşı karşıya kalırsınız.”
Herhangi bir insani beceriyi öğrenmek
için, okumak, görmek yada nasıl
yapılacağının gösterilmesi gerekir ve
sonra bunu kendiniz yapıp deneyerek
birçok pratik geliştirebilirsiniz. Aynı
olgu programlama için de geçerlidir –
ya okumanız, ya görmeniz yada nasıl
yapılacağını dinlemeniz gerekir, taa ki
yapana kadar.
Bu Kitaptan Öğrenmek İçin Ne Kadar Zamana İhtiyacınız Var?
Programlama temellerinde uzmanlaşmak çok önemli bir
görevdir ve çok zaman alır. Bu konuda inanılmaz derecede iyi
olsanız bile, bir veya iki hafta içinde iyi seviyede programlama
öğrenmenin kalıcı olacağını düşünmek yanlış olur. Herhangi
bir insani beceriyi öğrenmek için, okumak, görmek
yada
nasıl yapılacağının gösterilmesi gerekir ve sonra bunu kendiniz
yapıp deneyerek birçok pratik geliştirebilirsiniz. Aynı olgu
programlama için de geçerlidir – ya okumanız, ya görmeniz
yada nasıl yapılacağını dinlemeniz gerekir, taa ki yapana kadar.
Sonra başarılı olur veya olmazsınız, nihayet öğrendiğinizin
farkına varana kadar tekrar denersiniz. Öğrenme adım adım
yapılır, rasgele değil belirli bir ardışıklık temeline dayanır,
çaba ve tutarlılık isteyen bir seridir, bu nedenle paylaşılabilir.
Eğer bu kitaptaki konu içeriğini okumak, anlamak, öğrenmek
ve iyice ve derinlemesine kazanmak istiyorsanız, gün boyu
süren bir etkinlik için en az 2 ay yatırım gerekiyor, yada
her gün biraz alıştırma yaparsanız en azından 4-5 ay yatırım
gerekiyor. Derinlemesine programlama temellerini kavramanın
mümkün olacağı minimum zaman miktarı bu kadardır.
www.nakov.com
Page 22 / 151
C# İle Bilgisayar Programlama Temelleri
Bu miktardaki derslerin gerekliliği Telerik Yazılım Akademisi tarafından verilen serbest eğitim
ile gerçekte doğrulanmıştır (http://academy.telerik.com). Bu kitaptaki derslere dayalı eğitimlere
katılan öğrencilerin yüzlercesi genellikle tam zamanlı çalışma ile 3-4 ay içinde bu kitabın
konularının hepsini öğrenir. Her yıl binlerce öğrenci bu kitabın alıştırma problemlerini çözüyor
ve kitabın içeriğini kapsayan programlama sınavlarını başarıyla geçiyor. İstatistikler gösteriyor
ki, öncesinde programlamaya maruz kalmayan herhangi bir kimse Telerik Akademisi’nde verilen
derslere karşılık gelen ve bu kitap ellerindeyken 3-4 ay eşdeğerinde bir aktiviteyi kapsayan tam
gün süre ile zaman geçirmiyorsa, bahsi geçen sınav veya sınavlarda başarısız karne alıyor.
Kitaptaki ana konu 1100 sayfada sunulmuştur, günlük bir sayfa olmak üzere okursanız sadece
dikkatle okumanız ve örnek programları test etmeniz bir ay alacaktır. Elbette, alıştırmalar için
yeterli zaman (birkaç ay daha fazla) harcamak zorundasınız; onlar olmadan programlamayı
öğrenmenizin işlerlik kazanması zorlaşır ve değeri azalır.
Karmaşık veya Kolay?
Kitaptaki alıştırmalar zorluk dereceleri değişen yaklaşık 350 problemden oluşur. Bunlardan
bazılarının çözümü için birkaç dakika, diğerleri için birkaç saat (yardım olmadan tüm bunları
çözebilirseniz) gerekebilir. İhtiyacınız olan zaman tam günlü bir veya iki aylık bir çalışma veya
günde daha az çalışıyorsanız birkaç ay daha ek çalışma olarak özetlenebilir.
Her bölümün alıştırmaları zorluk düzeyi artarak sıralanmıştır. İlk birkaç alıştırma bölümdeki
örneklere benzer şekilde nispeten kolaydır. Son birkaç alıştırma genellikle karmaşıktır. Bunları
çözmek için dış kaynakları (Wikipedia bilgileri gibi) kullanmanız gerekebilir. Bilinçli olarak,
her bölümdeki son birkaç alıştırma bölümde verilen bilgileri aşar ve çözümü bunun dışında
sizin becerinize dayanır. Favori arama motorunda arama gerçekleştirmek için sizi motive etmek
istiyoruz. İnternette aramayı öğrenmeniz gerekir! Bu herhangi bir programcı için temel bir
beceridir. Öğrenmeyi öğrenmeniz gerekir. Programlama her gün öğrenmek ile ilgilidir. Teknoloji
sürekli değiştiği için her şeyi bilemezsiniz. Bir programcı olmak her gün yeni API’ler, platformlar,
teknolojiler ve araçlar öğrenmekle eşdeğerdir. Sadece kendinizi hazırlayın, kaçınılması mümkün
değildir. Alıştırmaları çözerken sizi İnternet’te aramaya yöneltecek pek çok problem bulabilirsiniz.
Kimi alıştırmalarda bir sonraki bölümde işlenen konuları okumanız gerekebilir, bu nedenle kişisel
yetenek gerekiyor. Tanınmış algoritmalar, veya başka bir şey sizin çözüm bulmanıza yarayabilir,
ancak İnternet’te arama gerçekleştirmek her durumda vazgeçilmez temel bir beceridir.
Kitapta kapsanan alıştırmaları çözmeniz gerçekten birkaç aydan az almaz. Eğer kendinize
ayıracağınız bu kadar zamana sahip değilseniz, üzülmeyin gerçekten programlamayı sürdürmek
istediğiniz önemlidir. Bu büyük çabaları içeren gerçekten çok ciddi bir girişimdir. Eğer sürekli ve
programlamayı iyi bir seviyede öğrenmek istiyorsanız, zaman çizelgesi hazırlayın ve kitap yada
buna dayalı video derslerini izleyin.
www.nakov.com
Page 23 / 151
C# İle Bilgisayar Programlama Temelleri
Neden Veri Yapıları ve Algoritmaların Önemi Belirtilmiştir?
B
u kitap, programlama temel bilgilerine ek olarak, uygun algoritmik düşünme ve programlamanın temel veri yapılarını kullanmayı size öğretir. Veri yapıları ve algoritmalar, bir
programcının en önemli temel becerileridir! Onları iyi kavrarsanız, yazılım teknolojisinde, geliştirme aracı, platform veya API konularında yeterli olmak yolunda bir probleminiz olmaz. En
ciddi yazılım şirketlerinin çalışanlarını işe alırken dikkat ettikleri en önemli kriter budur. Bunun
kanıtı, Google ve Microsoft gibi büyük şirketlerde yapılan ve sadece temel veri yapıları ve algoritmalar ile algoritmik düşünmeye dayanan iş görüşmeleridir.
A
şağıdaki bilgiler 2007-2008 Microsoft ve Google’da yazılım mühendisliği iş görüşmelerinden başarıyla geçmiş bulunan ve bu kitabın önde gelen yazarı Svetlin Nakov’dan geliyor.
Nakov kendi deneyimlerini paylaşıyor.
Google’da İş Görüşmeleri
Zürih Google’da yazılım mühendisliği
iş görüşmelerine ait soruların %100 ‘ü
veri yapıları, algoritmalar ve algoritmik
düşünmeye dayalı konuları içerir. Böyle
bir görüşmeye girdiğinizde, beyaz bir
tahta üzerinde bağlantılı liste uygulaması
yapmanız istenebilir. (bkz. “Doğrusal
Veri Yapıları”) veya çeşitli renklerle
dolu olan GIF görüntüsü bir taramalı
çokgeni doldurmak için bir algoritma
yazmanız da beklenebilir. (bkz.”Ağaçlar
ve Grafikler” in enine-arama bölümü)
Google algoritmik düşünebilen ve temel
veri yapıları ve bilgisayar algoritmaları
kavrayışına sahip insanlarla ilgileniyor
gibi görünür. Adaylar daha sonra kendi
çalışmaları doğrultusunda kullanmak
istedikleri herhangi bir teknolojiyi
hızla öğrenebilir. Söylemeye gerek
duymalıyız ki, bu kitap Google’da bir iş
görüşmesinden geçmek için size gerekli
bilgi ve becerilerin hepsini verecek kadar
çok beceri vaat etmiyor. Kitaptaki bilgiler
kesinlikle gerekli bir minimumdur, ancak
tamamen yeterli değildir. Bu sadece ilk
adımları teşkil eder.
www.nakov.com
Microsoft’ta İş Röportajları
Dublin Microsoft’da yazılım mühendisliği
iş görüşmelerinde bir çok soru, veri
yapıları, algoritmalar ve algoritmik
düşünmeye odaklanmıştır. Örneğin,
bir dize sözcüğü tersten yazmanız (bkz.
“Dizeler ve Metin İşleme” Bölümü)
yada yönsüz grafikte topolojik arama
gerçekleştirmeniz (bkz. “Ağaçlar ve
Grafikler” Bölümü) istenebilir. Google’ın
aksine, Microsoft yazılım mimarileri,
çoklu, güvenli kod yazma, büyük
miktarda veri ile çalışma ve yazılım
testi ile ilgili bir çok mühendislik sorusu
sorar. Bu kitap Microsoft’a başvurmak
için gerekli yeterlilikten uzaktır, ancak
içerdiği bilgiler kesinlikle soruların
çoğunluğu için size faydalı olacaktır.
Page 24 / 151
C# İle Bilgisayar Programlama Temelleri
Gerçekten Bir Programcı Olmak İster Misiniz?
B
ir programcı olmak istiyorsanız, gerçek programcıların ciddi, ağırbaşlı, düşünme ve sorgulama yetenekleri olduğunu kavramalısınız. Onlar için hızlı bir şekilde tüm modern veya eski
platformlar, teknolojiler, kütüphaneler, programlama araçları, programlama dilleri ve geliştirme
araçları önemlidir, ve hayatlarının bir parçası olarak programlamayı hissederler.
İyi programcılar kendi mühendislik becerilerini ilerleyen zaman bağlamında ortaya koyar,
yeni teknolojiler, yeni programlama dilleri ve paradigmaları öğrenmeye çalışır, işte yeni yollar
takip eder, her gün yeni platformlar ve yeni geliştirme araçları hayal eder. Mantıksal düşünme
yeteneğine sahip olup; sorunlar üzerinde akıl yürütüp bunları çözmek için algoritmalar dile
getirmekle kalmayıp; çözüm olarak ardı sıra gelen bir aşama dizisi belirtirler; teknolojik araçlar
kullanarak çevre dünya modellenir; kendi fikirlerini ifade etmek için kod yazmak yada program
bileşenleriyle oynamak yerinde bir davranıştır; kendi algoritmalarını ve programlarını sorunları
görmek için haklarında gelebilecek istisnai durumları öngörerek test ederler; ve bunları
hallederler, daha deneyimli insanların tavsiyesini dinler; ve kullanıcı ihtiyaçlarına uygun olarak
onların uygulamaları için kullanıcı arayüzünü uyarlayabilirler, kendi algoritmalarını robot
endüstrisinde kullanabilirler, ve tıp alemi gibi diğer alanlarda çalıştırabilir ve etkileşim haline
geçebilirler.
İyi programcılar sürekli kitap okur, programlama
üzerine makaleler veya bloglar okur ve yeni teknolojilerle
ilgilenir; sürekli bilgi ve görgü kazanırlar, ve sürekli
çalışma biçimlerini yenileştirirler, buna yazılım kalitesi
diyorlar. Bazıları ciddi bir sorun ile yüzleştiklerinde
yemek yada uyumak ihtiyaçları bile baskılanıyor,
saplantı hissedebiliyorlar, yada sadece bazı ilginç ders
veya sunumdan ilham alarak vakit geçirebiliyorlar, bu
da depresif risk taşıyor. O zaman programlamak sizin
için video oyunlarına takılmak olabilir, daha bilinçli
öğrenilmesi ve sınırların daraltılması bir çözüm olarak
görünse de geçici heveslere kapılmak çok kolaydır.
Kendinizi programlamaya çok eğilimli görebilirsiniz,
ancak bulunduğunuz ortam sizin bu gelişiminizi
kösteklemiş olabilir.
www.nakov.com
Page 25 / 151
C# İle Bilgisayar Programlama Temelleri
İyi programcıların bir veya daha
fazla bilgisayarı vardır, Internet
bağlantısı ve teknolojilere sürekli ulaşılabilecek mekanlarda vakit
geçirirler.
Düzenli olarak web sitelerini ve yeni teknolojiler ile
ilgili blogları ziyaret ederler, kendi meslektaşları ile
günlük iletişim kurarlar, şu anda gerekli olmayan
teknoloji derslerini, seminer ve diğer etkinlikleri ziyaret
ederler. Deneme yada yazılımın bir parçasını yapmak
için yeni araçlar ve yeni yollar araştırırlar yada işin bir
parçası olarak. Yeni kütüphaneleri incelerler, yeni diller
öğrenirler, yeni platformlar denerler ve yeni geliştirme
araçlarını bilgilerini pekiştirmek için kullanırlar. Bu
yardımlaşma ile beceriler unutulmaz ve sunum için
gerekli olan farkındalık, yetkinlik ve profesyonellik
Gerçek programcılar kendi mesleklerini asla tam aklımla biliyorum
demez.
Onların öğrenmek zorunda oldukları inancı vardır.
Programcılıkta merak daha etkindir, analog saatin GPS
sistemi ile nasıl aynı fonksiyonu hatta daha fazlasıyla
entegre olduğunu hepimiz biliriz. Okuyucunun
bilgisayar bilimlerini idrak etmesi için örnekler
çoğaltılabilir : İnternet teknolojisi, programlama dilleri,
işletim sistemleri, derleyiciler, bilgisayar grafikleri, oyun,
donanım, yapay zeka ve her şey aynı programcılığın
ürünüdür. Var olmaları için teknoloji gerekir; böylece
endüstri doğar.
Programcı tam özveri gerektiren bir
meslektir.
www.nakov.com
Programcı demek yetenekli ve standart dışı durumlarla
başa çıkmak mümkün, yetkili, bilgili, düşünme, bilerek
akıl yürütme demektir. Meslek halini alması yıllar
alabilir. Eğer hala her gün yeni bir şeyler öğrenmek ve
teknolojiler ile rekabet etmek istiyorsanız, programcılığa
başlamanız uygundur. Ancak emekli olmayı beklemeyin,
zira rekabet o kadar çetindir ki sizi ezip geçebilir, başka
bir mesleği öğrenmek isteyebilirsiniz. Azim ve sebatınız
iş yapma gücünüzle doğru orantılı olmalıdır. Parasal
kaygılarla işe başlamak pek çok başarılı genç adayın
kafasındaki ana fikirdir. Ancak bu gerçekleştiğinde
teknoloji ilerleyeceği için siz geri kalırsınız. Bu da meslek
etiketleri yerine yıllar boyu gerçekliği kanıtlanmış
doğrularla yola çıkmayı ve sonuçlarından yararlanmayı
beraberinde getirir. Hiç şüpheniz olmasın, bu zevk sizi
yeterince tatmin edecektir.
Page 26 / 151
C# İle Bilgisayar Programlama Temelleri
Sürekli ve durmadan amacınızı
düşünüyorsunuz. Hatta
bazen yüksek sesle,
kendinize sesleniyorsunuz: “Ben iyi bir
programcı olmak istiyorum ve bunun için çok
çalışmak zorundayım,
çok okumak ve çok şey
öğrenmek zorundayım,
her gün, sürekli ve
özenle bir çok problem
çözmek zorundayım.”
Bir Programcı Olmak İçin Motive Olun yada Bir Başka İş Bulun!
İyi programcı olmak veya programlamanın sırlarını bilmekten vazgeçmemişseniz, ve yazılım
geliştirme, bilgisayar bilimi ve yazılım teknolojileri uzmanı olarak önümüzdeki aylar ve
yıllar boyunca sabit gayretli olarak bağlılıkla çalışmaya söz verdiyseniz, bu konuda derin
bir anlayış geliştirdiyseniz, birçok kitap veya başka öğretiler size öz motivasyon ve belirgin
hedefler verecektir. Programcı olduğunuzu veya olmayı başardığınızı düşünün, varsayın ki
programlamayla her gün meşgul oluyorsunuz, programcılık sizin mesleğinizdir. Dünyadaki
tüm yazılımları yazabiliyorsunuz
programlama öğrenmek için iyi bir
(eğer yeterli zamanınız varsa); „Gerçekten
başlangıç bir yıl boyunca her gün programlamaktır.
deneyimli programcıların çözebildiği
Eğer (istisnasız) her gün programlarsanız ve uzun
her türlü sorunu çözebiliyorsunuz.
Sürekli ve durmadan amacınızı
bir süre için bunu yaparsanız (örneğin bir yada iki
düşünüyorsunuz. Hatta bazen yüksek
yıl) bir programcı olmamak için hiçbir yol yoktur.
sesle, kendinize sesleniyorsunuz:
Yıllardır programlamayı uygulayan herkes bir gün
“Ben iyi bir programcı olmak
çok iyi olacaktır. Diğer yeteneklerin geliştirilmesi de
istiyorum ve bunun için çok çalışmak
bu yolu takip eder. Öğrenmek istiyorsanız, sadece
zorundayım, çok okumak ve çok şey
uzun bir süre boyunca her gün alıştırma yapmalısınız.”
öğrenmek zorundayım, her gün,
sürekli ve özenle bir çok problem
çözmek zorundayım.” Çevrenizdeki
her yere programlama kitapları koyuyorsunuz. “Ben iyi bir programcı olacağım” diye asılı bir
mottoyu her akşam uyumadan önce ve her sabah uyandığınızda görebileceğiniz şekilde yatağınıza
iliştiriyorsunuz. Her gün (istisnasız!) programlıyorsunuz, yeni teknolojileri öğreniyorsunuz,
eğleniyorsunuz, sorunları çözüyorsunuz, oyun yazıyorsunuz, bir web sitesi hazırlıyorsunuz,
derleyici, veritabanı ve diğer yüzlerce program yapmak için orijinal fikirler geliştiriyorsunuz.
İyi programcı olmak için her gün programlıyorsunuz ve her gün programlamayı ve mükemmel
bir programcı olacağınız gelecek zamanı düşünüyorsunuz. Bunu derinden inandığınız için
yapabildiniz! Herkes inandığı ve vazgeçmediği ölçüde bunu gerçekleştirebilir. Bu kitabın ilk
adım olduğunu ve her şeyin size bağlı olduğunu unutmayarak motivasyonunuzu artırın.
www.nakov.com
Page 27 / 151
C# İle Bilgisayar Programlama Temelleri
Kitabın İçindekilerine Bir Bakış
Bölüm 0: Önsöz
Ö
nsöz (güncel bölüm) kitabın içeriğini, okuyucunun öğreneceklerini,
beklentilerinin neler olması gerektiğini, kitabı nasıl okuması gerektiği, neden C# dilini kullandığımızı, neden veri yapıları ve algoritmalara,
vb. odaklandığımızı okuyuculara tanıtır. Önsöz aynı zamanda kitabın tarihini de anlatır, bölümlerin içeriğini, Bulgarca’dan İngilizce’ye yazarlar,
editörler ve çevirmenleri takım olarak tanıtır. Tüm dünyada Microsoft,
Google, SAP, VMware, Telerik ve diğer önde gelen yazılım şirketlerinden ünlü yazılım mühendisleri tarafından yazılmış tam gözden geçirmeleri içeriyor.
Ö
nsöz yazarı Svetlin Nakov’dur (Veselin Kolev ve Mihail Stoynov’un
çok az katkısı ile) İngilizce’ye Ivan Nenchovski tarafından çevrilmiş
ve Mihail Stoynov, Veselina Raykova, Yoan Krumov ve Hristo Radkov tarafından düzenlenmiştir.
Kitabın sonraki bölümlerinde karşımıza çıkacak
içeriğin bölüm özetini veren öğrenilecekler birkaç
cümle ile bundan sonraki
bölümlerde anlatılacak.
Bölüm 1: Programlamaya Giriş
“Programlamaya Giriş” Bölümü’nde, programlamanın temel terminolojisine
göz atacağız ve ilk programımızı yazacağız. Programlama nedir sorusuna
kendimizi alıştıracağız ve bilgisayarlar ve programlama dilleri ile bağlantı
kuracağız. Kısaca yazılım geliştirmenin ana aşamalarını gözden geçireceğiz,
C# dilini, .NET platformu ve yazılım geliştirmede kullanılan farklı Microsoft
teknolojilerini tanıtacağız. C# programlama için gereken yardımcı araçları
inceleyeceğiz ve ilk bilgisayar programımızı yazmak için C# dilini kullanarak derleyeceğiz
ve komut satırını ve bunun yanı sıra Microsoft Visual Studio tümleşik geliştirme ortamını
kullanarak çalıştıracağız. .NET Platformu için dokümantasyon olarak düşünülmüş MSDN
Kitaplığı’na kendimizi alıştıracağız, bu dilin yetenekleri ile ilgili çalışmamızda bize yardımcı
olacaktır.
Teodor Bozhikov ve Svetlin Nakov tarafından düzenlenen bölüm Pavel Donchev tarafından
yazılmıştır. Bölümün içeriği “Java ile Programlamaya Giriş” kitabının Luchesar Cekov
tarafından yazılmış çalışmalarına biraz dayanmaktadır. Atanas Valchev tarafından İngilizce’ye
www.nakov.com
Page 28 / 151
C# İle Bilgisayar Programlama Temelleri
Bölüm 2: Temel Türler ve Değişkenler
“Temel Türler ve Değişkenler” Bölümü’nde, C# temel türleri ve değişkenlerinin
ne oldukları ve onlarla nasıl çalışılacağını inceleyeceğiz. Öncelikle, veri türleri
üzerinde duracağız – tamsayı türleri, gerçek kayan nokta türleri, Boole, karakter
türleri, dizeler ve nesne türleri. Değişkenlerin ne oldukları ve özellikleri hakkında
devam edeceğiz, değişkenlerin bildirimi, onlara değer ve ilk değer atanması.
C# veri türlerinin ana kategorilerini tanıtacağız – değer ve referans türleri. Son
olarak, kalıp deyimler üzerinde duracağız – kalıp deyimlerin ne oldukları ve çeşitleri hakkında.
Nikolay Vasilev tarafından düzenlenen bölüm Veselin Georgiev ve Svetlin Nakov tarafından
yazılmıştır. Tüm bölümün içeriği “Java ile Programlamaya Giriş” kitabının Hristo Todorov
ve Svetlin Nakov tarafından yazılmış çalışmalarına dayanmaktadır. Lora Borisova tarafından
İngilizce’ye çevrilmiştir (Angel Angelov ve Hristo Radkov tarafından düzenlenmiştir).
Bölüm 3: İşleçler ve İfadeler
“İşleçler ve İfadeler” Bölümü’nde, C# işleçlerini ve çeşitli veri türleri üzerinde
gerçekleştiren işlemleri
tanıtacağız. İşleçler arası öncelikleri açıklığa
kavuşturacağız ve işleçlerin türlerini aldıkları argüman sayısı ve yaptıkları işlem
sayımına göre tanıyacağız. Tür zorlamalarının neden gerekli olduğunu ve nasıl
çalışmak gerektiğini inceleyeceğiz. Son olarak, ifadeleri açıklayacağız ve nasıl
kullanılacağını anlatacağız.
Marin Georgiev tarafından düzenlenen bölüm Dilyan Dimitrov ve Svetlin Nakov tarafından
yazılmıştır. Tüm bölümün içeriği “Java ile Programlamaya Giriş” kitabının Lachezar Bozhkov
tarafından yazılmış çalışmalarına dayanmaktadır. Angel Angelov tarafından İngilizce’ye
çevrilmiştir (Martin Yankov ve Hristo Radkov tarafından düzenlenmiştir).
www.nakov.com
Page 29 / 151
C# İle Bilgisayar Programlama Temelleri
Bölüm 4: Konsol Giriş ve Çıkış
“Konsol Giriş ve Çıkış” Bölümü’nde, veri girişi ve çıkışı için bir araç olarak konsola
aşina olacağız. Konsolun ne olduğunu, ne zaman ve nasıl kullanıldığını, konsola
erişmek için geliştirilen birçok programlama dillerine ait kavramları açıklayacağız.
Kullanıcı etkileşimi için bazı C# özelliklerini tanıtacağız ve giriş-çıkış işlemleri
için ana akımları, Console.In, Console.Out ve Console.Error, Console sınıfını ve
çeşitli biçimlerde veri yazdırmak için biçim dizelerinin kullanımını inceleyeceğiz.
Bir metni sayıya nasıl dönüştüreceğinizi göreceksiniz (ayrıştırma), çünkü C# sayıları bu şekilde
girilir.
Svetlin Nakov tarafından düzenlenen bölüm Iliyan Murdanliev tarafından yazılmıştır. Tüm
bölümün içeriği “Java ile Programlamaya Giriş” kitabının Boris Valkov tarafından yazılmış
çalışmalarına dayanmaktadır. Lora Borisova tarafından İngilizce’ye çevrilmiştir (Dyanko Petkov
tarafından düzenlenmiştir).
Bölüm 5: Koşullu İfadeler
“Koşullu İfadeler” Bölümü’nde, durumlara bağlı olarak farklı eylemleri yürütmek
için kullanabileceğiniz C# koşullu ifadelerini ele alacağız. Koşullu işleçlerin
sözdizimini açıklayacağız: Çeşitli örneklerle if ve if-else ve seçim kontrolü olan
switch işlecinin pratik uygulamalarını açıklayacağız. Koşullu ifadelerin iç içe ya
da diğer türlerini kullanırken daha iyi bir programlama tarzı elde etmek için
takip edilmesi gereken en iyi uygulamalar üzerinde duracağız.
Marin Georgiev tarafından düzenlenen bölüm Svetlin Nakov tarafından yazılmıştır. Tüm
bölümün içeriği “Java ile Programlamaya Giriş” kitabının Marin Georgiev tarafından yazılmış
çalışmalarına dayanmaktadır. George Vaklinov tarafından İngilizce’ye çevrilmiştir (Momchil
Rogelov tarafından düzenlenmiştir).
www.nakov.com
Page 30 / 151
C# İle Bilgisayar Programlama Temelleri
Bölüm 6: Döngüler
“Döngüler” Bölümü’nde, bir kod parçasını tekrar tekrar yürütebileceğiniz
döngü mekanizmalarını inceleyeceğiz. Koşullu tekrarların (while ve dowhile döngüleri) nasıl uygulandığını ve for döngüleri ile nasıl çalışılacağını
tartışacağız. Bir döngü tanımlamak, yapılandırmak ve anahtar uygulamalarından
bazıları için çeşitli yollarla örnekler verilecektir. Son olarak, birbiri içinde
birden çok döngünün nasıl kullanılacağını (iç içe döngüler) göreceğiz.
Svetlin Nakov tarafından düzenlenen bölüm Stanislav Zlatinov tarafından yazılmıştır. Tüm
bölümün içeriği “Java ile Programlamaya Giriş” kitabının Rumyana Topalska tarafından
yazılmış çalışmalarına dayanmaktadır. Angel Angelov tarafından İngilizce’ye çevrilmiştir (Lora
Borisova tarafından düzenlenmiştir).
Bölüm 7: Diziler
“Diziler” Bölümü’nde, aynı tür elemanlar ile çalışmak için bir araç olan dizileri
tanıtacağız. Ne olduklarını, nasıl bildirileceklerini, oluşturulacaklarını ve
elemanlarına nasıl erişim sağlanacağını anlatacağız. Tek boyutlu ve çok boyutlu
dizileri inceleyeceğiz. Bir dizi elemanları üzerinden yineleme yapmak, standart
girdiden okumak ve standart çıktıya yazmak için çeşitli yollar öğreneceksiniz.
Örnek olarak dizileri kullanarak çözebileceğiniz birçok alıştırma vereceğiz, ve
onların ne kadar yararlı olduğunu göstereceğiz.
Radoslav Todorov tarafından düzenlenen bölüm Hristo Germanov tarafından yazılmıştır. Tüm
bölümün içeriği “Java ile Programlamaya Giriş” kitabının Mariyan Nenchev tarafından yazılmış
çalışmalarına dayanmaktadır. Boyan Dimitrov tarafından İngilizce’ye çevrilmiştir (Radoslav
Todorov ve Zhelyazko Dimitrov tarafından düzenlenmiştir).
www.nakov.com
Page 31 / 151
C# İle Bilgisayar Programlama Temelleri
Bölüm 8: Sayısal Sistemler
“Sayısal Sistemler” Bölümü’nde, çeşitli sayı sistemleri ve bunların sayı gösterimi ile
çalışmak için var olan araçlara bir göz atacağız. Sayıların ondalık, ikili ve onaltılı
sayı sistemleri ile temsil edilmesine özellikle önem vereceğiz, çünkü bilgisayar,
iletişim ve programlamada yaygın olarak kullanılmaktadır. Buna ek olarak,
sayısal verileri bir bilgisayarda kodlama yöntemlerini ve kodlama türlerini,
yani işaretli büyüklükler, bir’in tümleyeni, iki’nin tümleyeni ve ikili kodlanmış
ondalıkları açıklayacağız.
Mihail Stoynov tarafından düzenlenen bölüm Teodor Bozhikov tarafından yazılmıştır. Tüm
bölümün içeriği “Java ile Programlamaya Giriş” kitabının Petar Velev ve Svetlin Nakov
tarafından yazılmış çalışmalarına dayanmaktadır. Atanas Valchev tarafından İngilizce’ye
çevrilmiştir (Veselina Raykova tarafından düzenlenmiştir).
Bölüm 9: Metotlar
“Metotlar” Bölümü’nde, programlamada altyordamların ayrıntılarını bileceğiz. Bu
altyordamlara C# dilinde yöntemler deniyor. Ne zaman ve neden yöntemlerin
kullanılacağını açıklayacağız; yöntemlerin nasıl bildirileceğini göstereceğiz ve
bir yöntemin imzası nedir açıklayacağız. Özel bir yöntemi nasıl oluşturacağımızı
ve daha sonra kullanmak için nasıl çağrılacağını öğreneceğiz ve metotlarda
parametreleri nasıl kullanacağımızı ve bir metottan sonuç döndürmeyi
göstereceğiz. Son olarak, metotlar ile çalışırken bazı yerleşik uygulamaları
tartışacağız. Tüm bunlar detaylı bir şekilde açıklanan örneklerle ve ekstra
alıştırmalar ile pekiştirilmiş olacak.
Radoslav Todorov ve Nikolay Vasilev tarafından düzenlenen bölüm Yordan
Pavlov tarafından yazılmıştır. Tüm bölümün içeriği “Java ile Programlamaya
Giriş” kitabının Nikolay Vasilev tarafından yazılmış çalışmalarına dayanmaktadır.
Ivaylo Dyankov tarafından İngilizce’ye çevrilmiştir (Vladimir Amiorkov ve Franz
Fischbach tarafından düzenlenmiştir).
www.nakov.com
Page 32 / 151
C# İle Bilgisayar Programlama Temelleri
Bölüm 10: Özyineleme
“Özyineleme” Bölümü’nde, özyineleme ve uygulamalarını tanıtacağız. Güçlü
bir programlama tekniği olan özyinelemeyi kullanan bir yöntem kendi kendisini
çağırır. Özyineleme sayesinde kolayca farklı yapılandırma kombinasyonlarını
çıkarabileceğimiz karmaşık kombinasyon problemlerini çözebiliriz. Özyinelemenin
doğru ve yanlış kullanımlarından pek çok örnek göstereceğiz ve sizi bunların
nasıl yararlı olabileceğine ikna edeceğiz.
Svetlin Nakov tarafından düzenlenen bölüm Radoslav Ivanov tarafından yazılmıştır. Tüm
bölümün içeriği “Java ile Programlamaya Giriş” kitabının Radoslav Ivanov ve Svetlin Nakov
tarafından yazılmış çalışmalarına dayanmaktadır. Vasya Stankova tarafından İngilizce’ye
çevrilmiştir (Yoan Krumov tarafından düzenlenmiştir).
Bölüm 11: Nesneleri Oluşturma ve Kullanma
“Nesneleri Oluşturma ve Kullanma” Bölümü’nde, nesne yönelimli
programlamanın temel kavramlarını öğreneceğiz – sınıflar ve nesneler – ve
.NET Platformu’nun standart kütüphanelerinden sınıfları nasıl kullanacağımızı
açıklayacağız. Bazı sık kullanılan sistem sınıfları üzerinde duracağız ve bunların
örnekleri (nesneleri) nasıl oluşturacağınızı ve kullanacağınızı göstereceğiz.
Bir nesnenin özelliklerine nasıl erişileceğini, kurucuların nasıl çağrılacağını ve
sınıflarda statik alanlar ile nasıl çalışılacağını tartışacağız. Son olarak, “ad alanları” üzerinde
odaklanacağız – bize nasıl yardımcı olurlar, nasıl dahil edilir ve nasıl kullanılırlar.
Stefan Staev tarafından düzenlenen bölüm Teodor Stoev tarafından yazılmıştır. Tüm bölümün
içeriği “Java ile Programlamaya Giriş” kitabının Teodor Stoev ve Stefan Staev tarafından
yazılmış çalışmalarına dayanmaktadır. Vasya Stankova tarafından İngilizce’ye çevrilmiştir
(Todor Mitev tarafından düzenlenmiştir).
www.nakov.com
Page 33 / 151
C# İle Bilgisayar Programlama Temelleri
Bölüm 12: İstisnai Durum İşleme
“İstisnai Durum İşleme” Bölümü’nde, nesne yönelimli programlama ve özellikle
C# dilindeki istisnai durumları tanıyacaksınız. try-catch cümlesini kullanarak istisnai
durumları nasıl yakalayacağınızı, çağrılan yöntemlere onları nasıl geçireceğinizi ve
throw deyimini kullanarak standart, özel veya yakalanan istisnai durumları nasıl
atacağınızı öğreneceksiniz. Kullanımlarına dair örnekler vereceğiz, istisnai durum
türlerine ve .NET Platformu’nda oluşturulan istisnai durum hiyerarşisine bakacağız.
Son olarak, istisnai durumları kullanmanın avantajlarına ve bunların belirli durumlara nasıl
uygulanacağına bakacağız.
Radoslav Kirilov tarafından düzenlenen bölüm Mihail Stoynov tarafından yazılmıştır. Tüm
bölümün içeriği “Java ile Programlamaya Giriş” kitabının Luchesar Cekov, Mihail Stoynov
ve Svetlin Nakov tarafından yazılmış çalışmalarına dayanmaktadır. Dimitar Bonev ve George
Todorov tarafından İngilizce’ye çevrilmiştir (Doroteya Agayna tarafından düzenlenmiştir).
Bölüm 13: Dizeler ve Metin İşleme
“Dizeler ve Metin İşleme” Bölümü’nde, dizeleri tanıtacağız: C# dilinde nasıl
uygulandığını ve metin içeriğini nasıl işleyebileceğimizi. Metin işlemek için farklı
yöntemler üzerinde ayrıntılı olarak duracağız; ve geçirilen parametrelere göre alt
dizeleri ayıklamayı, anahtar kelimeler için nasıl arama yapılacağını, bunun yanı
sıra ayırıcı karakterleri kullanarak bir dizenin nasıl bölüneceğini öğreneceğiz.
Düzenli ifadeler hakkında yararlı bilgiler vereceğiz ve belirli bir örüntü ile
eşleşen veriyi nasıl ayıklayacağımızı öğreneceğiz. Son olarak, konsolda metin içeriğinin daha
şık ve sıkı biçimlendirmesini elde etmek için gerekli yöntemler ve sınıflara, sayılar ve tarihlerin
baskısını almak için çeşitli yollara bir göz atacağız.
Radoslav Todorov tarafından düzenlenen bölüm Veselin Georgiev tarafından yazılmıştır. Tüm
bölümün içeriği “Java ile Programlamaya Giriş” kitabının Mario Peshev tarafından yazılmış
çalışmalarına dayanmaktadır. Vesselin Georgiev tarafından İngilizce’ye çevrilmiştir (Todor
Mitev ve Vladimir Amiorkov tarafından düzenlenmiştir).
www.nakov.com
Page 34 / 151
C# İle Bilgisayar Programlama Temelleri
Bölüm 14: Sınıfları Tanımlama
“Sınıfları Tanımlama” Bölümü’nde, özel sınıfları nasıl tanımlayabileceğimizi ve
bir sınıfın elemanlarının neler olduğunu göstereceğiz. Sınıfların veri alanlarını,
kurucularını ve özelliklerini bildirmeyi öğreneceğiz ve yöntemin ne olduğunu
yine hatırlayacağız, ancak metotlar ve bunların erişim değiştiricileri hakkındaki
bilgimizi genişleteceğiz. Kurucuların özellikleri üzerinde odaklanacağız ve
program nesnelerinin yığın (dinamik bellek) içinde nasıl var olduklarını ve
alanlarının nasıl ilk değer atayarak başlatıldığını detaylı olarak açıklayacağız.
Son olarak, sınıfın statik elemanlarının ne olduğunu – veri alanları (sabitler dahil), özellikler ve
metotları – ve bunların nasıl kullanılacağını açıklayacağız. Bu bölümde, genel özellikleri olan
türleri, dökümlü türleri ve iç içe sınıfları da tanıtacağız.
Bu bölüm Nikolay Vasilev, Svetlin Nakov, Mira Bivas ve Pavlina Hadjieva tarafından yazılmıştır. Tüm
bölümün içeriği “Java ile Programlamaya Giriş” kitabının Nikolay Vasilev tarafından yazılmış
çalışmalarına dayanmaktadır. Radoslav Todorov, Yoan Krumov, Teodor Rusev ve Stanislav
Vladimirov tarafından İngilizce’ye çevrilmiştir (Vladimir Amiorkov, Pavel Benov ve Nencho
Nenchev tarafından düzenlenmiştir). Bu bölüm kitaptaki en geniş bölümdür, yani sizin için
yüksek kalite standardında hazırlanması için birçok yazar katkıda bulunarak üzerinde çalıştı.
Bölüm 15: Metin Dosyaları
“Metin Dosyaları” Bölümü’nde .NET Platformu’ndaki metin dosyaları ile çalışmayı
tanıtacağız. Bir dosyayı kesintisiz olarak iletmenin ne olduğunu, amacını ve
nasıl kullanıldığını açıklayacağız. Bir metin dosyasının ne olduğunu ve metin
dosyalarındaki verilerin nasıl okunacağını ve yazılacağını açıklayacağız ve
metin dosyaları ile çalışırken özel durumları yakalamanın ve işlemenin en iyi
uygulamalarını ayrıntılı olarak sunacağız. Doğal olarak, tüm bunları bir sürü
örnekler ile uygulayarak görselleştireceğiz ve göstereceğiz.
Stanislav Zlatinov tarafından düzenlenen bölüm Radoslav Kirilov tarafından yazılmıştır. Tüm
bölümün içeriği “Java ile Programlamaya Giriş” kitabının Danail Alexiev tarafından yazılmış
çalışmalarına dayanmaktadır. Nikolay Angelov tarafından İngilizce’ye çevrilmiştir (Martin
Gebov tarafından düzenlenmiştir).
www.nakov.com
Page 35 / 151
C# İle Bilgisayar Programlama Temelleri
Bölüm 16: Doğrusal Veri Yapıları
“Doğrusal Veri Yapıları” Bölümü’nde, programlamada bazı temel veri
gösterimlerini ve doğrusal veri yapılarını tanıtacağız, çünkü çoğu kez belirli
bir sorunu çözmek amacıyla, bir dizi eleman ile çalışmamız gerekir. Örneğin,
bu kitabı okumak için ardışık olarak her sayfayı okumak zorundayız, yani
sayfaları oluşturan her bir elemanı atlamadan dikkatle incelemek zorundayız.
Belirli bir problem için bazı veri yapılarının diğerine göre nasıl daha verimli ve
kullanışlı olabileceğini göreceğiz. Sonra “liste”, “yığıt” ve “kuyruk” doğrusal yapılarını ve onların
uygulamalarını inceleyeceğiz ve bu yapıların bazı uygulamalarının detaylarını tanıyacağız.
Dilyan Dimitrov ve Svetlin Nakov tarafından düzenlenen bölüm Tsvyatko Konov tarafından
yazılmıştır. Tüm bölümün içeriği “Java ile Programlamaya Giriş” kitabının Tsvyatko Konov
ve Svetlin Nakov tarafından yazılmış çalışmalarına dayanmaktadır. Vasya Stankova tarafından
İngilizce’ye çevrilmiştir (Ivaylo Gergov tarafından düzenlenmiştir).
Bölüm 17: Ağaçlar ve Grafikler
“Ağaçlar ve Grafikler” Bölümü’nde, ağaç-benzeri diye anılan veri yapılarına,
yani ağaçlara ve grafiklere bakacağız. Bu yapıların özelliklerinin bilinmesi
modern programlama için önemlidir. Bu yapıların her biri gerçek hayat
problemlerinin modellenmesi ve onların yardımı ile verimli olarak çözülebilmesi
için kullanılmaktadır. Ağaç-benzeri veri yapılarının ne olduğunu ayrıntılarıyla
inceleyeceğiz ve onların birincil avantajları ve dezavantajlarını göstereceğiz.
Aynı zamanda, onların pratik kullanımını gösteren örnek uygulamalar ve alıştırmalar vereceğiz.
Ayrıca, ikili ağaçlar, ikili arama ağaçları ve dengeli ağaçları ve daha sonra “grafik” veri yapısını,
grafiklerin türlerini ve bunların kullanımını dikkatle inceleyeceğiz. .NET Platformu’nun hangi
parçalarının ikili arama ağaçlarından faydalandığını göstereceğiz.
Iliyan Murdanliev ve Svetlin Nakov tarafından düzenlenen bölüm Veselin Kolev tarafından
yazılmıştır. Tüm bölümün içeriği “Java ile Programlamaya Giriş” kitabının Veselin Kolev
tarafından yazılmış çalışmalarına dayanmaktadır. Kristian Dimitrov ve Todor Mitev tarafından
İngilizce’ye çevrilmiştir (Nedjaty Mehmed ve Dyanko Petkov tarafından düzenlenmiştir).
www.nakov.com
Page 36 / 151
C# İle Bilgisayar Programlama Temelleri
Bölüm 18: Sözlükler, Karma Tabloları ve Kümeler
“Sözlükler, Karma Tabloları ve Kümeler” Bölümü’nde, sözlük ve kümeler gibi
daha karmaşık veri yapılarını, buna ilaveten karma tablolar ve dengeli ağaçları
kullanarak bunların uygulamaları analiz edeceğiz. Karma tablolarının ve
karma fonksiyonunun ne demek olduğunu ve neden programlamanın o
kadar önemli parçaları olduğunu detaylarıyla açıklayacağız. “Çarpışmalar”
kavramını ve karma tabloları uygularken çarpışmaların nasıl oluşabileceklerini
tartışacağız. Onları çözmek için çeşitli yaklaşımlar önereceğiz. “Küme” soyut veri yapısına
bakacağız ve bir sözlük yada dengeli ağaç ile nasıl gerçekleştirilebileceğini açıklayacağız.
Günlük pratikte bu veri yapılarının uygulamalarını gösteren örnekler vereceğiz.
Tsvyatko Konov ve Svetlin Nakov tarafından düzenlenen bölüm Mihail Valkov tarafından
yazılmıştır. Tüm bölümün içeriği “Java ile Programlamaya Giriş” kitabının Vladimir Tsanev
(Tsachev) tarafından yazılmış çalışmalarına dayanmaktadır. George Mitev ve George K. Georgiev
tarafından İngilizce’ye çevrilmiştir (Martin Gebov ve Ivaylo Dyankov tarafından düzenlenmiştir).
Bölüm 19: Veri Yapıları ve Algoritma Karmaşıklığı
“Veri Yapıları ve Algoritma Karmaşıklığı” Bölümü’nde, şimdiye kadar
öğrendiğimiz veri yapılarını, temel işlemler (ekleme, arama, silme, vb.) için
performanslarına dayalı olarak karşılaştıracağız. Belirli durumlara en uygun veri
yapıları için öneriler vereceğiz. Bir kümeyi, bir karma tablo, bir dizi, bir dinamik
dizi, bir karma tablo veya dengeli ağaç kullanarak uygulamanın ne zaman daha
iyi ve tercih edilebilir olduğunu açıklayacağız. Bu yapıların her biri için .NET
Platformu’nda bir uygulama vardır. Biz sadece belirli bir veri yapısını ne zaman kullanmamız
gerektiğini öğrenmek zorundayız ki böylece verimli ve güvenilir bir kaynak kodu yazabilelim.
Veselin Kolev tarafından düzenlenen bölüm Nikolay Nedyalkov ve Svetlin Nakov tarafından
yazılmıştır. Tüm bölümün içeriği “Java ile Programlamaya Giriş” kitabının Svetlin Nakov ve
Nikolay Nedyalkov tarafından yazılmış çalışmalarına dayanmaktadır. George Halachev ve
Tihomir Iliev tarafından İngilizce’ye çevrilmiştir (Martin Yankov tarafından düzenlenmiştir).
www.nakov.com
Page 37 / 151
C# İle Bilgisayar Programlama Temelleri
Bölüm 20: Nesne Yönelimli Programlamanın
“Nesne Yönelimli Programlamanın İlkeleri” Bölümü’nde, nesne yönelimli
programlamanın (OOP) ilkelerini tanıtacağız: sınıf kalıtımı, arayüzlerin
gerçekleştirimi, veri ve davranış soyutlama, veri sarmalama ve uygulama
detaylarını gizleme, çokbiçimlilik ve sanal yöntemler. Uyum ve bağlaşım ilkelerini
detaylı olarak açıklayacağız. Kısaca nesne yönelimli modellemeyi ve belirli bir
iş problemine dayanan nesne modeli oluşturmayı da açıklayacağız ve nesne
yönelimli modellemede UML ve rolünü tanıyacağız. Son olarak, kısaca tasarım desenlerini
tartışacağız ve pratikte sık kullanılan tasarım desenleri için örnekler vereceğiz.
Mihail Valkov tarafından düzenlenen bölüm Mihail Stoynov tarafından yazılmıştır. Tüm
bölümün içeriği “Java ile Programlamaya Giriş” kitabının Mihail Stoynov tarafından yazılmış
çalışmalarına dayanmaktadır. Vasya Stankova ve Momchil Rogelov tarafından İngilizce’ye
çevrilmiştir (Ivan Nenchovski tarafından düzenlenmiştir).
Bölüm 21: Yüksek Kalite Programlama Kodu
“Yüksek Kalite Programlama Kodu” Bölümü’nde, yüksek kaliteli programlama
kodu yazmanın temel kurallarına göz atacağız. Program elemanları (değişkenler,
yöntemler, sınıflar ve diğerleri) için adlandırma kuralları, biçimlendirme ve kod
yerleşimi yönergeleri, sınıf ve yöntemleri yüksek kaliteli oluşturmak için en iyi
uygulamalar, ve yüksek kaliteli kod dokümantasyonunun ilkeleri üzerinde
duracağız. Yüksek kaliteli ve düşük kaliteli birçok kod örnekleri verilecektir.
Çalışma esnasında, bir tümleşik geliştirme ortamının, bazı işlemleri (biçimlendirme
ve mevcut kodun yeniden yapılandırılması gibi) otomatik hale getirmek için gerektiğinde nasıl
kullanılacağı açıklanacaktır. Otomatik test yapmak için endüstriyel bir yöntem olarak bilinen
birim testleri de ele alınacaktır.
Pavel Donchev tarafından düzenlenen bölüm Mihail Stoynov ve Svetlin Nakov
tarafından yazılmıştır. Tüm bölümün içeriği “Java ile Programlamaya Giriş” kitabının
Mihail Stoynov, Svetlin Nakov ve Nikolay Vasilev tarafından yazılmış çalışmalarına
dayanmaktadır. Blagovest Buyukliev tarafından İngilizce’ye çevrilmiştir (Dyanko
Petkov, Mihail Stoynov ve
Martin
Yankov
tarafından
düzenlenmiştir).
www.nakov.com
Page 38 / 151
C# İle Bilgisayar Programlama Temelleri
Bölüm 22: Lambda İfadeleri ve LINQ
“Lambda İfadeleri ve LINQ” Bölümü’nde, C# dilinin daha gelişmiş ve ileri
yeteneklerinden bazılarını tanıtacağız. Daha kesin olmak gerekirse, lambda
ifadeleri ve LINQ kullanarak koleksiyonlara sorguların nasıl yapıldığının açıklığa
kavuşturulması için özel dikkat vereceğiz. Zaten yaratılmış sınıflara uzantı
yöntemlerini kullanarak nasıl işlevsellik ekleneceğini açıklayacağız. Anonim türleri
tanıtacağız ve kısaca onların doğasını ve kullanımını tanımlayacağız. Lambda
ifadeleri de tartışacağız ve pratikte yerleşik lambda fonksiyonlarının çoğunun nasıl çalıştığını
göstereceğiz. Daha sonra C# parçası olan LINQ sözdizimi içine dalacağız. ne olduğunu,
nasıl çalıştığını ve bunu kullanarak ne tür sorgular yapabileceğimizi öğreneceğiz. Son olarak,
LINQ anahtar kelimelerini tartışacağız, onların anlamı ve birçok örnek ile yeteneklerini ortaya
koyacağız.
Veselin Kolev tarafından düzenlenen bölüm Nikolay Kostov tarafından yazılmıştır. Nikolay
Kostov tarafından İngilizce’ye çevrilmiştir (Zhasmina Stoyanova ve Mihail Stoynov tarafından
düzenlenmiştir).
Bölüm 23: Problem Çözme Metodolojisi
“Problem Çözme Metodolojisi” Bölümü’nde, programlama problemlerinin
çözümü için tavsiye edilebilir bir yaklaşımı tartışacağız ve biz somut örnekler ile
göstereceğiz. Problemleri çözerken izlememiz gereken mühendislik ilkelerini
(büyük ölçüde matematik, fizik ve diğer disiplinlerdeki sorunlara uygulanan)
görüşeceğiz ve uygulama halinde onları göstereceğiz. Birkaç örnek problem
çözerken geçmemiz gereken adımları anlatacağız ve bu adımları takip etmezsek
yapabileceğimiz hataları göstereceğiz. Problem çözmenin genellikle atlanan bazı önemli
adımlarını (örneğin test etmek gibi) dikkate alacağız.
Veselin Georgiev tarafından düzenlenen bölüm Svetlin Nakov tarafından yazılmıştır. Tüm
bölümün içeriği “Java ile Programlamaya Giriş” kitabının Svetlin Nakov tarafından yazılmış
çalışmalarına dayanmaktadır. Ventsi Shterev ve Martin Radev tarafından İngilizce’ye çevrilmiştir
(Tihomir Iliev ve Nedjaty Mehmed tarafından düzenlenmiştir).
www.nakov.com
Page 39 / 151
C# İle Bilgisayar Programlama Temelleri
Bölüm 24, 25, 26: Örnek Programlama Sınavı
“Örnek Programlama Sınavı (Konu # 1, Konu # 2 ve Konu # 3)” Bölümü’nde,
üç örnek programlama sınavından
dokuz örnek problemin açıklamalarına
bakacağız ve çözüm önereceğiz. Onları çözme yolunda, “Problem Çözme
Metodolojisi”nde açıklanan metodolojiyi uygulamaya koyacağız.
Radoslav Todorov, Radoslav Ivanov ve Teodor Stoev tarafından düzenlenen
bölüm Stefan Staev, Yosif Yosifov ve Svetlin Nakov tarafından yazılmıştır. Tüm bölümün içeriği
“Java ile Programlamaya Giriş” kitabının Stefan Staev, Svetlin Nakov, Radoslav Ivanov ve
Teodor Stoev tarafından yazılmış çalışmalarına dayanmaktadır. Stanislav Vladimirov, Ivaylo
Gergov, Ivan Nenchovski ve Ivaylo Gergov tarafından İngilizce’ye çevrilmiştir (Tihomir Iliev ve
Nedjaty Mehmed tarafından düzenlenmiştir).
Bölüm 27: Sonuç
Sonuç olarak uzman bir yazılım mühendisi olarak bu kitaptan sonraki gelişiminize
devam etmek için daha fazla bilgi vereceğiz. Telerik Yazılım Akademisi’nde –
Bulgaristan’da yazılım geliştirme uzmanları için en büyük eğitim merkezinde
– verilen ücretsiz kurslardan, nasıl uygulanacağından, ne öğreneceğinizden,
nasıl bir kariyer yolu seçeceğinizden ve diğer birkaç kaynaktan söz edeceğiz.
Bölüm Svetlin Nakov tarafından yazılmıştır. Ivan Nenchovski tarafından İngilizce’ye çevrilmiştir
(Svetlin Nakov tarafından düzenlenmiştir).
www.nakov.com
Page 40 / 151
C# İle Bilgisayar Programlama Temelleri
Bölüm 1: Programlamaya Giriş
Bölümün İçindekileri
B
u bölümde programlamanın temel terminolojisine göz atacağız ve ilk programımızı yazacağız. Programlama nedir sorusunu ve bilgisayarlar ve programlama dilleri ile bağlantısını tanıtacağız.
Yazılım geliştirmenin farklı aşamalarını kısaca gözden geçireceğiz.
C
# dilini, .NET platformu ve yazılım geliştirmede kullanılan farklı Microsoft teknolojilerini tanıtacağız.
C# programlama için gereken yardımcı araçları inceleyeceğiz ve ilk bilgisayar programımızı yazmak
için C# dilini kullanarak derleyeceğiz ve komut satırını ve bunun yanı sıra Microsoft Visual Studio tümleşik geliştirme ortamını kullanarak çalıştıracağız. .NET Platformu için dokümantasyon olarak düşünülmüş
MSDN Kitaplığı’na kendimizi alıştıracağız, bu dilin yetenekleri ile ilgili çalışmamızda bize yardımcı olacaktır.
“Programlama” Ne Demektir?
Günümüzde bilgisayarlar vazgeçilmez hale gelmiştir. İşyerindeki karmaşık problemleri çözmek için
bilgisayarlardan faydalanırız, karayolunda yön bulmaya yardımcıdırlar, eğlenmek ve iletişim kurmak için
kullanılırlar. İş dünyasında, eğlence endüstrisi, telekomünikasyon ve finans sektöründe sayısız uygulamaları
vardır. Bilgisayarların çağdaş toplumun sinir sistemi olduğunu söylemek bir abartı değildir ve onlar olmadan
varlığını hayal etmek zordur.
Bilgisayarlar çok yaygın olmasına rağmen, az sayıda kişi gerçekten nasıl çalıştıklarını bilir. Gerçekte, bilgisayarlar
değil, ancak bunların üzerinde çalışan programlar (yazılım) önemli meseledir. Bilgisayarları son kullanıcı için
değerli yapan, hayatımızı değiştirmek için birçok farklı türdeki hizmetlere izin veren yazılımdır.
Bilgisayarlar Bilgiyi Nasıl İşler?
Programlamanın
ne
anlama
geldiğini anlamak için, bir
bilgisayar ve işletim sistemini
kabaca tüm atölye, depo ve
ulaşımıyla büyük bir fabrika
ile karşılaştırabiliriz. Bu kaba
karşılaştırma çağdaş bilgisayarda
mevcut olan karmaşıklık düzeyini
hayal etmeyi kolaylaştırır. Bir
bilgisayarda çalışan birçok süreç
vardır ve bunlar bir fabrikadaki
atölye ve üretim hatlarını temsil
www.nakov.com
eder. Üzerindeki dosyalar ile
birlikte sabit disk, ve çalışma
belleği (RAM) depoları temsil
eder, bilgi girişi ve çıkışını
sağlayan farklı protokoller ise
ulaşım sistemlerini temsil eder.
Bir fabrikada yapılan ürünler
farklı farklı atölyelerden gelir.
Depolardaki
hammaddeleri
kullanırlar ve
tamamlanmış
malları orada geri saklarlar.
Hammaddeler,
tedarikçiler
tarafından depolara taşınır ve
tamamlanan ürün depolardan
satış yerlerine taşınır. Bunu
yapmak için, farklı ulaşım türleri
kullanılır. Hammadde fabrikaya
girer, farklı işleme aşamalarından
geçer ve ürünlere dönüştürülerek
fabrikayı terk eder. Her fabrika
tüketime hazır bir ürün olarak
hammaddeleri dönüştürür.
Page 41 / 151
C# İle Bilgisayar Programlama Temelleri
Bilgisayarı Yönetmek
Programlamanın Özü
Bir fabrikadaki ürünlerin tüm imalat sürecinde pek
Programlamanın özü, her seviyede bilgisayarın çalışmasını
hatları
atölyelerin
olarak bilinen “emir” ve “komutlar” yardımıyla programcılar
yöneticiler tarafından yönetilir. Bunların her biri farklı
yoluyla bilgisayarın çalışmasını organize etmek anlamına
çok yönetim seviyesi vardır. Ayrı makineler ve montaj
kontrol etmektir. Bu, aynı zamanda programlama talimatları
yöneticileri vardır, ve bir bütün olarak fabrika genel
tarafından yapılır. “Programlamak” birbirini izleyen talimatlar
operatörler
tarafından
işletilir,
bir seviyede işlemleri denetler. Makine operatörleri en
düşük seviyede hizmet verir – düğmeler ve kollar ile
makineleri kontrol ederler. Bir sonraki seviye atölye
yöneticileri için ayrılmıştır. Ve en üst seviyede, genel
yöneticiler
fabrikadaki
üretim
süreçlerinin
farklı
yönlerini yönetirler. Emirler çıkararak bunu yaparlar.
Bilgisayarlar ve yazılımda da bu aynıdır – yönetim
ve denetimin birçok seviyeleri vardır. En düşük
seviye işlemci ve onun kayıt tutucuları tarafından
gelir. Bu komutlar (talimatlar) yazılı olarak verilmektedir ve
tam olarak bilgisayar tarafından (sırasıyla işletim sistemi,
CPU ve çevresel aygıtlar tarafından) takip edilmektedir.
Bazı
işleri
gerçekleştirmek,
tamamlamak
veya
bazı
sonuçları elde etmek için uygulanan birbirini izleyen
adımlar dizisine algoritma denir. Bu tanım programlama
ile
algoritmaların
Programlama
nasıl
algoritmalar
ilgili
olduğunu
yoluyla,
anlatır.
bilgisayara
ne
yapmak istediğinizi adımlar dizisi ile anlatmayı içerir.
yönetilir (düşük bir seviyede makine programları
Programcılar bilgisayarları kontrol eden bu talimatları oluşturan
makinelerin kontrolü ile karşılaştırabiliriz. İşletim
sayıda program vardır, ve bunlar farklı türde programlama
aygıtlar, kullanıcılar ve iletişim protokolleri gibi farklı
bilgisayarı kontrol etmeye yöneliktir. Makine seviyesine (en
atölyelerdeki
insanlardır. Bu talimatlar program olarak adlandırılır. Çok
sisteminin (örneğin, Windows 7) dosya sistemi, çevresel
dilleri kullanılarak oluşturulur. Her dil farklı bir seviyede
kullanılarak
bu
gerçekleştirilir)
–
sorumlulukları daha yüksek bir seviyede kontrol edilir
– fabrikadaki farklı atölye ve departmanların yönetimi
ile karşılaştırabiliriz. En üst düzeyde, uygulama
yazılımını
buluyoruz.
operasyonlarını
Büyük
gerektiren,
miktarda
süreçler
işlemci
topluluğunun
bütünü ile çalışır. Bu, kaynakların kullanımını en
büyüğe çıkarmak ve kaliteli sonuçlar üretmek için
bütün fabrikayı çalıştıran genel yöneticilerin seviyesidir.
“Programlama” bilgisayarın çalışmalarını
bir şeyler yapması için organize etmek
üzere birbiri ardı sıra gelen talimat dizilerinin yazılması anlamına geliyor. Bu talimatlar dizilerine “bilgisayar programları”
veya “betikler” denir.
www.nakov.com
düşük) yönelik diller vardır – örneğin Assembler. Diğerleri
(işletim sistemi ile etkileşerek) sistem düzeyinde en yararlıdır,
C gibi. Uygulama programlarını oluşturmak için kullanılan
yüksek seviyeli diller de vardır. Bu dillere C#, Java, C++, PHP,
Visual Basic, Python, Ruby, Perl, JavaScript ve diğerleri dahildir.
Bu kitapta C# programlama diline bakacağız – modern
bir yüksek seviyeli dil. Bir programcı C# kullandığında,
yüksek
düzeyde
komutlar
verir,
bir
fabrikada
genel
yönetici pozisyonundan verilen emirler gibi. C# ile yazılmış
programlar şeklinde verilen talimatlar doğrudan veya işletim
sistemi üzerinden hemen hemen tüm bilgisayar kaynaklarına
erişebilir
ve
kontrol
edebilir.
Basit
C#
programlarını
yazmayı öğrenmeden önce, yazılım geliştirmenin farklı
aşamalarına iyice bir göz atalım, çünkü programlama,
en önemli aşama olmasına rağmen, tek başına değildir.
Page 42 / 151
C# İle Bilgisayar Programlama Temelleri
Yazılım Geliştirme Aşamaları
Yazılım yazma işi yazılım mühendisleri ve diğer uzmanlardan oluşan bütün bir ekibi
kapsamakla beraber çok karmaşık ve zaman alıcı olabilir. Bunun bir sonucu olarak,
programcıların hayatını kolaylaştıran pek çok yöntem ve uygulamalar ortaya çıkmıştır.
Ortak yönleri her yazılım ürününün geliştirilmesi için pek çok farklı aşamadan geçmesidir:
• Ürün gereksi-
• Planlama yap-
• Uygula-
nimlerini to-
mak, mima-
ma (program
plamak ve işi
riyi ve tasarımı
kodu yazmayı
başlatmak
hazırlamak;
içerir) ve
• Ürün testi;
• Dağıtım ve
• Destek.
işletme;
gerçekleştirim;
Ürün gereksinimlerini toplamak ve
işi başlatmak
Başlangıçta, belirli bir ürün için, sadece fikir vardır.
Gereksinimlerin bir listesini içerir, burada kullanıcı
ve bilgisayarın eylemleri tanımlanır. Genel durumda,
bu eylemler zaten varolan etkinlikleri daha kolay hale
getirir – maaşları hesaplama, balistik yörüngeleri
hesaplama yada Google Maps üzerinde en kısa yolu
arama verilebilecek bazı örneklerdir. Birçok durumda,
yazılım, önceden var olmayan fonksiyonları yerine
getirir – belli bir aktivitenin otomasyonu gibi.
Ürün için gereksinimler genellikle İngilizce veya başka
herhangi bir dilde yazılmış belgeler şeklinde hazırlanır.
Bu aşamada programlama yapılmaz. Gereksinimler
belirli bir alanda sorunlara aşina olan tarafından
anlaşılması kolay bir şekilde yazılır. Genel durumda, bu
uzmanlar programcı değildir, onlara iş analistleri denir.
www.nakov.com
Page 43 / 151
C# İle Bilgisayar Programlama Temelleri
Planlama Yapmak, Mimariyi ve
Tasarımı Hazırlamak
Tüm gereksinimler toplandıktan
sonra planlama aşamasına gelinir.
Bu aşamada, projenin uygulanması
için
programın
yürütüleceği
platformları, teknolojileri ve ilk
mimarisini (tasarım) tanımlayan
teknik bir plan oluşturulur. Bu
adım yoğun miktarda yaratıcı
Doğru analiz ve planlama yapmayı kolaylaştıran
birçok kural bulunmasına
rağmen, bu aşamada
yoğun miktarda sezgi ve
içgörü gereklidir. Bu adım
geliştirme sürecinin daha
fazla ilerlemesini önceden belirler. Bu aşamada
sadece hazırlık yapılır,
hiçbir programlama yoktur.
çalışma
ister,
tecrübeli
birçok yazılım mühendisi
tarafından yerine getirilir.
Onlara yazılım mimarları
denir. Gereksinimlere göre,
aşağıdaki kısımlar belirlenir:
www.nakov.com
• Uygulamanın türü – örneğin konsol uygulaması,
masaüstü uygulaması (GUI, Grafik Kullanıcı Arayüzü uygulaması), istemci-sunucu uygulaması, Web
uygulaması, Zengin İnternet Uygulamaları (RIA),
mobil uygulama, uçbirimden-uçbirime (peer-to-peer) uygulama veya diğerleri;
• Yazılım mimarisi – örneğin tek katmanlı, çift katmanlı, üç katmanlı, çoklu katmanlı veya SOA mimarisi için;
• Uygulanması için en uygun programlama dili – örneğin C# , Java, PHP, Python, Ruby, JavaScript veya
C++, ya da farklı dillerin bir arada kullanılması;
• Kullanılacak teknolojiler: platform (Microsoft .NET,
Java EE, LAMP veya diğerleri), veritabanı sunucusu (Oracle, SQL Server, MySQL, NoSQL veritabanı
veya diğerleri), kullanıcı arabirimi için teknolojiler
(Flash, Java Server Faces, Eclipse RCP, ASP .NET,
Windows Forms, Silverlight, WPF veya diğerleri),
veri erişimi için teknolojiler (örneğin Hibernate,
JPA veya ADO .NET Entity Framework), raporlama teknolojileri (SQL Server Raporlama Hizmetleri, Jasper Reports veya diğerleri) ve yazılım sisteminin çeşitli parçaların uygulanması için kullanılacak
teknolojilerin pek çok diğer kombinasyonları;
• Geliştirmeyi basitleştirecek geliştirme platformları, örneğin ASP.NET MVC (.NET için) Knockout.js
(JavaScript için), Rails (Ruby için), Django (Python
için) ve diğerleri;
• Geliştirme ekibinin bir parçası olacak insanların sayısı ve becerisi (büyük ve ciddi projeler büyük ve
deneyimli geliştirici ekipleri tarafından yapılır);
• Geliştirme planı - Her aşama için işlevselliği, kaynakları ve zaman sınırlarını ayırır.
• Diğerleri (ekibin büyüklüğü, takımın yerelliği, iletişim yöntemleri, vb).
Page 44 / 151
C# İle Bilgisayar Programlama Temelleri
Uygulama
Ürün Testi
Programlama ile bağlantılı en yakın
adım uygulama aşamasıdır. Bu aşamada,
program (uygulama) verilen görev,
tasarım ve mimariye göre uygulanır
(yazılır).
Programcılar
programın
(kaynak) kodunu yazmaya katılırlar.
Küçük bir proje oluşturulurken,
diğer aşamalar kısa olabilir yada
tamamen atlanabilir, ancak uygulama
her zaman vardır; aksi takdirde
işlem yazılım geliştirme değildir. Bu
kitap uygulama sırasında kullanılan
becerileri açıklamayı esas almıştır – bir
programcının zihniyetini oluşturmayı
ve yazılım uygulamaları oluşturmak için
C# dili ve .NET Platformu tarafından
sağlanan tüm kaynakları kullanmak için
bilgi birikimi sağlamayı garanti eder.
Ürün testi yazılım geliştirmenin çok önemli
bir aşamasıdır. Amacı tüm gereksinimlerin
sıkı bir şekilde takip edildiğinden ve
yerine getirildiğinden emin olmaktır. Bu
süreç el ile uygulanabilir, ancak otomatik
testlerle yapılması tercih edilen yoldur.
Bu testler mümkün olduğunca denemeleri
otomatik hale getiren küçük programlardır.
Otomatikleştirilmesi çok zor olan işlevsellik
parçaları vardır. Ürün denemelerinin kod
kalitesini sağlamak için otomatik testler
içermesinin yanı sıra manuel prosedürlere
de yer verilmesinin nedeni budur.
Test (çalışma) süreci kalite güvence
mühendisleri
(QAs)
tarafından
yürütülmektedir. Yazılımdaki hataları (bug)
bulmak ve düzeltmek için programcılar ile
yakın bir çalışma içine girerler. Bu aşamada,
koddaki hataları bulmak bir önceliktir
ve neredeyse hiçbir yeni kod yazılmaz.
Birçok kusur ve hatalar genellikle test
aşamasında
bulunur
ve
uygulama
aşamasına program geri gönderilir. Bu
iki aşama çok yakından
bağlantılıdır
ve
bir
yazılım
ürününün tüm
gereksinimleri yerine getirmesinden ve
dağıtım, kullanım aşamaları için hazır
olmasından önce birçok kez bu iki aşama
arasında geçişler yapılması çok yaygındır.
www.nakov.com
Page 45 / 151
C# İle Bilgisayar Programlama Temelleri
Dağıtım ve İşletme
Teknik Destek
Programlama ile bağlantılı en yakın
adım uygulama aşamasıdır. Bu aşamada,
program (uygulama) verilen görev,
tasarım ve mimariye göre uygulanır
(yazılır).
Programcılar
programın
(kaynak) kodunu yazmaya katılırlar.
Küçük bir proje oluşturulurken,
diğer aşamalar kısa olabilir yada
tamamen atlanabilir, ancak uygulama
her zaman vardır; aksi takdirde
işlem yazılım geliştirme değildir. Bu
kitap uygulama sırasında kullanılan
becerileri açıklamayı esas almıştır – bir
programcının zihniyetini oluşturmayı
ve yazılım uygulamaları oluşturmak için
C# dili ve .NET Platformu tarafından
sağlanan tüm kaynakları kullanmak için
bilgi birikimi sağlamayı garanti eder.
İşletim sürecinde, problemlerin ortaya
çıkması kaçınılmazdır. Pek çok faktör
problemlere neden olabilir – yazılım
hataları, yanlış kullanım ya da hatalı
yapılandırma, ancak çoğu problem
kullanıcılar kendi gereksinimlerini
değiştirdiğinde oluşur. Bu problemlerin
bir sonucu olarak, belirli bir iş görevini
çözmek için oluşturulan yazılım bu
özelliklerini kaybeder. Bu geliştiriciler ve
destek uzmanları tarafından ek katılım
gerektirir. Destek süreci genellikle,
yazılım ürünü ne kadar iyi olursa olsun,
tüm yaşam döngüsü boyunca devam eder.
Destek süreci geliştirme ekibi tarafından
ve özel eğitimli destek uzmanları
tarafından yürütülmektedir. Yapılan
değişikliklere bağlı olarak, birçok farklı
insan sürece dahil olabilir - iş analistleri,
mimarlar,
programcılar,
kalite
mühendisleri, yöneticiler ve diğerleri.
Örneğin,
maaşları
hesaplayan
bir yazılım programına bakacak
olursak, servis verilen muhasebe
sürecini ilgilendiren vergi mevzuatı
her değiştiğinde güncelleştirilmesi
gerekecektir. Örneğin, son kullanıcı
donanım
değiştirildiğinde
destek
takımın müdahalesi gerekli olacaktır,
çünkü yazılımın yeniden yüklenmesi ve
yeniden yapılandırılması gerekecektir.
www.nakov.com
Page 46 / 151
C# İle Bilgisayar Programlama Temelleri
Dokümantasyon
Yazılım Geliştirme Kodlamadan Daha
Fazlasıdır
Dokümantasyon
aşaması
ayrı bir aşama değil ama tüm
diğer
aşamalara
eşlik
eder.
Dokümantasyon yazılım geliştirme
önemli bir parçasıdır, ve bir yazılım
ürününün geliştirilmesi ve desteği
sırasında farklı katılımcılar arasında
bilgi aktarmayı amaçlamaktadır.
Bilgi farklı aşamalardan geçtiği gibi,
tek bir kademeden de geçebilir.
Geliştirme
dokümantasyonu
genellikle geliştiriciler (mimarlar,
programcılar, kalite mühendisleri ve
diğerleri) tarafından oluşturulmuş
bir belge topluluğunu temsil eder.
Gördüğümüz gibi, yazılım geliştirme,
sadece kodlamadan (kod yazmadan)
çok daha fazlasıdır, ve yazılım
mühendisleri denilen uzmanları geniş
bir yelpazede gerektiren bir dizi diğer
süreçleri içerir – gereksinim analizi,
tasarım, planlama, test ve destek gibi.
Programlama yazılım geliştirmenin
sadece küçük ancak çok önemli bir
parçasıdır.
www.nakov.com
Yukarıdaki
süreçler
arasında
programlama
olmadan
yazılım
geliştiremeyeceğimiz için bu kitapta
sadece programlamaya odaklanacağız.
Page 47 / 151
C# İle Bilgisayar Programlama Temelleri
İlk C# Programımız
C# dili ve .NET Platformu’nun derinliğine açıklamasına geçmeden önce, C# ile
yazılmış bir programın nasıl çalıştığını gösteren basit bir örneğe göz atalım:
class HelloCSharp
{
static void Main(string[] args)
{
System.Console.WriteLine(“Merhaba C#!”);
}
}
Bu programın yaptığı tek şey varsayılan çıkış üzerinde “Merhaba C#!” mesajını
yazdırmaktır. Çalıştırmak için hâlâ erkendir, bu yüzden sadece kendi yapısına göz
atacağız. Daha sonra derlemek ve komut isteminden veya yanı sıra bir geliştirme
ortamından belirli bir programı çalıştırmanın nasıl tam olarak yapıldığını anlatacağız.
İlk programımız üç mantıksal bölümden oluşur:
-
-
-
Bir HelloCSharp sınıfının tanımı;
Bir Main() metotunun tanımı;
Main() metotunun içeriği.
İlk C# Programımız Nasıl Çalışır?
Programımızın ilk satırında HelloCSharp adında bir
sınıfı tanımlarız. Bir sınıfın en basit tanımı class anahtar sözcüğünün ardından sınıf adını vermektir. Bizim
programımızda sınıfın adı HelloCSharp olmuştur.
Sınıfının içeriği kıvırcık parantez {} ile çevrili program
satırlarını içeren bir blokta yer almaktadır.
Bir Sınıfı Tanımlamak
www.nakov.com
Page 48 / 151
C# İle Bilgisayar Programlama Temelleri
Main() Metotunu Tanımlamak
Üçüncü satırda programımız için başlangıç ​​noktası olan Main() adlı bir yöntemi
tanımlıyoruz. C# ile yazılmış her program şu başlığı (imza) taşıyan Main() yöntemi
ile başlar:
static void Main(string[] args)
Yöntem yukarıda gösterildiği gibi bildirilmelidir, statik (static) ve boş (void) olmalıdır, bir
adı olmalıdır Main ve parametre listesi olarak sadece bir parametre almalıdır, dize (string)
türündeki bir dizi (ar ray). Örneğimizde parametrelere args denmiştir, ancak bu zorunlu
değildir. Bu parametre çoğu durumda kullanılmaz, bu nedenle atlanabilir (isteğe
bağlıdır). Bu durumda programın giriş noktası basitleştirilebilir ve şöyle görünecektir:
static void Main()
Yukarıda belirtilen gereklerin herhangi biri karşılanmazsa, programı derlemek
mümkündür, ancak başlangıç ​​noktası doğru olarak tanımlı olmadığı için program
çalışmaya başlamaz.
Her yöntemin içeriği, imzasının ardından açılış ve kapanış küme parantezleri ile
çevrili olarak gelir. Örnek programımızın sonraki satırında varsayılan çıktıya (konsol)
bir mesaj, “Merhaba, C #!”, yazdırmak için System.Console sistem nesnesini ve
WriteLine() metotunu kullandık.
Main() yönteminde rasgele bir ifade dizisi yazabiliriz, ve onlar belirttiğimiz sırada
çalıştırılacaklardır.
İfadeler hakkında daha fazla bilgi, “İşleçler ve İfadeler” Bölümü’nde bulunabilir, konsol
ile çalışma “Konsol Giriş ve Çıkış” Bölümü’nde anlatılmıştır, sınıflar ve yöntemler
“Sınıfları Tanımlamak” Bölümü’nde bulunabilir.
www.nakov.com
Page 49 / 151
C# İle Bilgisayar Programlama Temelleri
C# Büyük ve Küçük Harf Arasında Ayrım Yapar!
C
# dili büyük ve küçük harfler arasında ayrım yapar, bu nedenle C# kodu yazarken
doğru harf kullanmalıyız. Yukarıdaki örnekte class, static, void gibi bazı anahtar sözcükleri ve System.Console gibi sistem sınıfları ve nesnelerinden bazılarının adlarını kullandık.
„Yazarken dikkatli olun! Büyük harfle, küçük harfle veya her ikisinin bir
karışımı ile yazılı aynı şey, C# için farklı
şeyler anlamına gelir. Class ve class
farklı olduğu gibi, System.Console
ve SYSTEM.CONSOLE da farklıdır.”
Bu kural programın tüm unsurları
için geçerlidir: anahtar sözcükler,
değişkenlerin adları, sınıf adları, vb.
Program Kodu Doğru Biçimli Olmalıdır
B
içimlendirme boşluk, sekme ve yeni satır gibi, derleyici için önemsiz olan fakat
koda mantıksal yapısını veren ve okunmasını kolaylaştıran karakterleri eklemektir. Örneğin ilk programımıza (Main() metotunun kısa versiyonu) bir göz atalım:
class HelloCSharp
{
static void Main(string[] args)
{
System.Console.WriteLine(“Merhaba C#!”);
}
}
Program kodu yedi satır içeriyor ve bazıları diğerlerinden daha girintili yazılmıştır.
Tüm bunlar sekme olmadan da yazılabilir, aşağıdaki gibi:
www.nakov.com
Page 50 / 151
C# İle Bilgisayar Programlama Temelleri
class HelloCSharp
{
static void Main()
{
System.Console.WriteLine(“Merhaba C#!”);
}
}
veya aynı satır üzerinde:
class HelloCSharp{static void Main(){System.Console.WriteLine
( “Merhaba C#!”);}}
ve hatta şöyle:
{
HelloCSharp
class
static void
Main()
{
System
.
Console.WriteLine(“Merhaba C#!”)
;}
}
„Programlarınızın biçimlendirilmemiş
kod içermesine asla izin vermeyin! Bu
program okunabilirliğini ciddi olarak
azaltır ve kodun sonraki değişiklikleri
için zorluklara yol açar.”
Yukarıdaki
örnekler
tam
da
biçimlendirilmiş kod gibi derlenir ve
çalışır, ancak okunması ve anlaması
daha zordur, ve bu nedenle zor
değiştirmesi ve bakımı daha zordur.
www.nakov.com
Page 51 / 151
C# İle Bilgisayar Programlama Temelleri
Başlıca Biçimlendirme Kuralları
Kodumuzu doğru biçimlendirmek istiyorsak, girintilerle ilgili bazı önemli kurallara uymalıyız:
• Yöntem-
• Yöntem
• Açılış kıvırcık • Kapanış
• Bütün sınıf
• Değişken
• Yöntem adları
lere sınıf
içeriğine
parante-
kıvırcık pa-
adları büy-
adları küçük
büyük harfle
tanımının
yöntem
zi { ken-
rantezi } ken-
ük harfle
harfle
başlamalıdır.
içinde girin-
tanımının
di satırında
di satırında
başlamalıdır;
başlamalıdır;
başlamalıdır;
ti verilir (bir
içinde gi-
olmalıdır
olmalıdır ve il-
veya daha
rinti verilir;
ve belirttiği
gili açılış pa-
fazla [Tab]
yöntem
rantezinin tam
karakteri ile
veya sınıfın
dikey olarak
sağa doğru
tam altına
altına (aynı
hareket etti-
yerleştirilmiş
girinti ile)
riniz);
olmalıdır;
yerleştirilmiş
olmalıdır;
Kod girintileri çok basit bir kuralı izler: bir
kod parçası başka bir kod parçasının mantıksal
olarak içerisinde olduğunda, tek bir [Tab] ile
sağa (taşınır) girintili olur. Örneğin, bir yöntem,
bir sınıfın içerisinde tanımlanmış ise, (sağa doğru
hareketli) girintili olur. Aynı şekilde, bir yöntemin
gövdesi bir başka yöntemin içerisindeyse de girinti
verilir. Bunu basitleştirmek için, “{“ karakterine her
rastladığımızda kapanış “}” karakterine kadarki
tüm kodun sağda girintili olacağını varsayabiliriz.
www.nakov.com
Page 52 / 151
C# İle Bilgisayar Programlama Temelleri
Dosya Adları Sınıf
Adlarına Karşılık Gelir
Her
C#
birkaç
programı
sınıf
bir veya
tanımından
C# Dili ve .NET Platformu
C# Dili
C# ilk sürümü 1999 ve 2002
C# modern, genel-amaçlı,
nesne-yönelimli,
yüksekseviyeli bir programlama
dilidir. Sözdizimi C ve C++
benzerdir, ancak bu dillerdeki
birçok özellik programlamayı
kolaylaştıracak şekilde
dili
sadeleştirmek
amacıyla
C#
tarafından
desteklenmez.
yılları
arasında
Microsoft
oluşur. Her sınıfın tanımlı olduğu
tarafından geliştirildi ve resmen
dosyanın
karşılık
.NET platformunun bir parçası
gelen bir isimle ve .cs uzantısına
olarak 2002 yılında piyasaya
sahip olacağı kabul edilir. Bu
çıkarıldı.
gereklerin yerine getirilmemesi
programlamaya yeni bir kalite
halinde,
yaklaşımı
devam
sınıf
adına
program
çalışmaya
edecektir,
ancak
.NET
Platformu
sağlayarak,
“sanal
makine” ve “yönetilen kod”
kodda gezinmek zor olacaktır.
kavramlarına
Örneğimizde, sınıf HelloCSharp
Windows için daha kolay yazılım
olarak
geliştirme yapılmasını hedefliyor.
adlandırılmıştır
sonuç
olarak
cs
bir
adlı
kodu
ve
HelloCSharp.
dosyada
kaydetmek
O
dayalı
zamanlarda
Java
olarak
dili
ve
kaynak
platformu yazılım geliştirmenin
gerekir.
tüm alanlarında büyük başarı
kazanmıştı;
C#
ve
.NET
Microsoft’un Java teknolojisine
karşılık doğal tepkisi olmuştur.
C# programları sınıfların ve
diğer türlerin tanımlarını içeren
.cs uzantılı bir yada birkaç
dosyadan oluşur. Bu dosyalar
C# derleyicisi (csc) tarafından
çalıştırılabilir koda derlenir, ve
bunun bir sonucu olarak aynı
isimde ama farklı bir uzantıya
(.exe veya .dll) sahip dosyalar
içinde assembly oluşturulur.
Örneğin
HelloCSharp.cs
derleyeceksek,
HelloCSharp.
exe adında bir dosya elde
ederiz (bazı ek dosyalar da
oluşturulur, ancak şu anda
biz
onları
tartışmayacağız).
Derlenen kod bilgisayarımızda
herhangi bir başka program
gibi çalıştırabilir (üzerine çift
tıklayarak). Derlenmiş C# kodu
(örneğin HelloCSharp.exe) .NET
Platformu’na sahip olmayan
bir bilgisayarda çalıştırmaya
çalışırsak, bir hata iletisi alırız.
www.nakov.com
Page 53 / 151
C# İle Bilgisayar Programlama Temelleri
Anahtar Sözcükler
Programlama yapılarını oluşturmak için C# şu anahtar sözcükleri
kullanır (liste Mart 2013 tarihli MSDN’den alınmıştır ve tam olmayabilir):
abstract
case
continue
else
finally
if
is
object
protected
sealed
struct
typeof
using
as
base
Bool
break
byte
catch
decimal
enum
fixed
implicit
lock
operator
public
short
switch
uint
virtual
char
default
event
float
in
long
out
readonly
sizeof
this
ulong
void
checked
delegate
explicit
For
Int
namespace
override
ref
stackalloc
throw
unchecked
volatile
class
do
extern
foreach
interface
new
params
return
static
true
unsafe
while
const
double
false
goto
internal
null
private
sbyte
string
try
ushort
C# dilinin ilk versiyonunun yaratılmasından beri anahtar sözcüklerin
hepsi kullanılmıyor. Bazıları sonraki sürümlerinde eklenmiştir. C#
ana program elemanları arasında (anahtar sözcüklerin yardımı ile
tanımlanan ve kullanılan) sınıflar, yöntemler, işleçler, ifadeler,
şartlı ifadeler, döngüler, veri türleri, istisnai durumlar ve birkaç
diğerleri vardır. Bu kitabın önümüzdeki birkaç bölümlerinde, yukarıdaki
tabloda verilen anahtar sözcüklerin çoğunun kullanımı ile birlikte
detaylı olarak tüm bu programlama yapılarını gözden geçireceğiz.
Otomatik Bellek Yönetimi
.NET Platformu’nun en büyük avantajlarından biri yerleşik otomatik
bellek yönetimidir. Nesneler için elle bellek ayırmak ve daha
sonra uygun bir zamanda belleği serbest bırakmak gibi karmaşık
bir görevden programcıları korur. Bu önemli ölçüde geliştiricinin
verimliliğini ve C# ile yazılmış programların kalitesini artırır.
www.nakov.com
Page 54 / 151
C# İle Bilgisayar Programlama Temelleri
.NET Platformu’nda, bellek yönetimi ile ilgilenmek üzere CLR
özel bir bileşene sahiptir. Buna “çöp toplayıcı” (otomatik bellek
temizleme sistemi) denir. Çöp toplayıcının başlıca şu görevleri
vardır: değişkenler için ayrılan belleğin artık kullanılmayacağı
zamanı
kontrol etmek, o belleği serbest bırakmak ve
yeni nesnelerin
tahsisi için
kullanılabilir
hale getirmek.
„Dikkat edilmesi gereken önemli bir nokta, bellekte
kullanılmayan nesnelerin (örneğin yerel değişkenler) hangi
anda temizlenmiş olacağı tam olarak belli değildir. C# dilinin
özelliklerine göre, belirli bir değişken kapsam dışına alındıktan
sonraki bir anda bu olur, ancak herhangi bir zaman sonra mı,
yoksa mevcut bellek normal programın çalışması için yetersiz
olduğunda mı olduğu belirtilmemiştir.”
Ortamdan ve Programlama Dilinden Bağımsızlık
Farklı .NET dilleri kullanan programcılar kolayca kendi kodlarını değiş tokuş
yapabilir. Örneğin C# programcısı başka bir programcı tarafından yazılmış
VB.NET kodu, Managed
C++ kodu veya F# kodu kullanabilir. Bunu
mümkün kılan farklı .NET dillerinde yazılmış programların veri türleri, yürütme
altyapıları ve derlenmiş kodlarının (assembly) ortak bir sistemi paylaşmasıdır.
.NET teknolojisinin büyük bir avantajı, farklı işletim sistemleri ve donanım
aygıtları üzerinde, sadece bir kez yazılmış ve derlenmiş olan kodu çalıştırma
yeteneğidir. Windows
ortamında bir C# programını
derledikten sonra
onu
Windows, Windows
Mobile Windows RT veya Linux altında çalıştırabiliriz.
Microsoft .NET Platformu’nu resmi olarak sadece Windows,
Windows Mobile
ve Windows Phone için destekliyor, ancak diğer işletim sistemleri
üzerinde
.NET
uygulanmasını
sunan
üçüncü
şahıslara
ait
sağlayıcılar da vardır.
www.nakov.com
Page 55 / 151
C# İle Bilgisayar Programlama Temelleri
Common Language Runtime (CLR) – .NET’in Kalbi
.NET Platformu kullanıma hazır C# dili, CLR ve birçok yardımcı araç ve kütüphaneleri
içerir. .NET Platformu’nun merkezinde yönetilen kodun (MSIL kod) yürütmesini
kontrol eden ortam – Common Language Runtime (CLR) vardır. Ortak Dil Çalışma
Platformu olarak da adlandırılan CLR, .NET altyapısında programların çalışmasını
kontrol eden ve işletim sistemi ile programın arasında yer alan arabirimdir. Normalde
yazılan kodlar makine diline çevrilir ve işletim sistemi ile direkt bağlantı kurup
çalışırdı. Eğer platformdan bağımsız bir ortam istiyorsak, ihtiyaç duyulan şey CLR
olur, hangi platformda iseniz (Linux, Mac, Windows) CLR bu noktada devreye girer ve
.NET programlarını farklı platformlarda işletim sistemine göre çalıştırır. Farklı donanım
platformları ve işletim sistemlerinde .NET programlarının yürütülmesini sağlar.
.NET Framework’u Nasıl
Edineceğim?
.NET Framework için uygulama
geliştirmek istiyorsanız,işletim
sisteminize .NET çalıştırma
ortamını kurmanız gerekiyor.
NET Framework yüklemek için,
Microsoft’un web sitesinden
(http://download.microsoft.
com) indirmeniz gerekir. Son
sürümünü indirmek ve kurmak
en iyisidir. Bu ortamı, Java
uygulamalarını
çalıştırmak
için
gerekli
olan
Java
Runtime Environment (JRE)
gibi düşünebilirsiniz. .NET
Platformu iki ayrı kurulum
dosyası
halinde,
ücretsiz
sunuluyor.
www.nakov.com
.NET’in Çekirdek Kurulumu (21MB)
Bu kurulum ile bilgisayarınızda
bir
metin
editörü
açıp
kodunuzu yazabilir, gelen
derleyiciler
ile
derleyip
uygulamanızı sınayabilirsiniz.
Metin editörü programın
kaynak kodunu yazmak için
ve bir dosyaya kaydetmek için
kullanılır. Bundan sonra, kod
derlenir ve çalıştırılır. Birçok
metin düzenleme programları
vardır.
Kullanabileceğiniz
Windows’un yerleşik Notepad
(çok temel ve zahmetlidir)
veya Notepad++ (notepadplus.sourceforge. net) veya
pspad (www.pspad.com) gibi
daha iyi bir ücretsiz bir metin
editörü. Ancak bu kurulum,
geliştiriciler için değil, daha çok
dağıtım sonrası uygulamanızın
çalışacağı
sistemler
için
uygundur. .NET uygulamaları
için gerekli çalışma zamanı
ortamını, web uygulamalarının
sunulabilmesi için gerekli olan
Web sunucu (IIS) eklentilerini
ve desteklenen temel dillerin
derleyicilerini sunmaktadır. Bir
yazılım geliştiricinin bunlardan
daha fazlasına ihtiyacı vardır.
Hele de uygulama geliştireceği
ortamda
herhangi
bir
deneyimi yoksa. Bu nedenle
ikinci bir seçenek sunuluyor.
Page 56 / 151
C# İle Bilgisayar Programlama Temelleri
.NET Framework SDK (134 MB)
Hangi İşletim Sistemlerinde Çalışıyor?
SDK yani Software Development Kit,
çekirdek kurulumu içeriğinden daha kapsamlı
bir kurulumdur. Peki, 134 MB’lik kurulumda
fazladan neler var: Faydalı araçlar, hata
ayıklayıcılar, SQL Server’ın hafif versiyonu
MSDE, hızlıca başlamanızı temin edecek
QuickStart Tutorials, örnek uygulamalar ve
devasa dokümantasyon. Organizasyonu ve
disiplini ile göz kamaştıran bir dokümantasyon
olduğunu kullanmaya başladıkça çok iyi
anlayacaksınız. Bu iki kurulumu da ücretsiz
olarak Microsoft’un sitesinden indirebilirsiniz.
Şu anda .NET Framework istemci uygulamaları
Windows 98/Me/NT4/2000/XP/Server 2003
işletim sistemlerinde çalışabiliyor. Ancak
sunucu davranışı için Windows 2000 (SP2
ve üstü), Windows XP veya Windows Server
2003 gerekiyor. Windows Server 2003’te
.NET Framework kurulmuş oluyor zaten,
ayrıca yüklemenize gerek yok. Bu işletim
sistemleri dışında ASP.NET sayfalarını (yani
.NET’in tarayıcıları ve mobil cihazları hedef
alan web uygulamaları) sunamıyorsunuz.
Elbette ki bu sunum, Internet Information
Server (IIS) da gerektiriyor. Teoride .NET
Framework herhangi bir işletim sistemine
taşınabilir. Ancak taşınacağı işletim sistemine
özgü çalışma zamanı ortamının ve
sınıf
kütüphanesinin
yazılması gerekmektedir.
„Başlamadan önce .NET Framework
yüklemeniz gerektiğini unutmayın!
Aksi takdirde, programı derlemeniz
ve çalıştırmanız mümkün olmayacaktır.
Windows 8 veya Windows 7
çalıştırıyorsanız, .NET Framework zaten Windows’un bir parçası olarak
kurulacaktır.”
.NET Teknolojileri
.NET Framework uzantıları .NET programlarını geliştirirken yeniden kullanılabilir
yazılım bileşenleridir. Kodun yeniden kullanılması yazılım geliştirmeyi önemli ölçüde
kolaylaştırır, çünkü ortak sorunlara çözümler sağlar, karmaşık algoritmaların ve teknoloji
standartlarının gerçekleştirimlerini sunar. Çağdaş programcı her gün kütüphaneleri
ve bileşenleri
www.nakov.com
kullanır
ve
bunu
yaparak
pek
çok
zahmete
girmekten
kurtulur.
Page 57 / 151
C# İle Bilgisayar Programlama Temelleri
Verinin görselleştirilmesi
Yazılım teknolojileri
.NET teknolojisi
Grafik ve diyagramlar
şeklinde
veriyi
görselleştiren yazılım
örneğine
bakalım.
.NET’te yazılmış, grafik
çizen bir kütüphaneyi
kullanabiliriz. Yapmamız
gereken tek şey doğru
veri ile giriş yapmaktır,
kütüphane bizim için
grafiği
çizecektir.
Bu
çok
uygun
ve
verimlidir. Ayrıca, üretim
maliyetlerinin azalmasına
yol
açar,
çünkü
programcıların ek işlevler
üzerinde
çalışmaya
zaman
harcamaları
gerekmez (örneğimizde,
karmaşık matematiksel
hesaplamaları ve grafik
kartını kontrol etmeyi
içeren çizim çizelgelerini
çizmek).
Uygulamanın
kendisi
daha
yüksek
kalitede olacaktır çünkü
kullanılan
uzantı
bu
özel alanda daha fazla
deneyime sahip uzmanlar
tarafından geliştirilmiş ve
desteklenmiş
olacaktır.
Yazılım teknolojileri yazılım
geliştirme alanında bazı
spesifik problemleri ele
alan sınıflar, modüller,
kütüphaneler, programlama modelleri, araçları,
şablonlar ve en iyi uygulamalardan oluşur. Web
teknolojileri, mobil teknolojiler, bilgisayar grafiği
için teknolojiler ve .NET
veya Java gibi bazı platformlar ile ilgili teknolojiler gibi genel yazılım
teknolojileri
mevcuttur.
.NET teknolojisi .NET
sınıfları,
kütüphaneler,
araçlar, standartlar ve
diğer
programlama
araçlarının
bir
topluluğudur ve belirli
bir
uygulama
türünü
yaratmak için gerekli
olan teknolojik çerçeveyi
belirleyen
kurulu
geliştirme modelleridir.
.NET geliştirirken farklı
alanlarda hizmet veren
birçok .NET teknolojisi
kullanabiliriz.
Tipik
örnekler
şöyledir:
Dinamik
Web
uygulamalarını hızlı ve
kolay
oluşturan
Web
teknolojileri (ASP.NET
ve ASP.NET MVC gibi)
ve
Internet
üzerinde
çalışan zengin kullanıcı
arayüzlü
multimedya
uygulamalarının
kurulmasını
mümkün
kılan
.NET
mobil
teknolojileridir (WinJS
gibi). Bir başka örnek de
ADO.NET ile verilebilir.
İlişkisel veritabanlarına
(Microsoft SQL Server
ve MySQL gibi) erişim
için standart bir yaklaşım
sunan bir teknolojidir.
www.nakov.com
Page 58 / 151
C# İle Bilgisayar Programlama Temelleri
Microsoft dışındaki yazılım geliştiriciler tarafından geliştirilen bazı teknolojiler yaygın hale gelmiş
ve sonuç olarak teknoloji standartları olmuşlardır. Bazıları Microsoft tarafından fark edilmiş ve
daha sonra .NET Framework’un sonraki versiyonlarına eklenmiştir. Bu şekilde, .NET Platformu
yeni kütüphaneler ve teknolojiler ile sürekli gelişmeye ve genişlemeye devam etmektedir.
The Base Class Library - Temel Sınıf Kütüphaneleri
.NET kütüphanesi
kullanıma
hazır,
bazı
işlevsellikleri
sunan
.NET
sınıflarından
oluşan
bir
topluluktur.
.NET
Framework’te
programcıların
işlerini
kolaylaştırmak
için
birtakım
hazır
kütüphaneler vardır, fakat C# dilinde hazır kütüphaneler mevcut
değildir. Örneğin, System.Data.SqlClient sınıfları bir .NET kütüphanesini
oluşturmaktadır. Bu sınıflar ADO.NET teknolojisi aracılığıyla bir SQL Server
veritabanına bağlanmak için gerekli olan işlevselliği sağlar.
.NET Framework birçok teknoloji ve geliştiricilerin kullandığı standart işlevselliği sağlayan temel sınıf kütüphanelerini içermektedir. Bu kütüphanelere Base Class Library deniyor. Temel sınıf kütüphaneleri, uygulamalarınızı geliştirirken size lazım olabilecek birçok servisi ve nesneyi içinde
barındıran bir sistemdir. Temel sınıf kütüphaneleri, namespaces (isim alanları) içinde organize edilmişlerdir.
1.System isim alanı: .NET çalışırken gerekli temel sınıfları içerir. Ayrıca
diğer tüm sınıf kütüphaneleri de bunun içinde kümelenmiştir. System
hiyerarşinin tepesinde bulunur. Örneğin tüm veritabanı işlemleri için
kullanılacak sınıf kütüphanesi “System.Data” dır. Bu sınıf kütüphanesi
içindeki SQL ile işlemler için “System.Data.SqlClient” isim alanı mevcuttur.
2.System.Net : HTTP ve ağ protokolleri için kullanılır.
3.System.Xml : XML verileri ile çalışmak için kullanılır.
4.System.IO : Dosyalara bilgi girişi, dosyadan bilgi okuma, I/O işlemleri için kullanılır.
5. System.Windows.Forms : Windows tabanlı uygulamalarda kullanılan zengin grafik arabirimi kontrollerini içerir.
www.nakov.com
Örneğin, sistem
kütüphanesinde
matematiksel
fonksiyonlar ile
çalışan kullanıma
hazır sınıflar vardır,
logaritma hesaplanması
ve trigonometrik
fonksiyonlar (System.
Math sınıfı) gibi. Başka
bir örnek ağlar ile ilgili
kütüphanedir (System.
Net). Bu kütüphane
e-posta göndermek
için (System.Net.
Mail.MailMessage
sınıfını kullanarak)
ve İnternet’ten
dosya indirmek için
(System.Net.WebClient
kullanarak) kurulu bir
işlevselliğe sahiptir.
Page 59 / 151
C# İle Bilgisayar Programlama Temelleri
Uygulama Programlama Arayüzü (API)
.NET kütüphaneleri ve teknolojileri nesne oluşturarak ve üzerlerinde yöntem
çağırarak kullanılır. Programlama kütüphanelerinde herkese ait sınıf ve yöntemlerin
bir kümesi Uygulama Programlama Arayüzü veya sadece API olarak bilinir.
Örnek olarak .NET API‘ye bakabiliriz, bu bir küme .NET sınıf kütüphanesidir,
dilin yeteneklerini genişletir ve üst düzey işlevler ekler. .NET teknolojilerinin
hepsi herkese ait (açık) API sunar. Teknolojiler genellikle sadece API olarak
adlandırılır ve belirli işlevler ekler. Örneğin: dosyalar ile çalışan API, grafikler
ile çalışan API, yazıcılar ile çalışan API, Word ve Excel belgelerini okumak ve
oluşturmak için API, PDF belgeleri ile çalışan API, Web geliştirme için API, vb.
C# Programlarını Derleme ve Yürütme
HelloCSharp.cs
Dosyadaki örnek
adında bir dosya
programı yazın;
oluşturun;
Şimdi C# ile yazılmış basit
örnek
derleme
programımızı
ve
çalıştırma-
nın zamanı geldi. Bunu
başarmak
kileri
için,
yanda-
yapmanız
gerekir:
Konsol tabanlı C#
HelloCSharp.exe
dosyasını çalıştırın.
derleyicisini (csc.exe)
kullanarak HelloC-
Sharp.cs programını
yürütülebilir bir dosya
olan HelloCSharp.exe
içine derleyin;
Şimdi, bunu bilgisayarda yapalım!
Örnek programı Windows üzerinde yazmak ve çalıştırmak için gerekenlere ayrıntılı
bir göz atacağız. İşte bizim ilk C# programımızın kodu:
www.nakov.com
Page 60 / 151
C# İle Bilgisayar Programlama Temelleri
class HelloCSharp
{
static void Main()
{
HelloCSharp.cs
System.Console.WriteLine(“Merhaba C#!”);
}
}
Windows Konsolunda C# Programları Oluşturma
Öncelikle Komut İstemi olarak bilinen Windows komut konsolunu başlatalım.
Windows 7 için bunu Windows Gezgini başlangıç menüsünden yapabilirsiniz: Start
-> Programs -> Accessories -> Command Prompt.
Yönetici olarak konsolu çalıştırmanız tavsiye edilir. (Komut İstemi simgesine
sağ tıklayın ve “Yönetici olarak çalıştır” seçin). Bunu yapmazsanız kullanmak
istediğiniz bazı işlemler kısıtlanmış olabilir.
Windows 8 için Win8 Başlangıç ​​Ekranından komut istemi simgesine sağ tıkladığınızda
“Yönetici olarak çalıştır” komutuna doğrudan ulaşabilirsiniz:
www.nakov.com
Page 61 / 151
C# İle Bilgisayar Programlama Temelleri
Konsolu açtıktan sonra, üzerinde deneme yapacağımız bir dizin oluşturalım.
Dizini oluşturmak için md komutunu kullanın ve cd komutuyla içine girin.
www.nakov.com
Page 62 / 151
C# İle Bilgisayar Programlama Temelleri
Dizin IntroCSharp olarak adlandırılacak ve C:\ dizininde bulunacak. Geçerli
dizininizi değiştirerek C:\IntroCSharp yapın ve yerleşik Windows metin
editörü – Notepad kullanarak yeni bir dosya HelloCSharp.cs oluşturun.
Metin dosyası “HelloCSharp.cs” oluşturmak için, konsolda aşağıdaki komutu çalıştırın:
notepad HelloCSharp.cs
Bu komut yeni bir dosya oluşturulması için onay isteyerek aşağıdaki iletişim penceresi
ile Not Defteri’ni başlatacak:
Not Defteri böyle bir dosyanın var olmadığı konusunda bizi uyaracak ve bunu
oluşturmak isteyip istemediğimizi bize soracaktır. [Evet] tıklayın. Bir sonraki adım,
programın kaynak kodunu yeniden yazmak veya sadece Kopyala/Yapıştır ile elde etmektir.
www.nakov.com
Page 63 / 151
C# İle Bilgisayar Programlama Temelleri
[Ctrl+S] tuşuna basarak kaydedin ve [Alt+F4] ile Not Defteri editörünü kapatın. Şimdi
C:\IntroCSharp\HelloCSharp.cs dosyasında yazılmış örnek C# programımızın başlangıç​​
kodu bulunmaktadır.
Windows Üzerinde C# Programları Derleme
Yapmamız gereken kalan tek şey programı derlemek ve çalıştırmaktır. Derleme csc.
exe derleyicisi tarafından yapılır.
Yapmamız gereken kalan tek şey programı derlemek ve çalıştırmaktır. Derleme csc.
exe derleyicisi tarafından yapılır.
İlk hatayı aldık – Windows adı “csc” ile yürütülebilir bir dosya veya komut bulamıyor.
Bu çok yaygın bir problemdir ve ilk kez C# kullanıyorsanız görünmesi normaldir.
Çeşitli nedenlerden dolayı meydana gelir:
- .NET Framework yüklü değil;
- .NET Framework doğru yüklenmiş, ancak Microsoft.NET\Framework\v4.0.xxx
dizini çalıştırılabilir dosyalar için tanımlı olan sistem yoluna eklenmemiş ve
Windows csc.exe bulamıyor.
www.nakov.com
Page 64 / 151
C# İle Bilgisayar Programlama Temelleri
İlk problem .NET Framework (bizim durumumuzda - 4.5 versiyonu) yükleyerek
kolayca çözülür. Diğer problem sistem yolunu değiştirerek çözülebilecek (daha
sonra yapacağız) veya aşağıda şekilde görüldüğü gibi, csc.exe için geçerli tam
yolu kullanarak. Bizim durumumuzda, C # derleyicisi için tam dosya yolu C:\
Windows\Microsoft.NET\Framework\v4.0.30319\csc.exe
olmuştur
(unutmayın
ki bu yol yüklü .NET Framework sürümüne bağlı olarak değişebilir). Visual
Studio 2012 ile gelen NET 4.5 ve C# 5 “v4.0.30319” adlı bir dizine yükleniyor.
Windows Üzerinde C# Programları Derleme ve Çalıştırma
Şimdi tam dosya yolunu vererek csc derleyiciyi çağıralım ve ona bir parametre
(HelloCSharp.exe) olarak derlemek istediğiniz dosyayı geçelim.
csc yürütmesi hatasız tamamlandıktan sonra sonuç olarak aşağıdaki dosyayı
elde
edersiniz:
C:\IntroCSharp\HelloCSharp.exe.
Bunu
çalıştırmak
için,
sadece adını yazmanız gerekir. Programın çalıştırılması sonucu “Merhaba,
csc yürütmesi hatasız tamamlandıktan sonra sonuç olarak
elde
edersiniz:
C:\IntroCSharp\HelloCSharp.exe.
Bunu
sadece adını yazmanız gerekir. Programın çalıştırılması
C#!” mesajı konsolda basılı görünür. Böylece iyi bir
www.nakov.com
aşağıdaki dosyayı
çalıştırmak
için,
sonucu “Merhaba,
başlangıç yaptık:
Page 65 / 151
C# İle Bilgisayar Programlama Temelleri
Windows Üzerinde Sistem Yollarını Değiştirme
Tam dosya yolunu
kullanabilmek
için,
girmeden
Windows
komut satırı C# derleyicisini (csc.exe)
sistem
yoluna
klasörü
ekleyebilirsiniz.
1.Denetim Masası’nı açın ve “Sistem” seçin. Sonuç olarak bu iyi-bilinen pencere
(ekran görüntüsü, Windows 7’den alınmıştır) görüntülenir:
www.nakov.com
Page 66 / 151
C# İle Bilgisayar Programlama Temelleri
Windows 8 biraz farklı görünebilir, ama neredeyse aynıdır:
2.“Gelişmiş sistem ayarlarını” seçin. “Sistem özellikleri” penceresi görünür:
www.nakov.com
Page 67 / 151
C# İle Bilgisayar Programlama Temelleri
3.“Ortam Değişkenleri” düğmesine tıklayın ve tüm ortam değişkenlerini içeren bir
pencere görünür:
4.“Şekilde görüldüğü gibi, Sistem değişkenleri listesinden “Path” seçin ve “Düzenle” butonuna basın. .NET Framework yüklü olduğu dizinin yolunu gireceğiniz
küçük bir pencere görünür:
www.nakov.com
Page 68 / 151
C# İle Bilgisayar Programlama Temelleri
Tabii ki, .NET Framework’un nerede
yüklü olduğunu bulmak zorundayız. Varsayılan olarak, Windows sistem dizini C:\
Windows\ Microsoft.NET
içinde bir yerde bulunur, örneğin:
C:\Windows\Microsoft.NET\Framework64\v4.0.30319
Zaten mevcut olan ortam değişkenlerine
ek bir yol eklemek için ara olarak bir noktalı virgül (;) koyduktan sonra yol adını
bitiştirerek yazarız.
„Dikkatli
olmalıyız
çünkü herhangi bir
mevcut sistem yolunu silerseniz, Windows işlevleri veya
bazı yüklü yazılım
parçaları
düzgün
çalışmayabilir!”
5. Yolu ayarladıktan sonra, csc.exe çalıştırmayı deneyebilirsiniz, tam yolunu girmeden. Bunu yapmak için, yeni bir cmd.exe (Komut İstemi) penceresi açın (Komut
İstemi’ni yeniden başlatmak önemlidir) ve “csc” komutu yazın. C# derleyicisinin sürüm bilgileri ve hiçbir giriş dosyası belirtilmediğine dair bir mesaj görmeniz
gerekir.
www.nakov.com
Page 69 / 151
C# İle Bilgisayar Programlama Temelleri
Visual Studio Tümleşik Geliştirme Ortamı (IDE)
Şimdiye kadar Windows konsol (Komut İstemi) kullanarak C# programlarının
nasıl derleneceğini ve çalıştırılacağını inceledik. Tabii ki, bunu yapmanın
daha kolay bir yolu var - şimdiye kadar kullanılan tüm komutları çalıştıran
bir tümleşik geliştirme ortamını kullanarak. Geliştirme ortamları (IDE)
ile nasıl çalışılacağına ve işimizi nasıl kolaylaştıracaklarına bir göz atalım.
Tümleşik Geliştirme Ortamları
Önceki örneklerde, tek bir dosyadan oluşan bir programın nasıl derleneceği ve
çalıştırılacağı incelenmişti. Genellikle programlar birçok dosyadan oluşur, hatta bazen
on binlerce. Tek bir dosyadaki programı metin editöründe yazmak, komut isteminden
derlemek ve çalıştırmak kolaydır, ancak büyük bir proje için tüm bunları yapmanın
çok karmaşık ve zaman alıcı bir çaba olabileceği kanıtlanmıştır. Karmaşıklığı azaltan,
yazılım uygulamalarını yazmayı, derlemeyi ve yürütmeyi kolay kılan tek bir araç
vardır – Tümleşik Geliştirme Ortamı (IDE) diye adlandırılır. Geliştirme ortamları
genellikle ana geliştirme işlevlerine birçok eklemeler getirir, hata ayıklama, birim
testi, genel hataları tespit etme, bir depoya erişim sağlama ve diğerleri gibi.
Visual Studio Nedir?
Visual Studio, Windows ve .NET Framework platformu üzerinde yazılım
uygulamaları geliştirmek için güçlü bir tümleşik ortamdır (IDE). Visual Studio (VS),
farklı programlama dillerini (örneğin, C#, VB.NET ve C++) ve farklı yazılım
geliştirme teknolojilerini (Win32, COM, ASP.NET, ADO.NET Entity Framework,
Windows Forms, WPF, Silverlight Windows Store uygulamaları ve daha birçok
Windows ve .NET teknolojileri) destekliyor. Kod yazma, derleme, yürütme, hata
ayıklama ve uygulamaları test etme, kullanıcı arayüzü tasarımı (formlar, diyaloglar,
web sayfaları, görsel kontroller ve diğerleri), veri ve sınıf modelleme, testleri ve
yüzlerce diğer fonksiyonları çalıştırmak için güçlü bir bütünleşik bir ortam sunuyor.
www.nakov.com
Page 70 / 151
C# İle Bilgisayar Programlama Temelleri
IDE “tümleşik geliştirme ortamı” anlamına gelir - kod yazmak, derlemek, çalıştırmak,
test etmek, hata ayıklamak vb. için her şeyin tek bir yerde entegre edildiği bir
araçtır. Visual Studio tipik bir geliştirme IDE örneğidir.
.NET Framework 4.5 Visual Studio 2012 (VS 2012) ile birlikte gelir. Bu Mart 2013
itibariyle en son Visual Studio sürümüdür. C# 5, .NET 4.5 ve Windows 8 ile uygulama
geliştirmek için tasarlanmıştır.
VS 2012 ticari bir üründür, ancak Visual Studio Ekspres 2012 adı verilen ücretsiz
bir sürümü de vardır. http://microsoft.com/visualstudio/downloads adresindeki
Microsoft web sitesinden ücretsiz olarak indirebilirsiniz.
Birkaç tane Visual Studio 2012 Ekspres sürümü bulunmaktadır (masaüstü, Web,
Windows 8 ve diğerleri için). Bu kitabın içeriğinde bulunan C # kodunu yazmak
istiyorsanız, Masaüstü için Visual Studio 2012 Ekspres kullanabilirsiniz yada
bulunduğunuz Üniversiteden veya kurumdan tam Visual Studio ücretsiz lisansına sahip
olup olmadığınızı kontrol edin. Birçok akademik kurum Windows, Visual Studio, SQL
Server ve diğer geliştirme araçlarını ücretsiz lisanslamak için öğrencilerine Microsoft
DreamSpark hesapları sağlamaktadır. Eğer öğrenci iseniz, üniversite yönetiminize
DreamSpark programını sorun. Dünyanın her tarafında çoğu üniversite bu programın
üyeleridir.
Bu kitapta VS Ekspres 2012’nin yalnızca en önemli işlevlerinden biri göz önüne
alınacaktır – kodlama ile ilgili olanlar. Program oluşturma, düzenleme, derleme,
yürütme ve hata ayıklama için fonksiyonları bulunmaktadır.
Bu kitapta örnekler için VS 2010 ve VS 2008 gibi eski Visual Studio sürümlerinin de
kullanılabilir olduğunu unutmayın, ancak kullanıcı arayüzleri biraz farklı görünebilir.
Örneklerimiz Windows 8 üzerinde VS 2012’ye dayanmaktadır.
Bir örnek ile devam etmeden önce, Visual Studio 2012’nin görsel arayüz yapısına
daha detaylı bir göz atalım. Windows bunun ana parçasıdır. Her birinin uygulamaların
geliştirilmesine bağlı farklı bir işlevi vardır. Visual Studio 2012’nin varsayılan kurulum
www.nakov.com
Page 71 / 151
C# İle Bilgisayar Programlama Temelleri
Visual Studio’nun araştıracağımız birkaç penceresi vardır:
- Başlangıç ​​Sayfası - başlangıç ​​sayfasından son projelerimizden herhangi
birini rahatlıkla açabiliriz veya yeni bir proje başlatabiliriz, ilk C# programımızı
oluşturmak veya C# kullanımı hakkında yardım almak için.
- Kod Editörü - programın kaynak kodunu tutar ve birden fazla dosyanın
açılmasını ve düzenlenmesini sağlar.
- Hata Listesi - geliştirdiğimiz programdaki hataları (varsa) gösterir. Daha
sonra C# programlarımızı Visual Studio içinden derlerken bu pencereyi nasıl
kullanacağımızı öğreneceğiz.
- Çözüm Gezgini - hiçbir proje yüklenmediğinde, bu pencere boştur, ancak
C# programcıları olarak hayatımızın bir parçası haline gelecek. Projemizin
yapısını gösterir – C# kodu olsun olmasın, içerdiği tüm dosyaları, resimleri
www.nakov.com
Page 72 / 151
C# İle Bilgisayar Programlama Temelleri
veya diğer bazı tür kod ve kaynakları.
- Özellikler - Geçerli nesnenin özelliklerinin bir listesini tutar. Özellikler esas
olarak bileşen tabanlı programlamada kullanılır, örneğin WPF, Windows Store
veya ASP.NET Web Forms uygulaması geliştirirken.
Visual Studio’nun yardımcı işlevsellikleri ile ilgili diğer birçok penceresi vardır ama
biz şu anda bunları gözden geçirmeyeceğiz.
www.nakov.com
Page 73 / 151
C# İle Bilgisayar Programlama Temelleri
Yeni bir C# Projesi Oluşturma
Visual Studio ile başka bir şey yapmadan önce, yeni bir proje oluşturmak
veya varolan bir projeyi yüklememiz gerekir. Tasarlanan proje çok sayıda
dosyayı mantıklı bir şekilde gruplandırır, bir yazılım uygulaması veya sistemi
uygulamak üzere. Her yeni program için ayrı bir proje oluşturmanız önerilir.
Aşağıdaki adımları izleyerek Visual Studio’da bir proje oluşturabilirsiniz:
- File -> New Project …
- “New Project” iletişim kutusu görünür ve oluşturabileceğimiz projelerin
tüm farklı türlerini listeler. Bir proje türünü seçin (örneğin Konsol
Uygulaması veya WPF Uygulaması), programlama dili (örneğin C#
veya VB.NET) ve .NET Framework sürümü (örneğin .NET Framework
4.5) ve projenize bir ad verin (bizim durumumuzda “IntroToCSharp”):
• Konsol Uygulaması’nı seçin. Konsol uygulamaları varsayılan girdi ve çıktı olarak
konsolu kullanan programlardır. Veri klavye ile girilir ve sonuç basılacak olduğunda
www.nakov.com
Page 74 / 151
C# İle Bilgisayar Programlama Temelleri
bu, konsolda görünür (program penceresinde
ekrandaki metin olarak). Konsol uygulamalarının
yanı sıra, bir grafik kullanıcı arayüzü ile (örneğin
Windows Forms veya WPF) de uygulamalar, Web
uygulamaları, web hizmetleri, mobil uygulamalar,
Windows Store uygulamaları, veritabanı projeleri ve
diğerlerini de oluşturabiliriz.
• Projenin adını “Name” alanına girin. Bizim
durumumuzda IntroToCSharp adını seçin.
• [OK] düğmesine basın.
Yeni oluşturulan proje şimdi Çözüm Gezgini’nde gösterilir.
Ayrıca, program kodunu içeren ilk dosyamız da, otomatik
olarak eklenir. Program.cs olarak adlandırılmıştır. Dosyalar,
sınıflar, yöntemler ve programın diğer elemanları için
anlamlı isimler vermek çok önemlidir, böylece onları
kolayca bulabiliriz ve kodda gezinebilirsiniz. Anlamlı
bir isim demek şu soruya cevap vermesi anlamına
gelir:
“Bu dosya/sınıf/yöntem/değişkenin oluşturulma
amacı nedir?” ve kodun nasıl çalıştığını anlamaları için
geliştiricilere yardımcı olur. Alıştırmalar bölümünün
3.problemini çözüyor olsanız da, bir isim olarak Problem3
vermeyin. Proje/sınıflarınızı amacına göre adlandırın.
Projeniz iyi adlandırılmıştır ise, birkaç ay veya bir yıl
sonra ne yapmak için tasarlandığını açmadan ve içine
bakmadan açıklamak mümkün olacaktır. Problem3 bu
projenin aslında ne yaptığı hakkında hiçbir şey söylemez.
Program.cs dosyasını yeniden adlandırmak için, Çözüm
Gezgini’nde üzerine tıklayın ve “Rename” seçeneğini seçin.
C# programımızı içeren ana dosyayı HelloCSharp.cs
olarak adlandırabiliriz. Dosyayı yeniden adlandırmayı dosya
Çözüm Gezgini’nde seçiliyken [F2] tuşu ile de yapılabiliriz:
www.nakov.com
Page 75 / 151
C# İle Bilgisayar Programlama Temelleri
Sınıf adını bunun yanı sıra dosya adını yeniden adlandırmak isteyip istemediğimizi
bize soran bir diyalog penceresi görünür. “Evet” seçeneğini seçin.
www.nakov.com
Page 76 / 151
C# İle Bilgisayar Programlama Temelleri
Yapmamız gereken tek şey Main() yöntemi için kod eklemektir. Varsayılan olarak,
HelloCSharp.cs kodu yüklü ve düzenleme için hazır olmalıdır. Değilse, Çözüm Gezgini’nde
HelloCSharp.cs dosyasına çift tıklayarak onu yükleriz. Aşağıdaki kaynak kodu girin:
Kaynak Kodun Derlenmesi
Visual Studio’da derleme işlemi birkaç adım içerir:
• Sözdizimi hatalarının kontrolü;
• Eksik kütüphaneler gibi diğer hataların kontrolü;
• Çalıştırılabilir bir dosya içine (.NET assembly) C# kodunun dönüştürülmesi.
Konsol uygulamaları için bu bir .exe dosyasıdır.
www.nakov.com
Page 77 / 151
C# İle Bilgisayar Programlama Temelleri
Visual Studio’da bir dosyayı derlemek için, [F6] tuşuna veya [Shift +
Ctrl + B] tuşuna basın. Genellikle, hatalar biz hâlâ yazarken ya da en geç
derlerken programcının dikkatini çekmek için kırmızı renkle altı çizilidir.
Görünür olması durumunda “Hata Listesi” penceresinde listelenir (Eğer
görünür değilse, Visual Studio’nun “Görünüm” menüsünden gösterebiliriz).
Projemizde en az bir hata varsa, bu “Hata Listesi” penceresinde küçük kırmızı
bir “x” ile işaretlenmiş olacaktır. Dosya adı, satır numarası ve proje adı – gibi
sorun hakkındaki kısa bilgiler her hata için görüntülenir. “Hata Listesi”nde
listelenen hatalardan biri üzerine çift tıklarsanız, Visual Studio otomatik olarak
hatanın oluştuğu kod dosyasına ve satıra sizi götürecektir. Yukarıdaki ekran
görüntüsünde sorun, “using System” yerine “using Systema” yazmış olmamızdı.
Projeyi Başlatma
Projeyi başlatmak için, basın [Ctrl + F5] basın ( [Ctrl] tuşuna basılı tutarak ve
aynı anda [F5] tuşuna basarak). Program başlayacak ve sonucu takiben “Devam
etmek için herhangi bir tuşa basın...”
mesajı
konsolda
görüntülenir:
Son mesaj program tarafından üretilen sonucun bir parçası değildir. Programın
yürütmesi bittikten sonra Visual Studio tarafından üretilen bir hatırlatma mesajıdır
ve bize sonucunu görmek için zaman verir. Sadece [F5] tuşuna basarak programı
çalıştırırsanız, bu mesaj görünmez ve sonuç göründükten sonra anında kaybolur, çünkü
program kendi yürütmesini bitirmiş olacaktır, ve pencere kapanacaktır. Her zaman
[Ctrl+F5] tuşuna basarak konsol uygulamalarını başlatmamızın nedeni budur.
Tüm proje türleri yürütülebilir değildir. Bir C# projesini yürütmek için, bu bölümde
daha önce anlatılan şekilde bildirilmiş bir Main() metotunu gerçekleştiren en az bir
sınıfın olması gerekir.
www.nakov.com
Page 78 / 151
C# İle Bilgisayar Programlama Temelleri
Programda Hata Ayıklama
Program aynı zamanda böcek (bug) olarak da bilinen hataları içerdiğinde, onları
bulmanız ve kaldırmanız gerekir, yani programın hatalarını ayıklamak zorundayız.
Hata ayıklama işlemi aşağıdaki adımları içerir:
-
-
-
-
Sorunları (bug) farketmek;
Sorunlara neden olan kodu bulmak;
Program düzgün çalışacak şekilde kodu düzeltmek;
Değişiklikleri yaptıktan sonra programın beklendiği gibi çalıştığından emin
olmak için test etmek.
Program düzgün çalışmaya başlayana kadar bu işlem birkaç kez tekrar edilebilir.
Sorunu fark ettikten sonra, ona neden olan kodu bulmamız gerekir. Visual Studio her
şeyin planlandığı gibi çalışıp çalışmadığını adım adım kontrol etmemize izin vererek
bize yardımcı olabilir.
Belirlenen pozisyonlarda programın yürütülmesini durdurmak için kesme noktaları
(breakpoint) yerleştirebilirsiniz. Kesme noktası programın bir satırı ile ilişkilidir. Program
kesme noktaları ile ilişkili satırlar üzerinde yürütmesini durdurur, kalan kodun adım
adım yürütülmesine izin verir. Her adımda mevcut değişkenlerin değerlerini kontrol
edebilir ve hatta değiştirebiliriz.
Hata ayıklama, programı bir tür yavaş hareketlerle adım adım yürütmeyi gerektirir.
Kolayca kod detaylarını anlamak için fırsat verir ve tam olarak nerede ve neden hata
oluştuğunu görmemizi sağlar.
Kesme noktalarının nasıl kullanılacağını göstermek için, programımızda kasıtlı bir
hata yaratalım. Yürütme sırasında bir ayrıcalık yaratan satırı programa ekleyeceğiz
(“İstisnai Durum İşleme” Bölümü’nde ayrıcalıklara detaylı göz atacağız).
Şimdilik aşağıdaki şekilde programımızı düzenleyelim:
www.nakov.com
Page 79 / 151
C# İle Bilgisayar Programlama Temelleri
HelloCSharp.cs
class HelloCSharp
{
static void Main()
{
throw new System.NotImplementedException(
“Intended exception.”);
System.Console.WriteLine(“Hello C#!”);
}
}
[Ctrl + F5] ile programı tekrar başlattığınızda bir hata alırsınız ve bu konsolda
basılacaktır:
Kesme noktalarının sorunu bulmada bize nasıl yardımcı olacağını görelim. Main()
metotunun açılış parantezini taşıyan satıra imleci götürün ve [F9] basın (bunu
yaparak bu satır üzerine bir kesme noktası yerleştiririz). Hata ayıklama modunda
yürütüldüğünde, programın orada duracağını belirten bir kırmızı nokta görünür:
www.nakov.com
Page 80 / 151
C# İle Bilgisayar Programlama Temelleri
Şimdi
hata
ayıklama
modunda
programı
başlatmanız
gerekir.
D e b u g - > S t a r t
Debugging seçin veya
[F5]
basın.
Program
başlayacak ve karşılaştığı
ilk
kesme
noktasında
anında duracaktır. Satır sarı
renkli olacak ve bundan
sonra programı adım adım
çalıştırabileceksiniz. [F10]
tuşu ile bir sonraki satıra
geçilir.
Satırı yürütmek için bir kez daha [F10] basın. Bu kez,
Visual Studio, hatanın oluştuğu satırı ve yanı sıra bununla
ilgili bazı ek ayrıntıları belirten bir pencere görüntüler.
Verilen
bir
satır
üzerindeyken satır sarı
renkli olduğunda, satırdaki
kod henüz yürütülmemiştir
anlamına
gelir.
Satırı
geçtiğimizde
bir
kez
yürütülür.
Eklediğimiz
satırda bulunmamıza ve
buranın
hataya
sebep
olması
gerektiğine
rağmen, bu örneğimizde
biz hata almadık.
www.nakov.com
Page 81 / 151
C# İle Bilgisayar Programlama Temelleri
Programda sorunun nerede olduğunu bir kez anladıktan sonra, onu kolayca
düzeltebilirsiniz. Bunu yapmak için, önce programın yürütülmesi bitmeden durdurmak
gerekir. Debug–>Stop Debugging seçin veya [Shift + F5] basın. Bundan sonra
sorunlu satırı silin ve [Ctrl + F5] tuşuna basarak (hata ayıklama olmadan) normal
modda programı başlatın.
Diğer .NET Dilleri
C# en popüler .NET dilidir, ancak .NET programlarını yazmak için kullanılan birkaç
diğer dil de vardır:
- VB.NET - Visual Basic .NET (VB) .NET Framework’te çalışması için adapte
edilmiş Basic dilidir. Microsoft Visual Basic 6’dan (Windows 3.1 ve Windows
95 için eski geliştirme ortamı) sonra geldiği kabul edilir. Garip sözdizimi vardır
(C# geliştiricileri için), ancak genellikle C# gibi aynı işi yapar, sadece farklı
sözdizimiyle. VB.NET’nin var olmasının tek sebebi tarihseldir: VB6’den sonra
gelmiştir ve onun kendi sözdizimini devam ettirir. VB6 programcısı olmadığınız
sürece önerilmez.
- Managed C++ - C++ programlama dilinin .NET Framework için adaptasyonu.
Hızlı bir şekilde mevcut C++ kodunu .NET’te kullanılmak üzere dönüştürmek
gerekiyorsa yararlı olabilir. Yeni projeler için tavsiye edilmez. Bu kitabın
okuyucuları için, C++ deneyime sahip olsanız bile tavsiye edilmez, çünkü
.NET programlamayı gereksiz yere karmaşık yapar.
- F # - .NET Framework içine işlevsel programlama paradigmasını koymak için
bir deneme. (Fonksiyonel programlama gurusu olmadığınız sürece) hiç tavsiye
edilmez.
- JavaScript - WinJS teknolojisi aracılığıyla Windows 8 (Windows Store)
uygulamaları geliştirmek için kullanılabilir. İyi JavaScript becerilerine sahip
uzman HTML5 geliştiricileri için iyi bir seçim olabilir. Konsol uygulamalarını
www.nakov.com
Page 82 / 151
C# İle Bilgisayar Programlama Temelleri
Alıştırmalar
1.Microsoft Visual Studio ve Microsoft Developer Network (MSDN) Kütüphanesi
Dokümantasyonu’nu yükleyin ve kendinizi alıştırın.
2.Standart .NET API belgelerinden (MSDN Kütüphanesi) System.Console sınıfının
tanımını bulun.
3.System.Console.WriteLine()
metotunun
açıklamasını
ve
değişik
olası
parametrelerini MSDN Kütüphanesi’nden bulun.
4.Komut istemini (konsol) ve Visual Studio’yu kullanarak bu bölümdeki örnek
programı derleyin ve çalıştırın.
5.Farklı bir selamlama yazdırmak için örnek programı değiştirin, örneğin “İyi
günler!”.
6.Konsol üzerinde adınızı ve soyadınızı bastıran bir konsol uygulaması yazın.
7.Konsol üzerinde her biri yeni satırda olmak üzere aşağıdaki sayıları bastıran bir
program yazın:1, 101, 1001.
8.Konsol üzerinde geçerli tarih ve zamanı yazdıran bir program yazın.
9.12345 sayısının karekökünü bastıran bir program yazın.
10. 2, -3, 4, -5, 6, -7, 8 dizisinin ilk 100 elemanını bastıran bir program yazın.
11. Konsoldan şimdiki yaşınızı okuyup 10 yıl sonraki yaşınızı bastıran bir program
yazın.
12. C# ve .NET Framework arasındaki farkı açıklayın.
13. En popüler programlama dillerinin bir listesini yapın. C# hangi bakımlardan
onlardan farklıdır?
www.nakov.com
Page 83 / 151
C# İle Bilgisayar Programlama Temelleri
Bölüm 2: Temel Türler ve Değişkenler
Bölümün İçindekileri
Bu bölümde C# temel türleri ve değişkenleri ile tanışacağız – ne oldukları ve
onlarla nasıl çalışılacağı hakkında. Önce veri türlerini dikkate alacağız – tamsayı
türleri, gerçek türler ile kayan nokta, Boole, karakter, dize ve nesne türleri.
Değişkenler ile devam edeceğiz, özelliklerini, nasıl bildirildiklerini, bir değerin
nasıl atandığını, ve değişkenlere ilk değer atamanın yani başlatmanın ne olduğunu
anlatacağız. İki çeşit C# veri türü ile tanışacağız – değer türleri ve referans
türleri. Nihayet değişik türdeki değişmezleri ve onların kullanımını inceleyeceğiz.
Değişken Nedir?
Tipik bir program yürütme (çalıştırma) sırasında değişen çeşitli değerleri
kullanır. Örneğin, kullanıcı tarafından girilen değerler üzerinde bazı hesaplamalar
gerçekleştiren bir program oluşturabiliriz. Herhangi bir kullanıcı tarafından girilen
değerler, açıktır ki, başka bir kullanıcı tarafından girilenlerden farklı olacaktır.
Bu programı oluştururken, programcı, girdi olarak sunulacak değerlerden
hangisinin girileceğini bilmiyor anlamına gelir, ve bunun gerektirdiği kullanıcı
tarafından girebilen tüm olası değerleri işlemek için hesaplama yapmak demektir.
Bir kullanıcı hesaplama işleminde kullanılacak yeni bir değer girdiğinde, bilgisayarın
rasgele erişim belleğinde (geçici olarak) onu koruyabilirsiniz. Belleğin bu bölümündeki
değerler yürütme boyunca değişebilir ve bu nedenle – değişkenler olarak adlandırılır.
Veri Türleri
Veri
türleri
benzer
özelliklere sahip değerlerin
kümeleridir (aralıklarıdır).
Örneğin byte türü [0 ...
255] aralığında tamsayılar
kümesini belirtir.
www.nakov.com
Page 84 / 151
C# İle Bilgisayar Programlama Temelleri
Özellikleri
Veri türleri aşağıdakilerle karakterize edilir:
• İsim – örneğin, int;
• Boyut (ne kadar bellek kullandıkları) - örneğin,
4 bayt;
• Varsayılan değer - örneğin 0.
Türler
C# temel veri türleri aşağıdaki türlerle belirlenmiştir:
• Tamsayı türleri – sbyte, byte, short, ushort, int, uint, long,
ulong;
• Gerçek kayan nokta türleri – float, double;
• Ondalık hassasiyette gerçek tür – decimal;
• Boole türü – bool;
• Karakter türü – char;
• Dize – string;
• Nesne türü – object.
Bu veri türlerine temel
türler
denir
(yerleşik
türler),
çünkü
C#
diline
düşük
seviyede
gömülüdürler.
Aşağıdaki
tablo, yukarıda belirtilen
veri türleri için geçerli veri
aralıklarını ve varsayılan
değerlerini
gösteriyor:
www.nakov.com
Page 85 / 151
C# İle Bilgisayar Programlama Temelleri
Veri Türü Varsayılan Değer En Küçük Değeri
En Büyük Değeri
byte
255
sbyte
0
-128
short
0
-32768
ushort
int
uint
long
ulong
float
double
decimal
bool
char
object
string
0
0
0
0u
0L
0u
0.0f
0.0d
0.0m
false
‘\u0000’
null
null
0
0
-2147483648
0
127
32767
65535
2147483647
4294967295
-9223372036854775808 9223372036854775807
0
18446744073709551615
±1.5×10-45
±3.4×1038
±1.0×10-28
±7.9×1028
±5.0×10-324
İki olası değer: true ve false
±1.7×10308
‘\u0000’
‘\uffff’
-
-
-
-
C# ve .NET Türleri Arasındaki İlişki
C# temel veri türleri ile .NET Framework’te bulunan ortak tür sisteminin (Common
Type System: CTS) türleri arasında doğrudan ilişki vardır. Örneğin, C# int türü
CTS System.Int32 türüne ve VB.NET dilinde Integer türüne karşılık gelirken,
C# long türü CTS System.Int64 türüne ve VB.NET dilinde Long türüne tekabül
etmektedir. .NET Framework ortak tür sistemi (CTS) sayesinde, farklı programlama
dilleri arasında uyumluluk vardır (örneğin, C#, Managed C++, VB.NET ve F# gibi).
Aynı nedenle C#’de bulunan int, Int32 ve System.Int32 türleri aslında tek ve
aynı veri türü için gösterilen – işaretli 32-bit tamsayılar için farklı takma adlardır.
Tamsayı Türleri
Tamsayı türleri tamsayı numaralarını temsil eder ve sbyte, byte, short, ushort,
int, uint, long ve ulong olarak tanımlıdır. Şimdi bunları teker teker inceleyelim.
www.nakov.com
Page 86 / 151
C# İle Bilgisayar Programlama Temelleri
sbyte
byte
sbyte türü 8-bitlik işaretli
tamsayıdır. onun için
olası değerlerin sayısı
28 dir, yani tümüyle 256
değer alabildiği anlamına
gelir, ve her ikisi de,
pozitif ve negatif olabilir.
sbyte içinde saklanabilir en
düşük değer, Sbyte.MinValue
= -128 ( -27 ), ve en büyük
değer Sbyte.MaxValue = 127
( 27 – 1 ) ‘dir. Varsayılan
değeri
0
sayısıdır.
byte türü 8-bitlik işaretsiz
tamsayı türüdür. Sadece
negatif
olmayan
256
farklı tamsayı değeri ( 28
) vardır. Varsayılan değeri
0
sayısıdır.
Minimum
değeri Byte.MinValue = 0,
ve en yüksek değeri Byte.
MaxValue = 255 ( 28 – 1 ) ‘dir.
short
short
türü
16-bitlik
işaretli
tamsayıdır.
Minimum değeri Int16.
MinValue = -32768 (
-215 ), ve maksimum
değeri Int16.MaxValue =
32767 ( 215 – 1 ) ‘dir.
short türü için varsayılan
değer
0
sayısıdır.
ushort
ushort türü 16-bitlik işaretsiz tamsayıdır. Saklayabildiği en küçük değer UInt16.MinValue
= 0 ve en büyük değer UInt16.MaxValue = 65535 ( 216 – 1 ) ‘dir. Varsayılan değeri 0 sayısıdır.
int
Değerlendireceğimiz sonraki tamsayı türü int’dir. 32-bitlik işaretli tamsayıdır.
Anlaşıldığı gibi, bit sayısı arttıkça bir türün saklayabileceği olası değerler de artmaktadır.
int için varsayılan değer 0 ‘dır. Minimum değeri Int32.MinValue = -2,147,483,648
(
–231 ), ve maksimum değeri Int32.MaxValue = 2,147,483,647 ( 231 – 1 ) ‘dir
int türü programlamada en sık kullanılan türdür. Programcılar genellikle
tamsayılar ile çalışırken int kullanır, çünkü bu tür 32-bit mikroişlemci için doğaldır
ve günlük yaşamda gerçekleştirilen hesaplamaların çoğu için yeterince “büyük”tür.
www.nakov.com
Page 87 / 151
C# İle Bilgisayar Programlama Temelleri
uint
uint türü 32-bitlik işaretsiz tamsayı türüdür. Varsayılan değeri 0u veya 0U (ikisi
eşdeğerdir) sayısıdır. ‘u’ harfi sayının uint (aksi takdirde int olarak anlaşılır)
türünde olduğunu gösterir. Alabileceği en küçük değeri UInt32.MinValue
= 0, ve en büyük değeri UInt32.MaxValue = 4,294,967,295 ( 232 – 1 ) ‘dir.
long
long türü varsayılan değeri 0l veya 0L (ikisi eşdeğerdir, ancak ‘l’ harfi ‘1’
bir basamağı ile kolayca karıştırılabileceği için ‘L’ kullanılması tercih edilir)
sayısı olan 64-bitlik işaretli türdür. ‘L’ harfi sayının long türüne (aksi
takdirde int anlaşılmalıdır) sahip olduğunu göstermektedir. long türünde
saklanabilen en küçük değer Int64.MinValue=-9,223,372,036,854,775,808 ( -263
) ve en büyük değer Int64.MaxValue = 9,223,372,036,854, 775,807 ( 263 – 1 ) ‘dir.
ulong
En büyük tamsayı türü ulong türüdür. Varsayılan değeri 0u veya 0U
(ikisi eşdeğerdir) sayısı olan 64-bitlik işaretsiz türdür. ‘u’ eki sayının ulong
türünde (aksi takdirde long anlaşılmaktadır)
olduğunu
gösterir. long
türünde saklanabilen en küçük değer UInt64.MinValue = -0 ve en büyük
değer UInt64.MaxValue = 18,446,744,073,709,551,615 ( 264 – 1 ) ‘dir.
Aşağıda yer alan “Değişkenleri Bildirmek” ve “Değişkenleri Başlatmak” Bölümleri’nde
bir değişkenin bildirilmesini ve başlatılmasını detaylı olarak görmeniz mümkün
olacaktır ve örnekler bunu daha açık hale getirecektir.
Aşağıdaki kod parçasında, tamsayı türlerinin kullanımını gösterdik. Küçük sayılar
için byte türünü, ve çok büyük sayılar için – ulong türünü kullandık. Kullanılan tüm
değerler pozitif sayılar olduğu için işaretsiz türleri kullandık.
www.nakov.com
Page 88 / 151
C# İle Bilgisayar Programlama Temelleri
// Bazı değişkenleri bildirelim
byte centuries = 20;
ushort years = 2000;
uint days = 730480;
ulong hours = 17531520;
// Konsola sonucu yazdıralım
Console.WriteLine(centuries + “ centuries are “ + years +
“ years, or “ + days + “ days, or “ + hours + “ hours.”);
// Konsol çıktısı:
// 20 centuries are 2000 years, or 730480 days, or 17531520
// hours.
ulong maxIntValue = UInt64.MaxValue;
Console.WriteLine(maxIntValue); // 18446744073709551615
Kayan Noktalı Gerçek Sayı Türleri
C# gerçek türleri matematikten bildiğimiz gerçek sayılardır. IEEE 754
Standartına uygun bir kayan nokta ile temsil edilirler ve float ve double
olarak bulunmaktadır. Şimdi bu iki veri türünü detaylarıyla düşünelim
ve
aralarındaki
benzerlikler
ve
farklılıklar
nedir
anlamaya
çalışalım.
Gerçek Sayı Türü: Float
Değerlendireceğimiz birinci tür 32-bitlik gerçek kayan noktalı türü olan float olacak.
Aynı zamanda tek duyarlıklı gerçek sayı olarak bilinir. Varsayılan değeri 0.0f veya
0.0F ‘dır (her ikisi de eşdeğerdir). Sonuna konan ‘f’ karakteri açıkça sayının float türünde
olduğunu gösterir (çünkü varsayılan olarak tüm gerçek sayılar double olarak kabul
edilir). Bu özel sonek hakkında daha fazla bilgiyi “Gerçek Değişmezler” Bölümü’nde
okuyabilirsiniz. Dikkate aldığımız tür yedi ondalık basamağa kadar doğruluğa sahiptir
(diğerleri kaybolmuştur). Örneğin 0,123456789 sayısı float türü olarak tutulduğu
takdirde, 0,1234568 olarak yuvarlanacaktır. float türüne dahil edilebilen değerler aralığı
(7 önemli ondalık basamak duyarlığına yuvarlandığı takdirde) ±1.5 × 10-45 ile ±3.4 × 1038
aralığındadır.
www.nakov.com
Page 89 / 151
C# İle Bilgisayar Programlama Temelleri
Gerçek Sayı Türlerinin Özel Değerleri
Gerçek Sayı Türü: Double
Gerçek veri türleri gerçek sayı olmayan
fakat bazı matematiksel soyutlamalar
olan birkaç özel değere de sahiptir:
C# dilinde ikinci gerçek kayan noktalı
türü double türüdür. Buna ayrıca çift
duyarlıklı gerçek sayı da denir. 0.0d
ve 0.0D varsayılan değerine sahip 64-bit
türüdür (‘d’ soneki olarak zorunlu değildir
çünkü C# dilinde tüm gerçek sayı türleri
varsayılan olarak double olmaktadır). Bu
tür 15 ila 16 ondalık basamak duyarlığına
sahiptir. double türü için kaydedilebilen
değerler
(15-16
önemli
ondalık
basamak duyarlığına yuvarlandığında),
±5.0 × 10-324 ile ±1.7 × 10308 aralığındadır.
• Negatif sonsuz –∞ (Single.
NegativeInfinity). Örneğin -1.0f sayısı
0.0f tarafından bölündüğü zaman
elde edilir.
• Pozitif sonsuz +∞ (Single.
PositiveInfinity). Örneğin 1.0f sayısı
0.0f tarafından bölündüğü zaman
elde edilir.
• Belirsizlik (Single.NaN) – Geçersiz
bir işlem gerçek sayılar üzerinde
yapıldığı anlamına gelir. Örneğin
0.0f sayısı 0.0f tarafından bölündüğü
zaman, yada negatif bir sayının
karekökünü hesaplarken elde
edilir.
www.nakov.com
double türünün en küçük değeri Double.
MinValue = -1.79769e + 308 sabiti ve en büyük
değeri
Double.MaxValue = 1.79769e+308
sabitidir. 0 pozitif sayısına en yakın
double türü Double.Epsilon = 4.94066e-324
sayısıdır. double türündeki değişkenler
de float türünde olduğu gibi bazı özel
değerler alabilir: Double.PositiveInfinity (+∞),
Double.NegativeInfinity (-∞) ve Double.NaN
(geçersiz sayı).
Page 90 / 151
C# İle Bilgisayar Programlama Temelleri
Kayan Noktalı Gerçek Sayı Türleri - Örnek
Gerçek sayı türünde değişkenleri bildiren, bu değişkenlere değer atayan ve değerlerini
konsola bastıran bir örnek aşağıda verilmiştir:
float floatPI = 3.14f;
Console.WriteLine(floatPI); // 3.14
double doublePI = 3.14;
Console.WriteLine(doublePI); // 3.14
double nan = Double.NaN;
Console.WriteLine(nan); // NaN
double infinity = Double.PositiveInfinity;
Console.WriteLine(infinity); // Infinity
Gerçek Sayı Türlerinin Duyarlılığı
Matematik belirli bir aralıkta sayısız tane gerçek sayı vardır (bu aralıktaki
tamsayıların sayısı sınırlıdır), yani herhangi iki a ve b gerçek sayısı arasında
a < c < b olan sayısız adet bir c sayısı vardır. Bunun sonucu olarak,
bilgisayar belleğinde saklanabilen gerçek sayılar sınırlı bir doğruluk gerektirir.
Matematik ve Fizik bilimleri çoğunlukla son derece büyük sayılarla (pozitif
ve negatif), ve (sıfıra çok yakın) son derece küçük sayılarla çalıştığı için,
bilgisayar ve elektronik cihazlardaki gerçek türler uygun şekilde saklanmalı
ve işlenmelidir. Örneğin, Fizik bilimine göre elektronun kütlesi yaklaşık
kilogramdır ve 1 gram molekül maddede yaklaşık 6.02*1023
9.109389*10-31
atom vardır. Her iki değer de float ve double türünde kolaylıkla saklanabilir.
Esnekliği sayesinde, gerçek sayıların modern kayan noktalı gösterimi
bize çok büyük sayılar için (örneğin yüzlerce basamağı olan pozitif ve
negatif sayılar) maksimum sayıda anlamlı basamak ile ve sıfıra çok yakın
sayılarla (örneğin, ilk önemli basamağından önceki ondalık noktadan sonra
yüzlerce sıfırı olan pozitif ve negatif sayılar) çalışmak olanağını veriyor.
www.nakov.com
Page 91 / 151
C# İle Bilgisayar Programlama Temelleri
Gerçek Sayı Türlerinin Doğruluğu - Örnek
Üzerinden geçtiğimiz C# dilinin gerçek türleri – float ve double sadece alabilecekleri
farklı olası değerler aralığı bakımından değil ama aynı zamanda hassasiyetleri
(koruyabildikleri ondalık basamak sayısı) bakımından da farklılık gösterirler.
Birinci tür 7 basamaklı, ikinci tür 15-16 basamaklı bir hassasiyete sahiptir.
Gerçek sayı türünde bildiğimiz birkaç değişkeni bildiren, bu değişkenlere
ilk değer atayarak başlatan ve değerlerini konsola bastıran bir örnek aşağıda
verilmiştir. Örneğin amacı, aralarındaki doğruluk farkını açıklamaktadır:
// Declare some variables
float floatPI = 3.141592653589793238f;
double doublePI = 3.141592653589793238;
// Print the results on the console
Console.WriteLine(“Float PI is: “ + floatPI);
Console.WriteLine(“Double PI is: “ + doublePI);
// Console output:
// Float PI is: 3.141593
// Double PI is: 3.14159265358979
float
olarak
bildirilen
π
sayısının
7.nci basamağa kadar yuvarlandığını
ve double olarak bildirilen π sayısının
15.nci basamağa kadar yuvarlandığını
görüyoruz. double gerçek türünün float
türüne
göre daha fazla kesinlik
içerdiği sonucuna varabiliriz, böylece
ondalık noktadan sonra daha büyük
bir hassasiyete ihtiyacımız varsa, onu
kullanabileceğiz.
www.nakov.com
Page 92 / 151
C# İle Bilgisayar Programlama Temelleri
Gerçek Sayı Türlerinin Sunumu Hakkında
C# dilindeki gerçek kayan noktalı sayılar üç bileşenden oluşmaktadır (IEEE
754 Standartına göre): işaret (1 veya –1), mantis ve kuvvet (üs), ve bunların
değerleri karmaşık bir formülle hesaplanır. Gerçek sayıların gösterimi hakkında
daha detaylı bilgi “Sayısal Sistemler” Bölümü’nde verilmiştir. Burada veri türlerinin
temsiline ve hesaplanabilen diğer veri türlerine derinlemesine bakacağız.
Gerçek Sayı Türleri ile Hesaplamalarda Hatalar
Gerçek kayan noktalı veri türleri ile hesaplamalarda alışılmamış davranışlar
gözlemlemek mümkündür, çünkü belirli bir gerçek sayının gösterimi sırasında
sık sık doğruluğun
kaybedilmesine
rastlanır.
Bunun
nedeni
bazı
gerçek sayıların 2’nin negatif
güçlerinin
toplamı olarak tam olarak temsil
edilmesinde yetersiz kalınmasıdır. float ve double türleri tarafından doğru
bir temsili olmayan sayılara örnekler 0.1, 1/3, 2/7 olarak verilebilir. İşte
C# kayan nokta sayıları ile hesap hatalarını gösteren bir örnek C# kodu:
float f = 0.1f;
Console.WriteLine(f); // 0.1 (correct due to rounding)
double d = 0.1f;
Console.WriteLine(d); // 0.100000001490116 (incorrect)
float ff = 1.0f / 3;
Console.WriteLine(ff); // 0.3333333 (correct due to rounding)
double dd = ff;
Console.WriteLine(dd); // 0.333333343267441 (incorrect)
„float ve double türleri için
tüm gerçek sayıların doğru temsili
yoktur. Örneğin, 0,1 sayısı float türünde yuvarlanmış olarak
0,099999994 ile temsil edilir.
www.nakov.com
Page 93 / 151
C# İle Bilgisayar Programlama Temelleri
İlk örnekte, beklenmeyen sonucun nedeni 0,1 (yani 1/10) sayısının IEEE 754
gerçek kayan noktalı sayı formatında hiçbir doğru temsilinin olmamasıdır
ve bu nedenle yaklaşık değeri kaydedilmiştir. Doğrudan yazdırıldığında sonuç
yuvarlama nedeniyle doğru görünüyor. Yuvarlama sayının konsolda basılacak dize
için dönüşümü sırasında yapılır. double türünden float türüne geçilirken, IEEE 754
biçimde sayının yaklaşık temsili daha belirgindir. Bu nedenle, yuvarlama, artık yanlış
temsili gizlemez, ve sekizinci basamaktan sonra o hataları gözlemleyebilirsiniz.
İkinci durumda 1/3 sayısının hiçbir doğru temsili yoktur ve 0,3333333’e
çok yakın bir sayıya yuvarlanır. Bu sayının değeri double türünde
yazıldığında
daha
önemli
basamak
koruduğu
için
açıkça
görülebilir.
Her iki örnek de kayan nokta sayı aritmetiğinin hatalar üretebilir
olduğunu göstermektedir ve bu nedenle hassas finansal hesaplamalar
için uygun değildir. Neyse ki, C#
0,1 gibi rakamları yuvarlama
olmadan
bellekte
tutabilen
hassas
ondalık
aritmetiği
desteklemektedir.
Ondalık Duyarlıklı Gerçek Sayı Türleri
C# sayıların
ikili sistem yerine
ondalık rakam
sistemi vasıtasıyla
temsil edildiği
ondalık kayan
nokta aritmetiğini
destekler. Böylece C# dilindeki
ondalık kayan
nokta aritmetik
türü kayan nokta
sayılarını depolarken ve işlerken
doğruluğunu
kaybetmez.
C# dilinde ondalık duyarlıklı gerçek sayılar için veri türü 128-bitlik
decimal türüdür. 28 – 29 ondalık basamağa kadar bir duyarlığı
vardır. En küçük değeri -7.9×1028 ve en büyük değeri +7.9×1028
‘dir. Varsayılan değeri 0.0m veya 0.0M ‘dir. ‘m’ soneki sayının
decimal türde olduğunu açıkça göstermektedir (çünkü varsayılan
olarak tüm gerçek sayılar double türündedir). decimal türünde 0’a
en yakın kaydedilebilen sayı ±1.0 × 10-28 ‘dir. decimal türünde ne
çok büyük pozitif veya negatif sayıların ne de 0’a çok yakın sayıların
saklanamayacağı açıktır. Ancak,
„Daha küçük veri aralığına rağmen, decimal türünde
finansal hesaplamalar için bu veri
saklanabilen tüm ondalık sayılar duyarlığını korur. Bu
türü neredeyse mükemmeldir
nedenle decimal türü hassas hesaplamalar için çok
çünkü sayıları 10’un kuvvetlerinin
daha elverişli ve finansal olanlar için çok uygundur.”
toplamı olarak temsil eder ve
yuvarlamadan kaynaklanan veri
kayıpları ikili gösterim ile kullanıldığında çok daha küçüktür.
www.nakov.com
Page 94 / 151
C# İle Bilgisayar Programlama Temelleri
decimal türündeki gerçek sayılar, finansal hesaplamalar için son derece elverişlidir –
gelirler, vergiler, borçlar, faizler, ödemeler, vb. hesaplamalar.
decimal türünde bir değişkeni bildiren ve ona değer atayan bir örnek aşağıda verilmiştir:
decimal decimalPI = 3.14159265358979323846m;
Console.WriteLine(decimalPI); // 3.14159265358979323846
decimal türünde bildirdiğimiz decimalPI sayısı 1 pozisyon kadar bile yuvarlanmamıştır
çünkü onu 21 basamaklı duyarlıkla kullandık ve bu
„Eğer para ile hesaplamalar
da yuvarlatılmamış decimal türüne uyuyor.
yapıyorsanız float veya double yerine decimal türünü
Yüksek duyarlık ve hesaplamalar sırasında
kullanın. Aksi halde hesaplamaalışılmamış davranışların olmaması (float ve double
lar sırasında hoş olmayan anotürlerinde rastladığımız)
nedeniyle doğruluğun
maliler sonucunda hatalar ile
önem arz ettiği finansal hesaplamalar için decimal
karşılaşabilirsiniz!”
türü son derece uygundur.
Gerçek kayan noktalı sayılar ve ondalık duyarlıklı gerçek sayılar arasındaki temel fark
hesaplamaların doğruluğu ve hangi kapsama kadar saklanan değerlerin yuvarlandığıdır.
double türü bize çok büyük değerler ve sıfıra çok yakın değerler ile çalışma olanağı
sağlar ama doğruluktan fedakarlık ederek ve bazı tatsız yuvarlama hatalarına da
göz yumarak. decimal türü daha küçük bir aralıkta çalışır ama hesaplamalarda daha
fazla doğruluk sağlar, bunun yanı sıra ondalık sayılar ile anomalilere rastlanmaz.
decimal türünde tüm hesaplamalar doğrudan daha düşük bir mikroişlemci
seviyesi yerine tamamen yazılım ile yapıldığı için bu tür için yapılan hesaplamalar
double türü ile yapılan aynı hesaplamalardan onlarca ve yüzlerce kat daha
yavaş çalışır, bu nedenle gerçekten gerekli olduğu zaman bu türü kullanınız.
Boole Türü
Boole türü bool anahtar sözcüğü ile bildirilir. İki olası değeri vardır: true ve false.
Varsayılan değeri false olur. En sık olarak mantıksal ifadelerin hesaplama sonucunu
depolamak için kullanılır.
www.nakov.com
Page 95 / 151
C# İle Bilgisayar Programlama Temelleri
Boole Türü – Örnek
Halen bildiğimiz türde birkaç değişkeni bildiren, bu değişkenlere ilk değer atayarak
başlatan, onları karşılaştıran ve sonucu konsola bastıran bir örnek aşağıda verilmiştir:
// Declare some variables
int a = 1;
int b = 2;
// Which one is greater?
bool greaterAB = (a > b);
// Is ‘a’ equal to 1?
bool equalA1 = (a == 1);
// Print the results on the console
if (greaterAB)
{
Console.WriteLine(“A > B”);
}
else
{
Console.WriteLine(“A <= B”);
}
Console.WriteLine(“greaterAB = “ + greaterAB);
Console.WriteLine(“equalA1 = “ + equalA1);
// Console output:
// A <= B
// greaterAB = False
// equalA1 = True
Yukarıdaki örnekte, int tipinde iki değişken bildiriyoruz, bunları karşılaştırıyoruz
ve bool türündeki greaterAB değişkenine sonucu atıyoruz. Benzer şekilde,
equalA1 değişkeni için de aynı şeyi yapıyoruz. Değişken greaterAB değeri true
ise, o zaman A > B konsola yazdırılıyor, aksi takdirde A <= B yazdırılıyor.
www.nakov.com
Page 96 / 151
C# İle Bilgisayar Programlama Temelleri
Character Türü
Karakter türü tek bir karakterdir (Bir Unicode tablosu karakterinin 16-bitlik sayısı).
C# dilinde char anahtar sözcüğü ile bildirilir. Unicode tablosu tüm insan dillerinden
herhangi bir karakteri (harf, noktalama, vb.) yazı sistemleri (tüm diller ve alfabeler)
olarak bir tamsayı veya tamsayı dizisi ile temsil eden teknolojik bir standarttır. Unicode
tablosu hakkında daha fazla bilgi “Dizeler ve Metin İşleme” Bölümü’nde bulunabilir.
char değişkeninin mümkün olan en küçük değeri 0 ve en büyük değeri 65535’dir.
char türünün değerleri harfler veya diğer karakterlerdir, ve kesme işareti içine alınır.
Character Türü – Örnek
char türünde bir değişkeni bildiren, bu değişkene ilk değer olarak önce
‘a’ atayarak başlatan, sonra ‘b’, ve daha sonra ‘A’ atayan ve konsola
bu harflerin Unicode değerlerini bastıran bir örnek aşağıda verilmiştir:
// Declare a variable
char ch = ‘a’;
// Print the results on the console
Console.WriteLine(
“The code of ‘” + ch + “’ is: “ + (int)ch);
ch = ‘b’;
Console.WriteLine(
“The code of ‘” + ch + “’ is: “ + (int)ch);
ch = ‘A’;
Console.WriteLine(
“The code of ‘” + ch + “’ is: “ + (int)ch);
//
//
//
//
Console output:
The code of ‘a’ is: 97
The code of ‘b’ is: 98
The code of ‘A’ is: 65
www.nakov.com
Page 97 / 151
C# İle Bilgisayar Programlama Temelleri
Dizeler
Dizeler karakter dizileridir. C# dilinde string anahtar sözcüğü ile bildirilir. Varsayılan
değeri null olur. Dizeler tırnak işareti içine alınır. Dizeleri kullanarak çeşitli metin işleme
işlemleri yapabilirsiniz: birleştirme (bir dizeyi başka bir dize ile birleştirme), belirli bir
ayırıcı ile ayırma, arama, karakterlerin değiştirilmesi ve diğerleri. Metin işleme hakkında
daha fazla bilgi, bir dizenin ne olduğu, uygulamaları ve nasıl kullanabileceğiniz hakkında
ayrıntılı açıklama bulacağınız “Dizeler ve Metin İşleme” Bölümü’nde yer almaktadır.
Dizeler – Örnek
string türünde birkaç değişkeni bildiren, bu değişkenlere ilk değer atayarak
başlatan ve değerlerini konsola bastıran bir örnek aşağıda verilmiştir:
// Declare some variables
string firstName = “John”;
string lastName = “Smith”;
string fullName = firstName + “ “ + lastName;
// Print the results on the console
Console.WriteLine(“Hello, “ + firstName + “!”);
Console.WriteLine(“Your full name is “ + fullName + “.”);
// Console output:
// Hello, John!
// Your full name is John Smith.
Object Türü
Nesne türü .NET Framework içindeki diğer tüm türlerin atası olan özel bir türdür.
object anahtar sözcüğü ile bildirilir, ve herhangi bir başka türden değer alabilir. Bu bir
referans türüdür, yani gerçek değerin depolandığı bir bellek alanı indeksidir (adresidir).
Object Kullanımı – Örnek
object türünde birkaç değişkeni bildiren, bu değişkenlere ilk değer atayarak
başlatan ve değerlerini konsola bastıran bir örnek aşağıda verilmiştir:
www.nakov.com
Page 98 / 151
C# İle Bilgisayar Programlama Temelleri
// Declare some variables
object container1 = 5;
object container2 = “Five”;
// Print the results on the console
Console.WriteLine(“The value of container1 is: “ + container1);
Console.WriteLine(“The value of container2 is: “ + container2);
// Console output:
// The value of container1 is: 5
// The value of container2 is: Five.
Örnekte gördüğünüz gibi, object türü değişkeninde herhangi bir başka türden
değerler saklanabilir. Böylece object türü, evrensel veri kapsayıcı haline gelir.
Nullable Türler
Nullable türler değer türleri (int, double ve bool gibi) etrafında belirli bir sarıcıdır
ve null değere sahip bir veri depolama olanağı sunar. Bu genellikle değeri eksik
olan (yani, null değeri olan) verilere izin vermeyen türler için referans (başvuru)
türleri olarak kullanılmak üzere ve hem normal değerleri hem de özel null değerini
kabul etmek üzere fırsat sağlar. Böylece null türleri isteğe bağlı değer tutar.
Belirli
bir
türü
nullable
halinde
sarmalama
iki
şekilde
yapılabilir:
Nullable<int> i1 = null;
int? i2 = i1;
Her iki
bildirim de
eşdeğerdir. Bu
işlemi
gerçekleştirmek
için
en
kolay
yol türün sonuna
bir soru işareti (?) eklemektir,
örneğin,
int?,
Nullable<…>
sözdizimini
kullanmak
daha
zordur.
Nullable
türleri
referans türleridir,
yani onların gerçek değerini
içeren
dinamik
bellekte
bir nesneye
başvurudurlar.
Bir
değere
sahip
olabilir
yada
olmayabilirler
ve
normal
temel veri türleri olarak
aşağıdaki
örnekte gösterildiği bazı özellikleriyle
birlikte kullanılabilirler:
www.nakov.com
Page 99 / 151
C# İle Bilgisayar Programlama Temelleri
int i = 5;
int? ni = i;
Console.WriteLine(ni); // 5
// i = ni; // this will fail to compile
Console.WriteLine(ni.HasValue); // True
i = ni.Value;
Console.WriteLine(i); // 5
ni = null;
Console.WriteLine(ni.HasValue); // False
//i = ni.Value; // System.InvalidOperationException
i = ni.GetValueOrDefault();
Console.WriteLine(i); // 0
Yukarıdaki örnek nullable değişkeninin (int?) nasıl doğrudan bir değere sahip
olabileceğini gösteriyor, değer nullable-olmasa bile (int). Tersi doğrudan mümkün
değildir. Bu amaçla, nullable türlerinin Value özelliği kullanılabilir. Nullable türü
değişkeninin depolanan değerini döndürür veya program yürütme sırasında
değer eksik (null) ise bir hata (InvalidOperationException) üretir. Nullable türü
değişkeninin atanmış bir değere sahip olup olmadığını kontrol etmek amacıyla,
Boole türündeki HasValue özelliğini kullanabilirsiniz.
Başka bir yararlı yöntem
GetValueOrDefault() ‘dur. Nullable türü değişkeni bir değer taşıyorsa, bu yöntem onun
değerini dönecektir, aksi takdirde nullable türü için varsayılan değeri (sıklıkla 0)
dönecektir.
Nullable türleri zorunlu olmayan bilgileri depolamak için kullanılır. Örneğin,
bir öğrenci için veri saklamak istiyorsanız, adı ve soyadı zorunluysa
ve yaş gerekli değilse, yaş değişkeni için int? türünü kullanabiliriz:
string firstName = “John”;
string lastName = “Smith”;
int? age = null;
www.nakov.com
Page 100 / 151
C# İle Bilgisayar Programlama Temelleri
Değişkenlerin Özellikleri
Değişkenlerin özellikleri aşağıdakiler ile
karakterize edilir:
• isim (tanımlayıcı), örneğin yaş;
• tür (sakladığı bilginin), örneğin int;
• değer (depolanan bilgi), örneğin 25.
Değişken, belirli bir veri türünde değer
saklayan adlandırılmış bir bellek alanıdır
ve bu bellek alanına adıyla programda
erişilebilir. Değişkenler programın işlevini
sağlayan bellekte (yığın) doğrudan
saklanabilir veya daha büyük nesnelerin
(örneğin karakter dizeleri ve diziler gibi)
saklandığı dinamik bellekte depolanabilir.
Temel veri türlerine (sayılar, char, bool)
değer türleri denir çünkü onlar program
yığınında doğrudan kendi değerlerini depolarlar.
Referans veri türleri (örneğin dizeler, nesneler ve diziler gibi) dinamik bellekte
bunların değerinin saklandığı bir adrese işaret eder. Dinamik olarak onlara bellekte
yer ayrılabilir ve serbest bırakılabilir, yani boyutları değer türlerinin aksine önceden
sabit olarak belirli değildir.
Değer ve referans veri türleri hakkında daha fazla bilgi “Değer ve Referans Türleri”
Bölümü’nde bulunmaktadır.
www.nakov.com
Page 101 / 151
C# İle Bilgisayar Programlama Temelleri
Değişkenlerin Adlandırılması – Kurallar
Derleyiciden programımızda kullanılan bazı bilgiler için bellek alanı ayırmasını
istediğinizde bunun için bir ad sağlamanız gerekir. Bu ad abir tanımlayıcı gibi çalışır
ve ilgili bellek alanına işaret edilmesini sağlar.
Değişkenin adı seçtiğimiz herhangi bir ad olabilir, ancak C# dilinin spesifikasyonunda
belirlenmiş bazı kurallara uymanız gerekir:
Değişken adları a – z, A – Z harfleri, 0 – 9 rakamlarının yanı sıra ‘_’ karakterini
içerebilir.
-
Değişken adları rakam ile başlayamaz.
-
Değişken adları C# dilinin bir anahtar sözcüğü ile denk olamaz. Örneğin
base, char, default, int, object, this, null
ve
diğerleri
değişken
adları olarak kullanılamazlar.
-
C# anahtar sözcüklerinin listesi “Programlamaya Giriş” Bölümü’nün “Anahtar
Kelimeler” altbölümünden bulunabilir. Değişkene bir anahtar sözcük gibi
bir ad vermek isterseniz, ada bir önek ekleyebilirsiniz – “@”. Örneğin
char ve null geçersiz adlar olduğu halde, @char ve @null geçerli adlardır.
Değişkenlerin Adlandırılması – Öneriler
Değişkenleri nasıl adlandıracağınıza dair bazı öneriler sunacağız, çünkü
derleyici tarafından izin verilen adların tümü değişkenler için uygun değildir.
- Adlar
tanımlayıcı
olmalı
ve
değişkenin
ne
için
kullanıldığını
açıklaması gerekir. Örneğin, bir kişinin adını saklayan bir değişken
için uygun bir isim personName olup ve uygunsuz ad a37 olur.
- Sadece Latin harfleri kullanılmalıdır. Kiril harflerine derleyici tarafından
izin verilse de, bu değişkenleri veya program dahilinde kalan
tanımlayıcıları adlandırmada kullanmak için iyi bir uygulama değildir.
- C# için genellikle değişken adlarının küçük harfle başlaması ve küçük
harfleri içermesi gerektiği kabul edilir, ancak, her yeni sözcük büyük
www.nakov.com
Page 102 / 151
C# İle Bilgisayar Programlama Temelleri
harfle başlamalıdır. Örneğin, firstName adı firstname yada first_
name kullanmaktan daha doğru ve daha iyidir. Değişken adlarında _
karakterinin kullanımı kötü bir adlandırma tarzı olarak kabul edilir.
- Değişken adları ne çok uzun ne de çok kısa olmalıdır – onların sadece
kendi bağlamında değişken amacını açıklığa kavuşturması gerekir.
- Büyük
ve
küçük
harfler
C#
onları
ayırdığı
için
dikkatle
kullanılmalıdır.
Örneğin,
age
ve
Age
farklı
değişkenlerdir.
İşte iyi adlandırılmış değişkenlerden bazı örnekler:
-
-
-
-
firstName
age
startIndex
lastNegativeNumberIndex
Ve işte kötü adlandırılmış değişkenlerden bazı örnekler:
(Adlar C# derleyicisine göre doğru olmasına rağmen):
_firstName (_ karakteri ile başlıyor)
-
-
last_name (_ karakterini içeriyor)
-
AGE (büyük harflerle yazılmış)
-
Start_Index (büyük harfle başlıyor ve _ karakterini içeriyor)
lastNegativeNumber_Index (_ karakterini içeriyor)
-
-
a37 (ad açıklayıcı değildir ve değişkenin amacını açıkça anlatmıyor)
-
fullName23, fullName24, vb. (Kullanılan değişkenin netliğini geliştirmediği
sürece bir değişken adının rakam içermesi uygun değildir; eğer farklı bir sayı ile
biten benzer adlara sahip değişkenler olması gerekiyorsa, aynı veya benzer tür
veriyi depolamak için, tek bir koleksiyon veya dizi değişkeni oluşturmak ve onu
örneğin fullNamesList olarak adlandırmak daha uygun olabilir.
Değişkenler kısaca amacını açıklayan adlara sahip olmalıdır. Değişken uygunsuz bir
ad ile adlandırıldığı zaman, programın sonradan okunması ve değiştirilmesi çok
zor hale gelir (nasıl çalıştığını bir süre sonra unutmuş olduğumuzda). Değişkenlerin
doğru adlandırılması hakkında daha fazla açıklama için “Yüksek Kalite Programlama
Kodu” Bölümü’ne bakınız.
www.nakov.com
Page 103 / 151
C# İle Bilgisayar Programlama Temelleri
„Değişkenleri adlandırırken,
her zaman kısa ve kesin adlar
kullanmayı deneyin. Değişken
adı ne için kullanıldığını belirtmelidir kuralını izleyin, örneğin
ad şu soruyu cevaplamalıdır “bu
değişkende ne değer saklanır”. Bu
koşul yerine getirilmediği zaman
daha iyi bir ad bulmaya çalışın.
Rakamlar değişken adlarında
kullanılmak için uygun değildir.”
Değişkenlerin Bildirilmesi
Bir değişkeni bildirdiğinizde, aşağıdaki adımları gerçekleştirirsiniz:
-
-
-
değişkenin türünü belirtmek (int gibi);
adını belirtmek (age gibi bir tanımlayıcı);
isteğe bağlı olarak başlangıç ​​değerini belirtmek (örneğin 25 gibi), ancak bu
zorunlu değildir.
C# değişkenlerini bildirmek için sözdizimi aşağıdaki gibi şöyledir:
<veri
türü>
<tanımlayıcı>
[=
<başlangıç
değeri>];
Değişkenlerin bildirimine örnekler aşağıda verilmektedir:
string name;
int age;
www.nakov.com
Page 104 / 151
C# İle Bilgisayar Programlama Temelleri
Değer Atanması
Bir değişkene değer atanması, değişken içinde
saklanması gereken bir değeri sağlamakla yapılır. Bu
işlem “=” atama operatörü tarafından gerçekleştirilir.
Operatörün sol tarafına değişken adını ve sağ tarafına –
değişkenin yeni değerini koyarız.
Değişkenlere değerler atanmasına örnekler aşağıda
verilmektedir:
name = “John Smith”;
age = 25;
Değişkenlerin Başlatılması
Programlamada başlatma kelimesi bir başlangıç ​​değerini
belirtmek demektir. Değişkenlerin bildirilme anında onlara
değer atayarak onları gerçekte başlatmış oluyoruz.
Standart Değişken Değerleri
C# dilinde her veri türü varsayılan bir değere sahiptir
(buna varsayılan başlatma değeri denir), belirli bir
değişken için hiçbir değer açıkça atanmamış olduğunda
varsayılan başlatma değeri kullanılır.
Zaten alışmış olduğumuz türlerin varsayılan değerlerini
görmek için aşağıdaki tabloyu kullanabilirsiniz:
www.nakov.com
Page 105 / 151
C# İle Bilgisayar Programlama Temelleri
Veri Türü
Varsayılan Değer
Veri Türü
Varsayılan Değer
byte
0
double
0.0d
sbyte
0
float
0.0f
short
0
decimal
0.0m
Int
0
char
‘\u0000’
object
null
ushort
uint
0
0u
long
0L
ulong
0u
bool
string
false
null
Değişkenleri bildirmek, onları başlatmak ve onlara değer atamayı aşağıdaki örnek ile
özetleyelim:
// Declare and initialize some variables
byte centuries = 20;
ushort years = 2000;
decimal decimalPI = 3.141592653589793238m;
bool isEmpty = true;
char ch = ‘a’;
string firstName = “John”;
ch = (char)5;
char secondChar;
// Here we use an already initialized variable and reassign it
secondChar = ch;
www.nakov.com
Page 106 / 151
C# İle Bilgisayar Programlama Temelleri
Değer ve Referans Türleri
C# dilinde iki çeşit veri türü vardır: Değer ve referans.
Değer türleri program yürütme yığıtında saklanır ve doğrudan kendi değerini içerirler.
Değer türleri arasında temel sayısal türler, karakter türü ve Boole türü vardır: sbyte,
byte,
short,
ushort,
int,
long,
ulong,
float,
double,
decimal,
char,
bool.
Program onların değer kümesini tutan erişimden çıktığında onlar için ayrılan bellek
serbest bırakılır, yani tanımlandığı kod bloğu yürütmeyi tamamladığında. Örneğin
programın Main() yöntemi ile bildirilen erim içinde tanımlanan bir değişken, program
bu yöntemin yürütülmesini tamamlayıncaya kadar, yani sona erene kadar, yığıt içinde
saklanır, (yani program Main() metotunu tamamen yürüttükten sonra C# programı
sonlanıncaya kadar).
Referans türleri program yürütme yığıtında, bir başvuru (adresi) tutar, ve onların bu
referans noktaları dinamik bellekte (yığın) sakladıkları değeri işaret eder. Referans
bir göstericidir (bellek biriminin adresi) ve yığıttaki değerin gerçek konumunu
göstermektedir. Örnek olarak, yürütme yığıtındaki bir adreste depolanan değer
0x00AD4934 olarak verilebilir. Referansın bir türü vardır. Referans sadece aynı türden
nesnelere işaret edebilir, yani türe koşulsuz zorlanmıştır. Tüm referans türleri bir
null değeri tutabilir. Bunun anlamı “hiçbir değeri yok” olan özel bir hizmet değeridir.
Referans türlerinin yaratılması için dinamik bellekte yer ayrılır. Program tarafından
artık kullanılmayan bellek için (çöp toplayıcı) gibi bir bellek temizleyicisi, dinamik
belleğin bir kısmını serbest bırakır. Belirli bir referans değişkeninin çöp toplayıcısı
tarafından tam olarak ne zaman serbest bırakılacağı bilinmemektedir, çünkü bu bellek
yükü ve diğer faktörlere bağlıdır. Belleğin ayrılması ve serbest bırakma işlemi yavaş
olduğu için, referans türlerinin değer türlerine göre daha yavaş olduğu söylenebilir.
Referans veri türleri program yürütme sırasında dinamik olarak tahsis edilip
serbest bırakıldığı için boyutları önceden bilinmeyebilir. Örneğin, string türünde
bir değişkenin uzunluğu farklı metin verisi içerebilir. Gerçekte string değişkeni
www.nakov.com
Page 107 / 151
C# İle Bilgisayar Programlama Temelleri
metin değerinin adresini
depolarken, string metin
değeri dinamik bellekte
saklanır ve farklı bir boyutu
(bayt sayısını) kaplayabilir.
Referans
türleri,
tüm
sınıflar, diziler ve arayüzleri
içeren şu türlerden oluşur:
object,
string,
byte[].
Bu
kitabın
sonraki
bölümlerinde
sınıflar,
nesneler, dizeler, diziler ve
arayüzleri öğreneceksiniz.
Şimdilik,
değer
türü
olmayan
tüm
türlerin,
referans türü olduğunu
ve değerlerinin yığında
(dinamik olarak ayrılan
bellekte)
saklandığını
bilmek yeterlidir.
Değer ve Referans Türleri ve Bellek
Değişkenleri bildirmek, onları başlatmak ve onlara değer atamayı aşağıdaki örnek ile
özetleyelim:
int i = 42;
char ch = ‘A’;
bool result = true;
object obj = 42;
string str = “Hello”;
byte[] bytes = { 1, 2, 3 };
www.nakov.com
Page 108 / 151
C# İle Bilgisayar Programlama Temelleri
Bu noktada değişkenler bellekte aşağıdaki gibi yer almaktadır:
Şimdi değişkenlerin değerlerini değiştiren aşağıdaki kodu çalıştırırsak, değer ve
referans türlerinin değiştirilmesiyle bellekte neler olduğu görülecektir:
i = 0;
ch = ‘B’;
result = false;
obj = null;
str = “Bye”;
bytes[1] = 0;
Bu değişiklikler sonrasında, değişkenler ve değerleri bellekte aşağıdaki gibi bulunur:
www.nakov.com
Page 109 / 151
C# İle Bilgisayar Programlama Temelleri
Şekilden görebileceğiniz gibi, bir değer türüne
yapılan (i = 0) değişiklik, onun yığıt içindeki
değerini doğrudan değiştirir. Bir referans
türünün değiştirilmesiyle farklı şeyler olur:
Değer yığında (bytes[1] = 0) değiştirilir. Dizi
referansını tutan değişken ise değişmeden
(0x00190D11) kalır. Bir referans türüne
null değer atanmasıyla, bu referansın değişken değeri ile olan bağlantısı kesilir
ve değişken boş değerle (obj=null) kalır.
Bir nesneye (bir referans türü değişkenine) yeni bir değer atanmasıyla yığında
(dinamik bellekte) yeni nesneye bellek tahsis edilir, eski nesne serbest
(unreferenced) kalır. Referans yeni nesneye yönlendirilir, (str = “Bye”), eski nesne
(“Hello”) artık kullanımda olmadığı için çöp toplayıcı (otomatik bellek temizlemek
için .NET Framework iç sistemi) tarafından gelecek bir zamanda temizlenecektir.
www.nakov.com
Page 110 / 151
C# İle Bilgisayar Programlama Temelleri
Simgedeğerler
Daha önce değindiğimiz temel türler, C# diline yerleşik özel veri türleridir. Programın
kaynak kodunda belirtilen değerlerine simgedeğerler denir. Bir örnek konuyu daha
net yapacaktır:
bool result = true;
char capitalC = ‘C’;
byte b = 100;
short s = 20000;
int i = 300000;
Yukarıdaki örnekte, simgedeğerler, true, ‘C’, 100, 20000 ve 300000 olarak belirlenmiştir.
Onlar programın kaynak kodunda doğrudan ayarlanmış değişken değerleridir.
Değer ve Referans Türleri
C# dilinde, simgedeğerlerin çeşitli türleri vardır:
Gerçek Sayı Türlerinin Özel Değerleri
Boole Simgedeğeri
Boole simgedeğerleri aşağıdaki gibidir:
•
Boole
•
Integer
- true
•
Real
- false
•
Character
•
String
•
Object simgedeğeri null
www.nakov.com
bool türü bir değişkene bir değer
atadığınızda, sadece bu iki değerden
birini veya (true veya false olarak
hesaplanan)
bir
Boole
ifadesini
kullanabilirsiniz.
Page 111 / 151
C# İle Bilgisayar Programlama Temelleri
Boole Simgedeğerleri – Örnek
bool türü bir değişkenin bildirimi ve true Boole simgedeğerini temsil eden bir değer
atanmasına bir örnek aşağıda verilmiştir:
bool result = true;
Integer Simgedeğerleri
Tamsayı simgedeğerleri bir dizi basamaktan oluşur: bir (+, -) işareti, önek
ve sonekler. Önekleri
kullanarak onluk veya onaltılık sayı tabanı biçimindeki
tamsayıları
program
kaynak
kodunda
sunabiliriz.
“Sayısal
Sistemler”
bölümünde farklı sayı sistemleri hakkında daha fazla bilgiyi bulacaksınız.
Tamsayı
simgedeğerlerinde
aşağıdaki
önek
ve
sonekler
yer
alabilir:
- “0x” ve “OX” önekleri onaltılık değerleri gösterir, örneğin 0xA8F1 gibi;
- ‘l’
ve
‘L’
sonekleri
long
veri
türlerini
gösterir,
örneğin
357L
gibi;
- ‘u’ ve ‘U’ sonekleri uint ve ulong veri türlerini gösterir, örneğin 112u gibi.
Varsayılan olarak (sonek kullanılmazsa) tamsayı simgedeğerleri int türündedir.
Tamsayı Simgedeğerleri – Örnek
Tamsayı simgedeğerlerini kullanmaya bazı örnekler aşağıda verilmiştir:
// The following variables are initialized with the same value
int numberInDec = 16;
int numberInHex = 0x10;
// This will cause an error, because the value 234L is not int
int longInt = 234L;
www.nakov.com
Page 112 / 151
C# İle Bilgisayar Programlama Temelleri
Gerçek Sayı Simgedeğerleri
Gerçek simgedeğerleri bir dizi basamaktan oluşur: (+, -) işareti, sonekler ve
ondalık nokta karakteri. float, double ve decimal türlerindeki değerler için bunları
kullanıyoruz. Gerçek simgedeğerleri üssel formatta temsil edilebilir. Bunlar, aynı
zamanda aşağıdaki gösterimleri kullanır:
- ‘f’ ve ‘F’ sonekleri float veri türü anlamında;
- ‘d’ ve ‘D’ sonekleri double veri türü anlamında;
- ‘m’ ve ‘M’ sonekleri decimal veri türü anlamında;
- ‘e’ bir üssü belirtir, örneğin, “e-5” tamsayı kısmının 10-5 ile çarpıldığı anlamına
gelir.
Varsayılan olarak (hiçbir soneki yoksa), gerçek sayılar double türündedir.
Gerçek Sayı Simgedeğerleri – Örnekler
Tamsayı simgedeğerlerini kullanmaya bazı örnekler aşağıda verilmiştir:
// The following is the correct way of assigning a value:
float realNumber = 12.5f;
// This is the same value in exponential format:
realNumber = 1.25e+1f;
// The following causes an error, because 12.5 is double
float realNumber = 12.5;
Karakter Simgedeğerleri
Karakter simgedeğerleri kesme işareti (tek tırnak) içine alınmış tek karakterden
oluşur. char türündeki değerleri atamak için kullanılır. Bir karakter simgedeğeri
aşağıdakilerden biri olabilir:
www.nakov.com
Page 113 / 151
C# İle Bilgisayar Programlama Temelleri
- bir karakter, örneğin ‘A’;
- bir karakter kodu, örneğin ‘\u0065’;
- bir kaçma karakteri.
Kaçma Karakterleri
Bazen klavyede gösterilmeyen veya özel anlamlara sahip karakterler
ile çalışmamız gerekli olur, örneğin “yeni satır” karakteri gibi. Bu
karakterler
programın
kaynak
kodunda
doğrudan
temsil
edilemiyorlar,
ve bunları kullanmamız için şimdi tartışacağımız özel teknikler gerekir.
Kaçma karakterleri birer simgedeğerdir. Özel bir karakter dizisidir, kaynak kodunda
doğrudan yazılamayan bir karakteri tarif eder. Örnek olarak, “yeni satır” karakteri
verilebilir.
Kaynak
kodunda
doğrudan
temsil
edilemeyen
pek
çok
karakter
örneği vardır: çift ​​tırnak işareti, sekme, yeni satır, ters eğik çizgi
ve
diğerleri.
İşte
en
sık
kullanılan
kaçma
karakterlerinin
bazıları:
- \’ – tek tırnak
- \” – çift tırnak
- \\ – ters eğik çizgi
- \n – yeni satır
- \t – sekme (tab)
- \uXXXX – Unicode sayısına göre belirlenen karakter, örneğin \u03A7.
\ (ters eğik çizgi) karakteri de kaçma karakteridir, çünkü özel bir anlama veya
etkiye sahip ve kaynak kodunda doğrudan temsil edilemeyen karakterlerin
ekran (veya başka bir çıkış aygıtı) üzerinde görüntülenmesini sağlar.
www.nakov.com
Page 114 / 151
C# İle Bilgisayar Programlama Temelleri
Kaçma Karakterleri – Örnek
Karakter simgedeğerleri bazı örnekler aşağıda verilmiştir:
// An ordinary character
char character = ‘a’;
Console.WriteLine(character);
// Unicode character code in a hexadecimal format
character = ‘\u003A’;
Console.WriteLine(character);
// Assigning the single quotiation character (escaped as \’)
character = ‘\’’;
Console.WriteLine(character);
// Assigning the backslash character (escaped as \\)
character = ‘\\’;
Console.WriteLine(character);
//
//
//
//
//
Console output:
a
:
‘
\
Dize Simgedeğerleri
Dize simgedeğerleri string türündeki veriler için kullanılır. Çift tırnak içinde bir
karakter dizisidir.
char türü için yukarıda tartışılan bütün kaçma kuralları string simgedeğerleri için de
geçerlidir.
www.nakov.com
Page 115 / 151
C# İle Bilgisayar Programlama Temelleri
Dizeler alıntı dizeyi (kelimesi kelimesine dize) belirtecek şekilde @ karakteri tarafından
önekli olabilir. Alıntı dizelerde kaçma kuralları geçerli değildir, yani, \ karakteri kaçma
karakteri değildir ve \ anlamına gelir. Alıntı dizelerde sadece bir karakterin kaçması
gerekmektedir – “ karakteri (çift tırnak) ve tekrarlanma yoluyla kaçması sağlanır “”
(çift çift tırnak). Diğer tüm karakterlere, tam anlamıyla riayet edilir hatta yeni satır
karakterine bile. Alıntı dizeleri, genellikle dosya sistemi yollarının adlandırılması için
kullanılır.
Dize Simgedeğerleri – Örnek
string quotation = “\”Hello, Jude\”, he said.”;
Console.WriteLine(quotation);
string path = “C:\\Windows\\Notepad.exe”;
Console.WriteLine(path);
string verbatim = @”The \ is not escaped as \\.
I am at a new line.”;
Console.WriteLine(verbatim);
// Console output:
// “Hello, Jude”, he said.
// C:\Windows\Notepad.exe
// The \ is not escaped as \\.
// I am at a new line.
Dizeler hakkında daha fazlasını “Dizeler ve Metin İşleme” Bölümü’nde bulacaksınız.
Alıştırmalar
1. Aşağıdaki değerleri sbyte, byte, short, ushort, int, uint, long ve ulong
türlerinden en uygununa atamak için birkaç değişken bildirin: 52.130; -115;
4825932; 97; -10000; 20000; 224; 970.700.000; 112; -44; -1.000.000; 1990;
123456789123456789.
2. Aşağıdaki değerlerden hangileri float, double ve decimal türündeki değişkenlere
atanabilir? : 5; -5,01; 34,567839023; 12,345; 8923,1234857; 3456,09112487
5956542151256683467.
www.nakov.com
Page 116 / 151
C# İle Bilgisayar Programlama Temelleri
3. En azından 0,000001 doğruluğunda iki gerçek sayıyı karşılaştıran bir program
yazın.
4. Onaltılık formatta 256 değeri ile int türünde bir değişkeni başlatın (16’lık
tabandaki bir sayı sisteminde 256’nın karşılığı 100’dür).
5. char türünde bir değişken bildirin ve Unicode kodu 72 olan bir değere karakter
olarak atayın (72’nin onaltılık gösterimini bulmak için Windows hesap makinesini
kullanın).
6. bool türünde olan isMale değişkenini bildirin ve cinsiyetinize bağlı olarak ona bir
değer atayın.
7. “Merhaba” ve “Dünya” değerlerine atanmış olan string türünde iki değişken bildirin.
object türünde bir değişken bildirin. İki string değişkeninin bitiştirilmesiyle elde
değeri bu değişkene atayın (gerekirse boşluk ekleyin). object türündeki değişkeni
yazdırın.
8. string türünde iki değişken bildirin ve “Merhaba” ve “Dünya” değerlerini atayın.
İki string türündeki değişkenin bitiştirilmesiyle elde edilen değeri bir object
türü değişkenine atayın (ortadaki boşluk karakterini atlamadan). string türünde
üçüncü bir değişken bildirin ve object türünde tanımladığınız değişkenin değeri
ile başlatın (tür çevrimi kullanmanız gerekir).
9. string türünde iki değişken bildirin ve “Çift tırnakların “kullanımı” zorluklara
neden olmaktadır.” değerini atayın (dış tırnak işaretleri olmadan). Değişkenlerden
biri alıntı dize olsun ve diğeri olmasın.
10.“o” karakterini kullanarak bir kalp şeklini yazdıran bir program yazın.
11.Kenarları telif hakkı karakterinden “©” oluşan bir ikizkenar üçgenini konsola
yazdıran bir program yazın.
12.Pazarlama ile ilgili bir şirket, çalışanlarının veri kaydını tutmak istiyor. Her kayıt
aşağıdaki verilerle karakteristik olmalıdır : Ad, soyad, yaş, cinsiyet (‘m’ veya
‘f’) ve tekil çalışan sayısı (27,560,000 – 27,569,999). Uygun veri türlerini ve
öznitelik adlarını kullanarak bir çalışanın bilgilerini korumak için gerekli uygun
değişkenleri bildirin.
13.int türünde iki değişken bildirin. Sırasıyla 5 ve 10 değerleri atayın. Değerleri
değiş-tokuş (takas) edin ve bunları yazdırın.
www.nakov.com
Page 117 / 151
C# İle Bilgisayar Programlama Temelleri
Bölüm 3: İşleçler ve İfadeler
Bölümün İçindekileri
B
u bölümde C# işleçlerini ve farklı veri türleri ile kullanıldığında gerçekleştirebilecekleri eylemleri tanıyacağız. Başlangıçta, hangi işleçlerin yüksek önceliğe sahip olduğunu açıklayacağız ve farklı işleç türlerini alabildikleri argüman sayısına ve gerçekleştirdikleri eylemlere göre analiz edeceğiz. İkinci bölümde ise,
veri türlerinin dönüşümünü inceleyeceğiz. Ne zaman ve neden gerekli olduklarını ve farklı veri türleri ile
nasıl çalışılacağını açıklayacağız. Bölümün sonunda, ifadeler ve onlarla nasıl çalışmamız gerektiğine özel
dikkat vereceğiz. Son olarak, bu bölümdeki bilgi materyalimizi güçlendirmek için alıştırmaları hazırladık.
İşleçler
Her programlama dili işleçleri kullanır, bunlar aracılığıyla veriler üzerinde farklı eylemleri
gerçekleştirebilirsiniz. C# işleçlerine bir göz atalım ve onların ne için ve nasıl kullanıldığını
görelim.
İşleç Nedir
C# İşleçleri
Önceki bölümde bir değişkenin nasıl
bildirileceğini ve değer atanacağını
öğrendikten sonra, onlar üzerinde çeşitli
işlemleri gerçekleştirmeyi tartışacağız. Bu
amaçla işleçler ile tanışacağız.
C# işleçleri farklı birkaç kategoriye
ayrılmıştır:
-
Aritmetik
işleçler
–
basit
matematiksel işlemleri gerçekleştirmek
için kullanılır.
-
Atama işleçleri – değişkenlere
değer atamaya izin verir.
-
Karşılaştırma işleçleri – iki karakter
ve/veya değişkenin karşılaştırılmasına
olanak verir.
-
Mantıksal işleçler – Boole veri
türleri ve Boole ifadeler ile çalışan işleçler.
-
İkili işleçler - sayısal verilerin ikili
gösterimi üzerinde işlem gerçekleştirmek
için kullanılır.
-
Türü dönüştürme işleçleri - bir
türden diğerine veri dönüşümünü sağlar.
İşleçler temel veri türlerini ve nesneleri
işlemeye izin verir. Girdi olarak bir veya
daha fazla işlenen alırlar ve sonuç olarak
bazı değer döndürürler. C# işleçleri özel
karakterlerdir (örneğin “+”, “.”, “^”,
vb.) ve bir, iki veya üç işlenen üzerinde
dönüşümler gerçekleştirirler. C# işleçlerine
örnekler, matematikteki ekleme çıkarma,
çarpma ve bölme işaretleridir (+, -, *, /)
ve onların tamsayılar ve gerçek sayılar
üzerinde gerçekleştirdikleri işlemlerdir.
www.nakov.com
Page 118 / 151
C# İle Bilgisayar Programlama Temelleri
İşleç Kategorileri
Aşağıda kategorilere ayrılmış işleçlerin bir listesi yer almaktadır:
Kategori
aritmetik
mantıksal
ikili
karşılaştırma
atama
dize bitiştirme
türü dönüştürme
diğerleri
-, +, *, /, %, ++, --
İşleçler
&&, ||, !, ^
&, |, ^, ~, <<, >>
==,!=, >, <, >=, <=
=, +=, -=, *=, /=, %=, &=, |=, ^=, <<=, >>=
+
(type), as, is, typeof, sizeof
0u
Argüman Sayısına Göre İşleç Türleri
İşleçler aldıkları argüman sayısına göre farklı türlere ayrılır:
İşleç türü
Argüman sayısı (işlenenler)
birli
bir işlenen alır
üçlü
üç işlenen alır
ikili
iki işlenen alır
C#’da ikili işleçlerin tümü sola-ilişkilendirilmiştir, yani atama işleçleri hariç ifadeler
soldan sağa hesaplanır. Tüm atama işleçleri ve koşullu işleçler ?: ve ?? sağailişkilendirilmiştir, yani ifadeler sağdan sola hesaplanır. Birli işleçler ilişkisel değildir.
C# işleçlerinden bazıları farklı veri türleri üzerinde farklı işlemleri gerçekleştirir.
Örneğin + işleci sayısal veri türleri (int, long, float, vb) üzerinde kullanıldığında, işleç
matematiksel toplama gerçekleştirir. Ancak, dizeler üzerinde kullanıldığında, işleç iki
değişken/simgedeğerin içeriğini bitiştirir (peş peşe ekler) ve yeni dizeyi döndürür.
www.nakov.com
Page 119 / 151
C# İle Bilgisayar Programlama Temelleri
İşleçler – Örnek
İşleçleri kullanmaya bir örnek aşağıda verilmiştir:
int a = 7 + 9;
Console.WriteLine(a); // 16
string firstName = “John”;
string lastName = “Doe”;
// Do not forget the space between them
string fullName = firstName + “ “ + lastName;
Console.WriteLine(fullName); // John Doe
Örnek
yukarıda
açıklandığı
gibi,
nasıl
+
işlecinin
sayılar
üzerinde
kullanıldığı zaman sayısal bir değer döndürdüğünü ve dizeler üzerinde
kullanıldığında peş peşe bitiştirilen dizeyi döndürdüğünü göstermektedir.
C# İşleç Önceliği
Bazı işleçler diğerleri üzerinde önceliğe sahiptir. Örneğin, matematikte çarpma
toplamanın
üzerinde
önceliğe
sahiptir. Daha yüksek bir önceliğe
sahip işleçler daha düşük olanlardan
önce
hesaplanmaktadır.
()
operatörü
önceliği
değiştirmek
için
kullanılır
ve
matematikte
olduğu gibi ilk önce hesaplanır.
Aşağıdaki tablo, C# işleçlerinin
önceliğini göstermektedir:
www.nakov.com
Page 120 / 151
C# İle Bilgisayar Programlama Temelleri
Öncelik
En yüksek öncelik
...
(,)
İşleçler
++, -- (arttakı), new, (type), typeof, sizeof
++, -- (öntakı), +, -(birli), !, ~
*, /, %
+ (dize bitiştirme)
+, <<, >>
<, >, <=, >=, is, as
==, !=
&, ^, |
&&
||
?:, ??
En düşük öncelik
=, *=, /=, %=, +=, -=, <<=, >>=, &=, ^=, |=
Tablonun üst satırlarında bulunan işleçler, alt satırlarda bulunan işleçlerden daha
yüksek önceliğe sahiptir ve dolayısıyla bir ifadenin hesaplanmasında bunların sırasıyla
avantajı vardır. Bir işlecin önceliğini değiştirmek üzere parantez kullanabilirsiniz.
Daha karmaşık ifadeleri yazarken yada birçok işleç varsa kodun okunabilirliği ve
anlaşılabilirliğindeki güçlükleri önlemek için parantez kullanılması tavsiye edilir.
Örneğin,
// Ambiguous
x + y / 100
// Unambiguous, recommended
x + (y / 100)
www.nakov.com
Page 121 / 151
C# İle Bilgisayar Programlama Temelleri
Aritmetik İşleçler
C# aritmetik işleçleri +, -, * matematikte olanlar gibi aynıdır. Sayısal değerler
üzerinde toplama, çıkarma ve çarpma
işlemini yaparlar ve sonucu da sayısal
bir değerdir.
Bölme işleci / tamsayı ve gerçek
sayılar üzerinde farklı bir etkiye
sahiptir. Bir tamsayıyı bir tamsayı
ile böldüğünüzde (int, long ve sbyte
gibi), döndürülen değer bir tamsayıdır
(yuvarlama yoktur, kesirli kısım atılır).
Böyle bölünmeye tamsayı bölünmesi
denir. Tamsayı bölünmesine örnek: 7 / 3 = 2.
Tamsayı bölünmesinde 0 ile bölmeye izin verilmez ve bir çalışma zamanı istisnai
durumuna DivideByZeroException neden olur. Tamsayı bölümünün kalanı % işleci ile
elde edilebilir. Örneğin, 7 % 3 = 1, ve –10 % 2 = 0.
İki gerçek sayıyı veya biri gerçek olan iki sayıyı böldüğünüzde (örneğin float, double,
vb), bir gerçek sayı bölünmesi yapıyorsunuz (tamsayı değil) ve sonuç, bir tamsayı ve
bir kesir kısmıdır. Örneğin: 5,0 / 2 = 2,5. Gerçek sayı bölünmesinde 0,0 ile bölmeye
izin verilir ve sırasıyla sonuç +∞ (Sonsuz), -∞ (-Sonsuz) veya NaN (geçersiz değer)
olur.
Artım işleci ++ değişkenin değerine bir birim ekler, benzer şekilde azalım işleci -değerden bir birim çıkarır. Öntakı olarak ++ ve -- işleçlerini kullandığınızda, (hemen
değişkenden önce onları yerleştirdiğinizde), önce yeni değer hesaplanır ve daha sonra
sonuç geri gönderilir. Aynı işleçleri arttakı olarak kullandığınızda, (değişkenden hemen
sonra onları yerleştirdiğinizde), ilk olarak işlenen özgün değer döndürülür, daha sonra
toplama veya çıkarma yapılır.
www.nakov.com
Page 122 / 151
C# İle Bilgisayar Programlama Temelleri
Aritmetik İşleçler - Örnek
Aritmetik işleçler ve etkilerine bazı örnekler şunlardır:
int squarePerimeter = 17;
double squareSide = squarePerimeter / 4.0;
double squareArea = squareSide * squareSide;
Console.WriteLine(squareSide); // 4.25
Console.WriteLine(squareArea); // 18.0625
int a = 5;
int b = 4;
Console.WriteLine(a + b);
// 9
Console.WriteLine(a + (b++)); // 9
Console.WriteLine(a + b);
// 10
Console.WriteLine(a + (++b)); // 11
Console.WriteLine(a + b);
// 11
Console.WriteLine(14 / a);
// 2
Console.WriteLine(14 % a);
// 4
int one = 1;
int zero = 0;
// Console.WriteLine(one / zero); // DivideByZeroException
double dMinusOne = -1.0;
double dZero = 0.0;
Console.WriteLine(dMinusOne / zero); // -Infinity
Console.WriteLine(one / dZero); // Infinity
Mantıksal İşleçler
Mantıksal (Boole) işleçleri Boole değerleri alır ve (true veya false) bir Boole sonucu
döndürür. Temel Boole işleçleri “AND” (&&), “OR” (||), “exclusive OR” (^) ve mantıksal
olumsuzlamadır (!).
www.nakov.com
Page 123 / 151
C# İle Bilgisayar Programlama Temelleri
Aritmetik işleçler ve etkilerine bazı örnekler şunlardır:
x
true
y
x &&y
false
false
true
false
true
false
true
true
true
false
false
false
false
!x
x || y
x^y
true
true
false
false
true
true
true
false
true
false
Tablo ve aşağıdaki örnek mantıksal “AND”
(&&) işlecinin ancak her iki değişken de
doğru olduğu zaman true döndürdüğünü
göstermektedir. Mantıksal “OR” (||)
işleci en az bir değişken doğru olduğu
zaman
true
döndürür.
Mantıksal
olumsuzlama operatörü (!) argümanın
değerini değiştirir. Örneğin işlenenin
true değeri varsa ve bir olumsuzlama
operatörü uygulanırsa, yeni değer false
olacaktır. Olumsuzlama birli işleçtir
ve argümandan önce yerleştirilir. İki
işlenenden sadece birinin true değeri
varsa Exclusive “OR” (^) true döndürür.
İki işlenenin farklı değerleri varsa onlar
aynı değerleri varsa, Exclusive “OR” true
sonuç dönecek, aynı değerleri varsa
false dönecektir.
Mantıksal İşleçler - Örnek
Aşağıdaki örnek mantıksal işleçlerin
kullanımını
ve
bunların
etkilerini
gösteriyor:
www.nakov.com
Page 124 / 151
C# İle Bilgisayar Programlama Temelleri
bool a = true;
bool b = false;
Console.WriteLine(a && b);
// False
Console.WriteLine(a || b);
// True
Console.WriteLine(!b);
// True
Console.WriteLine(b || true);
// True
Console.WriteLine((5 > 7) ^ (a == b)); // False
De Morgan Kuralları
Mantıksal işlemler matematiksel mantığın kapsamı içerisindeki De Morgan kurallarının
altında toplanır.
!(a && b) == (!a || !b)
!(a || b) == (!a && !b)
Birinci kural, iki önermenin birletiminin (mantıksal AND) olumsuzlanmasının, onların
olumsuzlamalarının ayırtımına eşit olduğunu ifade eder.
İkinci kural, her iki önermenin ayırtımının
olumsuzlanmasının,
olumsuzlamalarının birletimine eşit olduğunu ifade eder.
onların
Dizileri Bitiştirmek İçin İşleçler
+ işleci dizeleri (string) birleştirmek için kullanılır. İki veya daha fazla dizeyi birleştirir
(peş peşe ekler) ve yeni bir dizge olarak sonuç döndürür. İfadedeki argümanlardan
en az biri string türünde ise ve işlenenlerden bazıları string türünde değilse, başarılı
olarak dize birleştirmeye izin vermesi için otomatik olarak string türüne dönüştürülür.
.NET çalışma zamanı anında bizim için böyle işlem uyumsuzluklarının nasıl işlendiğini
düşünmek fantastiktir, bu bize kodlamada biraz zaman tasarrufu ve programlama
görevinin ana hedeflerine odaklanmamızı sağlar! Ancak, bir işlemi uygulamak
istediğinizde değişkenlerin türünü dönüştürmeye zorlamayı (cast) gözden kaçırmamak
iyi bir uygulamadır, gözden kaçırmak yerine, her işlem için uygun türe dönüştürülmüş
olmalıdır ki böylece sonuç tam olarak kontrolümüzde olsun ve varsayılan tür
dönüşümlerini önlemiş olalım. İşlemlerin türünü dönüştürmek hakkında daha detaylı
bilgi bu bölümün ilerisinde “Tür Dönüşümleri” başlıklı bölümde verilecektir.
www.nakov.com
Page 125 / 151
C# İle Bilgisayar Programlama Temelleri
Dizileri Bitiştirmek İçin İşleçler – Örnek
İki dizeyi ve bir dizi ile bir dizeyi birleştirmeyi gösteren bir örnek aşağıda verilmiştir:
string csharp = “C#”;
string dotnet = “.NET”;
string csharpDotNet = csharp + dotnet;
Console.WriteLine(csharpDotNet); // C#.NET
string csharpDotNet4 = csharpDotNet + “ “ + 5;
Console.WriteLine(csharpDotNet4); // C#.NET 5
Örnekte string türünde iki değişkeni
başlatıyoruz ve onlara değer atıyoruz.
Üçüncü ve dördüncü satırda biz hem
dizeleri bitiştirmek ve sonucu konsolda
yazdırmak
için
Console.WriteLine()
yöntemine geçiriyoruz. Sonraki satırda
sonuç dizesini bir boşluk karakteri ve 5
sayısı ile bitiştiriyoruz. Döndürülen değeri
csharpDotNet5 değişkenine atıyoruz, bu
değişkenin türü otomatik olarak string
türüne dönüştürülecektir. Son satırda
sonucu yazdırıyoruz.
„Dizeleri birleştirme (peş peşe ekleme, yapıştırma) yavaş bir işlemdir
ve dikkatle kullanılmalıdır. Dizeler
üzerinde yapılan döngülü (tekrarlayan) işlemler için StringBuilder
sınıfını kullanmanız tavsiye edilir.”
“Strings” Bölümü’nde bir döngü içinde dizeleri birleştirme işlemleri için neden
StringBuilder sınıfının kullanılması gerektiğini ayrıntısıyla anlatacağız.
www.nakov.com
Page 126 / 151
C# İle Bilgisayar Programlama Temelleri
Bitsel İşleçler
Bir bitsel işleç sayısal türlerin ikili gösterimi üzerinde işlem yapan işleçtir.
Bilgisayarlardaki tüm veriler ve özellikle sayısal veriler birler ve sıfırların bir dizisi
olarak temsil edilir. İkili rakam sistemi bu amaç için kullanılır. Örneğin, 55 sayısı ikili
rakam sisteminde 00110111 olarak temsil edilir.
Verilerin ikili gösterimi uygundur,
çünkü elektronikte sıfır ve bir Boole
devreleri tarafından gerçekleştirilebilir,
burada sıfır “elektrik yok” olarak yada
örneğin –5V gerilim ile temsil edilir ve
bir “elektrik var” ile yada örneğin + 5V
gerilim ile temsil edilir.
İkili rakam sistemini derinlemesine
“Sayısal
Sistemler”
Bölümü’nde
inceleyeceğiz,
ancak
şimdilik
bilgisayarlarda sayıların birler ve
sıfırlar olarak temsil edildiğini ve bitsel
işleçlerin onları analiz etmek ve sıfırları
tersine çevirerek bir ve birleri tersine
çevirererek sıfır olarak değiştirmek
için kullanıldığını düşünebiliriz.
Bitsel işleçler mantıksal işleçlere çok benzerdir. Aslında, mantıksal ve bitsel işleçlerin
aynı şeyi, ancak farklı veri türlerini kullanarak gerçekleştirdiklerini düşünebiliriz.
Mantıksal işleçler, true ve false (Boole değerler) değerler ile çalışırlar, bitsel işleçler
sayısal değerler ile çalışır ve bunların ikili temsili üzerinden bit düzeyinde uygulanır,
yani bunlar sayıların bitleri (0 ve 1 basamaklarından oluşan) ile çalışır. C# mantıksal
işleçleri gibi bitsel işleçler arasında “AND” (&), bitsel “OR” (|), bitsel olumsuzlama (~),
ve excluding “OR” (^) vardır.
www.nakov.com
Page 127 / 151
C# İle Bilgisayar Programlama Temelleri
Bitsel İşleçler ve Performansları
0 ve 1 ikili basamakları üzerinde bitsel işleçlerin performansı aşağıdaki tabloda
gösterilmektedir:
x
y
-x
x&y
x|y
x^y
0
0
0
1
1
1
1
0
1
1
0
0
0
1
1
1
0
0
1
1
0
0
1
0
Gördüğünüz gibi, bitsel ve mantıksal işleçler birbirine çok benziyor. “AND” ve “OR”
yazımları açısından aralarındaki fark mantıksal işleçlerin çift işaret (&&) ve çift dikey
çubuk (||) ile yazılması, ve bitsel işleçlerin tek bir & simgesi veya dikey çubuk (|)
ile yazılmasıdır. Exclusive “OR” için bitsel ve mantıksal işleçler aynıdır “^”. Mantıksal
olumsuzlama için kullandığımız “!”, bitsel olumsuzlamada (evirme) “~” operatörünü
kullanır.
Programlama için mantıksal operatörlerde hiçbir benzeri olmayan iki bitsel işleç vardır.
Bunlar sola bit kaydırma (<<) ve sağa bit kaydırma (>>) olarak tanımlıdır. Sayısal
değerler üzerinde kullanılan bu işleçler sola veya sağa tüm bit değerlerini taşırlar.
Sayının dışında kalan bitler kaybolur ve 0 ile yer değiştirir.
Bit kaydırma işleçleri şu şekilde kullanılır: İşlecin sol tarafında işlecin kullanmak
istediği değişkeni (işlenen) yerleştiririz, sağ tarafta kaç bit ofset istediğimizi belirten
bir sayısal değeri koyarız. Örneğin, 3 << 2 üç sayısının bitlerini iki kez sola taşımak
istediğiniz anlamına gelir. 3 sayısının bitleri şöyledir: “0000 0011”. İki kez sola hareket
ettirildiğinde, ikili değer şöyle görünecektir: “0000 1100”, ve bu bitlerin dizilimi
12 sayısı olacaktır. Örneğe baktığımızda aslında sayıyı 4 ile çarpmış olduğumuzu
görebilirsiniz. Bit kaydırmanın kendisi 2’nin bir üssü tarafından çarpma (sola kaydırma)
veya bölme (sağa kaydırma) olarak temsil edilebilir. Bu olayın nedeni ikili rakam
sisteminin doğasından kaynaklanmaktadır. Sağa hareket ettirmeye örnek 6 >> 2 ile
verilirse, bu “0000 0110” ikili sayısını iki pozisyon sağa kaydırmak anlamına gelir.
Burada en sağdaki iki basamağı kaybederiz ve sol tarafı sıfır ile besleriz. Sonuç “0000
0001”, yani 1 olacaktır.
www.nakov.com
Page 128 / 151
C# İle Bilgisayar Programlama Temelleri
Bitsel İşleçler – Örnek
Bitsel işleçlerin kullanımına bir örnek aşağıda verilmiştir. Sayıların ikili gösterimi ve
bitsel işleçlerin sonuçları yorumlar (yeşil metin) halinde gösterilmiştir:
byte a = 3;
byte b = 5;
// 0000 0011 = 3
// 0000 0101 = 5
Console.WriteLine(a | b); // 0000 0111 = 7
Console.WriteLine(a & b); // 0000 0001 = 1
Console.WriteLine(a ^ b); // 0000 0110 = 6
Console.WriteLine(~a & b); // 0000 0100 = 4
Console.WriteLine(a << 1); // 0000 0110 = 6
Console.WriteLine(a << 2); // 0000 1100 = 12
Console.WriteLine(a >> 1); // 0000 0001 = 1
Örneğimizde a ve b değişkenlerini oluşturuyoruz ve ilk değerleri ile başlatıyoruz.
Sonra iki değişken üzerinde bazı bitsel işlemlerin sonuçlarını konsola yazdırıyoruz.
Uyguladığımız ilk işlem olan “OR” örneği a ve b değişkenlerinin ikili gösterimi içinde 1
olan tüm pozisyonlar için, sonuçta da aynı pozisyonda 1 olduğunu gösteriyor. İkinci
işlem “AND” olmuştur. İşlemin sonucunda sadece en sağ bit 1 içeriyor, çünkü a ve b
değerlerinin aynı anda 1 olduğu tek pozisyon en sağ bitleridir. Exclusive “OR” sadece a
ve b ikili bitlerinin farklı değerlere sahip olduğu pozisyonlarda 1 döndürür. Son olarak,
mantıksal olumsuzlama ve bit kaydırma: sola ve sağa gösterilmektedir.
Karşılaştırma İşleçleri
C# karşılaştırma işleçleri iki yada daha fazla işleneni karşılaştırmak için kullanılır. C#
dili tarafından desteklenen karşılaştırma işleçleri şunlardır:
-
-
-
-
-
-
www.nakov.com
daha büyük (>)
daha küçük (<)
daha büyük yada eşit (>=)
daha küçük yada eşit (<=)
eşitlik (==)
farklılık (!=)
Page 129 / 151
C# İle Bilgisayar Programlama Temelleri
C# karşılaştırma işleçlerinin tümü ikilidir (iki işlenen alır) ve döndürdükleri sonuç bir
Boole değeridir (true veya false). Karşılaştırma işleçleri aritmetik işleçlerden daha
düşük önceliğe sahiptir, ancak atama işleçlerinden daha yüksek önceliğe sahiptir.
Karşılaştırma İşleçleri – Örnek
C# karşılaştırma operatörlerinin kullanımını gösteren bir örnek aşağıda verilmiştir:
int x = 10, y = 5;
Console.WriteLine(“x
Console.WriteLine(“x
Console.WriteLine(“x
Console.WriteLine(“x
Console.WriteLine(“x
Console.WriteLine(“x
> y : “ + (x > y)); // True
< y : “ + (x < y)); // False
>= y : “ + (x >= y)); // True
<= y : “ + (x <= y)); // False
== y : “ + (x == y)); // False
!= y : “ + (x != y)); // True
Örnekte, ilk olarak x ve y değişkenlerini oluşturuyoruz ve bunlara sırasıyla 10 ve
5 değerlerini atıyoruz. Sonraki satırda Console.WriteLine(...) metotunu kullanarak x
ve y değişkenlerinin > işlecinin kullanılmasıyla karşılaştırılmasının sonucunu konsola
yazdırıyoruz. x değişkeni, y değişkeninden daha büyük bir değere sahip olduğundan
döndürülen değer true olur. Benzer şekilde, x ve y değişkenlerini karşılaştırmak
için kullanılan diğer 5 karşılaştırma işlecinden gelen sonuçlar, sonraki satırlarda
yazdırılmaktadır.
Atama İşleçleri
Bir değişkene değer atamak için kullanılan işleç “=” olarak tanımlıdır (matematiksel
denklem karakter). Bir değer atamak için kullanılan sözdizimi aşağıdaki gibidir:
işlenen1
www.nakov.com
=
simgedeğer,
ifade
veya
işlenen2;
Page 130 / 151
C# İle Bilgisayar Programlama Temelleri
Atama İşleçleri – Örnek
Atama işlecinin kullanımını gösteren bir örnek aşağıda verilmiştir:
int x = 6;
string helloString = “Hello string.”;
int y = x;
Örnekte x değişkenine 6 değerini atıyoruz. İkinci satırda helloString değişkenine bir
metin simgedeğeri atıyoruz ve üçüncü satırda biz y değişkenine x değişken değerini
kopyalıyoruz.
Peşpeşe Atama
Atama işlemi kademeli olarak kullanılabilir (aynı ifadede bir defadan fazla). Bu
durumda, atamalar, sağdan sola doğru arka arkaya gerçekleştirilmektedir. İşte bir
örnek:
int x, y, z;
x = y = z = 25;
Örnekte ilk satırda üç değişkeni başlatıyoruz ve
ikinci satırda onlara 25 değerini atıyoruz.
www.nakov.com
„C# dilinde tanımlı atama operatörü, “=” iken
karşılaştırma operatörü “==” dir. İki işleci
değiştirerek kullanmak kod
yazma sırasında yapılabilen
yaygın bir hatadır. Birbirine çok benzer olan
karşılaştırma işlecini ve atama işlecini karıştırmamak
için dikkatli olun.”
Page 131 / 151
C# İle Bilgisayar Programlama Temelleri
Bileşik Atama İşleçleri
Atama işleci dışında bileşik atama işleçleri de vardır. Bunlar hem işlem ve hem de
atamayı birlikte gerçekleştirecek bir işleç ile kod miktarını azaltmaya yardımcı olurlar.
Bileşik operatörler için aşağıdaki sözdizimi vardır:
işlenen1 işleç = işlenen2;
Üstteki ifade aşağıdaki gibidir:
işlenen1 = işlenen1 işleç işlenen2;
Atama yapan bir bileşik işleç örneği aşağıda verilmiştir:
int x = 2;
int y = 4;
x *= y; // Same as x = x * y;
Console.WriteLine(x); // 8
En yaygın olarak kullanılan bileşik atama operatörleri += vardır (işlenen2 değerini
işlenen1 değerine ekler), –= (sol işlenenin değerinden sağ işlenen değerini çıkarır).
Diğer bileşik atama operatörleri *=, /= ve %= olarak tanımlıdır.
Aşağıdaki örnek bileşik atama işleçlerinin nasıl çalıştığı hakkında iyi bir fikir verir:
int x = 6;
int y = 4;
Console.WriteLine(y *= 2); // 8
int z = y = 3;
// y=3 and z=3
Console.WriteLine(z);
// 3
Console.WriteLine(x |= 1); // 7
Console.WriteLine(x += 3); // 10
Console.WriteLine(x /= 2); // 5
www.nakov.com
Page 132 / 151
C# İle Bilgisayar Programlama Temelleri
Örnekte, öncelikle x ve y değişkenlerini oluşturuyoruz ve bunlara sırasıyla 6 ve 4
değerlerini atıyoruz. Sonraki satırda konsola y değişkeni üzerinde *= işleci ve 2
simgedeğeri ile uygulanan işlem sonucunda elde edilen yeni değeri yazdırıyoruz.
İşlemin sonucu 8 ‘dir. Örneğin kalan kısımlarında diğer bileşik atama işleçlerini
uyguluyoruz ve konsola sonuçlarını yazdırıyoruz.
Koşullu İşleç ?:
Koşullu işleç ?: iki ifadeden hangisinin hesaplanması ve sonuç olarak döndürülmesi
gerektiğini belirlemek için bir ifadenin Boole değerini kullanır. Operatör üç işlenen
üzerinden çalışır, bu nedenle üçlü işleçtir. Birinci ve ikinci işlenen arasına “?” karakteri
yerleştirilir, ve ikinci ve üçüncü işlenen arasına “:” yerleştirilir. İlk işlenen (veya ifade)
Boole olmalıdır ve sonraki iki işlenenin aynı türde olması gerekir, sayılar veya dizeleri
gibi.
?: işlecinin sözdizimi aşağıdaki gibidir:
işlenen1 ? işlenen2 : işlenen3
Şöyle çalışır: işlenen1 true olarak ayarlandıysa, işlecin sonucu işlenen2 değerini
döndürür. Aksi halde (işlenen1 false olarak ayarlanmış ise), işlecin sonucu işlenen3
değerini döndürür.
Çalışma sırasında, ilk argümanın değeri hesaplanır. true değeri varsa, o zaman ikinci
(orta) argüman hesaplanır ve sonuç değeri olarak döndürülür. Ancak, ilk argümanın
hesaplanan sonucu false ise, o zaman üçüncü (son) argüman hesaplanır ve sonuç
değeri olarak döndürülür.
Koşullu İşleç “?:” – Örnek
Atama işlecinin kullanımını gösteren bir örnek aşağıda verilmiştir:
int a = 6;
int b = 4;
Console.WriteLine(a > b ? “a>b” : “b<=a”); // a>b
int num = a == b ? 1 : -1; // num will have value -1
www.nakov.com
Page 133 / 151
C# İle Bilgisayar Programlama Temelleri
Diğer İşleçler
Şimdiye kadar aritmetik, mantıksal, bitsel işleçleri, dizeleri bitiştirme işlecini ve ayrıca
koşullu işleci ?: inceledik. Bunların yanı sıra C# dilinde tanımlı kayda değer birkaç
diğer işleç daha vardır.
“.” İşleci
Erişim işleci “.” (nokta) bir sınıf veya nesne yöntemlerine ve veri alanlarına erişmek
için kullanılır. Nokta işlecinin kullanım örneği aşağıda verilmiştir:
Console.WriteLine(DateTime.Now); // Prints the date + time
[] Kare Köşeli Parantez İşleci
Köşeli parantez [] bir dizinin elemanlarına endeks yoluyla erişmek için kullanılır.
Dizinleyici olarak adlandırılır. Dizinleyiciler dize karakterlerine erişmek için de kullanılır.
Örnek:
int[] arr = { 1, 2, 3 };
Console.WriteLine(arr[0]); // 1
string str = “Hello”;
Console.WriteLine(str[1]); // e
() Parantez İşleci
Parantez () ifadelerin ve işleçlerin yürütme önceliğini geçersiz kılmak için kullanılır.
Parantezlerin nasıl çalıştığını daha önce görmüştük.
Türü Dönüştürme İşleci
Türü dönüştürme işleci (type) bir değişkeni bir türden başka bir türe dönüştürmek
için kullanılır. “Türü Dönüştürme” Bölümü’nde ayrıntılı olarak inceleyeceğiz.
“as” İşleci
Türü dönüştürmek için as işleci de aynı zamanda kullanılır, ancak geçersiz dönüşümler
istisnai durum değil, boş değer olan null döndürür.
www.nakov.com
Page 134 / 151
C# İle Bilgisayar Programlama Temelleri
“new” İşleci
Yeni nesneleri oluşturmak ve başlatmak için new işleci kullanılır. “Nesne Oluşturma ve
Kullanma” Bölümü’nde ayrıntılı olarak inceleyeceğiz.
“is” İşleci
Bir nesnenin verilen bir tür ile uyumlu olup olmadığını kontrol etmek için (nesnenin
türünü onaylamak için) is işleci kullanılır.
“??” İşleci
?? işleci koşullu işlece ?: benzerdir. Farkı iki işlenen arasına yerleştirilmiş olmasıdır ve
sadece değeri boş değilse sol işleneni döndürür, aksi takdirde sağ işleneni döndürür.
Örnek:
int? a = 5;
Console.WriteLine(a ?? -1); // 5
string name = null;
Console.WriteLine(name ?? “(no name)”); // (no name)
Diğer İşleçler – Örnekler
Açıkladığımız işleçleri gösteren bir örnek aşağıda verilmiştir:
int a = 6;
int b = 3;
Console.WriteLine(a + b / 2);
Console.WriteLine((a + b) / 2);
string s = “Beer”;
Console.WriteLine(s is string);
// 7
// 4
// True
string notNullString = s;
string nullString = null;
Console.WriteLine(nullString ?? “Unspecified”); // Unspecified
Console.WriteLine(notNullString ?? “Specified”); // Beer
www.nakov.com
Page 135 / 151
C# İle Bilgisayar Programlama Temelleri
Türü Dönüştürme ve Türe Zorlama
Genellikle, işleçler aynı veri türüne sahip argümanlar üzerinde çalışır. Ancak
C# dilinde tanımlı olan ve belirli bir amaç için en uygununu seçebileceğiniz
çok çeşitli veri türleri vardır. Farklı veri türündeki iki değişken üzerinde işlem
gerçekleştirmek için her iki değişkenin de aynı veri türüne dönüştürülmesi
gerekir. Türü dönüştürme (türe zorlama) açık ve örtük olarak yapılabilir.
Her C# ifadesinin bir türü vardır. Türü elde etmek için ifadenin yapısına ve türlerine,
değişkenlere ve kullanılan simgedeğerlere bakmak gerekir. Geçerli bağlam için uygun
olmayan bir türde ifade yazmak mümkündür. Bazı durumlarda bu bir derleme hatası
verecektir, fakat diğer durumlarda ifadenin türüne benzer veya ilgili bir tür elde
edilebilecektir. Bu durumda program türü dönüştürmeyi kapalı olarak gerçekleştirir.
T türünün S türüne spesifik dönüştürülmesinin bir sonucu olarak S türü programın
çalıştırılması sırasında T türünün bir ifadesi olarak davranış görür. Bazı durumlarda bu
dönüşüm bir doğrulama gerektirecektir. İşte bazı örnekler:
object türünden string türüne dönüşüm değerin gerçekten string türünün bir
örneği olduğunu sağlaması için yürütülme zamanında doğrulama gerektirir.
-
string türünden object türüne dönüşüm herhangi bir doğrulama gerektirmez.
string türü object türünün bir kalıtımı olduğu için bir hata veya veri kaybı riski olmadan
kendi temel sınıfına dönüştürülebilir. “Nesne Tabanlı Programlama İlkeleri” Bölümü’nde
kalıtımı ayrıntılarıyla inceleyeceğiz.
-
int türünden long türüne dönüşüm yürütülme sırasında doğrulama olmadan
yapılabilir, çünkü int türündeki değerler kümesi long türündeki değerler kümesinin bir
alt kümesi olduğu için veri kaybı riski yoktur.
-
double türünden long türüne dönüşüm 64-bit kayan noktalı değerden 64-bit
tamsayıya dönüşümü gerektirir. Değerine bağlı olarak, veri kaybı mümkündür ve bu nedenle, türleri açık bir şekilde dönüştürmek gereklidir.
-
C# dilinde tüm türler diğer tüm türlere dönüştürülemeyebilir, ancak bunlardan sadece
bazılarına dönüştürülebilir. Kolaylık sağlamak için, C# dilinin olası bazı dönüştürümlerini
kendi türlerine göre üç kategoride gruplayacağız:
-
örtük dönüştürme
-
açık dönüştürme
string türünden veya türüne dönüştürme
-
www.nakov.com
Page 136 / 151
C# İle Bilgisayar Programlama Temelleri
Türü Örtük Dönüştürme
Türü örtük (kapalı) dönüştürme sadece dönüşüm sırasında veri kaybı riski olmadığı
zamanlarda mümkündür, daha düşük bir aralığa sahip türden daha geniş bir aralık
türüne dönüştürme yaparken (örneğin int türünden long türüne). Örtük dönüştürme
yapmak için herhangi işleci kullanmak gerekli değildir ve dolayısıyla bu dönüşüme
örtülü denir. Örtük dönüştürme derleyici tarafından otomatik olarak yapılır daha
küçük aralığa sahip ile bir değişkene daha büyük aralıkta değer verdiğinizde yada
ifadenin farklı aralığa sahip birkaç türü varsa. Böyle bir durumda, dönüşüm en yüksek
aralıktaki tür içine uygulanır.
Türü Örtük Dönüştürme – Örnekler
Örtülü türü dönüştürmeye bir örnek aşağıda verilmiştir:
int myInt = 5;
Console.WriteLine(myInt); // 5
long myLong = myInt;
Console.WriteLine(myLong); // 5
Console.WriteLine(myLong + myInt); // 10
Örnekte int türünde bir değişken, myInt, oluşturuyoruz
ve 5 değerini atıyoruz. Bundan sonra long türünde bir
değişken, myLong, oluşturuyoruz ve myInt değişkeninde
bulunan değeri buna atıyoruz. mylong değişkeninde
depolanan değer otomatik int türünden long türüne
dönüştürülür. Son olarak, iki değişkenin toplamından
çıkan sonucu yazdırıyoruz. Değişkenler farklı türde
olduğu için otomatik olarak daha geniş bir aralıkta olan
türe dönüştürülür, yani long türüne ve konsolda yazdırılan
sonuç da yine long olur. Gerçekten de, Console.WriteLine()
yöntemi için verilen parametre long türündedir, ancak
yöntem içinde bu yeniden dönüştürülmüş olacak, bu kez
string türüne, böylece konsolda basılabilir. Bu dönüşüm
Long.ToString() yöntemi tarafından gerçekleştirilir.
www.nakov.com
Page 137 / 151
C# İle Bilgisayar Programlama Temelleri
Olması Mümkün Örtülü Dönüşümler – Örnekler
C# temel veri türleri üzerinde bazı olası örtülü dönüşümler şunlardır:
-
sbyte → short, int, long, float, double, decimal;
-
byte → short, ushort, int, uint, long, ulong, float, double, decimal;
-short → int, long, float, double, decimal;
-ushort → int, uint, long, ulong, float, double, decimal;
-char → ushort, int, uint, long, ulong, float, double, decimal (char karakter
türü olmasına rağmen bazı durumlarda bir sayı olarak kabul edilebilir ve sayısal
türde davranış gösterebilir, hatta sayısal ifadelere katılabilir);
-uint → long, ulong, float, double, decimal;
-int → long, float, double, decimal;
-long → float, double, decimal;
-ulong → float, double, decimal;
-
float → double.
Daha küçük bir aralıktaki türden daha büyük aralıktaki türe dönüştürme sırasında
hiçbir veri kaybı olmaz. Sayısal değer dönüştürüldükten sonra aynı kalır. Birkaç istisna
vardır. int türünden float (32-bit değerlere) türüne dönüştürdüğünüzde, aralarındaki
fark int bir tamsayının tüm bitlerini kullanırken float için kesirli bölümü temsil etmede
kullanılan bir bit parçasının olmasıdır. Dolayısıyla, int türünden float türüne dönüşüm
yapıldığında yuvarlama nedeniyle keskinlik kaybı mümkündür. Aynı şey 64-bitlik long
türünün 64-bit uzunluğunda bir double türüne dönüştürülmesi için de geçerlidir.
Türü Açıkça Dönüştürme
Veri kaybı olasılığı olduğunda açıkça tür dönüştürme
kullanılır. Kayan nokta türünü tamsayı türüne
dönüştürürken kesirli bölümünün kaldırılmasıyla gelen
veri kaybı her zaman vardır ve türü açıkça dönüştürmek
(örneğin, double türünden long türüne) zorunludur.
Böyle bir dönüşüm yapmak için veri dönüştürme (type)
işlecini kullanmak gereklidir. Aynı zamanda, daha
geniş bir aralıktaki türden daha dar bir aralıktaki türe
dönüştürürken de veri kaybı olabilir (double türünden
float türüne veya long türünden int türüne).
www.nakov.com
Page 138 / 151
C# İle Bilgisayar Programlama Temelleri
Türü Açıkça Dönüştürme – Örnek
Türü açıkça dönüştürmenin kullanımını ve bazı durumlarda oluşabilecek veri kaybını
gösteren bir örnek aşağıda verilmiştir:
double myDouble = 5.1d;
Console.WriteLine(myDouble); // 5.1
long myLong = (long)myDouble;
Console.WriteLine(myLong); // 5
myDouble = 5e9d; // 5 * 10^9
Console.WriteLine(myDouble); // 5000000000
int myInt = (int)myDouble;
Console.WriteLine(myInt); // -2147483648
Console.WriteLine(int.MinValue); // -2147483648
Örneğin birinci satırında myDouble değişkenine 5.1 değerini atıyoruz. (long) işlecini
kullanarak long türüne (açıkça) dönüştürdükten ve konsola myLong değişkenini
yazdırdıktan sonra değişkenin kesir kısmını kaybettiğini görüyoruz, çünkü long bir
tamsayıdır. Sonra çift duyarlıklı bir gerçek sayı
değişkeni olan myDouble için 5 milyar değeri atıyoruz.
Son olarak, (int) işleci tarafından myDouble değerini
int türüne dönüştürüyoruz ve myInt değişkenini
yazdırıyoruz. int.MinValue yazdırmışız gibi aynı
sonuç görünmektedir, çünkü myDouble değişkeni int
aralığından daha büyük bir değer içeriyor.
„Kapsam dışına çıkıldıktan sonra bir
değişkenin değerinin ne olacağını tahmin
etmek her zaman mümkün değildir! Bu
nedenle, yeterince büyük aralıktaki türleri
kullanın ve bir “küçük” türe geçiş yaparken
dikkatli olun.”
www.nakov.com
Page 139 / 151
C# İle Bilgisayar Programlama Temelleri
Türü Dönüştürme Sırasında Veri Kayıpları
Tür dönüşümü sırasında veri kaybı için bir örnek vereceğiz:
long myLong = long.MaxValue;
int myInt = (int)myLong;
Console.WriteLine(myLong); // 9223372036854775807
Console.WriteLine(myInt); // -1
Kasıtlı bir örtük dönüştürme durumunda türü dönüştürme operatörü de kullanılabilir.
Bu kod okunabilirliğine katkıda bulunarak hata şansını azaltır ve birçok programcı
tarafından iyi bir uygulama olarak kabul edilir.
Türü dönüştürmeye verilebilecek biraz daha fazla örnek aşağıda verilmiştir:
float heightInMeters = 1.74f; // Explicit conversion
double maxHeight = heightInMeters; // Implicit
double minHeight = (double)heightInMeters; // Explicit
float actualHeight = (float)maxHeight; // Explicit
float maxHeightFloat = maxHeight; // Compilation error!
Yukarıdaki örnekte son
satırda, derleme hatası
üretecek
bir
deyim
var,
çünkü
double
türünü
float
türüne
örtülü ve veri kaybına
neden
olabilecek
şekilde
dönüştürmek
için
çalışıyoruz.
C#
kesin
türlendirmeli
bir dil olduğu için bu
gibi değerlerin tahsis
edilmesine izin vermez.
www.nakov.com
Page 140 / 151
C# İle Bilgisayar Programlama Temelleri
Türe Zorlama Sırasında Taşma İstinasının Fırlatılması
Bazen büyük türden küçük türe geçiş sırasında türün taşmasıyla yanlış sonuç almak
yerine sorunun bildirimini almak uygundur. Tamsayı türlerinde taşmayı kontrol etmeyi
içeren bu anahtar sözcük checked ile tanımlıdır.
double d = 5e9d; // 5 * 10^9
Console.WriteLine(d); // 5000000000
int i = checked((int)d); // System.OverflowException
Console.WriteLine(i);
Yukarıdaki kod parçasının yürütülmesi sırasında OverflowException türünde bir istisnai
durum (yani, bir hata bildirimi) ortaya çıkar. İstisnalar ve bunları yakalayan ve
işleyen yöntemler hakkında daha fazla bilgiyi “İstisnai Durum İşleme” Bölümü’nde
bulabilirsiniz.
Olması Mümkün Açık Dönüşümler
C# sayısal türleri arasındaki açık dönüşümler aşağıda listelenen türler arasından
herhangi ikisi arasında mümkündür:
sbyte, byte, short, ushort, char, int, uint, long, ulong, float, double, decimal
Bu dönüşümler sırasında
sayı
boyutu
veya
hassasiyeti ile ilgili bilgiler
gibi
birtakım
veriler
kaybolmuş olabilir.
Dikkat ediniz ki, türe
zorlama
yoluyla
string
türüne
veya
türünden
dönüştürme
mümkün
değildir.
www.nakov.com
Page 141 / 151
C# İle Bilgisayar Programlama Temelleri
String Türüne Dönüştürme
Gerekirse
null değeri de dahil olmak üzere her türlü veriyi string türüne
dönüştürebilirsiniz. Bitiştirme işlecini (+) kullandığınızda argümanlardan en az biri
string türünde değilse dizelerin dönüşümü otomatik olarak yapılır. Bu durumda
argüman string türüne dönüştürülür ve işleç iki dizenin bitiştirilmiş halini temsil eden
yeni bir dize döndürür.
Farklı nesneleri string türüne dönüştürmek için başka bir yol da değişken veya değer
üzerinde ToString() metotunu çağırmaktır. Bu .NET Framework’ün tüm veri türleri için
geçerlidir. Hatta 3.ToString() çağırmak da C# dilinde tamamen geçerlidir ve sonuç “3”
dizesini dönecektir.
String Türüne Dönüştürme – Örnek
Farklı veri türlerini string türüne dönüştüren çeşitli örneklere göz atalım:
int a = 5;
int b = 7;
string sum = “Sum = “ + (a + b);
Console.WriteLine(sum);
String incorrect = “Sum = “ + a + b;
Console.WriteLine(incorrect);
Örnekten elde edilen sonuç aşağıdaki gibidir:
Sum = 12
Sum = 57
Perimeter = 24. Area = 35.
Sonuçlardan açıktır ki, bir sayıyı bir karakter dizesine bitiştirmek dizeyi izleyen sayının
metin gösterimini sonuçta döndürür. Dikkat ediniz ki, dizeleri bitiştirmek için kullanılan
“+”, sayıların toplanması işleminde hoş olmayan etkilere neden olabilir, çünkü
matematiksel toplama işleci “+” ile eşit önceliğe sahiptir. İşlemlerin öncelikleri parantez
içine koyarak değiştirilmediği sürece, her zaman soldan sağa doğru yürütüleceklerdir.
Dizeye ve dizeden dönüştürme hakkında daha fazla ayrıntıya “Konsol Giriş ve Çıkış”
Bölümü’nde bakacağız.
www.nakov.com
Page 142 / 151
C# İle Bilgisayar Programlama Temelleri
İfadeler
Programın çalışmasının çoğu ifadelerin hesaplamasında geçer. İfadeler bazı
türde (sayı, dize, nesne ya da başka türde) bir değere hesaplanan işleçler,
simgedeğişmezler ve değişkenlerden oluşur. İşte ifadelerin bazı örnekleri:
int r = (150-20) / 2 + 5;
// Expression for calculating the surface of the circle
double surface = Math.PI * r * r;
// Expression for calculating the perimeter of the circle
double perimeter = 2 * Math.PI * r;
Console.WriteLine(r);
Console.WriteLine(surface);
Console.WriteLine(perimeter);
Bu örnekte, üç ifade tanımlanmaktadır. İlk ifade bir dairenin yarıçapını
hesaplar. İkinci ifade bir dairenin alanını hesaplamaktadır, ve sonuncu
ifade çevresini bulur. Yukarıdaki program parçasının sonucu şöyledir:
70
15393.80400259
439.822971502571
İfadelerin Yan Etkileri
İfade hesaplanması yan etkiye sebep olabilir,
çünkü ifade gömülü atama
işleçlerini içerebilir, çağıran yöntemlerin artan veya azalan değerlerine
neden olabilir. Böyle bir yan etkinin bir örneği aşağıda verilmektedir:
int a = 5;
int b = ++a;
Console.WriteLine(a); // 6
Console.WriteLine(b); // 6
www.nakov.com
Page 143 / 151
C# İle Bilgisayar Programlama Temelleri
İfadeler, Veri Türleri ve İşleç Öncelikleri
İfadeleri yazarken, veri türü ve kullanılan işleçlerin davranışı dikkate alınmalıdır.
Buna önem vermemek beklenmedik sonuçlara yol açabilir. İşte bazı basit örnekler:
// First example
double d = 1 / 2;
Console.WriteLine(d); // 0, not 0.5
// Second example
double half = (double)1 / 2;
Console.WriteLine(half); // 0.5
İlk örnekte, bir ifade iki tamsayıyı bölüyor (1 ve 2 tamsayılarını) ve sonucu double
türünde bir değişkene atıyor. Sonuç, bazılarınız için beklenmedik olabilir, ancak
onlar bu durumda “/” işlecinin tamsayılar üzerinden çalıştığını ve sonucun kesirli
kısmın kesilmesi ile elde edilen bir tamsayı olduğu gerçeğini görmezden gelenlerdir.
İkinci örnek gösteriyor ki, sonuçta kesrin de göründüğü bir bölme yapmak
istiyorsanız, işlenenlerden en az birinin float veya double türüne dönüştürülmesi
gereklidir. Bu senaryoda bölüm sonucu artık tamsayı değildir ve sonuç doğrudur.
Sıfıra Bölme
Bir başka ilginç örnek de 0 ile bölünmedir. Programcıların çoğu 0 ile bölünmenin
geçersiz işlem olduğunu ve çalışma zamanında bir hataya (istisnai durum) neden
olacağını düşünür, ancak bu aslında sadece 0 ile tamsayı bölünmesi için doğrudur. 0
ile kesirsel bölme sonucunun Infinity veya NaN olduğunu gösteren bir örnek aşağıda
verilmiştir:
int num = 1;
double denum = 0; // The value is 0.0 (real number)
int zeroInt = (int) denum; // The value is 0 (integer number)
Console.WriteLine(num / denum); // Infinity
Console.WriteLine(denum / denum); // NaN
Console.WriteLine(zeroInt / zeroInt); // DivideByZeroException
www.nakov.com
Page 144 / 151
C# İle Bilgisayar Programlama Temelleri
Kodu Daha Anlaşılır Yapmak İçin Parantezlerin Kullanılması
İfadeler ile çalışırken işlemlerin öncelikleri hakkında en ufak bir şüphe olduğunda
parantez kullanmak önemlidir. Parantezlerin ne kadar yararlı olduğunu gösteren bir
örnek aşağıda verilmiştir:
double incorrect = (double)((1 + 2) / 4);
Console.WriteLine(incorrect); // 0
double correct = ((double)(1 + 2)) / 4;
Console.WriteLine(correct); // 0.75
Console.WriteLine(“2 + 3 = “ + 2 + 3); // 2 + 3 = 23
Console.WriteLine(“2 + 3 = “ + (2 + 3)); // 2 + 3 = 5
Console.WriteLine(
“Perimeter = “ + 2 * (a + b) + “. Area = “ + (a * b) + “.”);
Alıştırmalar
1. Bir tamsayının tek veya çift olup olmadığını kontrol eden bir ifade yazın.
2. Belirli bir tamsayının kalansız olarak hem 5 ve hem de 7 tarafından bölünebilir
olup olmadığını denetleyen bir Boole ifadesini yazın.
3. Belirli bir tamsayının (sağdan sola) üçüncü basamağının 7 olup olmadığını kontrol
eden bir ifade yazın.
4. Verilen bir tamsayının üçüncü bitinin 1 veya 0 olup olmadığını kontrol eden bir
ifade yazın.
5. İki tarafı a, b ve yüksekliği h ile verilen bir yamuk alanını hesaplayan bir ifade
yazın.
www.nakov.com
Page 145 / 151
C# İle Bilgisayar Programlama Temelleri
6. Kullanıcı tarafından girilen kenar ve yükseklik verisine göre bir dikdörtgenin
çevresini ve alanını konsola yazdıran bir program yazın.
7. Ay’ın yerçekimi alanı Dünya’dakinin yaklaşık %17’sidir. Dünya üzerinde belirli bir
ağırlığı verilen adamın aydaki ağırlığını hesaplayan bir program yazın.
8. Belirli bir {x, y} noktasının
K({0, 0}, R=5)
ile verilen dairenin içinde kalıp
kalmadığını denetleyen bir ifade yazın. Açıklama: dairenin merkezi {0, 0} noktası
ve yarıçapı 5’tir.
9. Belirli bir {x, y} noktasının
K({0, 0}, R=5) ile verilen dairenin içinde ve
[{-1, 1}, {5, 5}] ile verilen dikdörtgenin dışında kalıp kalmadığını denetleyen bir
ifade yazın. Açıklama: dikdörtgen için sol alt ve sağ üst köşe verilmiştir.
10. abcd formatında girdi olarak dört haneli bir sayı alan ve aşağıdaki eylemleri
gerçekleştiren bir program yazın (örneğin 2011) :
- basamakların toplamını hesaplayan (örneğimizde 2 + 0 + 1 + 1 = 4).
- sayıyı ters sırada konsola yazdıran: dcba (örneğimizde 1102).
- son rakamı birinci konuma koyan: dabc (örneğimizde 1201).
- ikinci ve üçüncü basamakları yer değiştiren: acbd (örneğimizde 2101).
11. Bir n sayısı ve p pozisyonu veriliyor. Sayının p pozisyonundaki bit değerini
(0 ya da 1) yazdıran işlem dizisini yazın. n = 35, p = 5 → 1. Başka bir örnek:
n = 35, p = 6 → 0.
12. v tamsayısının p pozisyondaki bit değerinin 1 olup olmadığını denetleyen bir
Boole ifadesini yazın. Örnek v = 5, p = 1 → false.
13. Bir n sayısı, v değeri, (v = 0 veya 1) ve p pozisyonu verilmiştir. p pozisyonundaki
bit değeri v değerine sahip olacak şekilde n değerini değiştirecek bir işlem dizisi
yazın. Örnek:
n = 35, p = 5, v = 0 → n = 3. Başka bir örnek, n ​​= 35, p = 2,
v = 1 → n = 39.
www.nakov.com
Page 146 / 151
C# İle Bilgisayar Programlama Temelleri
14. Belirli bir n sayısının (1 < n < 100) asal sayı olup olmadığını denetleyen bir
program yazın (yani sadece 1’e ve kendisine kalansız bölünen).
15. Verilen bir 32-bit işaretsiz tamsayının 3, 4 ve 5’nci pozisyonlarındaki bit
değerlerini 24, 25 ve 26’ncı pozisyonlarındaki bit değerleri ile değiştirecek bir
program yazın.
16. Verilen bir 32-bit işaretsiz tamsayının {p, p+1, …, p+k-1} pozisyonlarındaki bit
değerlerini {q, q+1, …, q+k-1} pozisyonlarındaki bitler ile değiştirecek bir program
yazın.
www.nakov.com
Page 147 / 151
C# İle Bilgisayar Programlama Temelleri
Bölüm 4: Konsol Giriş ve Çıkış
Bölümün İçindekileri
Bu bölümde veri girişi ve çıkışı için bir araç olarak konsol ile tanışacağız. Ne olduğunu,
ne zaman ve nasıl kullanılacağını, ve programlama dillerinin çoğunun konsola nasıl
eriştiğini açıklayacağız. C# dili için bazı kullanıcı etkileşimi özellikleri ile tanışacağız:
Konsoldan metin ve sayıları okuma ve metin ve sayıları yazdırma. Aynı zamanda girişçıkış işlemleri için ana akımları inceleyeceğiz Console.In, Console.Out ve Console.
Error, Console ve çeşitli biçimlerde veri yazdırma için biçim dizelerinin kullanımı.
Konsol Nedir?
Konsol işletim sisteminin bir penceresidir, bu pencere vasıtasıyla kullanıcılar işletim sisteminin
sistem programları ile veya diğer konsol uygulamaları ile etkileşimde bulunabilirler. Etkileşim
standart girdiden (genellikle klavye) metin girişi ile veya standart çıktı (genellikle bilgisayar
ekranı) üzerinde metin görüntüleme şeklinde oluşur. Bu eylemler aynı zamanda giriş-çıkış
işlemleri olarak bilinir. Konsolda yazılı metin bazı bilgileri getirir ve bir veya daha fazla program
tarafından gönderilen bir karakter dizisidir.
Kullanıcı ve Program Arasındaki İletişim
Ne Zaman Konsol Kullanılmalıdır?
Bir
Konsol kullanıcı ile iletişim için bazı
durumlarda yeri doldurulamaz bir
araç
olmaya
devam
etmektedir.
Bu
durumlardan
biri
kullanıcıya
sonucun zarif gösteriminden daha
çok çözülecek spesifik soruna dikkati
odaklamanın gerekli olduğu küçük
ve basit programlar yazmaktır. Daha
sonra giriş ve çıkış konsolundan giriş
yada sonucu çıktı yapan basit bir
çözüm kullanılır. Başka bir kullanım da
daha büyük bir uygulama için küçük
bir kod parçasını test etmek istediğiniz
durumdur.
Konsol
uygulamasının
işleminin basitliği nedeniyle karmaşık
bir kullanıcı arayüzü üzerinden gitmek
zorunda kalmadan ve istediğiniz kodu
almak için test için bir dizi ekran
geliştirmeden kolayca ve rahatça bu
küçük kod parçasını ayırabilirsiniz.
çok
program
kullanıcı
ile
bir
şekilde iletişim kurar. Programlara
talimat
vermek
amacıyla
kullanıcı
için bu iletişim gereklidir. Modern
iletişim yöntemleri çok ve çeşitlidir:
grafik
veya
web-tabanlı
arayüzler,
konsol veya diğerleri yoluyla olabilir.
Bahsettiğimiz
gibi,
ve
arasındaki
kullanıcılar
programlar
iletişim
araçlarından biri de konsoldur. Konsol
daha az kullanılır hale gelmektedir.
Bunun
nedeni,
arayüzü
modern
kavramları
ile
kullanıcı
çalışmanın
kullanıcının bakış açısıyla daha uygun
ve sezgisel olmasıdır.
www.nakov.com
Page 148 / 151
C# İle Bilgisayar Programlama Temelleri
Konsol Nasıl Başlatılır?
Her işletim sisteminin konsolu başlatmak için kendi yolu
vardır. Windows’da örneğin şu şekilde yapılabilir:
Start → (All) Programs → Accessories → Command
Prompt
Konsolu başlattıktan sonra siyah bir ekran (bu renk
değiştirilebilir) aşağıdaki gibi görünmelidir:
Konsolu başlatırken geçerli kullanıcının ev dizini (bu
durumda kullanıcı adı
nakov) geçerli dizin olarak
kullanılır ve bu kullanıcı için bir rehber olarak gösterilir.
„Konsol Start düğmesine basmak suretiyle
başlatılabilir ve arama
kutusuna “cmd” yazıp [Enter] tuşuna basarak
(Windows Vista, Windows 7 ve üstünde). Windows
XP için, Start → Run … →, “cmd” yazıp [Enter] dizisi üzerinden gidiniz.”
Konsol
ekranı
yerine
görüntülenmesi için bu
kullanacağız:
sonuçların
basitleştirilmiş
bölümde artık şu formu
Konsoldan gelen sonuçlar
www.nakov.com
Page 149 / 151
C# İle Bilgisayar Programlama Temelleri
Konsollar Hakkında Daha Fazlası
Sistem konsolu metin bilgilerini görüntüleyen yukarıda gösterilen siyah penceredir.
Metin dizelerini gösterir ve her karakter yazdırıldıktan sonra sağa hareket eden bir
imlece sahiptir. İmleç konsolun son sütunundan geçtikten sonra (genellikle 80 sütunu
vardır), sonraki satırın başına gider. İmleç, son satır üzerinden geçerse, konsolun
içeriği yukarı kayar ve son satırın altına
yeni boş bir satır gösterir.
Windows programları konsol-tabanlı,
masaüstü-tabanlı,
Web-tabanlı
ve
diğerleri
olabilir.
Konsol-tabanlı
programlar, giriş ve çıkış için konsolu
kullanır. Masaüstü-tabanlı programlar
grafik kullanıcı arayüzü (GUI) kullanırlar.
Web-tabanlı programların Web-tabanlı
kullanıcı arayüzü vardır. Bu kitapta biz
hemen hemen her zaman konsol tabanlı
programlar yazacağız, böylece girdileri
klavyeden okunacak ve çıktıları konsolda yazdırılacaktır.
Bazı konsol-tabanlı programlar, kullanıcıların metin, sayı ve diğer verileri girmesini
beklerler ve bu genellikle klavye ile yapılır. Windows’da genellikle konsol “Komut
İstemi” veya “kabuk” olarak da adlandırılan yada işletim sisteminde işletim sisteminin
bir parçası veya ek olarak yüklü olan geniş bir yelpazedeki programların yanı
sıra sistem komutlarına erişim sağlayan bir konsol-tabanlı program olan sistem komut
yorumlayıcısı ile ilişkilidir.
İşletim sisteminin “kabukları” işletim sistemine sağlayabildikleri arayüzün türüne göre iki ana
kategoriye ayrılır:
-
-
CLI - Komut Satırı Arabirimi - Komutlar için (Windows’daki cmd.exe ve Linux’daki bash
gibi) bir konsoldur.
GUI - Grafik Kullanıcı Arayüzü - (Windows Explorer gibi) grafiksel bir çalışma ortamıdır.
www.nakov.com
Page 150 / 151
C# İle Bilgisayar Programlama Temelleri
Çoğu yorumlayıcı dosyaları içeren dizinlerin içeriğini
incelemek gibi bazı gelişmiş özellikleri desteklemesine
rağmen, her iki tür için kabuğun asıl amacı
kullanıcının çalıştığı diğer programları yürütmektir.
Örneğin Windows konsolu başlatıldığında,
etkileşimli modda sistem programlarını
ve komutları yürüten Windows komut
yorumlayıcısını
(cmd.exe) çalıştırırız.
„Her işletim sisteminin kendi komutları
olan kendi komut
yorumlayıcısı vardır.”
Temel Konsol Komutları
Windows standart komut istemindeki programları bulmak
ve başlatmak için yararlı olan bazı temel komutlara göz
atacağız.
Windows Konsol Komutları
Konsolda çalışan komut yorumlayıcısı “Komut İstemi”
veya
“MS-DOS Komut İstemi” (Windows’un eski
sürümlerinde) olarak adlandırılır. Bu yorumlayıcı
için bazı temel komutlara bir göz atacağız:
www.nakov.com
Page 151 / 151
Download
Study collections