yazilim ve verİtabani - masonluk ve masonlaroct 11, 2007  · sunuş 1989… bilgisayarla ilk...

186
C# 3.0 ile Programlama Temelleri Emre Ayrılmaz Editör Hakan Kilyusufoğlu YAZILIM VE VERİTABANI 14-5

Upload: others

Post on 29-Jan-2020

6 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: YAZILIM VE VERİTABANI - Masonluk ve MasonlarOct 11, 2007  · Sunuş 1989… Bilgisayarla ilk tanıştığım ve Basic dili ile uygulama geliştirdiğim yıllardan itibaren bilgisayar

C# 3.0 ile Programlama Temelleri

Emre Ayrılmaz

Editör Hakan Kilyusufoğlu

YAZILIM VE VERİTABANI

14-5

Page 2: YAZILIM VE VERİTABANI - Masonluk ve MasonlarOct 11, 2007  · Sunuş 1989… Bilgisayarla ilk tanıştığım ve Basic dili ile uygulama geliştirdiğim yıllardan itibaren bilgisayar

C# 3.0 ile Programlama TemelleriEmre Ayrılmaz

Editör: Hakan Kilyusufoğlu

Kapak Tasarımı: Melih Sancar

Grafik Tasarım: Tuna Erkan

Grafik Uygulama: Soner Işık

Yayın Yönetmeni: Selçuk Tüzel

Genel Yayın Yönetmeni: Mehmet Çömlekçi

1. Basım: Ocak 2008

Bilge Adam Yayınları: 15

Eğitim Yayınları Dizisi: 15

ISBN: 978-605-5987-14-5

Yayıncı Sertifika No: 1107-34-009150

Copyright © 2007, Bilge Adam Bilgisayar ve Eğitim Hizmetleri San. ve Tic. A.Ş.

Eserin tüm yayın hakları Bilge Adam Bilgisayar ve Eğitim Hizmetleri San. ve Tic. A.Ş.’ye aittir. Yayınevinden yazılı izin alınmadan kısmen ya da tamamen alıntı yapılamaz, hiçbir şekilde kopya edilemez, çoğaltılamaz ve tekrar yayımlanamaz. Bilge Adam’ın öğrencilerine ücretsiz armağanıdır, para ile satılamaz.

Bilge Adam Bilgisayar ve Eğitim Hizmetleri San. ve Tic. A.Ş.

19 Mayıs Mahallesi, 19 Mayıs Caddesi, UBM Plaza, No: 59-61, Kat: 4-7; Şişli, İstanbul

Telefon (212) 272 76 00 – (212) 217 05 55 Faks: (212) 272 76 01

www.bilgeadam.com - [email protected]

Tanıtım nüshasıdır, para ile satılamaz.

Page 3: YAZILIM VE VERİTABANI - Masonluk ve MasonlarOct 11, 2007  · Sunuş 1989… Bilgisayarla ilk tanıştığım ve Basic dili ile uygulama geliştirdiğim yıllardan itibaren bilgisayar

İçindekilerBölüm 1: Programlamaya Giriş ve .NET Platformu ..................................................................1

Yazılım Nedir? ..........................................................................................................................1

Yazılımcı Kimdir? .....................................................................................................................2

Programlama Dilleri ..................................................................................................................2

Bölüm 2: Microsoft Visual Studio Arayüzü ...............................................................................9

Visual Studio Kurulumu ............................................................................................................9

Visual Studio Ortamı ..............................................................................................................12

Yardımı Kullanmak .................................................................................................................19

LAB 2.1 Dinamik Yardım ........................................................................................................20

Lab 2.2 Contents ....................................................................................................................20

Lab 2.3 Arama ........................................................................................................................20

Lab 2.4 İndeks ........................................................................................................................21

Lab 2.5 Pencereler ile Çalışmak ............................................................................................21

Bölüm 3: Visual C# .NET ile Windows Tabanlı Programlama ...............................................25

İlk Uygulama ...........................................................................................................................25

Visual C# .NET Kontrolleri ......................................................................................................25

Özellikler, Metotlar ve Olaylar ................................................................................................30

Lab 3.1 Button Yakalama .......................................................................................................34

Lab 3.2 Dokunma! ..................................................................................................................36

Lab 3.3 Dijital Saat .................................................................................................................39

Ödevler ...................................................................................................................................40

Bölüm 4: Değişkenler ve Veri tipleri ........................................................................................43

Değişkenler ............................................................................................................................43

Veri Tipleri ..............................................................................................................................46

Çıkış Dizisi ..............................................................................................................................49

Aritmetik Operatörler ..............................................................................................................52

Lab 4.1 Personel Formu .........................................................................................................53

Lab 4.2 Global Değişken ........................................................................................................55

Lab 4.3 Topla Birleştir ............................................................................................................56

Ödevler ...................................................................................................................................57

Page 4: YAZILIM VE VERİTABANI - Masonluk ve MasonlarOct 11, 2007  · Sunuş 1989… Bilgisayarla ilk tanıştığım ve Basic dili ile uygulama geliştirdiğim yıllardan itibaren bilgisayar

Bölüm 5: Hatalar ve Hataların Giderilmesi ..............................................................................61

Giriş ........................................................................................................................................61

Hatalar ....................................................................................................................................62

Lab 5.1 Yaş hesaplama ..........................................................................................................77

Lab 5.2 Dışarıdan uygulama çalıştırma ..................................................................................79

Lab 5.3 Geçiş Notu Hesaplama .............................................................................................81

Ödevler ...................................................................................................................................84

Bölüm 6: Algoritma ...................................................................................................................89

Algoritma Nedir? .....................................................................................................................89

Akış Diyagramı .......................................................................................................................90

Algoritma Uygulamaları ..........................................................................................................91

Lab 6.1 Stok Takip Yazılımı ...................................................................................................94

Ödev .......................................................................................................................................94

Bölüm 7: Operatörler ve Karar Yapıları ...................................................................................97

Operatörler .............................................................................................................................97

if Deyimi ................................................................................................................................101

switch Deyimi .......................................................................................................................103

Lab 7.1 Sayı Tahmin Oyunu .................................................................................................105

Lab 7.2 Uygulama Yükleyici .................................................................................................106

Lab 7.3 Şans Oyunu .............................................................................................................109

Ödevler .................................................................................................................................111

Bölüm 8: Döngüler ..................................................................................................................115

for döngüsü ..........................................................................................................................115

while döngüsü ......................................................................................................................118

do while döngüsü .................................................................................................................119

foreach döngüsü ...................................................................................................................120

Lab 8.1 Tarih Doğrulama ......................................................................................................120

Lab 8.2 Gazeteler .................................................................................................................122

Lab 8.3 Kelime Arama ..........................................................................................................123

Ödevler .................................................................................................................................124

Bölüm 9: Diziler .......................................................................................................................127

Bazı Dizi Özellikleri ve Metotları ...........................................................................................129

Lab 9.1 Sayısal Loto .............................................................................................................130

IV İçindekiler

Page 5: YAZILIM VE VERİTABANI - Masonluk ve MasonlarOct 11, 2007  · Sunuş 1989… Bilgisayarla ilk tanıştığım ve Basic dili ile uygulama geliştirdiğim yıllardan itibaren bilgisayar

Ödevler .................................................................................................................................132

Bölüm 10: Metotlar ..................................................................................................................135

Metot Nedir? .........................................................................................................................135

Metotları Kullanmak ..............................................................................................................135

Parametreler .........................................................................................................................136

Kendi Metodumuzu Yazmak ................................................................................................137

Metot Overload .....................................................................................................................138

Lab 10.1 Hesap Makinesi .....................................................................................................140

Lab 10.2 Hepsini Temizle .....................................................................................................142

Lab 10.3 IsNumeric ..............................................................................................................143

Ödevler .................................................................................................................................144

Bölüm 11: String – Math – DateTime Metotları .....................................................................147

String ....................................................................................................................................147

ToCharArray .........................................................................................................................151

Math .....................................................................................................................................152

DateTime ..............................................................................................................................154

IsLeapYear ...........................................................................................................................155

Lab 11.1 Kaç Gündür Yaşıyorum .........................................................................................156

Lab 11.2 Kayan Yazı ............................................................................................................158

Lab 11.3 Kelimeyi Ters Çevir ...............................................................................................159

Lab 11.4 İlk Harf Büyük ........................................................................................................160

Lab 11.5 Metot Çalışma Zamanı ..........................................................................................162

Ödevler .................................................................................................................................164

Ek A: .NET Framework – MSIL – CLR Kavramları ................................................................167

.NET Framework Nedir ? ......................................................................................................167

C# Compiler Kullanarak Uygulama Derlemek ......................................................................168

Wizard (Sihirbaz) Yardımıyla Setup Hazırlamak ..................................................................169

Online MSDN Üzerinden Arama ..........................................................................................173

ToString Metodu – Numerik Biçimlendirme ..........................................................................174

Vİçindekiler

Page 6: YAZILIM VE VERİTABANI - Masonluk ve MasonlarOct 11, 2007  · Sunuş 1989… Bilgisayarla ilk tanıştığım ve Basic dili ile uygulama geliştirdiğim yıllardan itibaren bilgisayar

Sunuş

1989…

Bilgisayarla ilk tanıştığım ve Basic dili ile uygulama geliştirdiğim yıllardan itibaren bilgisayar ve yazılım konusundaki gelişmeleri çok zor takip ettiğimi hatırlıyorum. İnternet yerine BBS’lerin (Bul-letin Board System) kullanıldığı o yıllarda belirli konular üzerinde bilgi paylaşımı yapmak ve henüz yazılımla ilgili kitapların ilk çıktığı bu dönemlerde yazılımı öğrenmek oldukça zordu. Ancak günü-müzde internetin hızlı gelişimi, Microsoft’un yazılım hamleleri ve bu konudaki yayınların artışı ile birlikte bilgi paylaşımı kolaylaştı.

Bu kitap, o yıllarda okumak istediğim kitaptır.

Yusuf Emre Ayrılmaz

Page 7: YAZILIM VE VERİTABANI - Masonluk ve MasonlarOct 11, 2007  · Sunuş 1989… Bilgisayarla ilk tanıştığım ve Basic dili ile uygulama geliştirdiğim yıllardan itibaren bilgisayar

1 Programlamaya Giriş ve .NET Platformu

Page 8: YAZILIM VE VERİTABANI - Masonluk ve MasonlarOct 11, 2007  · Sunuş 1989… Bilgisayarla ilk tanıştığım ve Basic dili ile uygulama geliştirdiğim yıllardan itibaren bilgisayar

1 Programlamaya Giriş ve

.NET PlatformuYazılım Nedir?

Yazılımcı Kimdir?

Programlama Dilleri

Page 9: YAZILIM VE VERİTABANI - Masonluk ve MasonlarOct 11, 2007  · Sunuş 1989… Bilgisayarla ilk tanıştığım ve Basic dili ile uygulama geliştirdiğim yıllardan itibaren bilgisayar

Programlamaya Giriş ve .NET PlatformuBu bölümde, bir yazılımcının bilmesi gereken temel programlama kavramlarına giriş yapılacaktır. Bir yazılımı oluşturan öğeler ve yazılım çalışma süreci tamamlanana kadar geçen aşamalar ayrı ayrı işlenecektir. Bu kavramlar yazılımcının ve programlama dillerinin tanımlanmasına yardımcı olacaktır.

Bu bölümün sonunda:

Bir yazılımın çalışma prensibini açıklayabilecek,

Yazılımcı kavramını tanımlayabilecek,

Değişik programlama dillerinin gelişimini açıklayabilecek,

Microsoft .NET platformu hakkında genel bilgi sahibi olabileceksiniz.

Yazılım Nedir?Günümüzde bilgisayarların kullanım alanları büyük ölçüde artmıştır. Dolayısıyla işlerimizi daha hızlı ve düzenli bir şekilde yapmamız, bilgisayarları ne kadar iyi kullandığımıza bağlıdır. Bunun için, çeşitli amaçlara göre yazılan uygulamaları kullanırız.

Yazılım, bilgisayarın belli bir işi yapması için tasarlanan komutların tümüdür. Kullanım amaçları ve yerlerine göre birçok değişik yazılım türü vardır. Örneğin kelime işlemleri için MS Word, formülsel işlemler için MS Excel, tasarım işlemleri için Adobe Photoshop ve yazılım geliştirme işlemleri için Visual Studio .NET gibi uygulamalar kullanılır.

Yazılımlar genel olarak üç bölümde incelenebilir,

Sistem Yazılımları: Bilgisayar donanımlarını yöneten, kontrol eden ve uygulamaların çalışabil-mesi için gerekli altyapıyı sağlayan yazılımlardır. Sistem yazılımları sayesinde uygulama gelişti-rici; bellek, işlemci ve diğer donanım özellikleriyle uğraşmadan kendi projesine odaklanır. İşletim sistemleri bu yazılım türüne örnektir.

Uygulama Geliştirme Yazılımları: Yazılım geliştiricilerin, son kullanıcıların ihtiyaçlarını karşıla-mak üzere, uygulamaları geliştirmek, derlemek, hata ayıklamak, test etmek ve yayınlamak için kullandıkları yazılımlardır. Bu yazılımlara örnek olarak, Microsoft Visual Studio .NET, J Developer ve Eclipse yazılımları verilebilir.

Uygulamalar: Son kullanıcıların belli görevleri yerine getirmek amacıyla kullandıkları yazımlardır. Bu yazılımlara örnek olarak, endüstriyel otomasyon, müşteri ilişkileri yönetimi, kurumsal kaynak planlama, tedarikçi zinciri yönetimi uygulamaları verilebilir.

Uygulamalar da kendi aralarında kullanılan teknolojiye göre üç bölümde incelenebilir.

Windows Uygulamaları: Windows uygulamaları, işletim sistemi üzerine kurulan, arayüz ve içerik bakımından daha zengin uygulamalardır. Windows uygulamaları durum yönetimi, olaya dayalı programlama, yerel bilgisayar kaynaklarını kullanma gibi özelliklerde web uygulamalarına göre daha avantajlıdırlar. Bu avantajlarının yanı sıra Windows uygulamalarının tüm istemci bilgisayar-larda tek tek kurulma gereksinimi ve versiyonlama güçlükleri bu uygulamaların kullanımını büyük ölçüde kısıtlamış, yazılım geliştiricilerin daha çok web uygulamalarına yönelmelerini sağlamıştır.

Windows uygulamalarına örnek olarak, Microsoft Word, Microsoft Excel, Microsoft Live Messen-ger ve Logo gibi muhasebe uygulamaları verilebilir.

Web Uygulamaları: Bir sunucu tarafından yayınlanan bir web uygulamasını görüntülemek için istemci tarafında sadece bir tarayıcı uygulaması çalıştırmak yeterlidir, dolayısıyla kurulum ve ver-siyonlama güçlükleri web uygulamalarında yaşanmaz. Durum yönetimi, olaya dayalı programla-ma, yerel bilgisayar kaynaklarının kullanımı açısından Windows uygulamalarına göre daha de-

Page 10: YAZILIM VE VERİTABANI - Masonluk ve MasonlarOct 11, 2007  · Sunuş 1989… Bilgisayarla ilk tanıştığım ve Basic dili ile uygulama geliştirdiğim yıllardan itibaren bilgisayar

zavantajlıdırlar. Web uygulamalarına örnek olarak, banka web siteleri, arama motorları, e-ticaret siteleri verilebilir.

Kurumsal Uygulamalar: Günümüz uygulamaları, ölçeklenebilirlik, iş yükü ve güvenlik gibi kritik ihtiyaçlara sahiptirler. Tüm bu kritik ihtiyaçların şüphesiz tek bir uygulama üzerinde giderilmeye çalışılması hem uygulamanın geliştirilmesi sürecini zorlaştıracak, hem de uygulamanın perfor-mansını olumsuz yönde etkileyecektir. Bu sebeple birden fazla sunucu üzerinde çalışan ve farklı teknolojilerin bütünleşik bir şekilde çalıştığı kurumsal uygulamalar geliştirilmektedir. Bu tür uygu-lamalara örnek olarak, bankacılık uygulamaları ve kurumsal şirket uygulamaları verilebilir.

Yukarıda sözü geçen tüm bu uygulama türleri ile beraber veya tek başına çalışmak üzere mobil uygulama çözümleri de geliştirilmektedir.

Yazılımların Çalışma ModeliYazılımların kullanılmasındaki amaç, girilen bilgilerin işlenip istenilen şekilde sonuçların üretilme-sidir.

Veri girişi: Yazılım, kullanıcıların veri girmesi ile başlar. Girilen veriler daha sonra işlenmek üzere hafızada saklanır.

İşlem: Veriler, geliştirilen yazılımın çalışma sürecine göre bir dizi işlemden geçirilir.

Sonuç: İşlenen veriler kullanıcıya aktarılır.

Uygulamalar, belli kurallar çerçevesinde yazılır. Bu yazım kuralları sayesinde bilgisayar, prog-ramın işleyişini anlar ve gerekli sonuçları çıkartır. Uygulamalar, belirtilen yazım kuralları kontrol edilerek derlenir. Bu derleme işlemi sonunda, yazılan kaynak kodlar bilgisayarın anlayacağı tek dil olan makine diline çevrilir.

Yazılımcı Kimdir?Yazılımcı, belirli işlevlere sahip uygulamalar geliştirebilen uzmandır. Bir yazılımcının, üzerinde çalıştığı platformu, kullandığı teknolojileri iyi tanıması ve bilgisayarın anlayacağı mantıksal dilde düşünebilmesi gerekir. Yazılımcılar bir proje takımında veya çalıştıkları şirketlerde üstlendikleri görevlere göre çeşitli unvanlar alırlar. Bu unvanları aşağıdaki gibi listeleyebiliriz,

Uygulama Geliştirici / Application Developer

Yazılım Mimarı / Software Architect

Yazılım Uzmanı / Software Expert

Veritabanı Uzmanı / Database Expert

Proje Müdürü / Project Manager

Proje Lideri / Project Leader

Analist Programcı / Analyst Programmer

Yazılım Geliştirici / Software Developer

Uygulama Analisti / Application Analyst

Programlama DilleriDünyada konuşulan her dilin amacı iletişim sağlamaktır. Farklı kültürlerden insanların anlaşabil-mesi için ortak konuştukları bir dil gerekir. Programlama dillerinin amacı da bilgisayar ile yazılım-cının haberleşmesidir. Yazılımcı, bilgisayara hangi komutların çalıştırılması gerektiğini bilgisaya-rın anlayacağı dilden konuşarak söyler.

2 Bölüm 1

Page 11: YAZILIM VE VERİTABANI - Masonluk ve MasonlarOct 11, 2007  · Sunuş 1989… Bilgisayarla ilk tanıştığım ve Basic dili ile uygulama geliştirdiğim yıllardan itibaren bilgisayar

Uygulamalar, makine diline çevrildikten sonra çalışırlar. Numerik makine kodları ve o bilgisayara ait işlemci mimarisi komutlarından oluşan bu makine dili, en alt seviye dildir. Dolayısıyla yazılım-ların bu dilde yazılması oldukça zordur, bu yüzden konuşma diline daha yakın, kolay anlaşılabi-lecek diller kullanılır. Bu dillere yüksek seviye programlama dilleri denir. Programlama dillerinin seviyeleri makine diline yakın olup olmaması ile ölçülür.

Bir programlama dili şu unsurlardan oluşur,

Söz dizimi (Syntax): Bir dil, kendine ait kelimeler ile konuşulur. Programlama dillerinin de benzer bir yapısı vardır. Programlama dillerindeki bu kelimeler, programlama dilinin anahtar kelimelerini – komutlarını oluştururlar.

Gramer (Dilbilgisi): Programlama dillerini kullanmak için sadece kelimeleri bilmek yeterli değil-dir. Eğer anlamlı bir şekilde bir araya getirilemiyorsa, bu kelimeler hiçbir anlam ifade etmez.

Semantik (Anlamsal): Bir dili, kelimeleri doğru bir gramer kullanımı ile bir araya getirerek kul-lanabiliriz. Ancak konuşulan kelimelerin ne için kullanıldığı da önemlidir. Bir programlama dilinin özelliklerinin nasıl ve ne için kullanıldığı da, bu dilin semantiğidir.

Şu ana kadar 2500’den fazla programlama dili yazılmıştır. Bunlardan bazıları Pascal, Basic, C, C++, Java, Javascript, Cobol, Perl, Python, Ada, Fortran, Visual Basic .NET ve Visual C# prog-ramlama dilleridir.

Yüksek seviye programlama dillerine Visual Basic .Net, Java ve Visual C#, düşük seviye prog-ramlama dillerine ise Fortran ve C örneğini verebiliriz.

Programlama Dillerinin TarihçesiGeçmişten günümüze bilgisayarların tarihçesine baktığımız zaman, dört önemli bilgisayar kuşağı sayabiliriz,

1. Kuşak Bilgisayarlar, 1943 yılında Pennsy-lvania üniversitesinde J.P. Erkert tarafından geliştirilmiştir, 30 ton ağırlığında olan bu bil-gisayarda vakumlu tüpler kullanılmıştır. Sani-yede 5000 işlem kapasitesine sahiptir. ENIAC (Electronic Numerical Integrator and Calcula-tor) (Elektronik Sayısal Doğrulayıcı ve Hesap-layıcı) ismine sahip bu bilgisayar, 6000 kablo kullanılarak geliştirilmiştir ve çalışması için 150.000Watt enerjiye ihtiyaç duymaktadır.

2. Kuşak Bilgisayarlar, 1955 - 1965 yılları arasında Burroughs firması tarafından Ame-rikan Hava Kuvvetleri için geliştirilmiştir. Vakumlu tüpler yerine transistörlerin kullanılmasıyla maliyet düşmüş, hız yükselmiştir. İlk işletim sistemi Fortran ve Assembler dilleri kullanılarak bu dönemde yazılmıştır.

3. Kuşak Bilgisayarlar, 1965 - 1980 yılları arasında en-tegre devreler kullanılarak geliştirilmiştir. Yine aynı dönem-de, 1973’te C dili ve Bell laboratuvarlarında Thompsonve Ricthie tarafından Unix işletim sistemi yazılmıştır.

4. Kuşak Bilgisayarlar, 1980 sonrası mikroçipler kullanı-larak geliştirilen bilgisayarlardır, IBM 8086 serisi ile başla-yan bu kuşak günümüzde kullandığımız bilgisayarları da içermektedir.

Şekil 1.1

Şekil 1.2

3Programlamaya Giriş ve .NET Platformu

Page 12: YAZILIM VE VERİTABANI - Masonluk ve MasonlarOct 11, 2007  · Sunuş 1989… Bilgisayarla ilk tanıştığım ve Basic dili ile uygulama geliştirdiğim yıllardan itibaren bilgisayar

Bilgisayarlar, icat edilmeleriyle birlikte belli bir işi yapmak için bir dizi komutlara ihtiyaç duymuşlar-dır. En başta çok basit işlemler yapan bu komutlar zamanla nesne yönelimli (object oriented) gibi ileri seviyede özellikler kazanmıştır.

İlk programlama dilleri, bilgisayarların üzerinde bazı araçların yerlerini değiştirerek veya yeni bile-şenler eklenerek yapılıyordu. Yazılımın işlemesi için bir devinime ihtiyaç vardı. Eskiden yazılımlar fiziksel olarak yazılıyordu. Daha sonra fiziksel programlama yerini elektrik sinyaline bıraktı. Ku-rulan elektronik devrelere düşük ya da yüksek voltajda akım gönderilerek bilgisayarın davranışı belirlenmeye başlandı. Yüksek voltaj 1, düşük voltaj 0 sayılarını ifade ediyordu. Böylelikle bugün de kullanılan makine dilinin ortaya çıkması için ilk adımlar atılmış oldu.

Ancak bu şekilde yazılımlar geliştirmek, sistemi oluşturan elektronik devrelerin her yazılım için baştan kurulmasını gerektiriyordu. Böylelikle yazılımlar bazı kavramlar çerçevesinde yazılmaya başlandı. Öncelikle bilgisayar donanımı her yazılım için baştan kurulmamalı, bunun yerine basit bir donanımın üzerine yazılan komutlar kullanılmalıydı. Daha sonra, yazılımlar tek bir komutlar kümesi yerine, küçük parçalar halinde yazılmaya başlandı. Bu parçaların yazılımın içinde defa-larca kullanılabilmesi yordam (subroutine veya metot) kavramını ortaya çıkarmıştır. Bu modelin kullanılması ise mantıksal karşılaştırmaları, döngülerin kullanılmasını ve yazılan kodların tekrar kullanılabildiği kütüphane (library) mantığını ortaya çıkarmıştır.

1957 yılında IBM, düşük seviye (makine diline yakın) bir programlama dili olan FORTRAN dilini ortaya çıkardı. FORTRAN ile beraber basit mantıksal karşılaştırmalar, döngüler, mantıksal ifade-ler (true-false) ve sayısal değişkenler (integer, double) kullanılmaya başlandı.

1959 yılında, bu programlama dilinin özelliklerini alıp, giriş-çıkış (Input – Output IO) gibi yeni işlev-ler sağlayan COBOL dili ortaya çıktı. Daha sonra 1968 yılında, COBOL ve FORTRAN dillerinin en iyi özelliklerini alarak Pascal dili ortaya çıktı. Ayrıca Pascal dili, hafızadaki adresler üzerinde işlem yapmaya olanak veren işaretçi (pointer) kavramını da beraberinde getirdi.

1972 yılında C, Pascal dilindeki birçok hatayı gidererek ortaya çıktı. C dili ilk defa Unix işletim sistemini yazmak için kullanılmaya başlanmıştır. C, düşük seviye bir dil olması özelliği ile işletim sistemlerinin yazılmasında tercih edilmiştir.

Bütün programlama dilleri birçok özelliğe sahip olmasına rağmen, modüler programlamanın bir-çok eksiğini gidermek amacıyla, yeni bir programlama modeli olan nesneye yönelik programlama - OOP (object oriented programming) ortaya çıkarıldı. C dilinin ve OOP modelinin tüm özellikle-riyle C++ dili oluşturuldu.

C++ dilini, Sun Microsystems tarafından çıkartılan Java takip etti. Java dilinin kullanım alanları, nesneye yönelik bir programlama dili olması ve beraberinde getirdiği GC (garbage collection) gibi performans arttırıcı özellikleri ile büyük ölçüde genişledi.

Microsoft 1975 yılında Bill Gates ve Paul Allen tarafından kurulduğunda vizyonu “A pc for every desk” (Her masaya bir pc) idi, bugün ise “Every desk is a pc” (Her masa bir pc) oldu. Donanım ve yazılım alanlarındaki gelişmelerin hızı ve birbirlerini sürekli tetiklemesinin sonucunda bilgisayar kullanıcı sayısı hızla arttı. Artan kullanıcı sayısı beraberinde yeni gereksinim ve talepleri ortaya çıkardı. Bu taleplerin doğal sonucu olarak da farklı platformlar ve farklı servis sağlayıcıları ortaya çıktı. İletişim, finansal hizmetler, ticaret, eğlence kullanıcıların (özellikle internetin yaygınlaşma-sıyla birlikte) en yoğun talep gösterdiği hizmetler halini aldı. Günümüze baktığımızda Microsoft’un çıkış noktasındaki hedefine büyük oranda ulaştığını görebiliyoruz. Ancak geldiğimiz noktada hızla artan bilgisayar ve internet kullanıcı sayısı, beraberinde güvenlik, iletişim, entegrasyon v.b. alan-larda çeşitli engellerin ortaya çıkmasına neden oldu.

İhtiyaç duyduğumuz tüm bu altyapı işlemleri için hazır, kullanımı kolay ve esnek bir platforma ihtiyaç vardı, Microsoft, 2000 yılında .NET platformunu sunarak, otuzdan fazla programlama dilini aynı çatı altında topladı. VisualBasic. NET ve C#, .NET platformunu kullanan günümüzdeki en

4 Bölüm 1

Page 13: YAZILIM VE VERİTABANI - Masonluk ve MasonlarOct 11, 2007  · Sunuş 1989… Bilgisayarla ilk tanıştığım ve Basic dili ile uygulama geliştirdiğim yıllardan itibaren bilgisayar

güçlü yüksek seviyeli programlama dilleri arasında yer almışlardır. Bugün, .NET platformuyla 40’ın üzerinde programlama dili kullanılabilir.

.NET Vizyonunun OluşumuMicrosoft, vizyonu doğrultusunda attığı adımların yazılım geliştiricilere yansıyan sonuçlarını sü-rekli izliyordu ve yazılım geliştiricilerin sorunlarını şu başlıklar altında ele alıyordu.

Uygulamaların yani yazılımların, sistemlerin, kurumlardaki birimlerin ve farklı kurumların ara-sındaki iletişim sorunu.

Çalışanların ihtiyaç duydukları verilere, ihtiyaç duydukları an, kesintisiz, hatasız, güvenli ve istedikleri platformdan erişebilme ihtiyacı.

Uygulama geliştirme sürecinde, geliştiricilerin altyapı kodları ile uğraşmasından dolayı uygu-lama geliştirme ve test süresinin uzaması.

Bir uygulamanın farklı platformlarda çalıştırılabilmesi için aynı işlemleri gerçekleştirecek kod-ların tekrar tekrar yazılması ihtiyacı.

Microsoft 1990 yılında, yaşanacak 10 yılı da öngörerek bu ve benzeri sorunlara çözüm suna-cak, uygulama geliştiricilerin ve son kullanıcıların işlerini kolaylaştıracak bir platform geliştirmeye başladı. Microsoft bu platforma öylesine inanıyordu ki kaynaklarının %80’inden daha fazlasını, bu platforma taşıdı. Çok geniş bir analiz ve geliştirme ekibinin çalışmalarının sonucunda .NET platformu ortaya çıkmıştır.

Microsoft .NET platformu her türlü yazılım geliştirme ihtiyacına yönelik hazır bir altyapı sunarak uygulama geliştiricilerin Windows, web ve mobil platformlarına yönelik uygulamaları, çok daha hızlı, kolay ve güçlü bir şekilde geliştirebilmelerine olanak tanıdı.

5Programlamaya Giriş ve .NET Platformu

Page 14: YAZILIM VE VERİTABANI - Masonluk ve MasonlarOct 11, 2007  · Sunuş 1989… Bilgisayarla ilk tanıştığım ve Basic dili ile uygulama geliştirdiğim yıllardan itibaren bilgisayar
Page 15: YAZILIM VE VERİTABANI - Masonluk ve MasonlarOct 11, 2007  · Sunuş 1989… Bilgisayarla ilk tanıştığım ve Basic dili ile uygulama geliştirdiğim yıllardan itibaren bilgisayar

2 Microsoft Visual Studio Arayüzü

Page 16: YAZILIM VE VERİTABANI - Masonluk ve MasonlarOct 11, 2007  · Sunuş 1989… Bilgisayarla ilk tanıştığım ve Basic dili ile uygulama geliştirdiğim yıllardan itibaren bilgisayar

2 Microsoft Visual Studio

ArayüzüVisual Studio Kurulumu

Visual Studio Ortamı

Yardımı Kullanmak

Lab 2.1 Dinamik Yardım

Lab 2.2 Contents

Lab 2.3 Arama

Lab 2.4 İndeks

Lab 2.5 Pencereler ile Çalışmak

Page 17: YAZILIM VE VERİTABANI - Masonluk ve MasonlarOct 11, 2007  · Sunuş 1989… Bilgisayarla ilk tanıştığım ve Basic dili ile uygulama geliştirdiğim yıllardan itibaren bilgisayar

Microsoft Visual Studio ArayüzüBu bölüm, Microsoft Visual Studio arayüzünü tanımayı ve etkili bir biçimde kullanmayı anlatır. Nasıl ki, ev ve iş yerindeki çalışma ortamını düzenlemek daha verimli çalışmayı sağlarsa yazılım geliştirirken de çalışılan ortamı tanımak ve kişiselleştirmek rahat çalışılması açısından önemlidir.

Bu bölümü tamamladıktan sonra:

Microsoft Visual Studio kurulumunu öğrenecek,

Microsoft Visual Studio çalışma ortamını tanıyacak,

Menülerin işlevlerini açıklayabilecek,

Başlangıç sayfasının özelliklerini kullanabilecek,

Solution Explorer, Toolbox, Properties pencerelerini tanıyacak,

Microsoft Visual Studio Yardımı etkili bir şekilde kullanabileceksiniz.

Visual Studio KurulumuBu bölümde, Visual Studio 2008’in kurulumunu ekran görüntüleri üzerinden adım adım gerçek-leştireceğiz.

İlk olarak Visual Studio 2008’in kurulum DVD’sine ihtiyaç duymaktayız. Bu ihtiyacı karşıladıktan sonra yapılacak tek şey DVD’yi DVD sürücüsüne yerleştirmek ve karşımıza çıkan yönergeleri ta-kip etmek olacaktır. DVD’yi DVD sürücüsüne yerleştirdiğimizde karşımıza Şekil 2.1’deki Autorun (Otomatik Başlat) ekranı çıkmaktadır.

Install Visual Studio 2008 seçeneğine tıklayarak kurulum işlemine başlıyoruz.

Şekil 2.1

Page 18: YAZILIM VE VERİTABANI - Masonluk ve MasonlarOct 11, 2007  · Sunuş 1989… Bilgisayarla ilk tanıştığım ve Basic dili ile uygulama geliştirdiğim yıllardan itibaren bilgisayar

Bir sonraki ekranda Next düğmesine tıklayarak kuruluma devam ediyoruz.

“I have read and accept the license terms” seçeneğini seçtikten sonra Next düğmesine tıklayarak kuruluma devam ediyoruz.

Şekil 2.2

Şekil 2.3

10 Bölüm 2

Page 19: YAZILIM VE VERİTABANI - Masonluk ve MasonlarOct 11, 2007  · Sunuş 1989… Bilgisayarla ilk tanıştığım ve Basic dili ile uygulama geliştirdiğim yıllardan itibaren bilgisayar

Default seçeneğini seçip ilgili boyutlandırma seçeneklerini inceledikten sonra Install düğmesine tıklayarak kurulumu başlatıyoruz.

Şekil 2.4

Şekil 2.5

11Microsoft Visual Studio Arayüzü

Page 20: YAZILIM VE VERİTABANI - Masonluk ve MasonlarOct 11, 2007  · Sunuş 1989… Bilgisayarla ilk tanıştığım ve Basic dili ile uygulama geliştirdiğim yıllardan itibaren bilgisayar

Kurulum tamamlanana kadar bekliyoruz...

Kurulum başarılı bir şekilde tamamlandığında şekilde ki ekran üzerinde bulunan Finish düğme-sine tıklayarak kurulumu sonlandırabiliriz. Opsiyonel olarak bilgisayarın yeniden başlatılmasının istenildiği durumlarda bilgisayar kesinlikle yeniden başlatılmalıdır.

Visual Studio OrtamıVisual Studio, çok gelişmiş özelliklere ve yardımcı araçlara sahip bir editördür. .NET platformu üzerinde geliştirilen proje dosyaları dışında metin dosyaları, resim dosyaları gibi dosyalar da dü-zenlenebilir. Visual Studio ortamını oluşturan ve kullanımını kolaylaştıran dört ana bileşen vardır. Bunlar, Çalışma Sayfaları, Araç Çubukları, Menüler ve Pencerelerdir.

Çalışma SayfalarıVisual Studio ortamında dosyalar, birer çalışma sayfası (Tab Pages) olarak açılır. Bu dosyalar sekmeler halinde sıralanır. Sayfalar arasında CTRL-TAB kısayolu ile geçiş yapılabilir.

Varsayılan olarak bu çalışma modelinde, eş zamanlı olarak sadece bir sayfa üzerinde çalışma yapılır. Ancak Visual Studio bize, çalışma ortamını parçalara bölme imkânı da verir.

Örnek:

Visual Studio çalışma ortamını açın. Başlangıç sayfası (Start Page) karşınıza çıkar. (Eğer başlangıç sayfası çıkmıyorsa View menüsünden, Other Windows alt menüsüne işaret edin ve Start Page komutunu seçin.)

View menüsünden, Other Windows alt menüsüne işaret edin ve Web Browser komutunu se-çin. Visual Studio açmak istediğimiz internet tarayıcısı için yeni bir sayfa oluşturur.

CTRL tuşuna basılı tutarak TAB tuşuna basın. Karşınıza çıkan menüden, açık olan herhangi bir sayfayı seçin.

Başlangıç sayfasının sekmesine sağ tıklayın ve çıkan menüden New Vertical Tab Group komutunu seçin. Visual Studio birden fazla sayfa üzerinde çalışma imkânını, sayfaları sekme gruplarına ayırarak sağlar.

1.

2.

3.

4.

Şekil 2.6

12 Bölüm 2

Page 21: YAZILIM VE VERİTABANI - Masonluk ve MasonlarOct 11, 2007  · Sunuş 1989… Bilgisayarla ilk tanıştığım ve Basic dili ile uygulama geliştirdiğim yıllardan itibaren bilgisayar

Başlangıç sayfasını, sayfa baş-lığına basılı tutarak, internet ta-rayıcısının bulunduğu sekme grubuna taşıyın.

Başlangıç SayfasıVisual Studio çalışma ortamını aç-tığımız zaman karşımıza ilk gelen başlangıç sayfasıdır. Bu sayfa, o ana kadar çalıştığınız projeleri ve .NET platformuna yönelik güncel haberleri gösterir. Bu menüden üze-rinde çalıştığınız son projelerinizi (Recent Projects) açabilirsiniz. Son projelerde gözükmeyen bir projeyi açmak için Open Project veya yeni bir proje oluşturmak için Create Project seçeneğini seçebilirsiniz.

Araç ÇubuklarıVisual Studio, menü komutları için görsel kısayolları araç çubukları (Toolbars) ile sunar. Benzer işlemler için kullanılan komutlar bir araç çubuğunda gruplanır. Örneğin standart araç çubuğu, yeni dosya oluşturmak, bir dosyayı açmak - kaydetmek gibi genel dosya işlemleri için kullanılır.

Araç çubukları, varsayılan olarak menülerin altında bulunur. Ancak, araç çubukları taşınarak yer-leri değiştirilebilir veya kayan duruma (float) getirilebilir. Ayrıca istenen çubuklar gizlenebilir veya gösterilebilir. Araç çubuklarının listesini görmek için View menüsünden Toolbars alt menüsünü seçin.

Visual Studio bize kendi araç çubuklarımızı oluşturma imkânı da verir. Farklı işlevlere sahip ko-mutlar gruplanıp, kişisel araç çubuğu oluşturulabilir.

5.

Şekil 2.7

Visual Studio ortamını bir web tarayıcısı olarak kullanabilirsiniz.

Şekil 2.8

Başlangıç sayfasını kapattıktan sonra, View menü-sünden Other Windows alt seçeneğini işaretleyip Start Page seçeneğine tıklayarak açabilirsiniz.

13Microsoft Visual Studio Arayüzü

Page 22: YAZILIM VE VERİTABANI - Masonluk ve MasonlarOct 11, 2007  · Sunuş 1989… Bilgisayarla ilk tanıştığım ve Basic dili ile uygulama geliştirdiğim yıllardan itibaren bilgisayar

Örnek:

Başlangıç sayfasının üst kısmında bulunan bir araç çubuğuna sağ tıklayın. Çıkan menü, var olan tüm araç çubuklarını listeler. İşaretli olan çubuklar eklenmiş çubuklardır. Bu listeden Formatting araç çubuğunu seçin.

Web araç çubuğu üzerinde Formatting araç çubuğunu forma doğru sürükleyip bırakın. Bu işlem çubuğu floating (kayan menü) duruma getirir. Başlığına çift tıklandığında, çubuk Doc-kable (sabit duruma) gelir.

Araç çubuğuna sağ tıklayın. Listenin en altındaki Customize (özelleştir) komutunu seçin.

Toolbars sekmesinde New (Yeni) komutuna tıklayın. Çıkan pencerede çubuğa “Genel İşlem-lerim” yazın. OK düğmesine basın. Visual Studio verilen isimde bir araç çubuğu oluşturur ve kayan durumda görüntüler.

Commands (Komutlar) sekmesinde, Categories (Kategoriler) listesinden Help kategorisini seçin. Bu listenin yan tarafında bulunan Commands listesinden Index komutunu bulun. Bu komutu taşıyıp, oluşturduğumuz Genel İşlemlerim araç çubuğuna bırakın.

Bu şekilde şu komutları da ekleyin.

Araç çubuğunu, çalışma ortamının altına taşıyarak sabitleyin.

Araç çubuğuna sağ tıklayın ve listeden Genel İşlemlerim (General Operations) çubuğunu seçerek çalışma ortamından kaldırın.

MenülerVisual Studio menüleri birçok uygulamanın menülerine benzer niteliktedir. Menü isimlerinde, be-lirli bir harfinin altı çizilmiştir. Belirtilen harfler ALT tuşu ile birlikte basıldığında, o menülere kısa-yolla ulaşılır. Menü komutlarının bazılarında ise, sadece o komuta özel bir kısayol tanımlıdır. Bu kısayollar CTRL veya SHIFT gibi birkaç tuş kombinasyonu ile gerçekleşir.

1.

2.

3.

4.

5.

6.

7.

8.

Şekil 2.9

Categories Commands

Tools Options

File Exit

View Web Browser

Window Close All Documents

14 Bölüm 2

Page 23: YAZILIM VE VERİTABANI - Masonluk ve MasonlarOct 11, 2007  · Sunuş 1989… Bilgisayarla ilk tanıştığım ve Basic dili ile uygulama geliştirdiğim yıllardan itibaren bilgisayar

File MenüsüTüm dosya işlemleri bu menü altındadır. Standart araç çubuğu ile bu menüdeki bazı komutlara ulaşılır. File menüsündeki komutlar ile:

Yeni bir proje, bir dosya veya boş bir solution (çözüm) oluşturmak,

Oluşturulmuş bir projeyi veya var olan bir dosyayı açmak,

Web üzerinde paylaştırılmış dosya veya projeler açmak,

Açık olan dosya veya projeleri kapatmak,

Recent Files ile en son kullanılan dosyaları açmak,

Recent Projects ile en son kullanılan projeleri açmak,

Dosyaları kaydetmek, yazdırmak mümkündür.

Edit MenüsüTüm yazı düzenleme işlemleri için, bu menüdeki komutlar kullanılır. Text Editor araç çubuğu da bu menünün kısayoludur. Edit menüsündeki komutlar ile:

Copy, Cut, Paste, Delete, Select All gibi temel işlemler,

Find And Replace, Go, Bookmark gibi navigasyon işlemleri,

Outlining ile metinleri gruplama işlemleri,

Satırları yorum satırı yapma, yorum satırlarını kaldırma, büyük küçük harf çevrimi gibi ileri seviye işlemler gerçekleştirilir.

View MenüsüVisual Studio çalışma ortamındaki tüm pencereler bu menü komutlarıyla gösterilir. Ayrıca Naviga-te Backward ve Navigate Forward komutlarıyla en son çalışılan satıra geri dönülür.

Diğer MenülerRefactor (Yeniden Düzenleme); Kod üzerinde çeşitli değişiklikleri kolayca yapabilmemizi sağla-yan seçenekler bu menü altındadır.

Project (Proje): Projeye dosya eklemek, çıkarmak, proje özelliklerini göstermek ve referans ek-lemek için bu menü kullanılır.

Build (Derleme): Projelerin çalışmak üzere derlenmesi için gereken komutlar, bu menü altındadır.

Debug (Hata Ayıklama): Projede hata ayıklarken gereken komutlar Debug menüsü altındadır. Projeyi debug durumunda başlatmak, BreakPoint eklemek (hata ayıklarken durulması gerek sa-tırları ayarlamak) gibi işlemler yapılır.

Tools (Araçlar): Visual Studio ile beraber yüklenen yardımcı araçların listelendiği menüdür. Araç çubuklarını özelleştirmek için kullanılan Customize seçeneği gibi Options seçeneği de en sık kullanılan özelliklerden biridir. Visual Studio çalışma ortamının tüm ayarları Options menüsünden yapılır. Environment ve Text Editor en sık kullanılan seçeneklerdir.

Environment (Ortam): Sayfa düzeni ve görünüm ayarları, yazı tipi (font) ve renk ayarları, komut-lar için kısayol ayarları, internet tarayıcısı ayarları, yardım ve dinamik yardım ayarları yapılır.

Text Editor (Metin Düzenleyicisi): Farklı programlama dillerine özgü yazı düzeni yapılır.

Örnek:Tools menüsünden Options komutunu seçin.

Sol pencerede bulunan Environment menüsünden Fonts and Colors (Yazı Tipi ve Renkler) sekmesine gelin.

1.

2.

15Microsoft Visual Studio Arayüzü

Page 24: YAZILIM VE VERİTABANI - Masonluk ve MasonlarOct 11, 2007  · Sunuş 1989… Bilgisayarla ilk tanıştığım ve Basic dili ile uygulama geliştirdiğim yıllardan itibaren bilgisayar

Sağ pencerede bulunan Display items (Öğeleri Listele) menüsünden Numbers (Numaralar) alanını seçin ve Item foreground (Öğe ön planı) özelliğini Purple (Mor) olarak belirleyin. Tüm sayı değerlerinin rengi mor olacaktır.

Sol penceredeki Environment menüsünden Web Browser sekmesine gelin. Home Page me-tin kutusuna www.bilgeadam.com yazın.

Sol penceredeki Text Editor menüsünden C# alt menüsünü seçin. Burada C# diline özel metin düzenleme seçenekleri bulunur. Sağ pencerede, Display sekmesinin altında Line Num-bers (Satır Numaraları) seçeneğini işaretleyin. Bu seçenek, C# projelerinde çalışırken satır numaralarını gösterir.

Window (Pencere): Sayfaların ve pencerelerin görünümlerini ve özelliklerini değiştirmek için kul-lanılan komutlar bu menü altında bulunur. Tüm açık çalışma sayfaları bu menü altında görüldüğü gibi, istenen sayfa seçilerek ön plana getirilir. Ayrıca, Close All Documents (Tüm Sayfaları Kapat) komutu ile açık olan bütün sayfalar kapatılır. Auto Hide All (Tümünü Otomatik Gizle) komutu ile sabit hale getirilmiş tüm pencereler gizlenir.

Community (Topluluk): Yazılımcıların birbirlerine soru sorup, cevap alabilecekleri ve yazılımcı-ları örnek kodlar, üçüncü parti kontroller bulabileceği sitelere yönlendiren seçenekler bu menüde bulunur.

Help (Yardım): Visual Studio çalışma ortamında çok sık kullanılan yardım pencerelerinin görünü-mü bu menü ile sağlanır. Bu menü ile ayrıca, kullanılan Visual Studio çalışma ortamının sürümü hakkında bilgi alınır, son güncellemeler kontrol edilir, teknik destek için gereken iletişim bilgilerine ulaşılır.

PencerelerPencereler, Visual Studio içinde uygulama geliştirirken kullanılabilecek birçok elemanı belli grup-lar halinde tutan alanlardır. Çalışma ortamında birçok pencere bulunmasıyla beraber en sık kul-

landıklarımız, Solution Explorer, Toolbox, Object Browser, Properti-es, Watch, Output, Search Result, Task List pencereleridir.

Pencereler, Visual Studio ortamı içerisinde istenilen yere taşınabilir veya sabitlenebilir. Pencerelerin birkaç genel özelliği vardır:

Auto Hide (Otomatik Gizle): Pencerelerin, fare üzerindeyken gözükmesi ve fare çekildikten son-ra gizlenmesidir.

Dockable (Sabitlenebilir): Pencerelerin, Visual Studio ortamı içerisinde bir yerde sabitlenebilme özelliğidir.

3.

4.

5.

Şekil 2.10

Görmek istediğiniz pencere-lerin çoğunu View menüsün-den seçebilirsiniz.

16 Bölüm 2

Page 25: YAZILIM VE VERİTABANI - Masonluk ve MasonlarOct 11, 2007  · Sunuş 1989… Bilgisayarla ilk tanıştığım ve Basic dili ile uygulama geliştirdiğim yıllardan itibaren bilgisayar

Floating (Kayan): Kayan pencereler herhangi bir yere sabitlenemez, her sayfanın üstünde durur ve böylece sürekli görünür.

Pencerelerin bu özelliklerine Window menüsünden erişilebilir.

Örnek:

View menüsünden Other Windows alt menüsünü işaret edin ve Macro Explorer penceresini seçin. Pencerenin başlığında, biri Auto Hide diğeri Close olan iki düğme görülür. (Pencerenin çıktığı yere göre sadece Close düğmesi de gözükebilir. Diğer seçeneklerin çıkması için pen-cerenin başlığına çift tıklayıp, pencereyi Dockable durumuna getirin.)

Auto Hide düğmesine (Raptiye ikonlu düğme) basarak pencereyi gizleyin.

Pencereyi tekrar seçin, Window menüsünden Auto Hide özelliğini seçin. Daha sonra aynı menüden Floating özelliğini seçin. Pencerenin taşınabildiğini ancak sabitlenemediği görülür.

Tabbed Document seçeneğini seçin. Pencerenin sekme olarak forma yerleştiği görülür.

Pencere seçili iken, Window menüsünden Dockable özelliğini seçin. Bu sefer pencerenin, taşındığı zaman çalışma ortamının herhangi bir yerine sabitlenebildiği görülür.

Pencere seçili iken, Window menüsünden Hide komutunu seçin. Pencereyi tekrar açmak için bu etapları tekrarlayın.

Solution Explorer PenceresiVisual Studio çalışma ortamında projeler bir solution (çözüm) altında açılır. Bir solution içine farklı dilde ve tipte projeler dâhil edilebilir. Visual Studio ile bir solution açıldığında, Solution Explorer penceresi solution içinde bulunan tüm projeleri, ilgili dosya ve klasörleri görüntüler. Pencerede koyu yazı tipinde görünen proje, solution içindeki başlangıç projesidir.

Bu pencereden, öğeler üzerinde silme, kopyalama, taşıma, ismini de-ğiştirme işlemleri yapılabilir. Ayrıca pencerenin üst kısmında, seçilen öğe üzerinde basit işlemler gerçekleştirmek için bir araç çubuğu bu-lunur.

Refresh (Yenile): Proje dosyaları üzerindeki değişikliklerin görünme-sini sağlar.

Show All Files (Tüm Dosyaları Göster): Seçilen projenin bulunduğu klasördeki tüm dosyaları ve alt klasörleri gösterir. Pencerede görünen beyaz öğeler proje içine dâhil edilmemiş öğelerdir. Proje kapsamında kullanılmak istenen öğeler (örneğin arka plan resmi), üzerine sağ tık-lanıp Include In Project komutu ile projeye dâhil edilmelidir.

Properties (Özellikler): Penceredeki tüm öğelerin özellikleri, Proper-ties komutu ile görülebilir. Bu komut seçildiğinde, öğenin özellikleri Properties penceresi ile görüntülenir. (Properties penceresi bu bölümde detaylı olarak ele alına-caktır.)

Solution Explorer penceresi, View menüsünden görülebildiği gibi, varsayılan klavye seçeneklerin-de CTRL-ALT-L kısayolu ile de görülebilir.

1.

2.

3.

4.

5.

6.

Şekil 2.11

Solution Explorer penceresinde Solution bölümünü göremiyorsanız, Tools (Araçlar) menüsünden Options (Se-çenekler) komutunu seçin. Açılan pencerede Projects and Solutions (Projeler ve Solution’lar) altında bulunan Always Show Solution (Her Zaman Solution’ı Göster) kutusunu işaretleyin ve OK komutu ile çıkın.

17Microsoft Visual Studio Arayüzü

Page 26: YAZILIM VE VERİTABANI - Masonluk ve MasonlarOct 11, 2007  · Sunuş 1989… Bilgisayarla ilk tanıştığım ve Basic dili ile uygulama geliştirdiğim yıllardan itibaren bilgisayar

Toolbox PenceresiToolbox (Araç Kutusu) penceresi, projelerde kullanılan çeşitli kontrol-lerin listelendiği penceredir. Buradaki öğeler, sekmeler içinde gruplan-mıştır. Her sekme, ortak platformlarda çalışan veya benzer işlevleri olan kontrollere sahiptir. Örneğin, Data sekmesinde veri tabanı işlem-lerinde kullanılan kontroller vardır. Printing kontrolleri Windows platfor-munda çalışan projelerdeki çıktı işlemlerinde kullanılır.

Toolbox penceresinde kontroller, isimlerine göre sıralanmaktadır. Örneğin Common Controls sekmesinde en üstte Button, CheckBox, CheckedListBox ve ComboBox kontrolleri bulunur. Kontroller, yerleri ve sıraları taşınarak değiştirilebilir, ayrıca başka bir sekmeye de taşı-nılabilir.

Visual Studio çalışma ortamı, Toolbox penceresindeki kontrollere yeni isim verme, kontrolleri silme veya pencereye yeni sekmeler ve kontroller ekleme imkanlarını da sağlar.

Örnek:

Common Controls sekmesinde TextBox kontrolüne sağ tıklayın. Çıkan menüden Rename Item (Öğenin İsmini Değiştir) komutunu seçin ve Metin Kutusu yazın.

Ortaya çıkan Metin Kutusu kontrolünü taşıyarak sekmenin en üstüne getirin.

Pencereye sağ tıklayın ve Sort Items Alphabetically (Nesneleri Alfabetik Olarak Sırala) komu-tunu seçin. Metin Kutusu kontrolünün, alfabetik sırada yerini aldığı görülür.

Metin Kutusu kontrolünün adını TextBox olarak değiştirin.

Pencereye sağ tıklayın ve Add Tab komutunu seçin. Sekmeye Medya ismini verin.

Sekmeye sağ tıklayın ve Choose Items (Öğeleri Seç) komutunu seçin. Choose Toolbox Items diyalog kutusu çıkar. Burada Toolbox penceresine eklenebilecek tüm kontroller listelenir. Com Components sekmesine gelin ve listeden Windows Media Player kontrolünü işaretleyin. OK düğmesine basarak, diyalog kutusunu kapatın. Windows Media Player kontrolünün, oluş-turulan Medya sekmesine eklendiği görülecektir.

Toolbox penceresine varsayılan klavye seçeneklerinde CTRL-ALT-X kısayolu ile ulaşılır.

Properties PenceresiProperties (Özellikler) penceresi, seçilen bir nesnenin özellikle-rini görüntüler. Penceredeki görünüm, Özellik Adı - Değeri şek-lindedir. Silik olarak görünen özellikler salt okunurdur ve değişti-rilemez. Pencerenin üzerindeki açılır liste, çalışma sayfasındaki kontrolleri listeler. Buradan istenilen kontrol seçilerek özellikleri görüntülenir.

Penceredeki özellikler kategorilere göre gruplanmıştır, ancak al-fabetik olarak da dizilir. Pencerenin üstünde bulunan araç kutu-sundan Categorized (Kategorileştirilmiş) veya Alphabetical (Alfa-betik) seçilerek özelliklerin görünümleri değiştirilir.

Pencerenin en altında bulunan menüde, her özelliğin açıklaması bulunur.

1.

2.

3.

4.

5.

6.

Şekil 2.12

Şekil 2.13

Bir kontrolün üzerindeyken F4 tuşuna basınca, Properti-es penceresi görüntülenir.

18 Bölüm 2

Page 27: YAZILIM VE VERİTABANI - Masonluk ve MasonlarOct 11, 2007  · Sunuş 1989… Bilgisayarla ilk tanıştığım ve Basic dili ile uygulama geliştirdiğim yıllardan itibaren bilgisayar

Yardımı KullanmakYazılım geliştirirken en çok kullanacağımız kaynaklar yardım dosyaları olacaktır. Bir programlama dilinin çok çeşitli özellikleri, kullanım farklılıkları olabilir. İyi bir yazı-lımcı bütün bu özellikleri ezbere bilen değil, bu özellikleri en kısa sürede bulan, öğrenen ve kullanandır. Yardım dosyalarının kullanımını bilmek, yazılımcılığın temelini oluşturan önemli unsurlardan biridir.

Visual Studio Yardımı yazılımcıya, gelişmiş özelliklere sahip pencereler ve yardım dosyaları ile geniş bir kulla-nım kolaylığı sağlar.

Visual Studio Yardım dosyalarının yapısı başlık, içerik ve ilişkili konulardan (See Also) oluşmuştur. Ayrıca her yardım dosyasının altında bulunan Send Comments bağlantısı ile konu hakkında yorum gönderilebilir.

Visual Studio yardım pencereleri Dynamic Help, Sear-ch, Index ve Contents olarak dörde ayrılır. Bu pence-reler, Help menüsünden ulaşılabilir.

Dynamic HelpDynamic Help (Dinamik Yardım) penceresi, içeriği otomatik olarak değişen bir araçtır. Kod yazar-ken, pencerelerde veya sayfalarda nesneler seçildiğinde, kullanıcının başka bir işlem yapmasına gerek kalmadan, o nesne hakkında yardım konularını listeler. F1 tuşuna bastığımız zaman ise seçilen nesneye ait, Dynamic Help penceresinde ilk sırada bulunan yardım konusu yeni bir say-fada görüntülenir.

Penceredeki yardım konuları Help (Yardım), Samples (Örnekler) ve Getting Started (Başlangıç) olarak üç bölüme ayrılmıştır. Help bölümü, seçilen nesne ve bu nesneyle ilişkili olan kavramların listelendiği bölümdür. Samples, konuyla ilgili kod örnekleri bulunan yardım dosyalarını gösterir. Getting Started çalışılan sayfalara göre değişen, temel işlemleri içeren başlangıç yazılarını gös-terir.

SearchMSDN kütüphanelerinde arama yapılan penceredir. Look for metin kutusuna, aranacak anahtar kelimeler girilir. Filtreleme (Filtered by) ile arama sonuçları belli konulara göre sınırlanır ve isten-meyen seçeneklerin gösterilmesi engellenir.

Search penceresinde, Search in titles only, Match related words, Search in previous results, Highlight search hits arama seçenekleri bulunur:

Search in titles only: Sadece konu başlıklarında arama yapar, içerik kısmına bakmaz.

Match related words: Kelimeleri yazıldığı gibi arar, benzer yazımlı kelimeleri aramaz.

Search in previous results: İlk aramadan sonra aktif olan bu seçenek ile kelimeler, bir önceki aramada bulunan sonuçlar arasına bakılır.

Highlight search hits: Bulunan yardım sayfalarında, aranan kelimelerin seçili olmasını sağlar.

Bulunan sonuçlar Search Results (Arama Sonuçları) penceresinde gösterilir. Bu pencerede;

Title: Konunun başlığını,

Location: MSDN kütüphanelerinde hangi başlık altında bulunduğunu,

Rank: Konunun, aranılan kelimeye olan yakınlık derecesini ifade eder.

Visual Studio Yardımını kullanmak için, MSDN (Microsoft Developer Network) yardım kütüp-hanelerinin yüklenmiş olması gerekir.

Şekil 2.14

19Microsoft Visual Studio Arayüzü

Page 28: YAZILIM VE VERİTABANI - Masonluk ve MasonlarOct 11, 2007  · Sunuş 1989… Bilgisayarla ilk tanıştığım ve Basic dili ile uygulama geliştirdiğim yıllardan itibaren bilgisayar

IndexYardım dosyalarındaki bütün konuları alfabetik sırada dizer. Filtreleme işlevi, arama pencere-sinde olduğu gibidir. Bu pencerenin özelliği, aranacak kelime yazılırken, bu kelime ile başlayan tüm konuların alfabetik sırada gösterilmesidir. Bu şekilde, aranan konulara çok hızlı bir şekilde ulaşılabilir.

Eğer bir konu ile ilgili birden fazla yardım dosyası varsa, Index Results (Dizin Sonuçları) pence-resinde bu seçenekler gösterilir.

ContentsContents (İçerik) penceresinde, tüm MSDN içeriği konulara göre hiyerarşik yapıda, kategorilere ayrılmış olarak gösterilir. Bu pencerede de aynı şekilde filtreleme yapılarak istenmeyen içerikler çıkartılabilir.

Bir yardım dosyası açıkken, Help menüsünden Sync Contents (İçerik Senkronizasyonu) komutu seçilerek o yardım dosyasının Contents penceresindeki yeri bulunabilir.

Lab 2.1 Dinamik YardımHelp menüsünden Dynamic Help komutunu seçerek Dynamic Help penceresini açın. Pencerede gösterilen ilk konunun ismi nedir?

CTRL-ALT-X tuşlarına basıp Toolbox penceresini açın. Dynamic Help menüsünde ne değişti?

Toolbox penceresinde, Windows Forms tabında Button kontrolünü seçin. Dynamic Help pen-ceresindeki ilk konunun ismi ne olarak değişti?

Button seçiliyken F1 tuşuna basın. Açılan sayfanın ismi nedir?

Lab 2.2 ContentsHelp menüsünden Sync Contents komutuna tıklayın. Button Mem-bers konulu yardım dosyası hangi konuların altında bulunuyor?

Contents penceresinin ilk başlığı olan Visual Studio .NET altında, Gettings Assitance altında, Using Help in Visual Studio .NET al-tında, Tips for Using the Help Keyword Index konulu yardımı açın. File menüsünden Print komutunu seçin ve sayfayı yazdırın.

Contents penceresini kapatın.

Lab 2.3 AramaHelp menüsünden Search komutunu seçin. Look for metin kutusuna Visual Studio .NET ya-zın. Search in titles only, Match related words seçeneklerini işaretleyin. Search düğmesine basın.

Kaç tane konu bulundu? En üst dereceli konu nedir?

Search in previous results seçeneğini işaretleyin. MSDN kelimesini aratın. Kaç konu bulun-du?

Search in previous results seçeneğini kaldırın. MSDN kelimesini tekrar arattığınız zaman kaç konu bulunur? Search in titles only seçeneğini kaldırınca kaç konu bulunur?

Search Results ve Search pencerelerini kapatın.

1.

2.

3.

4.

1.

2.

3.

1.

2.

3.

4.

Bu lab’ı tamamlamak için, MSDN yardım kütüphaneleri yüklenmiş olmalıdır.

Sayfayı yazdırmak için bil-gisayarınıza bağlı bir yazıcı bulunması gerekir.

Yardım dosyalarını yazdırmak, özellikle uzun metinlerde, ko-lay çalışma imkânı sağlar.

20 Bölüm 2

Page 29: YAZILIM VE VERİTABANI - Masonluk ve MasonlarOct 11, 2007  · Sunuş 1989… Bilgisayarla ilk tanıştığım ve Basic dili ile uygulama geliştirdiğim yıllardan itibaren bilgisayar

Lab 2.4 İndeksHelp menüsünden Index komutuna tıklayın. Look for metin kutusuna file types yazın. İlk çıkan konu nedir?

Filtre olarak Visual C# seçin. İlk hangi konu gösteriliyor?

File Types konusu üzerine tıklayın. Açılan sayfada Solution Files (.sln and .suo) adlı bölümü inceleyin.

Project Files başlığında, Visual Basic and Visual C# alt başlığı altında, File Types and File Extentions in Visual Basic and Visual C# konusuna tıklayın.

Açılan yardım dosyasını inceledikten sonra, sayfanın See Also başlığı altında What’s New in Projects konusuna sağ tıklayın. Açılan menüden Open Link in New Window komutunu seçin. Window menüsünden New Vertical Tab Group komutunu seçin.

Bir önceki yardım dosyasıyla arasındaki benzerlikleri inceleyin.

Window menüsünden Close All Documents seçeneği ile bütün sayfaları kapatın ve Visual Studio ortamından çıkın.

Lab 2.5 Pencereler ile ÇalışmakToolbox penceresini Auto Hide düğmesine basarak sürekli görünür hale getirin.

Pencerenin başlığına sol tıklayıp sağ tarafta bulunan Solution Penceresine doğru taşıyın. Bu aşamada ekranda mavi kılavuz düğmeleri görünecektir. Kılavuz düğmelerinden ortadakinin üzerine gelip bırakın.

Şimdi aynı tarafta bulunan Class View Penceresini alt taraftaki sekme yardımı ile sağ tarafa taşıyın.

Tools menüsünden Import and Export Settings komutunu verin. Reset All Settings seçeneğini işaretleyip Next düğmesine basın. Karşınıza çıkan sihirbazın yönergelerini takip edin. Tüm pencere ayarlarınız ilk halini alacaktır.

1.

2.

3.

4.

5.

6.

7.

1.

2.

3.

4.

21Microsoft Visual Studio Arayüzü

Page 30: YAZILIM VE VERİTABANI - Masonluk ve MasonlarOct 11, 2007  · Sunuş 1989… Bilgisayarla ilk tanıştığım ve Basic dili ile uygulama geliştirdiğim yıllardan itibaren bilgisayar
Page 31: YAZILIM VE VERİTABANI - Masonluk ve MasonlarOct 11, 2007  · Sunuş 1989… Bilgisayarla ilk tanıştığım ve Basic dili ile uygulama geliştirdiğim yıllardan itibaren bilgisayar

3Visual C# .NET ile Windows Tabanlı Programlama

Page 32: YAZILIM VE VERİTABANI - Masonluk ve MasonlarOct 11, 2007  · Sunuş 1989… Bilgisayarla ilk tanıştığım ve Basic dili ile uygulama geliştirdiğim yıllardan itibaren bilgisayar

3 Visual C# .NET

ile Windows Tabanlı

Programlamaİlk Uygulama

Visual C# .NET Kontrolleri

Özellikler, Metotlar ve Olaylar

Lab 3.1 Button Yakalama

Lab 3.2 Dokunma!

Lab 3.3 Dijital Saat

Ödevler

Page 33: YAZILIM VE VERİTABANI - Masonluk ve MasonlarOct 11, 2007  · Sunuş 1989… Bilgisayarla ilk tanıştığım ve Basic dili ile uygulama geliştirdiğim yıllardan itibaren bilgisayar

Visual C# .NET ile Windows Tabanlı Programlama

Windows tabanlı uygulamalar, Windows işletim sistemi üzerinde çalışan uygulamalardır. Win-dows uygulamaları Windows formları ve kontrollerinden oluşur. Visual Studio bu formların ve üzerindeki kontrollerin tasarımını, kodların yazılımını büyük ölçüde kolaylaştırarak uygulama ge-liştirme sürecini daha hızlı ve kolay hale getirir.

Bu bölümü tamamladıktan sonra:

Windows tabanlı programlamada kullanılan kontrolleri tanıyacak,

Kontrollerin özellik, metot ve olay kavramlarını öğreneceksiniz.

İlk UygulamaVisual C#.NET ile yazacağımız Windows uygulaması ekrana, Merhaba Dünya mesajını çıkartır.

Visual Studio çalışma ortamını açın.

File menüsünden, New alt menüsüne işaret edin ve Project komutunu seçin. New Project diyalog kutusu, yazılacağı dile, çalışacağı ortama göre değişen proje tiplerini listeler.

Proje tiplerinden Visual C# Project ve Windows Application tipinin seçili olduğunu kontrol edin.

Name özelliğine HelloWorld yazın ve OK düğmesine basın. Bir windows formu tasarım görü-nümünde açılır.

Toolbox penceresinden Button kontrolünü formun üzerine sürükleyip bırakın. Properties pen-ceresini açarak Button kontrolünün Text özelliğine Hello World! yazın.

Eklenen Button kontrolüne çift tıklayarak kod sayfasına geçin. Button kontrolüne basıldığında çalıştırılacak kodu yazın:

MessageBox.Show(“Merhaba Dünya”);

MessageBox.Show metodunun yazıldığı kodun üstüne, yapılmak istenileni belirten bir yo-rum satırı yazın.

// MessageBox’ın Show metodunu kullanarak ekrana “Merhaba Dünya” yazdırıyoruz.

F5 tuşuna basarak projeyi çalıştı-rın.

Visual C# .NET KontrolleriWindows tabanlı uygulamalar geliştirirken sıkça kullanacağımız bir grup kontrol vardır. Form kon-trolü hariç diğer bütün kontroller Toolbox penceresinden seçilir. Bu kontroller sürüklenip form üzerinde istenilen pozisyona bırakılır.

Yazdığınız kodun ne anlama geldiğini belirtmek için yorum satırları kullanmak, kodları okumayı kolaylaştırır. Zaman geçtikçe yazılımcı kendi yazdığı kod ile ilgili bazı bölümleri unutabileceği için yorum satırları çok önemlidir. Yorum satırları // ile başlayarak yazılmalıdır.

Düzgün bir yazılımda koddan çok yorum olmalıdır.

Çalışma sayfalarının isimlerinin yanında yıldız işaretinin görünmesi, o sayfada değişiklik yapıldığını ancak daha kaydedilmediğini belirtir. Proje dosyalarınızı CTRL-S tuşlarına basarak sıkça kaydedin.

Page 34: YAZILIM VE VERİTABANI - Masonluk ve MasonlarOct 11, 2007  · Sunuş 1989… Bilgisayarla ilk tanıştığım ve Basic dili ile uygulama geliştirdiğim yıllardan itibaren bilgisayar

Kontroller, ToolBox penceresinde üzeri-ne çift tıklayarak da eklenebilir.

Kontroller, ToolBox penceresinde seçi-lip, form üzerinde büyüklüğü çizilerek de eklenebilir.

Kontrollerin büyüklükleri ve yerleri, tasa-rım anında Size (Boyut) ve Location (Ko-num) özellikleri ile değiştirilebileceği gibi, fare ile de istenilen şekilde ayarlanabilir.

Form Windows uygulamaları, Windows kontrollerinin tutul-duğu pencereler olan formlardan oluşur. Bir Windows projesi açıldığı zaman form kontrolü otomatik olarak eklenir. İkinci bir form eklemek için Project menüsün-den Add Windows Form komutu seçilir. Proje çalıştığı zaman başlangıç formu görüntülenir. Başlangıç formu Soluton Explorer’da görülen Program.cs dosyası üze-rinden değiştirilir.

Application.Run(new frmStart());

Visual Studio ortamında formlar, tasarım sayfası ve kod sayfası olmak üzere iki farklı sayfada görüntülenir. Tasarım sayfası, formun ve üzerindeki kontrollerin görünümlerini kolay bir şekilde değiştirmeyi sağlar. Visual Studio bu sayfada yapılan değişiklikleri kod sayfasında eş zamanlı olarak günceller. Örneğin bir Button kontrolünün genişliğini fare ile değiştirdiğimiz zaman, kod sayfasında bu kontrolün Width (Genişlik) özelliği yapılan değişikliğe göre güncellenecektir. Aynı değişiklikler properties penceresinde de görülebilir.

Formların, diğer kontrollerin özelliklerinden farklı bazı özellikleri vardır.

ControlBoxForm üzerindeki simge durumuna küçültme, ekranı kapla-ma ve formu kapama kutularının görünümünü ve erişilebi-lirliğini kontrol eder.

StartPositionForm açıldığı zaman nerede görüneceğini belirler. CenterScreen seçeneği formu ekranın orta-sında gösterir.

Load EventFormlar açıldığı zaman Load olayı gerçekleşir. Eğer form, başlangıç formu olarak seçilmişse, proje başladığı zaman çalıştırılmak istenen kodlar bu olayın metoduna yazılır.

private void Form1_Load(object sender, System.EventArgs e)

{

label1.Text = “Uygulama başladı.. Başlangıç zamanı: “ + DateTime.Now;

}

Şekil 3.1

Şekil 3.2

Formun ControlBox özelliği false iken uy-gulama, Debug menüsünden Stop Debug-ging komutu seçilerek kapatılabilir.

26 Bölüm 3

Page 35: YAZILIM VE VERİTABANI - Masonluk ve MasonlarOct 11, 2007  · Sunuş 1989… Bilgisayarla ilk tanıştığım ve Basic dili ile uygulama geliştirdiğim yıllardan itibaren bilgisayar

ButtonBir Windows düğmesini temsil eder. Button kontrolüne basıldığında Click olayı tetiklenir. Bu olay gerçekleştiği zaman yapılacak işlemler, varsayılan olarak ButtonIsmi_Click metodunda yazılır.

private void btnChangeColor_Click(object sender, System.EventArgs e)

{

btnChangeColor.ForeColor = Color.Gray;

}

TextBoxBir Windows metin kutusunu temsil eder. Kullanıcıların değer girerek yazılım ile haberleşmesini sağlamak amacıyla kullanılır. TextBox kontrolündeki yazı değiştiği zaman TextChanged olayı gerçekleşir.

private void textBox1_TextChanged(object sender, System.EventArgs e)

{

MessageBox.Show(“Yazı değişti: “ + textBox1.Text);

}

LabelBir Windows etiketini temsil eder. Kullanıcıya, form üzerinde bir yazıyı göstermek amaçlı kullanı-lır. Bu yazının görünümü, Label kontrolünün bazı özellikleri ile değiştirilir.

TextAlignYazının Label kontrolü üzerinde nerede duracağını belirler.

FontFont (Yazı Tipi) özelliği birçok alt özellik taşır. Bunlardan bazıları en sık kullanılan özelliklerdir.

NameYazı tipinin ismini belirler. Varsayılan Microsoft Sans Serif seçi-lidir.

SizeKarakterlerin boyutunu belirler. Varsayılan büyüklük 8,5 değerini alır.

BoldYazının kalın (Bold) tipte olmasını belirler.

ItalicYazının italik (Italic) tipte olmasını belirler.

UnderLineYazının altı çizgili (UnderLine) olmasını belirler.

Şekil 3.3

Label kontrolünün Text özelliğini boş bırakırsanız, tasarım zamanı Form üzerinde göremezsiniz. Böyle bir durumda kontrolü tekrar seçmek için Properties pence-resinin en üstünde bulunan ComboBox’tan kontrolü seçmeniz yeterli olacaktır.

27Visual C# .NET ile Windows Tabanlı Programlama

Page 36: YAZILIM VE VERİTABANI - Masonluk ve MasonlarOct 11, 2007  · Sunuş 1989… Bilgisayarla ilk tanıştığım ve Basic dili ile uygulama geliştirdiğim yıllardan itibaren bilgisayar

ComboBoxBir Windows açılan kutusunu temsil eder. ComboBox kontrolü, kullanıcıların bazı değerleri açılan bir listeden seçmesini sağlar. Listeye tasarım anında veya çalışma anında öğe eklenebilir. Listeye öğe eklemek için kontrolün Items özelliğinden faydalanılır.

Tasarım anında öğe eklemek için Properties penceresinden Items özelliği seçilir. String Collecti-on Editor penceresinde, her öğenin değeri tek bir satırda yazılır.

Çalışma anında öğe eklemek için kod sayfasında, kontrolün Items özelliğinin Add metodu kulla-nılır.

private void Form1_Load(object sender, System.EventArgs e)

{

comboBox1.Items.Add(“Beşiktaş”);

comboBox1.Items.Add(“Galatasaray”);

comboBox1.Items.Add(“Fenerbahçe”);

comboBox1.Items.Add(“Trabzon”);

}

Şekil 3.4

Şekil 3.5

28 Bölüm 3

Page 37: YAZILIM VE VERİTABANI - Masonluk ve MasonlarOct 11, 2007  · Sunuş 1989… Bilgisayarla ilk tanıştığım ve Basic dili ile uygulama geliştirdiğim yıllardan itibaren bilgisayar

ListBoxBir Windows liste kutusunu temsil eder. Kontroldeki öğeler sabit bir liste olarak görüntülenir. List-Box kontrolüne öğe ekleme işlemi, ComboBox kontrolündeki işlemler ile aynıdır. ComboBox kon-trolünden farkı, birden fazla öğenin seçilebilir olmasıdır.

private void btnEmptyClasses_Click(object sender, System.EventArgs e)

{

listBox1.Items.Add(“YYU3124”);

listBox1.Items.Add(“YYU3226”);

listBox1.Items.Add(“YYU3314”);

listBox1.Items.Add(“YYU3408”);

}

TimerBir Windows sayacını temsil eder. Timer çalışmaya başladığı zaman, belirli zaman aralıklarında Tick olayı gerçekleşir. Timer kontrolünün Interval değeri, Tick olayının kaç milisaniyede bir ger-çekleşeceğini belirler. Örneğin Interval değeri 2000 olan bir sayaç, Tick olayında yazılan kodları 2 saniyede bir çalıştıracaktır.

Sayacı başlatmak için kontrolün Start metodu, durdurmak için ise Stop metodu kullanılır. Enabled özelliği, sayacın aktif olup olmadığını belirler.

private void Form1_Load(object sender, EventArgs e)

{

//Her saniye kod güncellenecek

Şekil 3.6

Şekil 3.7

29Visual C# .NET ile Windows Tabanlı Programlama

Page 38: YAZILIM VE VERİTABANI - Masonluk ve MasonlarOct 11, 2007  · Sunuş 1989… Bilgisayarla ilk tanıştığım ve Basic dili ile uygulama geliştirdiğim yıllardan itibaren bilgisayar

timer1.Interval = 1000;

//timer başlatılıyor

timer1.Start();

//bir saniye gecikmeyi önlemek için kod bir kere çağrılıyor.

label1.Text = DateTime.Now.ToLongTimeString();

}

private void timer1_Tick(object sender, EventArgs e)

{

//O anki saat label1 kontrolünün Text özelliğine atanıyor.

label1.Text = DateTime.Now.ToLongTimeString();

}

MessageBoxMessageBox, kullanıcıya bilgi göstermek için açılan mesaj kutusudur. Bu mesaj kutusu dört öğe-den oluşur.

Text (Metin): Mesaj kutusunda verilmek istenen bilgiyi tutan yazıdır.

Caption (Başlık): Mesaj kutusunun başlığıdır.

Buttons (Düğmeler): Mesaj kutusunda hangi düğmelerin gösterileceğini belirler.

Icon (Simge): Mesaj kutusunda gösterilecek olan simgeyi ve açıldığı zaman çıkartılacak sesi belirler.

MessageBox.Show(“Devam etmek istiyor musun?”, “Uyarı”, MessageBoxButtons.YesNo, MessageBoxIcon.Warning);

Mesaj kutusu, kapanırken hangi düğmenin basıldığını DialogResult nesnesi ile programcıya bil-dirir.

if(MessageBox.Show(“Değişiklikler kaydedilsin mi?”, “Kayıt”, MessageBoxButtons.YesNoCancel) == DialogResult.Cancel)

{

//Eğer Cancel (İptal) düğmesine tıklanırsa bu kod bloğu çalışacak...

}

Özellikler, Metotlar ve Olaylar.NET Kontrolleri, görsel bir uygulama geliştirmek için gerekli programlanabilir altyapı elamanlarını oluştururlar. Yukarıda basitçe değinilen bu kontrollerle, özellikleri, metotları ve olayları kullanarak etkileşim sağlarız. Özellik, metot ve olay kavramlarını daha net açıklayabilmek için fiziksel olarak bir çalar saati, bir de .NET kontrolü olan Button nesnesini ele alalım.

Şekil 3.8

30 Bölüm 3

Page 39: YAZILIM VE VERİTABANI - Masonluk ve MasonlarOct 11, 2007  · Sunuş 1989… Bilgisayarla ilk tanıştığım ve Basic dili ile uygulama geliştirdiğim yıllardan itibaren bilgisayar

ÖzelliklerÖzellikler (Properties), kontrollerin görünüm, yerleşim veya davranış gibi çeşitli karakteristiklerini belirlerler.

Nasıl ki bir çalar saatin renk, genişlik, yükseklik gibi karakteristik, onu diğer çalar saatlerden ayırt etmemizi sağlayacak özellikleri varsa, bir Button kontrolünün de rengini, genişliğini ve yüksekliğini belirleyecek karakteristik özellikleri vardır. Örneğin Button kontrolünün, Text özelliği, Button’un üzerinde yazan metni belirlememizi sağlar.

Kontrollerin özelliklerine, tasarım anında Properties penceresinden ulaşılabileceği gibi, bu özellik-ler kod tarafından da okunup değiştirilebilir.

Kontrollerin birçok özelliği hem okunabilir hem de değiştirilebilirdir. Ancak bazı özellikler salt oku-nur (ReadOnly) olabilir. Bu tip özellikler Properties penceresinde görünmezler.

Kontrollerin birçok ortak özellikleri vardır. Bunlar;

Text Kontrollerin Text özelliği, üzerinde görüntülenen yazıdır. Bu özellik çalışma anında sıkça okunup değiştirilerek, kullanıcıyla iletişim sağlanır.

TextBox kontrolüne girilen bir değerin okunup Label kontrolüne yazılması için, kontrollerin Text özellikleri kullanılır.

private void button1_Click(object sender, System.EventArgs e)

{

//TextBox kontrolünün Text özelliğinin değeri Label kontrolünün Text özelliğine atanıyor.

label1.Text = textBox1.Text;

}

NameName özelliği kontrollere ulaşmak için kullanılan özelliktir. Birçok kontrolün Text özelliği aynı ola-bilir. Ancak her biri ayrı birer kontrol oldukları için, Name özelliklerin benzersiz olması gerekir.

textBox2.Text = textBox1.Text;

İki TextBox kontrolünün yazıları aynı, fakat isimleri farklıdır.

Şekil 3.9

Formda çalışılan nesnelere mantıklı isimler verilirse, kod yazımında çok büyük kolaylık elde edilir. Örneğin isim girilen bir TextBox’a tx-tAd, saatin gösterileceği bir Label’a lblZaman gibi...

31Visual C# .NET ile Windows Tabanlı Programlama

Page 40: YAZILIM VE VERİTABANI - Masonluk ve MasonlarOct 11, 2007  · Sunuş 1989… Bilgisayarla ilk tanıştığım ve Basic dili ile uygulama geliştirdiğim yıllardan itibaren bilgisayar

SizeSize kontrollerin büyüklük özelliğidir. Height (Yükseklik) ve Width (Genişlik) özelliklerinden oluşur. Genellikle tasarım anında belirlenen bu özellik, çalışma anında da değiştirilebilir.

label1.Height = 10;

label1.Width = 20;

BackColorKontrollerin arka plan renginin ayarlandığı özelliktir. Bu özelliğin değeri, Color yapısında tanımlı değerler ile belirlenir.

ForeColor Kontrollerin üzerindeki yazıların rengini belirler.

private void button1_Click(object sender, System.EventArgs e)

{

button1.BackColor = Color.Black;

button1.ForeColor = Color.White;

}

Visible

Kontrollerin ekranda görünüp görünmediklerini belirleyen özelliktir. true ve false olmak üzere iki değer alabilir

private void button1_Click(object sender, System.EventArgs e)

{

// Label1 kontrolü görünmez

label1.Visible = false;

// Label2 kontrolü görünür

label2.Visible = true;

}

Top, LeftKontrollerin, formun veya içine eklendiği başka bir kontrolün üzerindeki koordinatlarını belirleyen özelliklerdir. Top, üstten uzaklığı belirtirken, Left soldan uzaklığı belirtir. Uzaklıklar piksel cinsin-dendir.

Şekil 3.10

Sayısal görüntülerin (Ima-ge) en küçük parçası olan noktalara Piksel denir.

32 Bölüm 3

Page 41: YAZILIM VE VERİTABANI - Masonluk ve MasonlarOct 11, 2007  · Sunuş 1989… Bilgisayarla ilk tanıştığım ve Basic dili ile uygulama geliştirdiğim yıllardan itibaren bilgisayar

private void button1_Click(object sender, System.EventArgs e)

{

// Label1 kontrolünün Formun üstünden uzaklığı

label1.Top = 200;

// Label1 kontrolünün Formun solundan uzaklığı

label1.Left = 150;

}

MetotlarMetotlar (Methods) kontrollerin yapabileceği işlemlerdir. Yine bu bölümün başında verdiğimiz ça-lar saat ve Button örneğini kullanacak olursak, SaatiAyarla(), AlarmiKur(), çalar saate ait metotları oluştururken, Select() metodu Button kontrolünün seçili hale gelmesini sağlar.

Metotlar parametreyle veya parametresiz çağrılabilir. Parametreyle çağırmak, metodun girilen değere göre işlem yapacağını belirtir. Örneğin Focus (Odaklan) metodu, parametre beklemeden çalışır ve kontrolün seçilmesini sağlar.

private void button1_Click(object sender, System.EventArgs e)

{

// textBox1 kontrolünün Text’ ini temizle

textBox1.Clear();

// textBox1 kontrolüne odaklan

textBox1.Focus();

}

Kontrollerin bazı ortak metotları vardır. Bunlar,

BringToFrontÜst üste duran kontroller arasından en öne getirir.

SendToBackÜst üste duran kontrollerin en arkasına gönderir.

HideKontrolün görünmesini engeller.

ShowKontrolün görünmesini sağlar.

OlaylarOlaylar (Events), kontrollerin cevap verebileceği eylemlerdir. Örneğin alarmı kurulmuş bir çalar saat, Alarm olayına ses çıkartarak cevap verirken, bir Button kontrolü Click olayına, bir TextBox’taki yazının değişmesi ile karşılık verebilir. Bir olay gerçekleştiği zaman yapılacak işlem, ilgili olayın metoduna yazılır. Örneğin, Button1 isimli kontrolün üzerine tıklandığı zaman gerçekleştirmek is-tenen eylemler Button1_Click metoduna yazılır.

Visual Studio, olayların metot isimlerini Kontrolİsmi_Olayİsmi olarak biçiminde yazar.

Tasarım zamanı herhangi bir kontrole çift tıkladığınızda, kon-trolün varsayılan olayı için Vi-

Hatalı veya bilerek herhangi bir kontrol için atadığınız olayı iptal etmek için kod tarafından ilgili metodu silmeyin. Onun yerine, Properties penceresinden kontro-lün ilgili olayını bulun. Olayın üzerine sağ tıklayıp Reset komutunu verin.

33Visual C# .NET ile Windows Tabanlı Programlama

Page 42: YAZILIM VE VERİTABANI - Masonluk ve MasonlarOct 11, 2007  · Sunuş 1989… Bilgisayarla ilk tanıştığım ve Basic dili ile uygulama geliştirdiğim yıllardan itibaren bilgisayar

sual Studio sizin için bir metot oluşturur. Örneğin; Button için Click, Textbox için TextChanged. Varsayılanların dışında diğer olaylara ulaşmak isterseniz;

Kontrolün özelliklerini açın. (Kontrole bir kez tıklayıp F4 tuşuna basın ya da sağ tıklayıp Pro-peties komutu verin)

Açılan Properties penceresinde üzerinde sarı şimşek simgesi olan tuşa basın. Artık Proper-ties penceresi seçilen kontrolün olaylarını listeleyecektir. Tekrar özellikleri görüntülemek için aynı tuşun yanındaki üzerinde tablo resmi olan tuşa basmanız yeterli olacaktır.

Listeden istediğiniz olayı çift tıklayarak o olay için kod yazabilirsiniz. Alternatif olarak olayın karşına isimlendirme kurallarına uymak kaydı ile istediğiniz metot adını yazıp Enter tuşuna da basabilirsiniz.

ClickKontrol üzerine tıklandığı zaman tetiklenen olaydır. Windows tabanlı programlamada en sık kul-lanılan olaylardan biridir.

MouseDownFare, kontrolün üzerindeyken herhangi bir tuşuna basıldığı zaman gerçekleşen olaydır. Bu olay, Click olayından önce çalışır.

MouseUpFare, kontrolün üzerindeyken basılan tuş bırakıldığı zaman çalışır.

EnterKontrol seçildiği veya üzerine odaklanıldığı zaman gerçekleşen olaydır.

Leave Başka bir kontrol seçilmek üzere çıkıldığında, bu kontrolün Leave olayı tetiklenir.

Lab 3.1 Button YakalamaBu örneğimizde Button kontrolünün MouseEnter olayına ve rastgele sayı üretmeye değineceğiz.

File | New | Project komutu ile yeni bir Windows projesi açın. Project Type (Proje Tipi) Visual C#, Templates (Şablonlar) olarak Windows Form Application seçin ve ismini (Name) “But-ton_Yakalama“ olarak değiştirin.

1.

2.

3.

1.

Olayların çalışma sıralarını test etmek için tüm olay yordamlarına, mesaj kutusu çıkaran MessageBox.Show kodunu yazın. Daha sonra projeyi çalıştırıp kontrol-ler üzerinde yapılan değişikliklere göre olayların çalışma sıralarına bakın.

34 Bölüm 3

Page 43: YAZILIM VE VERİTABANI - Masonluk ve MasonlarOct 11, 2007  · Sunuş 1989… Bilgisayarla ilk tanıştığım ve Basic dili ile uygulama geliştirdiğim yıllardan itibaren bilgisayar

Formun boyutunu Size özelliğini kullanarak şekil 3.12‘deki gibi değiştirin.

Forma bir adet Button kontrolü ekleyin. Name özelliğini “btnYakala”, Text özelliğini ise “Beni Yakala” olarak değiştirin.

2.

3.

Şekil 3.11

Şekil 3.12

35Visual C# .NET ile Windows Tabanlı Programlama

Page 44: YAZILIM VE VERİTABANI - Masonluk ve MasonlarOct 11, 2007  · Sunuş 1989… Bilgisayarla ilk tanıştığım ve Basic dili ile uygulama geliştirdiğim yıllardan itibaren bilgisayar

btnYakala isimli Button’un MouseEnter olayına çift tıklayın.

MouseEnter olayına çift tıkladıktan sonra kod kısmında btnYakala_MouseEnter metodu olu-şacaktır. MouseEnter herhangi bir kontrol için fare üzerine geldiğinde gerçekleşecek olayı belirtir.

MouseEnter olayı için oluşan metodun içine düğmeyi hareket ettirecek kodları yazın:

private void btnYakala_MouseEnter(object sender, EventArgs e)

{

//Rastgele bir tamsayı üretebilmek için kullanacağımız Random sınıfının bir örneğini oluşturuyoruz.

Random r = new Random();

//0-500 arası üretilen tamsayılar button kontrolünün Left ve Top özelliklerine atanıyor. Böylece Button kontrolünün Form üzerindeki konumu değişmiş oluyor. Next metodunda istenilen en büyük sayının bir fazlası yazılır. Bu yüzden 500 değil 501 yazıldı.

btnYakala.Left = r.Next(0,501);

btnYakala.Top = r.Next(0,501);

}

Uygulamayı F5 tuşu ile çalıştırıp gözlemleyin.

Lab 3.2 Dokunma!Bu örneğimizde Button kontrolünü kullanarak basit bir oyun tasarlayacağız. Formumuzun görün-tüsü Şekil 3.14’teki gibi olacak.

4.

5.

6.

Şekil 3.13

36 Bölüm 3

Page 45: YAZILIM VE VERİTABANI - Masonluk ve MasonlarOct 11, 2007  · Sunuş 1989… Bilgisayarla ilk tanıştığım ve Basic dili ile uygulama geliştirdiğim yıllardan itibaren bilgisayar

Amacımız şeklin açık ucundan başlayarak fareyi kırmızı ve yeşil düğmelere değdirmeden mavi düğmenin üzerine getirebilmektir. Kırmızı ve yeşil düğmelere değdiğimizde oyunu kaybedecek, siyah düğmeden başlayarak mavi düğmeye değmeye çalışırsak ekranda “hile” mesajı ekranda görünecektir.

Yeni bir Windows projesi açın ve ismini “Dokunma“ olarak değiştirin.

Forma Tablo 3.1’deki kontrolleri ekleyin. Tüm kontrollerin Text özelliklerini boş bırakın.

btnYesilUzun isimli Button’un MouseHover olayına çift tıklayın. Kod kısmında btnYesilUzun_MouseHover adlı metot oluşacaktır. Buraya “Yandınız” mesajını gösterecek kodu yazın:

private void btnYesilUzun_MouseHover(object sender, EventArgs e)

{

MessageBox.Show(“Yandınız”);

}

Uygulamada bulunan btnYesilKisa, btnKirmiziKisa, BtnKirmiziUzun Button’ları btnYesilUzun Button’u ile aynı olayı kullanacağı için bu üç Button’a btnYesilUzun_MouseHover isimli me-tot atanacaktır. Bu işlemi yapabilmek için her üç Button’nun da MouseHover olayına Şekil 3.15’teki gibi açılan menüden btnYesilUzun_MouseHover metodunu atayın.

1.

2.

3.

4.

Şekil 3.14

Tablo 3.1Name BackColor

Button btnYesilUzun Green

Button btnYesilKisa Green

Button btnKirmiziUzun Red

Button btnKirmiziKisa Red

Button btnBitis Blue

Button btnEngel Black

37Visual C# .NET ile Windows Tabanlı Programlama

Page 46: YAZILIM VE VERİTABANI - Masonluk ve MasonlarOct 11, 2007  · Sunuş 1989… Bilgisayarla ilk tanıştığım ve Basic dili ile uygulama geliştirdiğim yıllardan itibaren bilgisayar

btnBitis ve btnEngel isimli Button’ların MouseHover olayına çift tıklayın. Oluşan metotlara “Yandınız” ve “Tebrikler, Kazandınız” mesajlarını gösterecek kodları yazın:

private void btnYesilUzun_MouseHover(object sender, EventArgs e)

{

//Fare btnYesilUzun,btnYesilKisa, BtnKirmiziUzun ve BtnKirmiziKisa adlı düğmelere değdiğinde “Yandınız” mesajını görünecek.

MessageBox.Show(“Yandınız”);

}

private void btnBitis_MouseHover(object sender, EventArgs e)

{

//Fare kırmızı ve yeşil düğmelere değmeden mavi düğmeye ulaşırsa “Kazandınız” mesajı görünecek.

MessageBox.Show(“Tebrikler, Kazandınız”);

}

private void btnEngel_MouseHover(object sender, EventArgs e)

{

//Fare siyah düğmeden başlayarak mavi düğmeye ulaşmaya çalışırsa “Hile Yapmayın” mesajı verecek.

MessageBox.Show(“Hile Yapmayın”);

}

Uygulamayı F5 tuşu ile çalıştırıp gözlemleyin.

5.

Şekil 3.15

38 Bölüm 3

Page 47: YAZILIM VE VERİTABANI - Masonluk ve MasonlarOct 11, 2007  · Sunuş 1989… Bilgisayarla ilk tanıştığım ve Basic dili ile uygulama geliştirdiğim yıllardan itibaren bilgisayar

Lab 3.3 Dijital SaatBu örneğimizde Timer nesnesini kullanarak ekranın orta-sında açılan bir dijital saat örneği hazırlayacağız.

Formunuzun görüntüsü Şekil 3.16’daki gibi olacak.

Yeni bir Windows projesi oluşturun ve ismini “Dijital-Saat” olarak değiştirin. Formunuza Tablo 3.2’deki kon-trolleri ekleyiniz.

tmrSaat’in Interval özelliğini 1000 ve Enabled özelliğini true olarak değiştirin.

Form1’in BackColor özelliğini ControlDark, FormBorderStyle özelliğini None ve StartPosition özelliğini CenterScreen yapın.

lblsaat’in Backcolor özelliğini ButtonFace ve TextAlign özelliğini MiddleCenter olarak değiş-tirin.

tmrSaat kontrolüne çift tıklayarak kod penceresine geçin. Her geçen saniye içinde o anki saati lblSaat kontrolünün Text özelliğinde gösteren kodu yazın:

private void tmrSaat_Tick(object sender, EventArgs e)

{

lblSaat.Text = DateTime.Now.ToLongTimeString();

}

Son olarak btnKapat’a çift tıklayarak kod penceresine geçin, Form1’i kapatacak btnKapat’ın Click olayına gerekli kodları yazın.

private void btnKapat_Click(object sender, EventArgs e)

{

//Formu kapatın.

this.Close();

}

F5 ile uygulamayı çalıştırdığınızda görüntüsü Şekil 3.17’deki gibi olmalıdır.

1.

2.

3.

4.

Şekil 3.16

Tablo 3.2Name Text

Label lblSaat [--]

Button btnKapat [ X ]

Timer tmrSaat

Şekil 3.17

39Visual C# .NET ile Windows Tabanlı Programlama

Page 48: YAZILIM VE VERİTABANI - Masonluk ve MasonlarOct 11, 2007  · Sunuş 1989… Bilgisayarla ilk tanıştığım ve Basic dili ile uygulama geliştirdiğim yıllardan itibaren bilgisayar

Ödevler1.Treeview ve Progressbar kontrollerini inceleyin. Her bir kontrolün herhangi 3 metodunu, 3 ola-yını ve 3 özelliğini araştırın.

2.Şekil 3.18’de görülen formu tasarlayın.

Şekil 3.18

40 Bölüm 3

Page 49: YAZILIM VE VERİTABANI - Masonluk ve MasonlarOct 11, 2007  · Sunuş 1989… Bilgisayarla ilk tanıştığım ve Basic dili ile uygulama geliştirdiğim yıllardan itibaren bilgisayar

4 Değişkenler ve Veri Tipleri

Page 50: YAZILIM VE VERİTABANI - Masonluk ve MasonlarOct 11, 2007  · Sunuş 1989… Bilgisayarla ilk tanıştığım ve Basic dili ile uygulama geliştirdiğim yıllardan itibaren bilgisayar

4 Değişkenler ve Veri TipleriDeğişkenler

Veri Tipleri

Çıkış Dizisi

Aritmetik Operatörler

Lab 4.1 Personel Formu

Lab 4.2 Global Değişken

Lab 4.3 Topla Birleştir

Ödevler

Page 51: YAZILIM VE VERİTABANI - Masonluk ve MasonlarOct 11, 2007  · Sunuş 1989… Bilgisayarla ilk tanıştığım ve Basic dili ile uygulama geliştirdiğim yıllardan itibaren bilgisayar

Değişkenler ve Veri TipleriBu bölümde değişkenler, veri tipleri, tip dönüşümleri ve aritmetik operatörler hakkında bilgi veril-mektedir. Değişken tanımlamanın ve kullanmanın, değişkenlerin veri tiplerini, veri tipi seçmenin önemini kavrayacaksınız.

Bu bölüm tamamlandıktan sonra:

Değişken tanımlayabilecek ve kullanabilecek,

Veri tiplerinin neler olduğunu öğrenecek,

Operatörler yardımı ile aritmetik işlem yapabileceksiniz.

DeğişkenlerUygulama geliştirirken, bazı verilerin daha sonra kullanılmak üzere bir yerde tutulması gerekebilir. Örneğin bir hesaplama yapılırken, önceden hesaplanmış veriler kullanılmak istenirse, bu verileri tekrar hesaplamak yerine hafızada tutmak performansı artıracaktır. Veya veritabanından alınan bir kullanıcı isminin hafızada tutulması, bu değer her istendiğinde veritabanına bağlanıp alınma-sına tercih edilmelidir. Verilerin bu şekilde hafızada tutulması değişkenler ile sağlanır.

C# dilinde bir değişkenin tanımlanması şu şekildedir :

tip değişkenadı;

Burada tip verinin içerdiği bilgiye en uygun veri tipini, değişkenadı ise daha sonra veri atamak ve okumak için kullanacağımız temsil ismini belirtir.

Değişkenler farklı türde verileri tuttukları için, farklı tiplere sahip olabilirler. Bir negatif veya pozitif sayıyı tutan değişken ile yazı tutan bir değişken farklı tiplere sahiptirler.

Örneğin bir kişinin ismini tutmak için :

string isim;

Bir kişinin yaş bilgisini tutmak için :

byte yas;

Bir kişinin maaş bilgisini tutmak için :

double maas;

Değişken isimlerini belirlerken bazı noktalara dikkat etmek gerekir.

Boşluk, nokta, soru işareti, noktalı virgül, çift tırnak, tek tırnak, aritmetik operatörler, karşılaş-tırma ve atama operatörleri, parantezler kullanılamaz.

Sayı ile başlayamaz.

Visual C#.NET dilinde tanımlı anahtar kelimeler kullanılamaz. Örneğin for,if,while,case,try,struct,do,switch,true,false.

Uygulama geliştirirken hatalı değişken tanımı yapılma-sı kodun derlenmemesine yol açacaktır. Hatalı bazı de-ğişken tanımları:

Değişken isimlerinde Türkçe karakter kul-lanılırsa, farklı dil seçenekli işletim sistem-lerinde çalışma anında hata üretecektir.

Page 52: YAZILIM VE VERİTABANI - Masonluk ve MasonlarOct 11, 2007  · Sunuş 1989… Bilgisayarla ilk tanıştığım ve Basic dili ile uygulama geliştirdiğim yıllardan itibaren bilgisayar

int int;

short (sayi);

int 333sayisi;

string “kelime”;

string <isim>;

Aynı tipteki değişkenler tek bir satır içinde tanımlanabilir.

int numara1, numara2;

Değişkenlere Değer AtamakDeğişkenlere değer atamak = operatörü ile yapılır. Eşitliğin sağ tarafındaki değer, sol tarafında bulunan değişkene atanır. Dolayısıyla sağ taraftaki ifadenin değeri değişmez.

numara1 = 10;

numara2 = sayi1;

Değişkenler tanımlandıkları sırada başlangıç değeri alabilirler.

string isim = “Yusuf Emre AYRILMAZ”;

Tanımlama işlemi yapıldıktan sonra kod gidişatı içerisinde değişkenin değeri tekrar değiştirilebilir.

isim = “Engin ÖREN”;

Değişkenlerin Kapsamı ve Yaşam SüreleriKaba bir ifade ile değişkenler içinde bulundukları scope (alan) ve alt alanlarda geçerlidir. Şimdi bu ifadeyi açıklayabilmek için scope kavramı üzerinde duralım.

Bir programı oluşturan kodlar bir bütün değildir. Kodlar görevlerine göre bölümlere ayrılmıştır ve programın gidişatına göre bu bölümler bir kere veya daha fazla çalıştırılabilir veya hiç çalıştırıl-mayabilir.

Şekil 4.1’deki duruma bakacak olursak; sınıftaki öğrenci sınıf içindeki, Bilgeadam içindeki ve so-kaktaki tüm çöp kovalarını kullanabildiğini görürsünüz. Bilgeadam içindeki bir misafir ise Bilgea-dam içindeki ve sokaktaki çöp kovalarını kullanabilir. Sokaktaki herhangi biri ise sadece sokakta bulunan çöp kovalarını kullanabilir. Erişebilirlik iç scope’lardan dışa doğru olmaktadır. Durumu, Tablo 4.1’den gözlemleyebilirsiniz.

Şekil 4.1

44 Bölüm 4

Page 53: YAZILIM VE VERİTABANI - Masonluk ve MasonlarOct 11, 2007  · Sunuş 1989… Bilgisayarla ilk tanıştığım ve Basic dili ile uygulama geliştirdiğim yıllardan itibaren bilgisayar

Şekil 4.2’deki örnekte görüldüğü gibi kod gelişi güzel yazılmamış, belli bloklar satır girişleri bı-rakılan boşluklarla scope’lara ayrılmıştır. Ancak bu boşluklar insan gözünün rahat okuyabilmesi için yapılmıştır. Yazılımsal hiçbir değeri yoktur. Bilgisayar bir scope’un nerede başlayıp nerede bittiğini { ve } karakterleri sayesinde anlayabilir.

Örnekte görüldüğü üzere önce enBuyukSayi adlı değişken tanımlanmış. Bu değişken tanımlan-dığı scope ve alt scope’larında kullanılabilir. Bu bilgiden yararlanarak örnekteki değişkenler hak-kında şunlar söyleyebiliriz:

enBuyukSayi: 12 ile 29 arasındaki tüm bölgede kullanılabilir.

ortancaSayi: 21 ile 28 arasındaki tüm bölgede kullanılabilir.

enKucukSayi: 25 ile 27 arası yani içinde bulunduğu scope’ta kullanılabilir.

Değişkenlerin hafızada tanımlandıklarından bahsetmiştik. Değişkenler kapsam dışına çıktıkların-da hafızadan da silinirler böylelikle yaşam döngüsü ( life cycle ) tamamlanmış olur. Örnekte 22 nolu satırda tanımlanan ortancaSayi isimli değişken 28 nolu satırda yaşam döngüsünü tamam-lamış olur.

Tablo 4.2, kod bloklarından hangi değişkenlere ulaşabilindiğini gösterir.

SabitSabit, sürekli aynı değeri tutan değişkendir. Uy-gulamanın çalışması boyunca değişmeyen bir değer kullanılıyorsa sabit kullanılması, kodun kolay okunmasını sağlayacaktır.

Tablo 4.1

Öğrenci Misafir Vatandaş

Sokak evet evet evet

Bilgeadam evet evet

Sınıf evet

C#’ta scope’lar süslü parantezler ile ifade edilir.

Şekil 4.2

Scope’ları film takılmış camlara ben-zetebiliriz. Dışarıdan içerisi görün-mezken içerden dışarısı görünür.

Tablo 4.2enBüyükSayi ortancaSayi enKucukSayi

Scope 1 evet

Scope 2 evet Evet

Scope 3 evet Evet evet

C# whitespace yani boşluk tuşu (space bar) ve sekme tuşu (tab) ile oluşan boşluklara karşı duyarlı değildir. Kod derlendiğinde bunlar otomatik olarak silinir.

45Değişkenler ve Veri tipleri

Page 54: YAZILIM VE VERİTABANI - Masonluk ve MasonlarOct 11, 2007  · Sunuş 1989… Bilgisayarla ilk tanıştığım ve Basic dili ile uygulama geliştirdiğim yıllardan itibaren bilgisayar

Sabitler tanımlandıktan sonra değiştirilemeyeceği için, ta-nımlandıkları anda değerlerinin verilmesi gerekir.

const double PI = 3.14;

Değişken Adlandırma YöntemleriDeğişkenleri adlandırmak (notasyon), kodların daha okunaklı ve anlaşılır olması açısından çok önemlidir. Bu sebepten dolayı yazılım dünyasında değişkenleri adlandırmak için belli başlı yön-temler geliştirilmiştir. Bunlar,

PascalDeğişkeni adlandırırken, değişken ismini oluşturan kelimelerin ilk harfleri büyük devamı küçük harf olacak şekilde yazılır.

Örnek: KatSayi, TextBox, ToString()

CamelPascal notasyonuna benzeyen Camel (Deve) isimlendirme standardında tek fark, ilk kelimenin tamamen küçük harf, geri kalan tüm kelimelerin ilk harfi büyük olacak şekilde yazılmasıdır.

Örnek: katSayi, adSoyad, tcKimlikNo

HungarianMacar (Hungarian) notasyonu olarak bilinen bu standart ile değişken tanımlarken, ilk 2 veya 3 harfte değişken tipinin veya kullanılan kontrolün kısaltması, sonrasında ise anımsatıcı kelime(ler) yazılır.

Örnek: dblIlkSayi, txtOgrenciAdi, strAciklama

UppercaseDeğişkenler isimlendirilirken tamamı büyük harfler ile yazılır.

Örnek: KATEGORIADI, OGRENCINO

Underscore Değişkenler isimlendirilirken, değişken adını oluşturan kelimeler altçizgi (undercore) ile ayrılır.

Örnek: KATEGORI_ADI, OGRENCI_NO

Veri TipleriVeri tipi, değişkenlerin tuttukları değerlerin türünü ve bellekte tutulacak boyutunu tanımlar. Ön-ceki bölümlerde bahsedildiği gibi yazılımların amacı kullanıcıdan aldığı veriyi işleyip saklamak ve istenildiğinde kullanıcıya sunmaktır. Kullanıcıdan alınan veriler, bilgisayarın geçici hafızasında (RAM) kısa süreli olarak saklanır. Verilerin saklandığı bu alanlara değişken (variable) diyoruz.

Gerçek hayattaki verileri incelediğimizde verilerin türlerine göre sınıflandırıldıklarını görürüz. Ör-neğin bir lig takviminde takımların isimleri ve puanları vardır. Takımların isimleri sözel bir veri içe-rirken puanları sayısal bir veri içerir ve puan bilgisi üzerinde matematiksel işlemler uygulanabilir.

Veriler üzerinde gerekli, işlemlerin yapılabilmesi için değişkenlerin türlerinin belirtilmesi gerekir. Örneğin bilgisayarımızda kesirli sayıların kullanılacağı daire alanı hesaplaması gibi bir problem çözeceksek girdilerin türünü belirtmemiz gerekir. C#’ta kesirli sayılar için double veri tipi bulun-maktadır.

Sabitlerin kapsam alanları değişkenler ile aynıdır. Genelde sabit değerler adlandırılır-ken tamamı büyük harf ile yazılır.

46 Bölüm 4

Page 55: YAZILIM VE VERİTABANI - Masonluk ve MasonlarOct 11, 2007  · Sunuş 1989… Bilgisayarla ilk tanıştığım ve Basic dili ile uygulama geliştirdiğim yıllardan itibaren bilgisayar

Değişkenlerin geçici hafızada (RAM) tutulduğundan bahsetmiştik. Dolayısıyla tanımladığımız her değişken geçici hafızada yer kaplamaktadır. Bu yüzden yazılım geliştiriciler kullanıcının RAM’ini tasarruflu kullanmak zorundadır. Çünkü yazacağımız uygulamanın çalışacağı bilgisayarda sade-ce bizim uygulamamız çalışmayacaktır. Uygulamamızın performansı ve kullanıcının refahı için en uygun veri tipini seçmek son derece önemli bir kıstastır. Örneğin üniversite notu hesaplayan bir program yazdığımızı düşünelim. Öğrenci notları maksimum 100 olabileceğinden bu veri için 0 ile 255 arası tam sayıları tutabilen byte değişkeni uygun olacaktır. Bu veri tipi, bilgisayarın RAM’inde 8 bitlik bir yer tutacaktır. Aynı işi int veri tipi ile de yapsaydık sonuç doğru çıkacaktı ancak bu sefer bilgisayarın RAM’inde 32 bitlik yer işgal edecek ve 4 kat fazla yer kaplayacaktık. Bu değerler, kü-çük ve önemsiz gibi görünebilir ancak yazacağınız uygulamada tanımlayacağınız değişkenlerin sayısını ve aynı anda bilgisayarda çalışan diğer yazılımların sayısını düşünüp bir hesap yaptığı-mızda, değişken tanımlarken titiz davranılması gerektiği ortaya çıkar.

Önce C#’ta değişkenlere atayabileceğimiz veri tiplerini tanıyalım;

Tamsayılar

Gördüğünüz gibi her veri tipinin işaretli ve işaretsiz versiyonları mevcut. Aralarındaki fark verilerin tutulduğu bitlerde ilk bitin 0 veya 1 alması durumudur.

Ondalık Sayılar

.NET’te ondalık tipli veriler için float ve double kullanılır. Tek duyarlıklı sayılar için float, çift duyar-lıklı sayılar için ise double kullanılır.

Tamsayılar

Tip Bit DeğerAralığı

byte 8 0’dan255’e

sbyte 8 -128’den127’ye

short 16 -32,768’den32,767’ye

ushort 16 0’dan65,535’e

int 32 -2,147,483,648’den2,147,483,647’ye

uint 32 0’dan4,294,967,295’e

long 64 -9,223,372,036,854,775,808’de 9,223,372,036,854,775,807’ye

ulong 64 0’dan18,446,744,073,709,551,615’e

Int16, Int32, Int64 .NET veri tiple-ridir. Visual C# dilindeki karşılık-ları short, int, long veri tipleridir.

OndalıkSayılar

Tip Bit DeğerAralığı

float 32 1.5E-45ile3.4E+38

double 64 5E-324ile1.7E+308

decimal128 1E-28ile7.9E+28

47Değişkenler ve Veri tipleri

Page 56: YAZILIM VE VERİTABANI - Masonluk ve MasonlarOct 11, 2007  · Sunuş 1989… Bilgisayarla ilk tanıştığım ve Basic dili ile uygulama geliştirdiğim yıllardan itibaren bilgisayar

Bir dairenin alanın hesaplanması gibi ondalık sayılar kullanılacak işlemlerde float ve double veri tipleri kullanılabilir. Aynı şekilde trigonometrik işlemlerde de ondalık sayı kullanıldığı için bu veri tipleri kullanılabilir.

Duyarlılığı fazla matematiksel işlemlerde ve parasal işlemlerde ondalık sayılarda yuvarlama iş-lemleri sonucunda bazı hatalarla karşılaşılır. Bu işlemlerde sonucu en doğru hesaplayabilmek için geniş ondalık sayıları tutan değişkenlere ihtiyaç vardır. .NET’te bu gibi işlemler için decimal veri tipi mevcuttur ve 28 ondalık basamaklı bir ifadeyi tutabilir.

Metinsel İfadeler

char veri tipi sadece tek bir karakter içerebilir. C#, diğer dillerde olduğu gibi 8 bitlik alanlar kullan-maz onun yerine Unicode (Evrensel Kod) dediğimiz karakter tipi kullanılır ve 16 bit değerindedir. Dolayısıyla 65,535 farklı karakteri temsil edebilir. Bu Çince gibi karışık dillerin dahi desteklenme-sini sağlar.

string veri tipi ise birden fazla karakter değeri tutmak için kullanılır. Bir isim, cümle, adres, makale gibi uzun verileri tutmak için kullanılır. Hafızada tuttuğu yer ise bir formül ile belirlenir:

20+(n/2)*4

n burada string içerisinde tutulan karakter sayısını temsil eder. Örneğin “İstanbul” verisi için hafı-zada 20 + ( 8 /2 ) * 4 = 36 bitlik alan kullanılır.

String, diğer veri tiplerinden yapı bakımından oldukça farklıdır. İlerleyen derslerimizde öğrenece-ğiniz referans tipinde bir değişkendir. Bunun anlamı verinin hafızada ayrılan bir yerde değil de onu temsil eden başka alanlarda tutulduğudur.

İlkokul derslerimizde öğrendiğimiz gibi harfler kelimeleri oluşturur, kelimelerde cümleleri. Aynı şe-kilde char’lar da string’i oluştururlar. Yine ilerleyen derslerde öğreneceğiniz dizi kavramı ile ifade etmek gerekirse string bir char dizisidir. Eski programcılar metinsel ifadeleri tutmak için char dizisi tanımlardı ve bunu her metinsel ifade için gerçekleştirmek tam anlamıyla bir işkence idi.

Mantıksal İfadeler

bool veri tipi sadece 2 değer alabilir, true ya da false. bool veri tipi sayesinde değişkenleri man-tıksal olarak tanımlayabiliriz. Mantıksal ifadeler daha çok kesin değerler için kullanılır, evet-hayır, var-yok, açık-kapalı, doğru-yanlış gibi. Örneğin, öğrencinin ödevini yapıp yapmadığını tutacak bir değişken tanımlayalım adı da odevYapildiMi olsun, eğer ödevini yapmış ise değeri true değilse false yaparız.

Metinselİfadeler

Tip Bit DeğerAralığı

char 16

string 20+(n/2)*4

Mantıksalİfadeler

Tip Bit DeğerAralığı

bool 16 true-false

48 Bölüm 4

Page 57: YAZILIM VE VERİTABANI - Masonluk ve MasonlarOct 11, 2007  · Sunuş 1989… Bilgisayarla ilk tanıştığım ve Basic dili ile uygulama geliştirdiğim yıllardan itibaren bilgisayar

//değişken ilk tanımladığında değer verilmez ise false değerini alır.

bool odevYapildiMi;

//daha sonradan değeri değiştirilebilir.

Çıkış DizisiC# dilinde metinsel ifadelerden string veri tipini kullanırken, bazı belli başlı karakterleri kullanama-yız. Bunun sebebi bu karakterleri C# dilinin de kullanıyor olmasıdır. Örneğin çift tırnak. Bununla birlikte bazen alt satıra geçmek de isteyebiliriz. İşte bu durumlarda string ifadeler içinde Escape Squence denen çıkış dizileri kullanmalıyız.

Karakter Açıklaması

\’ Tek tırnak

\” Çift Tırnak

\\ Ters bölü

\0 Null

\a Uyarı (Alert)

\b Gerisilme (Backspace)

\f Sayfa İleri (Form Feed)

\n Satır Sonu (New Line)

\r Satır Başı (Carrige Return)

\t Yatay Sekme (Tab)

\v Dikey Sekme (Verical Tab)

Örnek kullanımlar:

string text = “Bilgeadam \”bilgi\” teknolojileri.”;

Bilgeadam “bilgi” teknolojileri.

string text = “Bilgeadam \nbilgi teknolojileri.”;

Bilgeadam

bilgi teknolojileri.

string text = “Bilgeadam \tbilgi teknolojileri.”;

Bilgeadam bilgi teknolojileri.

Tip Dönüşümleri

Değişkenlerle çalışırken bir tipteki değeri, farklı bir tipteki değişkene atama ihtiyacı duyabilirsiniz. Bu işlem çok yaygın olarak kullanılır. .NET Framework iki tür tip dönüşümünü destekler, kapalı dönüşüm (implicit conversion) ve açık dönüşüm (explicit conversion). Kapalı dönüşümde, tip dö-nüşümü işlemi tamamen .NET Framework’e bırakılırken, açık dönüşümde net bir şekilde değerin hangi türe dönüştürüleceği belirtilir.

1 int Toplam;

2 byte adet = 5;

3 Toplam = adet;

odevYapildiMi = true;

49Değişkenler ve Veri tipleri

Page 58: YAZILIM VE VERİTABANI - Masonluk ve MasonlarOct 11, 2007  · Sunuş 1989… Bilgisayarla ilk tanıştığım ve Basic dili ile uygulama geliştirdiğim yıllardan itibaren bilgisayar

Bu örnekte tip dönüşümü 3 nolu satırda gerçekleşiyor. Sağ taraftaki değişkenin değeri sol taraf-taki değişkenin tipine yani int tipine çevriliyor ve Toplam adlı değişkene atanıyor. Tipler uyumlu olduğundan, yani int veri tipi, byte verit tipinin alabileceği değerleri desteklediğinden, sistem çevir-me işlemini otomatik yapar. Buna kapalı dönüşüm (implicit conversion) denir.

1 int i;

2 double de = 10.56;

3 i = de;

Burada ise 3 nolu satırda hata oluşacaktır. Çünkü long veri tipi kendisinden daha küçük olan int veri tipine kapalı olarak çevrilemez. C#’ta tüm tipler birbiri ile uyumlu değildir. Bu tür durumlarda kapalı tip dönüşümü yapılamaz. Uyumsuz tipler arasında atama işlemi tip ataması (cast) ile yapı-lır. Buna da açık dönüşüm (explicit conversion) denir. Bu da değeri çevrilecek değişkenin önüne parantez içerisinde tip yazılarak sağlanır. Örneğin, aşağıdaki örnekte, byte veri tipindeki adet değişkeninin değerinin, int veri tipine çevrilerek Toplam değişkenine atanacağı belirtilmiştir.

Toplam = (int) adet;

Byte tipindeki bir değişken değişkenin değeri ne olursa olsun, int’e çevirebilir ama tersi bir durum söz konusu olmadığından, yani int veri tipinin alabileceği tüm değerler byte veri tipine çevrileme-yeceğinden, çevrilecek tip mutlaka belirtilerek tip ataması yapmak gerekir.

1 byte yol;

2 byte zaman = 5;

3 byte hiz = 10;

4 yol = (byte)(zaman * hiz);

Örnekte tanımlanmış tüm değişkenler byte tipindedir ancak 4 nolu satırdaki tip ataması yapılmaz-sa uygulamamız derleme hatası verecek ve derlenmeyecektir. Hatanın sebebi, byte değişkenlerin çarpımının, int veri türünde sonuç vermesidir. Veri tiplerinde byte’ın alabildiği maksimum değeri hatırlayınız. Uygulama iki adet byte değişkenin olası en büyük değeri aldığını düşünüp çarpım sonucunun yine bir byte değişkende tutamayacağına karar vererek sonucu int tipinde döndür-mektedir. Ancak bir çarpma işleminin sonucunun byte’ın sınırlarını geçmediğinden eminseniz ve ısrarla sonucu byte değişkende tutmak istiyorsanız, yukarıdaki gibi yol değişkenine atama işlemi-ni gerçekleştirirken, tip atamasını da yapabilirsiniz.

Aşağıdaki tip dönüşüm tablosu, kapalı dönüşümü hangi veri tipleri için kullanabileceğinizi göste-rir,

Tip Dönüşebileceği Tip

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

int long, float, double, decimal

uint long, ulong, float, double, decimal

long, ulong float, double, decimal

float double

char ushort, int, uint, long, ulong, float, double, decimal

50 Bölüm 4

Page 59: YAZILIM VE VERİTABANI - Masonluk ve MasonlarOct 11, 2007  · Sunuş 1989… Bilgisayarla ilk tanıştığım ve Basic dili ile uygulama geliştirdiğim yıllardan itibaren bilgisayar

Açık ve kapalı tip dönüşümlerinin yanı sıra System.Convert sınıfı kullanılarak da tip dönüşümleri yapılabilir.

1 double sayi1 = Convert.ToDouble(txtSayi1.Text);

2 double sayi2 = Convert.ToDouble(txtSayi2.Text);

3 double carpim = sayi1 * sayi2;

4 txtSonuc.Text = Convert.ToString(carpim);

Örnekte txtSayi1, txtSayi2 ve txtSonuc üç TextBox’ı temsil etmektedir. TextBox’ın Text özelliği bilindiği üzere string veri tipinde değer taşır.

Satır 1 ve 2’de txtSayi1 ve txtSayi2 adlı TextBox’lara girilen string değerler matematik işleminden geçirilmesi için Convert.To yöntemi ile double veri tipine dönüştürülür.

Satır 3’te çarpım işlemi yapılarak, çıkan sonuç carpim adlı double veri tipine sahip bir değişkene atanır.

Satır 4’te ise carpim değişkenin değeri, txtSonuc TextBox’ının Text özelliğine atanabilmesi için string tipine dönüştürülür.

Satır 4’te kullanılan Convert.ToString() yerine tüm veri tiplerinin sahip olduğu ToString() metodu da kullanılabilir.

4 txtSonuc.Text = carpim.ToString();

Burada dikkat edilmesi gereken en önemli nokta, çevrilmek istenilen değerin çevrilecek tipe uyum-lu olmasıdır. Aksi halde uygulamanız o noktada hata üretecektir. Örneğin:

double sayi = Convert.ToDouble(“yirmiiki”);

Görüldüğü üzere yirmiiki yazısı bir rakam değeri belirtmez. Türkçe olarak anlamlı gelse de bilgi-sayar için bir anlam taşımaz. Kod şu şekilde olursa, bir hata alınmaz:

double sayi = Convert.ToDouble(“22”);

Başka bir örnek olarak tarih dönüştürme verilebilir:

DateTime dogumTarih = Convert.ToDateTime(“6.5.1980”);

Hata vermezken,

DateTime dogumTarih = Convert.ToDateTime(“6.15.1980”);

Hata verecektir. “6.15.1980” tarihi ge-çerli değildir çünkü 15.ay yoktur.

Aşağıdaki tablo, System.Convert sınıfı kullanılarak yapılabilecek tip dönüşümlerini kısaca özet-lemektedir,

Tarih formatı işletim sisteminin Bölgesel Ayarlarına (Regional and Lan-guage Options) göre değişkenlik gösterebilir. Bu örnekte kullanılan bil-gisayarın Bölgesel Ayarların’ın Türkiye (Turkish) olduğu varsayılmıştır.

51Değişkenler ve Veri tipleri

Page 60: YAZILIM VE VERİTABANI - Masonluk ve MasonlarOct 11, 2007  · Sunuş 1989… Bilgisayarla ilk tanıştığım ve Basic dili ile uygulama geliştirdiğim yıllardan itibaren bilgisayar

Aritmetik Operatörler

Toplama ( + ) , Çıkarma ( - ) , Bölme ( / ), Çarpma ( * ) matematiksel ifadelerde nasıl çalışıyorsa C#’ta da öyle çalışır.

Bölümden KalanBölme ( / ) işlemi kalansız bir sonuç vermektedir. 10/3‘ün sonucu 1 dir. Kalanı bulmak için ise Bölümden kalan (mod) ( % ) ifadesinden yararlanılır.

int bolunen = 10;

int bolen = 3;

int bolum;

int kalan;

bolum = 10 / 3;

kalan = 10 % 3;

Burada bolum 3, kalan ise 1 değerini alacaktır.

Arttırma ve EksiltmeGenellikle programlama dillerinde bir değişkenin değerini 1 arttırmak veya 1 eksiltmek için şu yola başvurulur:

Tip Dönüşümü Açıklama

Convert.ToBoolean() İlgili tipi, bool tipine çevirir.

Convert.ToByte() İlgili tipi, byte tipine çevirir.

Convert.ToChar() İlgili tipi, char tipine çevirir.

Convert.ToDateTime() İlgili tipi, datetime tipine çevirir.

Convert.ToDecimal() İlgili tipi, decimal tipine çevirir.

Convert.ToInt32() İlgili tipi, int tipine çevirir.

Convert.ToString() İlgili tipi, string tipine çevirir.

Tip dönüşümleri ile ilgili ha-talarla nasıl başa çıkacağınız Bölüm 5’te ele alınmıştır.

AritmetikOperatörler

+ Toplama

- Çıkarma

* Çarpma

/ Bölme

% BölümdenKalan

++ Arttırma

-- Eksiltme

52 Bölüm 4

Page 61: YAZILIM VE VERİTABANI - Masonluk ve MasonlarOct 11, 2007  · Sunuş 1989… Bilgisayarla ilk tanıştığım ve Basic dili ile uygulama geliştirdiğim yıllardan itibaren bilgisayar

x = x +1;

y = y -1;

Ancak C#’ta bunun için daha kısa bir yol kullanılmıştır:

x+=1;

x-=1;

veya daha farklı olarak şu yöntem de kullanılabilir:

x++;

y--;

Bu ifade de bir önceki örnektekiyle aynı işi yapar. Ancak bazı durumlarda arttırma veya eksiltme ifadelerinin değişkenin sol tarafından kullanıldığında görülür:

++x;

--y;

Şimdi bir örnekle iki kullanım arasındaki farkı görelim:

1 int sene = 2000;

2 int gelecekSene;

3 gelecekSene = sene++;

Sonuç

sene = 2001

gelecekSene = 2000

Burada sene değişkeninin değeri 2001’dir. Çünkü üçüncü satırda sene++ ifadesiyle değerinin 1 arttırıldığını görüyoruz. gelecekSene‘nin değeri ise 2000 kalmıştır çünkü arttırma işlemi atama işleminden sonra gelmiştir.

1 int sene = 2000;

2 int gelecekSene;

3 gelecekSene = ++sene;

Sonuç

sene = 2001

gelecekSene = 2001

Bu örnekte ise 3 nolu satırda bir fark görüyoruz. Arttırma işareti değişkenden evvel yazılmış. Art-tırma işareti değer atamalarında değişkenden evvel eklenirse önce arttırma işlemine yapılır sonra değişkenin değeri atanır.

Lab 4.1 Personel FormuBu örneğimizde çeşitli kontrolleri kullanarak basit bir bilgi formu oluşturup kullanıcının girdiği do-ğum tarihinden yaş hesaplanacaktır.

53Değişkenler ve Veri tipleri

Page 62: YAZILIM VE VERİTABANI - Masonluk ve MasonlarOct 11, 2007  · Sunuş 1989… Bilgisayarla ilk tanıştığım ve Basic dili ile uygulama geliştirdiğim yıllardan itibaren bilgisayar

Formun tasarımı Şekil 4.3’teki gibi olacaktır.

Yeni bir Windows projesi açın ve ismini ”personelFormu” olarak değiştirin.

Tablo 4.3’teki kontrolleri formunuza ekleyin.

Bunlara ek olarak, txtAdres adlı textbox’ın Multi-Line özelliğini true yapınız. lboxSehir adlı ListBox kontrolünün Items özelliğine “Istanbul” ,”Ankara” ve “Izmir” i ekleyin.

1.

2.

Şekil 4.3

Tablo 4.3Name Text

Label lblAd Adınız

Label lblSoyad Soyadınız

Label lblCinsiyet Cinsiyetiniz

Label lblDogumTarihi Doğum Tarihiniz

Label lblAdres Adresiniz

Label lblSehir İliniz

Label lblYas

TextBox txtAd

TextBox txtSoyad

TextBox txtAdres

RadioButton rdbErkek Erkek

RadioButton rdbBayan Bayan

DateTimePicker dtpDogum

ListBox lboxSehir

Button btnGonder Formu Gönder

lblYas adlı Label kontrolünün Text özelliği boş olduğu için Form üzerinde görünmemektedir. lblYas kontrolü dtpDogum adlı kontrolün altında yer almalıdır.

54 Bölüm 4

Page 63: YAZILIM VE VERİTABANI - Masonluk ve MasonlarOct 11, 2007  · Sunuş 1989… Bilgisayarla ilk tanıştığım ve Basic dili ile uygulama geliştirdiğim yıllardan itibaren bilgisayar

Formu dolduran kişi DateTimePicker kontrolünden doğum tarihini seçtiği anda lblYas adlı Label kontrolünün Text özelliğine kişinin yaşı yazılacak.

dtpDogum adlı kontrolün ValueChanged olayına çift tıklayın ve dtpDogum_ValueChanged metoduna yaşı hesaplayan kodları yazın:

private void dtpDogum_ValueChanged(object sender, EventArgs e)

{

//Bugünün yılını alıp simdikiYıl adlı int tipindeki değişkene eşitliyoruz.

int simdikiYil = DateTime.Now.Year;

//DateTimePicker a girilen tarihin yılını alıp dogumYili adlı int tipindeki değişkene eşitliyoruz.

int dogumYili = dtpDogum.Value.Year;

int yas = simdikiYil - dogumYili;

//Kullanıcının yaşını lblYas adlı labela yazıyoruz.

lblYas.Text = yas.ToString()+” yaşındasınız”;

}

Uygulamayı çalıştırıp gözlemleyin.

Lab 4.2 Global DeğişkenBu örneğimizde değişkenlerin kapsamını inceleyeceğiz. Öncelikle bu konudaki bir cümleyi hatır-layalım:

“değişkenler içinde bulundukları scope (alan) ve alt alanlarda geçerlidir.”

Formun tasarımı Şekil 4.4’teki gibi olacaktır.

Yeni bir Windows projesi açın ve adını ”DegiskenlerinKapsami” olarak değiştirin.

Tablo 4.4’teki kontrolleri formunuza ekleyin.

3.

4.

1.

2.

Şekil 4.4

Tablo 4.4Name Text

Label lblSayac 0

Button btnArttir +

Button btnEksilt -

55Değişkenler ve Veri tipleri

Page 64: YAZILIM VE VERİTABANI - Masonluk ve MasonlarOct 11, 2007  · Sunuş 1989… Bilgisayarla ilk tanıştığım ve Basic dili ile uygulama geliştirdiğim yıllardan itibaren bilgisayar

Önce Form1 Class’ı içerisinde sayac değişkenini tanımlayın.

int sayac;

Şimdi btnArttir isimli Button’un üzerine çift tıklayarak kod penceresine geçin ve btnArttir’in Click olayına gerekli kodları ekleyin:

private void btnArttir_Click(object sender, EventArgs e)

{

sayac++;

lblSayac.Text = Convert.ToString(sayac);

}

Bu kod önce sayac değişkeninin değerini bir arttırır ve sonucu lblSayac isimli Label kontrolünün Text özelliğine tip dönüşümü yaparak eşitler.

Şimdi btnEksilt isimli Button’un üzerine çift tıklayarak kod penceresine geçin ve btnEksilt’in Click olayına gerekli kodları ekleyin:

private void btnEksilt_Click(object sender, EventArgs e)

{

sayac--;

lblSayac.Text = Convert.ToString(sayac);

}

Bu kod önce sayac değişkeninin değerini bir eksiltir ve sonucu lblSayac isimli Label kontrolünün Text özelliğine tip dönüşümü yaparak eşitler.

btnArttır’a bastığımızda sayac değişkenimiz bir artıyor, btnEksilt’e tıkladığımızda ise bir azalıyor. Görüldüğü gibi her iki metodun içerisinde aynı değişkeni kullanabiliyoruz. Çünkü sayac değişkeni bu metotların bir üst seviyesinde tanımlandı.

Lab 4.3 Topla BirleştirBu örneğimizde + operatörünün sayısal ve metinsel veri tiplerine göre nasıl bir davranış göster-diğini inceleyeceğiz.

Yeni bir Windows projesi açın ve adını ” ToplaBirlestir” olarak değiştirin.

Formunuza Tablo 4.5’teki kontrolleri ekleyin.

btnTopla adlı Button kontrolüne çift tıklayıp toplama işlemi için gerekli kodları yazın:

private void btnTopla_Click(object sender, EventArgs e)

{

3.

4.

5.

1.

2.

3.

Tablo 4.5Name Text

TextBox txtSayi1TextBox txtSayi2TextBox txtSonucButton btnTopla Topla

56 Bölüm 4

Page 65: YAZILIM VE VERİTABANI - Masonluk ve MasonlarOct 11, 2007  · Sunuş 1989… Bilgisayarla ilk tanıştığım ve Basic dili ile uygulama geliştirdiğim yıllardan itibaren bilgisayar

txtSonuc.Text = txtSayi1.Text + txtSayi2.Text;

}

Uygulamayı çalıştırın. txtSayi1’e 10 ve txtSayi2’ye de 20 değerini girip Topla düğmesine ba-sın. Sonuç 1020 olacaktır. Bunun sebebi (+) operatörü iki string ifade olduğunda toplama yapmak yerine birleştirme işlemi yapmasıdır.

Şimdi btnTopla adlı Button’nun Click olayındaki kodu şu şekilde değiştirin:

private void btnTopla_Click(object sender, EventArgs e)

{

int sayi1 = Convert.ToInt32(txtSayi1.Text);

int sayi2 = Convert.ToInt32(txtSayi2.Text);

int toplam = sayi1 + sayi2;

txtSonuc.Text = toplam.ToString();

}

Uygulamayı tekrar çalıştırın ve aynı sayıları tekrar girin. Topla düğmesine tıkladığınızda sonucun 30 olduğunu göreceksiniz. Bunun sebebi (+) operatörünün sayısal değerler için toplama işlemi yapıyor olmasıdır.

ÖdevlerBir bankanın kredi bölümünde çalışanların işini kolaylaştıracak bir uygulama yazın. Uygulama kullanıcıdan çekilmek istenen kredi miktarını, faiz oranı ve vadeyi alıp müşterinin ödeyeceği faiz miktarını hesaplayacaktır.

Uygulamanın görüntüsü Şekil 4.5’teki gibi olacaktır.

Faizi hesaplamak için kullanacağımız formül:

Faiz = ( Ana Para x Faiz Oranı x Gün ) / 360

4.

5.

Şekil 4.5

57Değişkenler ve Veri tipleri

Page 66: YAZILIM VE VERİTABANI - Masonluk ve MasonlarOct 11, 2007  · Sunuş 1989… Bilgisayarla ilk tanıştığım ve Basic dili ile uygulama geliştirdiğim yıllardan itibaren bilgisayar
Page 67: YAZILIM VE VERİTABANI - Masonluk ve MasonlarOct 11, 2007  · Sunuş 1989… Bilgisayarla ilk tanıştığım ve Basic dili ile uygulama geliştirdiğim yıllardan itibaren bilgisayar

5 Hatalar ve Hataların Giderilmesi

Page 68: YAZILIM VE VERİTABANI - Masonluk ve MasonlarOct 11, 2007  · Sunuş 1989… Bilgisayarla ilk tanıştığım ve Basic dili ile uygulama geliştirdiğim yıllardan itibaren bilgisayar

5 Hatalar ve Hataların

GiderilmesiGiriş

Hatalar

Lab 5.1 Yaş Hesaplama

Lab 5.2 Dışarıdan Uygulama Çalıştırma

Lab 5.3 Geçiş Notu Hesaplama

Ödevler

Page 69: YAZILIM VE VERİTABANI - Masonluk ve MasonlarOct 11, 2007  · Sunuş 1989… Bilgisayarla ilk tanıştığım ve Basic dili ile uygulama geliştirdiğim yıllardan itibaren bilgisayar

Hatalar ve Hataların GiderilmesiBu bölümde uygulama geliştirirken karşımıza çıkan hata çeşitlerini, bu hataların yakalanma ve giderilme süreçlerini öğreneceksiniz.

Bu bölüm tamamlandıktan sonra:

Hata kavramını anlayacak,

Derleme hataları, çalışma zamanı hataları ve mantıksal hataları öğrenecek,

Try..catch yapısını anlayacak,

Visual Studio’nun hata ayıklamada kullanıcıya nasıl yardımcı olduğunu öğreneceksiniz.

GirişYazılım dünyasında kesin olan bir şey varsa, o da hatasız kod yazılamayacağıdır. Uygulama-yı geliştiren yazılımcının deneyimi ne olursa olsun, projenin büyüklüğü ne olursa olsun hatalar kaçınılmazdır. Hatalar, yazılımcının yanlışlıkla yazdığı bir koddan, daha önce öngöremediği bir durumdan veya kullanıcıdan kaynaklı olabilir. Yazılım geliştirirken hatalardan korkulmaması gere-kir. Korkulacak olan durum, bu hataların, uygulama piyasa sürüldükten sonra ortaya çıkmasıdır. Yazılım geliştirirken uygulamanın verdiği her hatayı çözerek, daha sağlıklı bir uygulama ortaya çıkarmak yazılımcının temel görevlerinden bir tanesidir.

Kullanıcıya daha sağlıklı bir ürün verebilmek için yazılım firmaları, piyasaya sürecekleri uygulama-larının hatalarını, önce kendi test mühendisleri sayesinde bulur ve düzeltir. Daha sonra bu uygu-lamanın beta sürümlerini çıkarıp son kullanıcılardan gelecek hata bildirimlerini alırlar ve o hataları da giderirler. Bu uygulama geliştirme süreci de bazen yeterli olmaz, sırasıyla CTP (Community Technology Preview) sürümlerini, daha sonra da RC (Release Candidate) sürümlerini çıkarırlar. Tüm bu sürümler sonucu kullanıcılardan gelen hata bildirimleri doğrultusunda, son hataları da ayıklayıp ürünü piyasaya çıkarırlar. Hatta büyük ölçekli programlarda bunlar bile çoğu zaman tüm hataları arındırmak için yeterli olmaz; hataları gidermek için uygulamalara patch (yama) veya service pack çıkarırlar.

Şekil 5.1

Page 70: YAZILIM VE VERİTABANI - Masonluk ve MasonlarOct 11, 2007  · Sunuş 1989… Bilgisayarla ilk tanıştığım ve Basic dili ile uygulama geliştirdiğim yıllardan itibaren bilgisayar

Yazılım jargonunda hatalara bug, hata ayıklama işlemine ise debugging denir. Aslında bug ve debug kelimelerinin, hata ve hata giderme yerine kullanılması oldukça gariptir. Çünkü bug ingiliz-ce böcek, debuging ise böcekten arındırmak demektir. Bu kelimelerin neden yazılım dünyasında kullanıldığının ilginç bir hikayesi vardır. 9 Eylül 1947’de Amerika’da Mark II adlı askeri bir bilgi-sayar durup dururken bozulur. Mark II, bir oda büyüklüğünde, birçok elektronik parçadan oluşan ve amacı sadece matematik işlemleri yapmak olan bir bilgisayardır. Uzun araştırmalardan sonra teknisyenler sonunda bozukluğun sebebini bulurlar: Devrelerin arasına sıkışıp kalan, kendiyle beraber, devreleri de kömüre döndüren bir böcek. Böceğin devreden alınması ve gerekli tamiratın yapılmasından sonra Mark II tekrar sorunsuz şekilde çalışmaya başlar. Mark II’den sorumlu asker Grace Murray Hopper, bilgisayarın günlük rapor defterine böceği bantla yapıştırıp şu notu düşer: “First actual case of bug being found.” (Böceğin ilk vakası bulunmuştur.). O tarihten bu tarihe bilgisayarlarda meydana gelen hatalara “bug”, bu hataları çözme işlemine de “debug” denir. O defter sayfası günümüzde, National Museum of American History müzesinde sergilenmektedir. (Böceğin ve Grace Hopper’ın resimlerini http://en.wikipedia.org/wiki/Admiral_Grace_Hopper ad-resinde bulabilirsiniz.)

Uygulamalarınızı hatasız (bu durum imkansız olduğuna göre en az hataya sahip demek daha doğru olur) bir şekilde kullanıcıya sunmak bir yazılım geliştirici olarak temel görevlerinizden bir tanesidir. Bu bölümde hataları nasıl bulacağınızı, daha da önemli olarak bu hataları nasıl gide-receğinizi göreceksiniz.

HatalarYazılım dünyasında karşılaşılan hata tipleri üçe ayrılır:

Derleme hataları

Çalışma zamanı hataları

Mantıksal hatalar

Derleme hataları, büyük çoğunlukla kodların yanlış yazılmasından kaynaklanmaktadır. Tanımlan-mayan bir değişkenin kullanılması, satır sonuna noktalı virgül konulmaması, eksik süslü parantez kullanımı gibi. Bu hatalar, bulunması en kolay hatalardır. Çünkü kodlar derlenmez ve Visual Stu-dio size bu tip hataların nerede olduğunu tek tek gösterir.

Çalışma zamanı hataları ise çoğunlukla kullanıcı yüzünden oluşan hatalardır. Örneğin bir TextBox’ta yazılan değeri, kodunuz tarih (DateTime) tipine dönüştürmek isteyebilir. Kullanıcı eğer geçerli bir tarih girmezse programınız hata verecektir. Bu tip hatalar bu bölümde göreceğiniz try..catch yapısı ile çözülebilir.

En zor bulunan hatalar ise mantık hatalarıdır. Çünkü bu hatalar oluştuğunda hiçbir şekilde hata mesajı almazsınız. Sadece kodlar istediğiniz gibi sonuç vermez, o kadar. Örneğin döviz kurları ile işlem yapan bir uygulamanızın da, kullanıcılarınız hesaplamaların bazen yanlış çıktığını size söy-leyebilir. Bu hata bir satırda yanlışlıkla artı işareti yazmak yerine eksi işareti yazmaktan da meyda-na gelebilir, internetten döviz kurlarını çekerken yanlışlıkla dolar yerine avro kurunu çekmenizden de kaynaklanabilir. Belki daha başka akla hemen gelmeyecek sorunlardan da kaynaklanabilir. Bu durumda yüzlerce hatta binlerce kod satırı arasından hatanın nereden kaynaklandığını bulmanız gerekir. Kulağa imkansız gibi gelse de, neyse ki Visual Studio bize bu durumlar için oldukça yar-dımcı olur.

Derleme HatalarıDerleme hatalarını programlama dilinin kurallarına uymayan (Sözdizimi Hatası, Syntax Eror) veya derleyicinin her durumda hata vermesi kesin olan (Derleyici Hatası, Compiler Error) kodlar yazıl-dığında gerçekleşir. Sözdizimi hatasına örnek olarak şunu verebiliriz:

C# için değişken tanımlama kuralı şöyledir:

62 Bölüm 5

Page 71: YAZILIM VE VERİTABANI - Masonluk ve MasonlarOct 11, 2007  · Sunuş 1989… Bilgisayarla ilk tanıştığım ve Basic dili ile uygulama geliştirdiğim yıllardan itibaren bilgisayar

[Geçerli Bir Veri Tipi] [Değişken Adı];

Ayrıca değişken adının rakamla başlamaması, boşluk veya özel karakter barındırmaması gibi tanımlama ile başka kuralları da vardır. Eğer bu kurallardan birine uyulmazsa hata alınacaktır. Örneğin:

int deneme //satır sonunda noktalı virgül yoktur.

int44 deneme; //int44 diye bir veri tipi yoktur.

int 123deneme; //değişken adları rakam ile başlayamaz.

Derleyici hatasına örnek olarak da şunu verebiliriz:

int deneme;

deneme = “Yalçın”;

Burada söz dizimi hatası yoktur. İlk satırdaki değişken tanımlaması doğrudur. İkinci satırda ise bir değişkene değer atama söz dizimi doğrudur. Ancak int veri tipi bekleyen bir değişkene string bir değer atandığı için derleyici ikinci satırda hata verecektir.

Eğer kodunuzda derleme hatası yapmışsa-nız, uygulamanızı çalıştırmak istediğinizde Visual Studio, Şekil 5.2’deki hata penceresini gösterecektir.

Buradaki mesajın Türkçesi şu şekildedir: “Uy-gulamanızda derleme hataları bulunmuştur. Devam etmek ve en son başarılı şekilde der-lenen uygulamanızı çalıştırmak ister misiniz?”

Bu pencerede “Yes” (Türkçe işletim sistemlerinde “Evet”) düğmesine tıklarsanız programınız o anki haliyle değil, var ise en son düzgün çalıştığı haliyle çalışacaktır. Örneğin, ekrana sadece bir mesaj kutusunda “Merhaba” yazısı gösteren bir uygulama yazdınız. Çalıştırdınız ve bir sorun çıkmadı. Uygulamanız tam istediğiniz gibi çalıştı. Daha sonra uygulamanıza, internete bağlanıp, İstanbul’un hava durumunu çekip, bunları kullanıcıya gösteren kodlar eklediniz. Bu işlemleri ya-parken de formunuza TextBox, ProgressBar, ListBox gibi birçok kontrol eklediniz. Ancak değişken tanımlanan bir satırda yanlışlıkla satırın sonuna noktalı virgül koymayı unuttunuz. Uygulamanızı görmek için çalıştırdığınızda, derleme hatanız olduğu için Şekil 5.2’deki hata penceresini göre-ceksiniz. Eğer “Yes” seçeneği ile devam ederseniz yeni oluşturduğunuz formu ve hava durumu görmek yerine, daha önceki uygulamanızı yani ekranda size sadece “Merhaba” diyen bir mesaj kutusu göreceksiniz. Çünkü yeni yazdığınız kodlarda derleme hatası olduğu için yeni kodlarınız değil, bir önceki hatasız kodlarınız çalışacaktır. Buradan şu sonucu çıkarabilirsiniz; eğer binlerce satırlık programınızın sadece bir yerinde derleme hatası yaparsanız, bundan sadece o kodun dahil olduğu bölüm değil (örneğin hatalı satırın olduğu bir düğmenin tıklanma olayı) tüm proje etkilenir. Bu sebeple projelerinizde hiçbir şekilde derleme hatası bulunmamalıdır.

Derleme anında, kodunuzun mantıklı bir şekilde çalışıp çalışmadığı kontrol edilmez; sadece ve sadece kodunuzun programlama dilinin sözdizimine uyup uymadığı ve tür dönüşümlerinin doğru yapılıp yapılmadığı kontrol edilir. Bu yüzden yapı olarak doğru ancak istenildiği şekilde çalışmayan projelerinizde derleme hatası almazsınız.

Şekil 5.2

Şekil 5.2’deki mesaj çıkınca asla “Do not show this dialog” seçeğini işaretleyip “Yes” düğmesine tıklamayın. Bu durum, derleme hatalarına sahip bir uygulama başlatılmaya çalışıldığında size uyarı çıkarmadan otomatik olarak eski çalışır sürümü göstermesine neden olur. Eğer böyle bir durumla karşılaşmışsanız tekrar eski ayarlara getirmek için Visual Studio’nun Tools menüsünün altın-daki Options seçeneğini tıklayın. Karşınıza çıkan listeden Projects and Solutions düğümünü kenarındaki artı işaretine tıklayarak açın ve Build and Run seçeneğini seçin. Sağ tarafta açılan ekrandaki “On Run, when build or deployment errors occur:” yazılı combobox’ta “Prompt to launch” seçeneğini seçip, OK düğmesine tıklayın.

63Hatalar ve Hataların Giderilmesi

Page 72: YAZILIM VE VERİTABANI - Masonluk ve MasonlarOct 11, 2007  · Sunuş 1989… Bilgisayarla ilk tanıştığım ve Basic dili ile uygulama geliştirdiğim yıllardan itibaren bilgisayar

Eğer Şekil 5.2’deki pencerede “No” düğmesine tıklarsanız, Şekil 5.3’te görülen Error List pen-ceresi ortaya çıkacaktır. Bu pencerede uygulamada geçen tüm derleme hatalarının bir listesi sunulur.

Her satırda, hatanın tanımı, hangi dosyada, satırda, sütunda ve projede olduğu gösterilir. Örne-ğin Şekil 5.3’teki hata satırı tam olarak şunu ifade eder: Hatalar (Project) adlı proje içerisindeki Form1.cs (File) adlı kod dosyasının 26. (Line) satırının 21. (Column) karakterinde, int veri tipi bekleyen bir değişkene “string” bir değer atanmaya çalışılmış. (Description)

Sizin için gereken en önemli sütun tanım (description) sütunudur. Diğer sütunlardaki bilgiler sizi çok fazla ilgilendirmez. Çünkü hatayı görebilmek için ilgili projedeki, ilgili dosyayı açıp, satır ve sütun saymazsınız. Bunu Visual Studio sizin için otomatik olarak yapar. Hatayı görmek için, Error List penceresindeki hatayı gösteren satıra çift tıklamanız yeterlidir. Visual Studio imleci hatanın olduğu noktaya konumlandırır.

Ayrıca Şekil 5.4’te göreceğiniz gibi hatanın olduğu yerin altı çizilir.

Ayrıca fare ile altı çizili yerin üzerinde biraz beklerseniz hata mesajı Şekil 5.5’teki gibi görülecektir.

Projenizde kod yazmayı bitirdikten sonra derleme hatası olup olmadığını kontrol etmek mantıklı bir iş değildir. Hatalar, kod yazılırken sık aralıklarla kontrol edilmelidir. Projeyi test etmek için her seferinde çalıştırmak bir süre sonra tam bir işkence olur. Çünkü amaç sadece projede derleme hatası olup olmadığını görmektir. Ancak çalıştırılarak test edilmeye kalkışılırsa, hata varsa Şekil 5.2’deki pencere karşınıza çıkar ve buradan “No” düğmesine tıklayıp hataları görürsünüz. Eğer hata yoksa uygulama boşu boşuna açılır. Hele bir de ilk açılışta uzun süren bir işlem yapıyorsa (internetten bilgi indirmek, veritabanına bağlanıp veri çekmek gibi) boş yere vakit kaybederseniz. Derleme hata mesajlarını görmek için uygulamayı çalıştırmak yerine derlemeyi (Build) tercih etme-lisiniz. Derleme işlemini ya Visual Studio’nun Build menüsü altındaki “Build [Proje Adı]” seçeneğini tıklayarak ya da CTRL+Shift+B kısayolu sayesinde gerçekleştirirsiniz. Bu yüzdendir ki deneyimli

.NET yazılımcılarının klavyelerindeki CTRL, Shift ve B tuşları diğer tuşlara nazaran daha fazla aşınmıştır. Eğer derleme işlemi başarı ile

Şekil 5.3

Şekil 5.4

Hatalı yerdeki alt çizginin rengi hatanın tipini de belirtir. Kırmızı, sözdi-zimi hatalarında, mavi derleyici hatalarında kullanılır. Eğer alt çizginin rengi yeşil ise ilgili yerde hata yoktur, sadece bir uyarı vardır.

Şekil 5.5

Yazılım geliştirme ile yeni tanışmışsanız her yazdığınız satırdan sonra CTRL+Shift+B kom-binasyonunu kullanarak proje derlemeyi alışkanlık haline getirmelisiniz. Zaman içerisinde kazandığınız deneyimle beraber derlemelerin sıklığını biraz daha azaltabilirsiniz.

64 Bölüm 5

Page 73: YAZILIM VE VERİTABANI - Masonluk ve MasonlarOct 11, 2007  · Sunuş 1989… Bilgisayarla ilk tanıştığım ve Basic dili ile uygulama geliştirdiğim yıllardan itibaren bilgisayar

gerçekleşirse Visual Studio’nun en alttaki Status Bar’ının solunda “Build Succeeded” (Derleme başarı ile gerçekleşmiştir.) yazısı görünür.

Sıkça Alınan Derleme HatalarıBu bölümde sıkça alınan derleme hatalarının nedenleri ve çözümleri üzerinde durulmuştur. Örnek üzerinde gösterilen kodlar sadece hataya odaklanabilmek için sadeleştirilmiştir. Burada anlatı-lanlar dışında bir hatanın daha birçok nedeni ve çözümü olabilir. Burada amaçlanan, yazılı-ma yeni başlayan kişilerin en çok karşılaştığı hataların nedenlerini ve çözümlerini sunarak, onlara yol göstermektir.

X expected

Hatanın Muhtemel Çeşitleri:

; expected

} expected

) expected

Hatanın Muhtemel Nedenleri:

Hata mesajında X olarak gösterilen karakterin kullanımı unutulmuştur.

Hatanın Muhtemel Çözümleri:

Şekil 5.6’da görülen satıra çift tıklanılır. İmlecin konumlandığı yere X olarak belirtilen karakter yazılır.

Örnek:

int sayac //satır sonunda ; yok. “; expected” hatası alınır.

Cannot implicitly convert type X to Y

Hatanın Muhtemel Çeşitleri:

Cannot implicitly convert type ‘string’ to ‘int’

Cannot implicitly convert type ‘string’ to ‘System.DateTime’

Cannot implicitly convert type ‘decimal’ to ‘bool’

Cannot implicitly convert type ‘string’ to ‘System.Windows.Forms.TextBox’

Hatanın Muhtemel Nedenleri:

Y veri tipi bekleyen bir değişkene X veri tipinde bir değer atanmaya çalışılmıştır.

Form üzerindeki bir kontrolün özelliğine değer atanmaya çalışılırken sadece kontrolün adı yazılmıştır.

Şekil 5.6

Şekil 5.7

65Hatalar ve Hataların Giderilmesi

Page 74: YAZILIM VE VERİTABANI - Masonluk ve MasonlarOct 11, 2007  · Sunuş 1989… Bilgisayarla ilk tanıştığım ve Basic dili ile uygulama geliştirdiğim yıllardan itibaren bilgisayar

Hatanın Muhtemel Çözümleri:

Değişkenin beklediği veri tipinde bir değer girmek ya da uygunsa ConvertTo, Parse gibi yön-temlerle tür dönüştürme işlemi gerçekleştirmektir.

Kontrolün sadece adı yerine kontrolün özelliği yazılır.

Örnek:

int sayac;

sayac = textBox1.Text;

int yas;

yas=”on yedi”;

Burada textBox1’in Text özelliği string veri tipindedir. Bu değer, int veri tipindeki sayac değişkeni-ne atanmak istendiğinde bu hata meydana gelir. İkinci bir hata da yas adlı int veri tipindeki değiş-kene “on yedi” string değerini atamaya çalışmaktır. Bu hataların çözümü şu şekilde olacaktır:

int sayac;

sayac = Convert.ToInt32(textBox1.Text);

int yas;

yas=17;

Hatanın ikinci türüne örnek olarak şu verilebilir. Bir formda textBox1 adında bir textbox ve com-boBox1 adında bir combobox olsun. Yapılmak istenen textBox1’ de “Yalçın” yazısı çıkarmak ve comboBox1’in elemanlarına da “Emre” yazısını eklemektir.

textBox1 = “Yalçın”;

comboBox1 = “Emre”;

Sadece kontrol adları kullanıldığı için bu kodlar hatalıdır. Doğru yazımı şu şekildedir:

textBox1.Text = “Yalçın”;

comboBox1.Items.Add( “Emre”);

Invalid token ‘X’ in class, struct, or interface member declaration

Hatanın Muhtemel Çeşitleri:

Invalid token ‘(‘ in class, struct, or interface member declaration

Invalid token ‘=’ in class, struct, or interface member declaration

Hatanın Muhtemel Nedenleri:

Kod yazılmaması gereken bir scope’a kod yazılmıştır. Bazı scope sadece değişken tanımlamayı kabul edip, diğer tür kodlarda hata verir. Bazı scope’lar ise değişken tanımlama da dahil hiç bir kod yazımına izin vermez. Şekil 5.9’da bu scope’lar gösterilmiştir.

Şekil 5.8

66 Bölüm 5

Page 75: YAZILIM VE VERİTABANI - Masonluk ve MasonlarOct 11, 2007  · Sunuş 1989… Bilgisayarla ilk tanıştığım ve Basic dili ile uygulama geliştirdiğim yıllardan itibaren bilgisayar

Hatanın Muhtemel Çözümleri:

Hata veren kod satırı doğru scope’a taşınmalıdır.

Örnek:

namespace Hatalar

{

public partial class Form4 : Form

{

MessageBox.Show(“Merhaba”);

private void button1_Click(object sender, EventArgs e)

{

}

}

}

Burada işaretli kod Şekil 5.9’da da görüleceği gibi yanlış bir scope’a yazılmıştır. Hatalı satırı şu şekilde taşırsak hatayı gideririz:

namespace Hatalar

{

public partial class Form4 : Form

{

private void button1_Click(object sender, EventArgs e)

{

MessageBox.Show(“Merhaba”);

}

}

}

Şekil 5.9

67Hatalar ve Hataların Giderilmesi

Page 76: YAZILIM VE VERİTABANI - Masonluk ve MasonlarOct 11, 2007  · Sunuş 1989… Bilgisayarla ilk tanıştığım ve Basic dili ile uygulama geliştirdiğim yıllardan itibaren bilgisayar

A namespace does not directly contain members such as fields or methods

(Bkz: Invalid token ‘X’ in class, struct, or interface member declaration)

The name ‘X’ does not exist in the current context

Hatanın Muhtemel Çeşitleri:

The name ‘sayac’ does not exist in the current context

The name ‘yas’ does not exist in the current context

The name ‘maas’ does not exist in the current context

The name ‘dogumTarih’ does not exist in the current context

Hatanın Muhtemel Nedenleri:

Hata mesajında X olarak belirtilen değişken tanımlanmamıştır.

Hata mesajında X olarak belirtilen değişken kullanımından daha aşağıda bir satırda tanım-lanmıştır.

Hatanın Muhtemel Çözümleri:

Hatalı değişken tanımlanmalıdır veya tanımlandığı satır kullanımından üst bir satıra alınmalıdır.

Örnek:

public partial class Form1 : Form

{

private void button1_Click(object sender, EventArgs e)

{

sayac = 0;

}

}

Burada sayac adlı daha önce tanımlanmayan bir değişken kullanılmıştır. Aynı hata şu kod blo-ğunda da alınır:

public partial class Form1 : Form

{

private void button1_Click(object sender, EventArgs e)

{

sayac = 0;

int sayac; //kullanımdan sonra tanımlanmış

}

}

Bu kodun doğru yazımı şu şekilde olacaktır:

Şekil 5.10

68 Bölüm 5

Page 77: YAZILIM VE VERİTABANI - Masonluk ve MasonlarOct 11, 2007  · Sunuş 1989… Bilgisayarla ilk tanıştığım ve Basic dili ile uygulama geliştirdiğim yıllardan itibaren bilgisayar

public partial class Form1 : Form

{

//sayac değişkeni burada da tanımlanabilirdi

private void button1_Click(object sender, EventArgs e)

{

int sayac;

sayac = 0;

}

}

Type or namespace definition, or end-of-file expected

Hatanın Muhtemel Çeşitleri:

Type or namespace definition, or end-of-file expected

Hatanın Muhtemel Nedenleri:

Daha önce açılmamış bir süslü parantez kapatılmıştır. Başka bir deyişle fazladan kapatma süslü parantezi ( } ) kullanılmıştır.

Hatanın Muhtemel Çözümleri:

Fazla olan kapatma süslü parantezi silinir.

Doğru satıra açma süslü parantezi ( { ) eklenir.

Örnek:

Burada işaretli satırdaki süslü parantez fazladır.

public partial class Form2 : Form

{

private void button1_Click(object sender, EventArgs e)

{

}

}

}

Doğru yazımı şu şekilde olacaktır:

public partial class Form2 : Form

{

private void button1_Click(object sender, EventArgs e)

{

}

}

Şekil 5.11

69Hatalar ve Hataların Giderilmesi

Page 78: YAZILIM VE VERİTABANI - Masonluk ve MasonlarOct 11, 2007  · Sunuş 1989… Bilgisayarla ilk tanıştığım ve Basic dili ile uygulama geliştirdiğim yıllardan itibaren bilgisayar

Hata Mesajları Hakkında Daha Fazla YardımBu bölümde her hata mesajı ve o hata mesajlarının nedenlerinin hepsi yer almamıştır. Buradaki hata mesajları tanımları, yazılıma yeni başlayanlar için bir kılavuz niteliği taşıma amacı gütmek-tedir.

Eğer bu bölümde ele alınan hatalardan daha farklı bir hata mesajı alırsanız veya bu anlatımlar sizin probleminizi kapsamıyorsa daha ayrıntılı bir yardım almalısınız. Bölüm 2’de anlatılan “Yardımı Kullanmak” başlığı size bu konuda

yol gösterecektir. Ayrıca hata mesajları hakkında MSDN’den yardım almak için Visual Studio’da bir kısayol mevcuttur. Hata listesi ekranında, yardım almak istediğiniz hata satırının üzerine sağ tıklayıp Show Error Help’i seçerseniz bu hata ile ilgili MSDN’in sayfasına yönlendirilirsiniz.

Çalışma Zamanı HatalarıHatalar her zaman derleme esnasında bulunmazlar. Bazen kodlar, sözdizimi ve derleyici hatası almayacak şekilde doğru yazıldığı halde çalışırken koşullara göre hata verebilirler.

Bu durumu şu örnekle açıklayabiliriz: Bir araba şirketi araba üretir ve müşterilere satar. Arabaların üretim bandından sorunsuz ve çalışır olarak çıkması, günlük hayatta bu arabaların her zaman çalışacağı anlamına gelir mi? Tabi ki gelmez. Peki, hangi sorunlar yaşanabilir?

Müşterilerden biri arabaya benzin yerine çay koyarsa araba çalışmayacaktır.

Müşterilerden biri arabayı suyun içerisinde kullanmaya çalışırsa araba çalışmayacaktır.

Hava sıcaklığı -40 dereceye düşerse araba çalışmayacaktır.

Arabanın yedek parçaya ihtiyacı olduğu zaman, satış kataloğunda adresi verilen yedek parça dükkânı yerinde yoksa araba çalışmayacaktır.

Daha bu gibi birçok problem sayılabilir. Bu sorunların benzeri de yazdığınız uygulamalarda sizin başınıza gelebilir.

Kullanıcı tarih girmesi gereken bir TextBox’a rakam yazabilir.

Microsoft Office için yazdığınız bir eklenti, Office olmayan bir bilgisayarda çalıştırılmaya çalı-şılabilir.

Uygulamanın çalıştığı bilgisayarda bir işlem için yeterli bellek (RAM) olmayabilir.

İnternet üzerinden Merkez Bankası’ndan döviz kuru çektiğiniz bir uygulamada Merkez Bankası’nın sunucusu o an için çalışmıyor olabilir.

Bu tip hatalara “Çalışma Zamanı Hatası” denir. Ça-lışma zamanı hataları, uygulamaların hatasız bir şekilde çalıştığı koşullardan daha farklı koşulların meydana gelmesiyle oluşur.

Eğer süslü parantez açılmışsa fakat kapa-tılmamışsa “} expected” hata mesajını gö-rürsünüz. Çözüm için (Bkz: X expected)

Şekil 5.12

Net Framework, çalışma zamanı hatalarını, her za-man değil sadece istisnai durumlarda oluştuğu için “exception” (istisna) olarak adlandırılır.

70 Bölüm 5

Page 79: YAZILIM VE VERİTABANI - Masonluk ve MasonlarOct 11, 2007  · Sunuş 1989… Bilgisayarla ilk tanıştığım ve Basic dili ile uygulama geliştirdiğim yıllardan itibaren bilgisayar

Uygulamayı çalıştıran kullanıcılar, çalışma zamanı hatası oluştuğunda Şekil 5.13’teki pencereyi görürler.

Bu mesajda sadece hatanın kaba bir tanımı bulunmaktadır. Şekil 5.13’teki örnekte hata için sade-ce “Input string was not in a correct format” (Girilen yazı doğru biçimde değil) tanımı verilmektedir. Bu hatanın hangi satırda olduğu, hatanın daha detaylı bir açıklaması gibi bilgiler yoktur. Details (Detay) düğmesine tıklanırsa Şekil 5.14’teki gibi çok karışık, kullanıcıların, hatta yazılımcıların, hiçbir şey anlamayacağı yazılar ortaya çıkar.

Böyle bir hata mesajını kullanıcının görmesi, istenmeyen bir durumdur. Bu ekran yerine kullanıcı-ya, gayet anlaşılır bir şekilde “Lütfen geçerli bir tarih giriniz” gibi bir mesaj gösterilebilir.

Kullanıcının gördüğü bu sevimsiz pencere neyse ki sadece uygulama, ilgili exe dosyası üzerin-den çalıştırıldığında görülür. Visual Studio’da proje üzerinde çalışılırken aynı hata daha farklı bir pencere ile gösterilir.

Şekil 5.15’te de görüldüğü üzere bu pencere daha yazılımcı dostudur. Hata olan satır sarı renk ile işaretlenir. Hata penceresinin en üstünde hata mesajı yer alır. Troubleshooting tips yazan alanda ise bu hatanın muhtemel çözümleri yer alır. Bu çözümlerden birine tıklanıldığında o hata ilgili MSDN sayfası açılır.

Ancak hatanın bilinmesi tek başına bir çözüm sağlamaz. Örneğin bu senaryoda kullanıcının gir-diği veri sayıya dönüştürülebilir olmadığı için bu hata alınır. Bu sebepten ötürü kullanıcıdan veri alma kodu kaldırılamaz. Bu hatayı çözmek için çeşitli yöntemler uygulanabilir. Örneğin sadece rakam kabul eden bir TextBox kullanılabilir veya bu satıra gelmeden önce girilen değerin raka-

Şekil 5.13

Şekil 5.14

Şekil 5.15

71Hatalar ve Hataların Giderilmesi

Page 80: YAZILIM VE VERİTABANI - Masonluk ve MasonlarOct 11, 2007  · Sunuş 1989… Bilgisayarla ilk tanıştığım ve Basic dili ile uygulama geliştirdiğim yıllardan itibaren bilgisayar

ma dönüştürülüp dönüştürülmeyeceği kontrol edilebilir. Ancak örnekte verilen kod çok basit bir koddur. Çok daha karışık ve uzun bir kodda meydana gelebilecek aksaklıkların hepsi düşünüle-meyebilir. Bu yüzden, hangi olasılıkta olursa olsun, bir hata oluştuğunda programı durdurmayıp, kullanıcıya anlaşılır bir şekilde hatayı anlatan, belki de hata oluştuğunda yazılımcının sonradan inceleyebilmesi için bir dosyaya bu hataları yazan veya hatayı e-posta olarak gönderen bir çözü-me ihtiyaç olacaktır. Bu çözümün adı try..catch’dir.

try..catchtry..catch, uygulamada hata oluştuğunda yapılması istenilen kodların yazıldığı try ve catch isimli bloklardan oluşan bir yapıdır. try bloğunda hata vermesi muhtemel kodlar yer alır. Eğer bir hata oluşursa, uygulama hata oluşan satırda durup hata vermez; bunun yerine catch bloğu içerisinde-ki kodlar çalışmaya başlar. catch bloğundaki kodlar çalıştıktan sonra uygulama hata oluşan try bloğu içerisinden değil, try..catch yapısı altındaki kodlardan devam eder. Böylelikle uygulamamız hata oluşsa bile sağlıklı bir şekilde çalışmaya devam eder.

try..catch yapısı şu şekildedir:

try

{

//Try Bloğu

//Buraya hata vermesi muhtemel kodlar yazılır

}

catch (Exception ex)

{

//Catch Bloğu

//Buraya hata oluştuğunda çalışacak kodlar yazılır

}

Örnek olarak bir projede textBox1 isimli bir TextBox kontrolünüz var. Kullanıcının bu kontrole girdiği değeri, matematik işleminde kullanılmak için int veri tipine çevirmek istiyorsunuz. Bu kodda meydana gelebilecek muhtemel çalışma zamanı hatasını önceden kestirebilirsiniz. Kullanıcı int veri tipine dönüştürülemeyecek bir veri girerse uygulama hata verir. Bu durum oluştuğunda, kul-lanıcıya anlaşılır bir şekilde uyarı vermek de istersiniz. Bu yüzden kodunuzu try bloğu içerisine yazarsınız. Bu blok içerisindeki kodda bir hata oluştuğunda, beklediğiniz hata veya başka bir hata fark etmez, catch bloğu içerisindeki kod çalışır.

try

{

int sayi;

sayi = Convert.ToInt32(textBox1.Text);

}

catch (Exception ex)

{

MessageBox.Show(“Geçerli bir sayı giriniz.”);

}

Catch bloğunun yanındaki (Exception ex) bölümü, oluşan hata ile ilgili detaylı bilgi almak için kul-lanılır. Örneğin catch bloğu içerisinde kullanılan ex.Message hatanın verdiği mesajı, ex.Source ise hatanın nerede oluştuğunu döner.

72 Bölüm 5

Page 81: YAZILIM VE VERİTABANI - Masonluk ve MasonlarOct 11, 2007  · Sunuş 1989… Bilgisayarla ilk tanıştığım ve Basic dili ile uygulama geliştirdiğim yıllardan itibaren bilgisayar

Bir try bloğunun birden fazla catch bloğu olabilir. Böylelikle oluşacak hataya göre farklı kodlar çalıştırabilirsiniz. Örneğin bir dosya açma programında dosyanın belirttiğiniz yolda olmaması bir hatadır, dosyanın bozuk olması başka bir hatadır.

Bir de try..catch yapısı ile beraber çalışan finally bloğu vardır. Bu blok tamamen opsiyoneldir, kullanıp kullanmamak sizin kararınıza kalmıştır. finally bloğunda yazılan kodlar, try içerisinde bir hata oluşsun ya da oluşmasın her zaman çalışır.

Bu iki senaryoyu da eğitiminizin iler-leyen zamanlarında göreceksiniz.

Mantiksal HatalarMantıksal hatalar, uygulamaların istenildiği gibi çalışmadığı zamanlarda meydana gelen hata-lardır. Diğer hata türlerinin aksine bu hataları mesaj olarak almak imkansızdır. Mantıksal hatalar %100 yazılımcıdan kaynaklanır. Genellikle algoritmaların yanlış kurulmasından veya yanlışlıkla bir kod yazılmasından meydana gelir.

Mantıksal hataları daha iyi anlamak için araba örneğine geri dönelim. Araba üretim bandından sağlıklı bir şekilde çıkar yani arabada bir derleme hatası yoktur. Motoru vardır, dört kapısı vardır, tekerleri vardır ve hepsi yerli yerindedir. (derleme hatalarının uygulamanın nasıl çalıştığıyla ilgi-lenmediğini hatırlayınız) Ancak arabada bir problem vardır. Silecek çalıştırılmak istenildiği zaman arabanın kornası çalar. Bu bir çalışma zamanı hatası değildir. Çünkü araba çalışmamazlık etmez veya silecek çalıştırılmak istenildiğinde elektriğin fazla gelmesinden dolayı birden durmaz. Sorun sadece arabada bir parçanın istenildiği gibi çalışmamasıdır. Bunun muhtemel sebebi elektrikten sorumlu teknisyenin bir anlık dalgınlığı sonucu silecek kabloları ile elektrik kablolarını yanlış yer-lere bağlaması olabilir, silecek kablosunun gevşek sıkılmasından dolayı kayıp kornaya değmesi olabilir, direksiyon içindeki kabloların yanlış bağlanmasından kaynaklanıyor olabilir ve bu gibi birçok farklı neden olabilir.

Gerçek bir örnek vermek gerekirse:

decimal ortalama;

decimal sayi1;

decimal sayi2;

sayi1 = 10;

sayi2 = 30;

MessageBox.Show(ortalama.ToString());

Bu kod 10 ve 30’un ortalamasını alıp bunu kullanıcıya göstermek amacı ile yazılmıştır. Ancak çalıştırıldığında görülür ki, ekrana 20 yerine 40 yazan bir mesaj kutusu çıkar. Bu kodlarda hiç bir şekilde derleme hatası yoktur. Her şey C# kurallarına uygun olarak yazılmıştır, tür dönüşümleri de doğru bir şekilde yazılmıştır. Kodda çalışma zamanı hatası da yoktur. Çünkü decimal veri tipi bekleyen değişkenlere doğru tipte veriler atanmıştır ve kullanıcıdan değer alınmadığı için başka bir koşul oluşması da söz konusu değildir. Ancak yine de uygulama doğru çalışmaz. Bütün sorun, yazılımcının ortalama işlemini yapan satırda (işaretli satır) toplamı ikiye bölmesini unutmasından veya yanlışlıkla silmesinden kaynaklanmaktadır.

Görüldüğü üzere mantıksal hatalar oluştuğunda bir hata mesajı alınmaz. Ortada sadece yolunda gitmeyen bir durum vardır. Bu sorunun nereden kaynaklandığını bulmak ve onu gidermek yazı-lımcının görevidir. Mantıksal hataları yakalamak diğer hata türlerini yakalamaktan daha zordur. Yukarıdaki örnekte ortalama değişkeninin onlarca satır sonra başka bir matematik işleminde kul-

Uygulamanızda try..catch bloğu kullanıp, catch bloğu içerisini boş bırakır-sanız uygulamanız asla hata vermez. Ancak bu istenmeyen bir durumdur. Çünkü uygulamanın verdiği hata çözülmeyip, sadece göz ardı edilmiştir.

ortalama = sayi1 + sayi2;

73Hatalar ve Hataların Giderilmesi

Page 82: YAZILIM VE VERİTABANI - Masonluk ve MasonlarOct 11, 2007  · Sunuş 1989… Bilgisayarla ilk tanıştığım ve Basic dili ile uygulama geliştirdiğim yıllardan itibaren bilgisayar

lanıldığını düşünün. Ortalama değişkeni yanlış değer taşıdığı için o sonuç da ha-talı çıkacaktır. Yine onlarca satır sonra bir önceki durumdan çıkan sonucun yine bir işlemden geçip, kullanıcıya gösterildiğini varsayın. Şansı yaver giderse kullanıcı bu durumu fark eder ve yazılımcıya haber verir. Yazılımcı hatalı sonuç veren satı-rın yakınlarında bile olmayan küçücük bir hatayı bulmak zorundadır. Peki, yüzlerce hatta binlerce satır kod arasından mesaj bile vermeyen küçücük bir hata nasıl bulu-nur? İşte bu “böcek ayıklama” sanatıdır.

Debugging (Hata ayıklama) işleminin önce mantığını anlamanız gerekir. Şöyle bir ör-nek verilebilir:

Evinizde uzun zamandır kullandığınız bir televizyonunuz var. İlk aldığınız günden beri kumanda-nızdan televizyonu kapatamıyorsunuz. Bir gün, bu durum canınıza tak ediyor ve problemi çöz-mesi için bir tamirci çağırıyorsunuz. Televizyon da yazılım projesi gibidir. Nasıl bir yazılım projesi yüzlerce satır koddan oluşursa, televizyon da yüzlerce elektronik devreden oluşur. Televizyonun kumandadan kapanmama sorunu bu devrelerin herhangi birinden kaynaklanıyor olabilir. Tamirci bu problemi nasıl çözer? Önce belirttiğiniz durumu (televizyonun kumandadan kapanmama soru-nu) kendisi test eder ve problemi kendisi de tasdikler. Sonra problemin neden kaynaklanabilece-ğini kabaca düşünür. Sorunun ya kumandada ya da televizyonda olduğunu düşünür. Kendisine daha kolay geldiği için kumandayı incelemeye başlar. Önce kapatma tuşuna basıldığı zaman elektrik verip vermediğine bakar. Eğer elektrik varsa bir sonraki adım olan bu elektriğin kızıl ötesi vericiye ulaşıp ulaşmadığına bakar. Bir sorun yoksa bir sonraki adım olan kızıl ötesi sinyalinin doğru bir şekilde vericiden çıkıp çıkmadığına bakar. Burada da bir sorun yoksa bir sonraki adım olan televizyondaki kızıl ötesi alıcının bu sinyali doğru bir şekilde alıp almadığına bakar. Burada da bir sorun yoksa bir sonraki adım olan alıcının televizyondaki elektriği kesmeye yarayan dev-reye elektrik akımı verip vermediğini kontrol eder ve nihayet alıcının elektriği veremediğini görür. Bu durumda bir sonraki adım olan alıcıyı açıp içini incelemeye başlar. Kumandadan değişik tuş-larına basarak çeşitli sinyaller gönderip her devrenin istenildiği gibi çalışıp çalışmadığını inceler. İncelemelerinin sonucunda elektrik olması gereken bir kabloda elektrik olmadığını görür. Kablo yanmıştır. Bu kabloyu yeni bir kablo ile değiştirir. Daha sonra kumandanın kapatma tuşuna basar ve artık problemin çözülmüş olduğunu görür.

Tamircinin yaptıklarını özetleyelim:

Kullanıcının söylediği durumun doğru olduğunu test etti.

Sorunun nereden kaynaklanabileceğini tahmin edip, işe oradan başladı.

Kumandanın tuşuna basılmasından başlayarak, adım adım tüm gerçekleşen işlemleri incele-di, her şeyin olması gerektiği gibi olduğundan emin oldu.

Hatanın yerini tespit etti.

Orada da adım adım inceleyerek hatayı buldu ve çözdü.

Her şeyin artık olması gerektiği gibi olduğundan emin oldu.

Yazılım geliştirmede hata ayıklama bu örneğe çok benzer. Bir mantıksal hata varsa önce bu so-runun nerelerden kaynaklandığı tahmin edilir. Örneğin uygulamanın hesaplama kısmında bir hata varsa muhtemelen ilk olarak hesapla düğmesine basıldığı zaman çalışan kodlar incelenmeye başlayacaktır. Koda bakıldığında hatanın sebebini bulmak çok zordur. Bu tip hatalar, çoğunlukla

1.

2.

3.

4.

5.

6.

Şekil 5.16

74 Bölüm 5

Page 83: YAZILIM VE VERİTABANI - Masonluk ve MasonlarOct 11, 2007  · Sunuş 1989… Bilgisayarla ilk tanıştığım ve Basic dili ile uygulama geliştirdiğim yıllardan itibaren bilgisayar

uygulama çalışırken bulunabilir. Bu yüzden tam hesaplamanın başladığı yerde uygulama durdu-rulup, adım adım gerçekleşen işlemlerin takip edilmesi gerekir.

Uygulamayı durdurmak ve sonra adım adım ilerletmek amacıyla değişkenlerin ve kontrollerin nasıl çalıştığını incelemek için Visual Studio bize debug araçlarını sunar.

BreakpointUygulamanın çalışırken durması istenilen noktalara Breakpoint koyulur. Breakpoint, ilgili satırın üzerindeyken F9 tuşuna basarak veya satırın sol kenarındaki boşluğu fare ile tıklayarak koyula-bilir. Ayrıca satır üzerindeyken sağ tıkla gelen menüden BreakPoint Insert BreakPoint seçeneği ile de koyulabilir. Şekil 5.17’de görüldüğü gibi Breakpoint koyulan bir satır kırmızı renk ile işaret-lenir.

Breakpoint, uygulamanın çalışırken ilgili satırda durmasını sağlar. Dolayısı ile yazılımcı o satırdan başlayarak adım adım kodları izleyebilir. Uygulama breakpoint’in olduğu satıra geldiğinde Şekil 5.18’de görüldüğü gibi sarı bir renk alır ve debug moduna geçer.

Uygulama debug moduna geçtikten sonra artık adım adım incelenmeye başlanabilir. Nasıl tamirci için parçaların doğru çalıştığı önemli ise yazı-lımcı için de değişkenlerin istenilen değerleri taşıması önemlidir. Değiş-kenlerin o anki değeri Şekil 5.19’da görüldüğü gibi fare ile değişkenin tanımının ya da kullanımının üzerinde durularak görülebilir.

İncelenmesi gereken sadece değişkenler olmayabilir. Örneğin bir ListBox’ın o anda kaç eleman taşıdığını ve bu elemanların ne oldukları öğrenilmek istenebilir. Visual Studio sayesinde istenilirse ListBox’ın tüm özellikleri veya sadece bir özelliği mercek altına alınabilir. Hatta uygulama adım adım ilerletilirken mevcut değerleri değişirse uyarı vermesi de sağlanabilir.

Watch PenceresiBu senaryoyu gerçekleştirmek için Visual Stu-dio birçok araç sunsa da en kullanışlısı watch penceresidir. Watch penceresi yazılımcıya ta-kip edeceği değişken veya kontrollerin o anki değerini, adını ve veri tipini gösterir. Watch penceresi, uygulama sadece debug modda ise görülür.

Watch penceresindeki satırlara izlemek istedi-ğiniz değişkenleri, kontrolleri veya kontrollerin özelliklerini yazabilirsiniz. Watch penceresinde

Şekil 5.17

Şekil 5.18

Şekil 5.19

Şekil 5.20

75Hatalar ve Hataların Giderilmesi

Page 84: YAZILIM VE VERİTABANI - Masonluk ve MasonlarOct 11, 2007  · Sunuş 1989… Bilgisayarla ilk tanıştığım ve Basic dili ile uygulama geliştirdiğim yıllardan itibaren bilgisayar

yazı yazarken Şekil 5.21’de görüldü-ğü gibi Visual Studio’nun İntelliSense özelliğinden de faydalanırsınız.

Eğer watch ekranına bir kontrol adı yazarsanız, ilgili satırın yanında bir artı işareti belirecektir. Bu artı işaretine basarsanız Şekil 5.22’de görüldüğü gibi incelemek istediğiniz kontrolün tüm özellik-lerinin o anki değerlerini görebilirsiniz.

Watch ekranına bir değişken adı yazdığınızda, o değişkenin o anki değeri Value (değer) sütunun-da siyah renkli olarak çıkacaktır. Uygulamanızı adım adım ilerlettikçe eğer izlediğiniz değişkenin değerinde bir değişiklik olursa Şekil 5.23’teki gibi Value sütunundaki değer kırmızı renk olacaktır.

Bir değişkeni veya kontrolü izlemek için adını illaki watch penceresine elle yazmanıza gerek yok-tur. İzlemek istediğiniz değişkeni veya kontrolün adını koddan seçip watch penceresi üzerine sürükleyip bırakabilirsiniz.

Başka bir alternatif olarak, Şekil 5.24’te görüldüğü gibi bir değişken ya da kontrolün adının üzerin-de sağ tıklama yaparak Add Watch seçeneğini de seçebilirsiniz.

Eğer watch penceresini yanlışlıkla kapatmışsanız Visual Studio’nun Debug menüsünden Windows - Watch - Watch 1 seçeneğini tıklayarak ya da Ctrl+D,W kısayolunu kullanarak tekrar çıkartabilirsiniz.

Şekil 5.21

Şekil 5.22

Şekil 5.23

Şekil 5.24

76 Bölüm 5

Page 85: YAZILIM VE VERİTABANI - Masonluk ve MasonlarOct 11, 2007  · Sunuş 1989… Bilgisayarla ilk tanıştığım ve Basic dili ile uygulama geliştirdiğim yıllardan itibaren bilgisayar

Step IntoUygulamanın durması ve değişkenlerin izlenmesi tek başına bir işe yaramaz. Uygulamanın adım adım çalıştırılıp her satırda yapılan işlemlerin izlenmesi de gerekir. Visual Studio bu imkanı yazı-lımcılara Step Into komutu ile verir.

Uygulamanız debug modda iken F11 tuşuna basarsanız uy-gulama o anki durduğu satırı çalıştırıp bir sonraki satıra geçer. Üzerine gelinen satır Şekil 5.25’te görüldüğü gibi sarı renk ile işaretlenir. Her F11 tuşuna bastığınızda, çalışacak satır kal-mayıncaya kadar bu durum devam eder. Böylelikle uygulama-nızın adım adım nasıl çalıştığını izleyebilirsiniz.

Uygulamanız debug modunda iken F5 (çalıştır) tuşuna basarsanız, program debug moddan çıkar ve kaldığı yerden çalışmaya devam eder.

Lab 5.1 Yaş HesaplamaVisual Studio’da TryCatchBlogu adında yeni bir Windows projesi oluşturun.

Form’un Text özelliğini “Yaş Hesaplayıcı” olarak değiştirin.

Forma bir tane TextBox kontrolü ekleyin. Name özelliğini txtDogumTarih olarak değiştirin.

Forma bir tane Label ekleyin. Name özelliğini “lblDogumTarih” olarak, Text özelliğini de “Do-ğum Tarihi” olarak değiştirin.

Forma bir tane Button ekleyin. Name özelliğini “btnYasHesapla”, Text özelliğini de “Yaş He-sapla” olarak değiştirin.

btnYasHesapla düğmesine çift tıklayarak açılan kod bloğuna şu kodları yazın:

private void btnYasHesapla_Click(object sender, EventArgs e)

{

DateTime dogumTarih;

dogumTarih = Convert.ToDateTime(txtDogumTarih.Text);

int yas;

yas = DateTime.Now.Year - dogumTarih.Year;

MessageBox.Show(yas.ToString());

}

Projeyi çalıştırın.

txtDogumTarih kontrolüne geçerli bir tarih girin. Örn: 6.5.1980

btnYasHesapla kontrolüne tıklayın.

Herhangi bir hata alınmamış; uygulama, girilen tari-he göre yaşı hesaplamıştır.

1.

2.

3.

4.

5.

6.

7.

8.

9.

Şekil 5.25

Şekil 5.26

Şekil 5.27

77Hatalar ve Hataların Giderilmesi

Page 86: YAZILIM VE VERİTABANI - Masonluk ve MasonlarOct 11, 2007  · Sunuş 1989… Bilgisayarla ilk tanıştığım ve Basic dili ile uygulama geliştirdiğim yıllardan itibaren bilgisayar

txtDogumTarih kontrolüne geçersiz bir tarih girin. Örn: 21345 veya 41.5.1980

btnYasHesapla kontrolüne tıklayın.

Şekil 5.28’de görüldüğü gibi uygulama girilen metni tarih formatına çeviremeyip hata vermiştir.

Projeyi durdurun.

Kodları şu şekilde değiştirin:

try

{

DateTime dogumTarih;

dogumTarih = Convert.ToDateTime(txtDogumTarih.Text);

int yas;

yas = DateTime.Now.Year - dogumTarih.Year;

MessageBox.Show(yas.ToString());

}

catch (Exception)

{

MessageBox.Show(“Lütfen geçerli bir tarih giriniz.”);

}

Projeyi tekrar çalıştırın.

txtDogumTarih kontrolüne tekrar geçersiz bir tarih girin.

btnYasHesapla kontrolüne tıklayın.

Şekil 5.29’da görüldüğü gibi uygulama bu sefer hata verip kapanmamış, kullanıcıya bir mesaj kutusu göstermiştir.

10.

11.

12.

13.

14.

15.

16.

Şekil 5.28

Şekil 5.29

78 Bölüm 5

Page 87: YAZILIM VE VERİTABANI - Masonluk ve MasonlarOct 11, 2007  · Sunuş 1989… Bilgisayarla ilk tanıştığım ve Basic dili ile uygulama geliştirdiğim yıllardan itibaren bilgisayar

Projeyi durdurun.

Kodları şu şekilde değiştirin. (Değişen yerler işaretlenmiştir.)

try

{

DateTime dogumTarih;

dogumTarih = Convert.ToDateTime(txtDogumTarih.Text);

int yas;

yas = DateTime.Now.Year - dogumTarih.Year;

MessageBox.Show(yas.ToString());

}

catch (Exception ex)

{

MessageBox.Show(“Programda hata oluştu:” + ex.Message);

}

Projeyi tekrar çalıştırın.

txtDogumTarih kontrolüne tekrar geçersiz bir tarih girin.

btnYasHesapla kontrolüne tıklayın.

Şekil 5.30’da görüldüğü gibi uygulama hata verip kapanmamış ve kullanıcıya hatanın ne olduğu-nu söylemiştir.

Lab 5.2 Dışarıdan Uygulama ÇalıştırmaVisual Studio’da TryCatchBlogu2 adında yeni bir Windows projesi oluşturun.

Formun Text özelliğini “Çalıştır!!!” olarak değiştirin.

Forma bir TextBox kontrolü ekleyin. Name özelliğini txtUygulama olarak değiştirin.

Forma bir Button ekleyin. Name özelliğini “btnCalistir”, Text özelliğini ise “Çalıştır” olarak de-ğiştirin.

17.

18.

19.

20.

21.

1.

2.

3.

4.

Şekil 5.30

Şekil 5.31

79Hatalar ve Hataların Giderilmesi

Page 88: YAZILIM VE VERİTABANI - Masonluk ve MasonlarOct 11, 2007  · Sunuş 1989… Bilgisayarla ilk tanıştığım ve Basic dili ile uygulama geliştirdiğim yıllardan itibaren bilgisayar

btnCalistir kontrolüne çift tıklayarak açılan kod bloğuna şu kodları yazın:

private void btnCalistir_Click(object sender, EventArgs e)

{

System.Diagnostics.Process.Start(txtUygulama.Text);

}

Projeyi çalıştırın.

txtUygulama kontrolüne geçerli bir internet adresi yazın. Örnek: www.yazilimuzmani.com

btnCalistir kontrolüne tıklayın.

Şekil 5.32’deki gibi yeni açılan bir browser’da istediğiniz sayfa göründü.

txtUygulama kontrolüne “calc” yazın.

btnCalistir kontrolüne tıklayın.

Şekil 5.33’ teki gibi ekranınıza Windows’un hesap makinesi çıktı.

txtUygulama kontrolüne geçersiz bir uygulama adı yazın. Örn: c:\uydurdum.exe, w.yazilimuzmani.com gibi

btnCalistir kontrolüne tıklayın.

Visual Studio Şekil 5.34‘teki gibi bir hata mesajı çıkardı.

5.

6.

7.

8.

9.

10.

11.

12.

Şekil 5.32

Şekil 5.33

Olmayan bir web adresi girmek System.Diagnosistics.Process.Start için bir hata değildir. Bu kodun görevi çalıştırmak istediğiniz şey bir web sayfası ise yazdığınız sayfayı işletim sisteminizin browser’ına yollayıp orada açtırmaktır.

80 Bölüm 5

Page 89: YAZILIM VE VERİTABANI - Masonluk ve MasonlarOct 11, 2007  · Sunuş 1989… Bilgisayarla ilk tanıştığım ve Basic dili ile uygulama geliştirdiğim yıllardan itibaren bilgisayar

Bu hatanın sebebi yazdığınız uygulama ya da dosya yolunun yanlış olmasıdır.

Projeyi durdurun.

Kodu şu şekilde değiştirin:

private void btnCalistir_Click(object sender, EventArgs e)

{

try

{

System.Diagnostics.Process.Start(txtUygulama.Text);

}

catch (Exception)

{

MessageBox.Show(“Girdiğiniz uygulama ya da dosya yolu yanlış.”);

}

}

Projeyi çalıştırın.

txtUygulama kontrolüne geçersiz bir uygulama adı yazın.

btnCalistir kontrolüne tıklayın.

Şekil 5.35’teki gibi uyarı mesajı alındı ve uygulama hata verip durmadı.

Lab 5.3 Geçiş Notu HesaplamaVisual Studio’da MantiksalHata adında yeni bir Windows projesi oluşturun.

Form’un Text özelliğini “Geçiş Notu Hesaplama” olarak değiştirin.

13.

14.

15.

16.

17.

1.

2.

Şekil 5.34

Şekil 5.35

81Hatalar ve Hataların Giderilmesi

Page 90: YAZILIM VE VERİTABANI - Masonluk ve MasonlarOct 11, 2007  · Sunuş 1989… Bilgisayarla ilk tanıştığım ve Basic dili ile uygulama geliştirdiğim yıllardan itibaren bilgisayar

Form’a 5 tane Label kontrolü ekleyin. Bir tanesinin Name özelliğini “lblSonuc”, Text özelliğini ise “0” olarak değiştirin.

Form’a 2 tane TextBox kontrolü ekleyin. Özelliklerinde herhangi bir değişiklik yapmayın.

Form’a 1 tane Button kontrolü ekleyin. Name özelliğini “btnGecisNotuHesapla”, Text özelliğini ise “Geçiş Notu Hesapla” olarak değiştirin.

btnGecisNotu düğmesine çift tıklayarak açılan kod bloğuna şu kodları yazın:

private void btnGecisNotuHesapla_Click(object sender, EventArgs e)

{

double vizeNotu;

double finalNotu;

vizeNotu = Convert.ToDouble(textBox1.Text);

finalNotu = Convert.ToDouble(textBox1.Text);

double ortalama;

ortalama = vizeNotu * 0.3 + finalNotu * 0.7;

lblSonuc.Text = ortalama.ToString();

}

Projeyi çalıştırın.

textBox1’e 40, textBox2’ye 60 değerini girin.

btnGeciNotuHesapla düğmesine tıklayın.

Şekil 5.37’deki gibi gösterilen sonucun doğru olmadığını göreceksiniz. (Sonucun (40*0.3) +(60*0.7) = 54 çıkması gerekirdi.)

Projeyi durdurun.

3.

4.

5.

6.

7.

8.

9.

10.

Şekil 5.36

Şekil 5.37

82 Bölüm 5

Page 91: YAZILIM VE VERİTABANI - Masonluk ve MasonlarOct 11, 2007  · Sunuş 1989… Bilgisayarla ilk tanıştığım ve Basic dili ile uygulama geliştirdiğim yıllardan itibaren bilgisayar

Seçili satıra Breakpoint koyun.

private void btnGecisNotuHesapla_Click(object sender, EventArgs e)

{

double vizeNotu;

double finalNotu;

vizeNotu = Convert.ToDouble(textBox1.Text);

finalNotu = Convert.ToDouble(textBox1.Text);

double ortalama;

ortalama = vizeNotu * 0.3 + finalNotu * 0.7;

lblSonuc.Text = ortalama.ToString();

}

Projeyi çalıştırın.

textBox1’e 40, textBox2’ye 60 değerini girin.

btnGeciNotuHesapla düğmesine tıklayın.

Uygulama bu noktada duracaktır.

Watch penceresine textBox1.Text yazın.

textBox2.Text yazısını seçip watch penceresine sürükleyip bırakın.

vizeNotu değişkeni üzerine sağ tıklama yapıp Add Watch seçeneğini tıklayın.

Watch penceresine finalNotu yazın.

F11 tuşuna basarak seçili satırı çalıştırıp bir sonraki satıra geçin.

Değerlerin Şekil 5.39’da gösterilen şekilde değişmiş olması gerekir.

Tekrar F11 tuşuna basarak seçili satırı çalıştırıp bir sonraki satıra geçin.

11.

12.

13.

14.

15.

16.

17.

18.

19.

20.

Şekil 5.38

Şekil 5.39

83Hatalar ve Hataların Giderilmesi

Page 92: YAZILIM VE VERİTABANI - Masonluk ve MasonlarOct 11, 2007  · Sunuş 1989… Bilgisayarla ilk tanıştığım ve Basic dili ile uygulama geliştirdiğim yıllardan itibaren bilgisayar

Değerlerin Şekil 5.40’ta gösterilen şekilde değişmiş olması gerekir.

Bu satırda bir mantıksal hata vardır. textBox2’nin değeri finalNotu değişkenine atanması gerekir-ken, finalNotu, textBox’in değerini alıyor.

Projeyi durdurun.

Hatayı bulduğunuz satırı şu şekilde değiştirin:

finalNotu = Convert.ToDouble(textBox2.Text);

Projeyi çalıştırın.

textBox1’e 40, textBox2’ye 60 değerini girin.

btnGeciNotuHesapla düğmesine tıklayın.

Sonuç hatasız olarak Şekil 5.41’deki gibi görülecektir:

ÖdevlerYeni bir Windows projesi oluşturup, Şekil 5.42’deki gibi tasarlayın. Uygulamanın çalışması şu şekilde olacak şekilde kodlarını yazın:

TextBox’a girilen değer eğer sayısal ise 1. ListBox’a, değilse 2. ListBox’a atılsın.

Yeni bir Windows projesi oluşturup, Şekil 5.43‘teki gibi tasarlayın.

21.

22.

23.

24.

25.

1.

2.

Şekil 5.40

Şekil 5.41

Şekil 5.42

84 Bölüm 5

Page 93: YAZILIM VE VERİTABANI - Masonluk ve MasonlarOct 11, 2007  · Sunuş 1989… Bilgisayarla ilk tanıştığım ve Basic dili ile uygulama geliştirdiğim yıllardan itibaren bilgisayar

TexBox’ların adı txtSayi1 ve txtSayi2’dir. Formda sonucun çıkacağı Label kontrolünün adı da lblSonuc’tur.

Uygulama TextBox’lara girilen iki sayının ortalamasını gösterir.

İki sayının ortalaması, bu iki sayının toplamının ikiye bölünmesi ile bulunur.

Örnek: 10 ile 20‘ nin ortalaması 15’tir. Bu sonuç şu şekilde bulunur:

10+20=30

30/2=15

private void btnHesapla_Click(object sender, EventArgs e)

{

double 1inciSayi

double 2inciSayi;

1nciSayi = txtSayi1.Text;

2ncisayi = txtSayi2.Text;

double ortalama;

ortalama = 1nciSayi + 2ncisayi / 2;

lblSonuc.Text = ortalama.ToString();

}

Verilen kodlardaki derleme hatalarını ortadan kaldırın.

Verilen kodları çalışma zamanı hatası vermeyecek şekilde düzenleyin.

Verilen kodlardaki mantık hatasını düzeltin.

Şekil 5.43

85Hatalar ve Hataların Giderilmesi

Page 94: YAZILIM VE VERİTABANI - Masonluk ve MasonlarOct 11, 2007  · Sunuş 1989… Bilgisayarla ilk tanıştığım ve Basic dili ile uygulama geliştirdiğim yıllardan itibaren bilgisayar
Page 95: YAZILIM VE VERİTABANI - Masonluk ve MasonlarOct 11, 2007  · Sunuş 1989… Bilgisayarla ilk tanıştığım ve Basic dili ile uygulama geliştirdiğim yıllardan itibaren bilgisayar

6 Algoritma

Page 96: YAZILIM VE VERİTABANI - Masonluk ve MasonlarOct 11, 2007  · Sunuş 1989… Bilgisayarla ilk tanıştığım ve Basic dili ile uygulama geliştirdiğim yıllardan itibaren bilgisayar

6 AlgoritmaAlgoritma Nedir?

Akış Diyagramı

Algoritma Uygulamaları

Lab 6.1 Stok Takip Yazılımı

Ödev

Page 97: YAZILIM VE VERİTABANI - Masonluk ve MasonlarOct 11, 2007  · Sunuş 1989… Bilgisayarla ilk tanıştığım ve Basic dili ile uygulama geliştirdiğim yıllardan itibaren bilgisayar

AlgoritmaProgramlamanın temelinde çalışma akışını, izlenecek yolları belirleyen algoritmalar vardır. Bir iş yapılmaya başlanmadan önce nasıl planlanıyorsa, kodlamaya geçilmeden önce de bir çalışma planı belirlenmelidir. Yazılımlar, bu planda yazılan kodları belli bir sıra ile okur ve işler. Dolayısıyla algoritma yapısını çok iyi kurmak gerekir. Kurulan algoritmalar akış diyagramları ile görsel zen-ginlik kazanırlar.

Bu bölüm tamamlandıktan sonra:

Algoritma kurmayı öğrenecek,

Akış diyagramları ile algoritmaları görsel olarak ifade edebileceksiniz.

Algoritma Nedir?Algoritma, bir işin hangi etaplardan geçilerek yapılacağını gösteren çalışma planıdır. Algoritma bir programlama dili değildir. Programlama dillerine yol gösteren bir yöntem dizisidir. Her dilde algoritma yazılıp uygulanabilir. Örneğin bir cep telefonunun el kitapçığında yazan, rehber kaydı girmek için izlenecek yollar, o işin algoritmasıdır.

Algoritma yazarken, uygulamanın çalışması için kullanılan kaynakların, yapılması gereken kon-trollerin veya işlemlerin açıkça ifade edilmesi gerekir. Ayrıca iyi bir algoritmanın, tüm ihtimalleri kontrol edip istenmeyen durumlarda ne yapılması gerektiğini belirtmesi gerekir.

Örneğin, bir e-ticaret uygulamasında ürün satış algoritması çıkarılır. Satın alınacak ürün seçildik-ten sonra, kullanıcıdan adet miktarı bilgisi alınır. Uygulama yazılırken, bu değerin int veri tipinde olacağına karar verildiği düşünülürse; kullanıcının girdiği adet miktarı bu değişkene atanmadan önce kontrol edilmelidir. Eğer int veri tipinin tutamayacağı bir değer girilmişse, çalışma anında uygulamanın beklenmedik şekilde durduğu ya da istenmeyen sonuçların üretildiği gözlemlenir. Ayrıca sistemin verdiği hata, kullanıcının anlamayacağı bir mesaj içereceği için, uygulamanın imajını da kötü yönde etkiler.

Veri girişi

Çalışma zamanında çoğu zaman, işleyişin tamamlanması için dışarıdan bir bilgi girilmesi gerekir. Algoritmanın çalışması için ihtiyaç duyduğu veriler, işlemi başlatan kişiden veya belirtilen bir kay-naktan alınabilir. Bu bilgiler sağlanmadan işlem devam etmez.

Kararlar

Karar ve kontrol yapıları algoritmanın akışını yönlendiren en önemli kavramlardır. Girilen veya işlem sonucunda elde edilen veriler, işlemin amacına göre kontrol edilir ve sonuca göre algoritma akışı istenilen yere yönlendirilir.

İşlemler

Algoritmanın akışı boyunca veriler üzerinde değişiklikler, yeni değer atamaları gibi işlemlere ihti-yaç duyulur. Algoritmalar kurulurken, yapılan işlemlerin yalın halde, tek tek yazılması okunabilirliği arttırır.

Algoritmalar adım sırası ile çalışır ve karar yapıları sonucunda farklı bir yere yönlendirilmediği müddetçe, bir sonraki adım ile işlemeye devam eder.

Örnek: Telefon kulübesinden telefon açmak için örnek bir algoritma

Telefon kulübesine git

Telefon kartı al

1.

2.

Page 98: YAZILIM VE VERİTABANI - Masonluk ve MasonlarOct 11, 2007  · Sunuş 1989… Bilgisayarla ilk tanıştığım ve Basic dili ile uygulama geliştirdiğim yıllardan itibaren bilgisayar

Telefon sırasında kaç kişi olduğuna bak

Kişi sayısı sıfırdan fazlaysa 3 e dön

Kapı kapalıysa kapıyı aç

İçeri gir, kapıyı kapat

Telefon kartını telefona yerleştir

Ahizeyi kaldır

Numarayı çevir

Konuşmanın bitip bitmediğine bak

Konuşma bittiyse kartı al, bitmediyse 10 a dön

Bir daha konuşma yapılacaksa 7‘ye dön

Kapıyı aç, dışarı çık

Bu algoritmanın işlemesi için, her ihtimal gözden geçirilerek, algoritma akışı gerekli yerlere yön-lendirilir. Örneğin kapının kapalı olması durumunda kapıyı açmak için gerekli komutlar verilmeli-dir. Bu algoritmanın ihtiyaç duyduğu veriler, ya kullanıcı tarafından verilir ya da işlem başlamadan önce belirlidir. Sıradaki kişi sayısı, telefon kartı gibi veriler kullanıcı tarafından sağlanmış; çevrile-cek numara, algoritma başlamadan önce belirlenmiştir.

Akış DiyagramıMadde madde yazılan algoritmaların okunması kolaydır ancak işleyişin bütününü görmek çoğu zaman mümkün değildir. Akış diyagramları, algoritmaları görsel biçimde göstermeyi, dolayısıyla daha anlaşılır hale getirmeyi sağlar. Algoritmada yapılacak işlemlerin çeşitlerine göre çeşitli sem-boller kullanılır.

Başla – Bitir

Algoritmanın hangi aşamadan başlayacağını ve ne zaman biteceğini gösteren semboldür. Bir algoritmayı temsil eden akış diyagramında, bir tane Başla ve bir tane Bitir sembolü olmalıdır.

Veri Girişi

Kullanıcıdan veya başka bir kaynaktan alınan verilerin isimlerini tutar.

Karar Verme

Karar yapısını belirten semboldür. Üstünde koşul ifadesi belirtilir.

3.

4.

5.

6.

7.

8.

9.

10.

11.

12.

13.

Şekil 6.1

Şekil 6.2

Şekil 6.3

90 Bölüm 6

Page 99: YAZILIM VE VERİTABANI - Masonluk ve MasonlarOct 11, 2007  · Sunuş 1989… Bilgisayarla ilk tanıştığım ve Basic dili ile uygulama geliştirdiğim yıllardan itibaren bilgisayar

Veri tabanı

Veri tabanında okuma veya yazma işlemi yapıldığını gösterir.

Ekran

Üzerinde yazılan yazının bilgi olarak ekranda görüneceğini belirtir.

Printer

Üzerinde yazılan yazının yazıcıdan çıkarılacağını belirtir.

İşlem

Bir işlem yapılacağını belirten semboldür. Her işlem için ayrı bir fonksiyon sembolü kullanılması, akış diyagramını daha anlaşılır kılar.

Fonksiyon

İşlem sembolüne yazılamayacak büyüklükte işlemler, alt işlem olarak bu sembolle belirtilir.

Algoritma UygulamalarıBilet SatmaBir tiyatro uygulamasının sürekli gerçekleştireceği temel işlem bilet satmaktır. Bu işlemi gerçek-leştirmek için gerekli kodlar yazılmadan önce, algoritma kurulmalıdır.

Kullanıcının istediği oyun, gün ve yer bilgileri alınır.

Veritabanı sorgulanarak, belirtilen günde oynayan oyunun boş yerleri çıkartılır.

1.

2.

Şekil 6.4

Şekil 6.5

Şekil 6.6

Şekil 6.7

Şekil 6.8

91Algoritma

Page 100: YAZILIM VE VERİTABANI - Masonluk ve MasonlarOct 11, 2007  · Sunuş 1989… Bilgisayarla ilk tanıştığım ve Basic dili ile uygulama geliştirdiğim yıllardan itibaren bilgisayar

Boş yer sayısı sıfırsa, o günde belirtilen oyun oynamıyordur ya da oyundaki bütün yerler sa-tılmıştır.

Her iki durumda da bilet kesilemediği için ekrana hata mesajı gösterilir. Gün ve oyun bilgilerini baştan almak için ilk etaba dönülür.

Kullanıcıdan oturmak istediği yer bilgisi alınır.

İstediği yerin dolu olup olmadığı kontrol edilir.

Yer dolu ise ekrana hata mesajı gösterilir ve yer bilgisi tekrar alınmak üzere 5. etaba dönülür.

Yer boşsa, veritabanında oyunun yer kayıtları güncellenir.

İstenilen gün, oyun ve yer bilgilerini içeren bilet yazıcıdan çıkartılır.

Çay DemlemeBu örnekte, bir çay demleme işleminde yapılması gereken işlemleri, kontrol edilmesi gereken olayları içeren algoritma kurulur.

Kullanıcıdan su vermesi beklenir.

Suyu ısıtma işlemi yapılır.

Suyun kaynayıp kaynamadığı kontrol edilir. Kaynamamışsa 2. etaba dönülür.

Çay daha önceden hazır olduğu için, kullanıcıdan beklenmez. Demliğe çay koyma işlemi yapılır.

Kullanıcıdan, demleme işleminin ne kadar süreceği bilgisi alınır.

Kullanıcıdan alınan demleme süresi ile şimdiki zaman (çayın demlenmeye başladığı zaman) toplanır. Çıkan değer, BitisZamani isimli değişkene atılır. Bu değişken demleme işleminin ne zaman biteceği bilgisini tutar.

Şimdiki zaman, bitiş zamanından küçükse çayın demlenmesi için ayrılan süre daha dolmamış demektir. Bu süre dolana kadar 7. etap tekrarlanır.

Çayın demlendiğini, kullanıcıya ekran üzerinde bildiren bir mesaj çıkartılır.

3.

4.

5.

6.

7.

8.

9.

1.

2.

3.

4.

5.

6.

7.

8.

Şekil 6.9

92 Bölüm 6

Page 101: YAZILIM VE VERİTABANI - Masonluk ve MasonlarOct 11, 2007  · Sunuş 1989… Bilgisayarla ilk tanıştığım ve Basic dili ile uygulama geliştirdiğim yıllardan itibaren bilgisayar

Üniversite Eğitim Notunu Hesaplama Üniversitede bir dersin başarı notu, genelde bir vize ve bir final notu ile hesaplanır. Vize notunun katsayısı finalden daha düşüktür. Sonuçta çıkan not 50 ve üstüyse öğrenci geçer, 50 altıysa kalır. Bu örnek, vizenin %30 ve finalin %70 ağırlıklı olduğu başarı notunun hesaplanmasını akış diyag-ramı ile gösterir.

Notu hesaplanacak öğrencinin numarası kullanıcıdan alınır.

Veritabanından öğrencinin vize ve final not-ları çekilir.

Eğer final notu 28 veya daha düşükse öğ-renci kalır ve 9. etaba gidilir. Bu durumda vize notu 100 olsa dahi, sonuç olarak top-lanan not 50 altında olur. Dolayısıyla öğren-cinin kalması kesinleşir. Böyle bir kontrol yapılması, gereksiz işlemlerin yapılmasını engeller.

Vize değişkenine, veritabanından alınan vize notunun %30 u atanır.

Final değişkenine, veritabanından alınan fi-nal notunun %70 i atanır.

Sonuc değişkenine, vize ve final değerleri-nin toplamı atanır.

Sonuc değerinin 50’den büyük olup olmadı-ğı kontrol edilir.

Sonuc 50’den büyükse ekrana “Geçtiniz” ya-zan bir mesaj çıkartılır. Algoritmadan çıkılır.

Sonuc 50’den küçükse ekrana “Kaldınız” ya-zan bir mesaj çıkartılır.

1.

2.

3.

4.

5.

6.

7.

8.

9.

Şekil 6.10

Şekil 6.11

93Algoritma

Page 102: YAZILIM VE VERİTABANI - Masonluk ve MasonlarOct 11, 2007  · Sunuş 1989… Bilgisayarla ilk tanıştığım ve Basic dili ile uygulama geliştirdiğim yıllardan itibaren bilgisayar

Lab 6.1 Stok Takip YazılımıBasit bir stok takip yazılımının algoritması:

Kullanıcının kullanıcı adı ve şifre bilgileri alınır.

Girilen kullanıcı adı ve şifre bilgilerinin veri tabanında olup olmadığı kontrol edilir.

Eğer varsa; kullanıcın yetkili olduğu formlar açılır. Yoksa kullanıcıya mesaj döner. Bilgiler tekrar istenir.

Kullanıcı stok takibi yapmak istediği ürünü seçer.

Seçilen ürün veri tabanında taranarak stok bilgileri ekrana getirilir.

Eğer ürün stoğu kritik seviyede ise kullanıcı uyarılır.

Kullanıcı ürün stoğunu güncellemeye çalıştığında yeni stok değerinin negatif olup olmadığı kontrol edilir.

Eğer negatif ise güncelleme kabul edilmez. Pozitif ise güncelleme kabul edilir.

Kullanıcı yeni ürün eklemeye çalıştığında eklenecek ürünün veri tabanında olup olmadığına bakılır.

Eğer ürün varsa stok bilgisini günceller, yoksa ürünü veri tabanına kaydeder.

Algoritması oluşturulan Stok Takip Uygulamasının akış diyagramını hazırlayın.

ÖdevKullanıcı tarafından girilen sayının çift ya da tek olup olmadığını bulan algoritmayı adım adım yazın.

Akış diyagramını MS Visio ile çizin.

1.

2.

3.

4.

5.

6.

7.

8.

9.

10.

1.

2.

94 Bölüm 6

Page 103: YAZILIM VE VERİTABANI - Masonluk ve MasonlarOct 11, 2007  · Sunuş 1989… Bilgisayarla ilk tanıştığım ve Basic dili ile uygulama geliştirdiğim yıllardan itibaren bilgisayar

7 Operatörler ve Karar Yapıları

Page 104: YAZILIM VE VERİTABANI - Masonluk ve MasonlarOct 11, 2007  · Sunuş 1989… Bilgisayarla ilk tanıştığım ve Basic dili ile uygulama geliştirdiğim yıllardan itibaren bilgisayar

7 Operatörler ve Karar

YapılarıOperatörler

if Deyimi

switch Deyimi

Lab 7.1 Sayı Tahmin Oyunu

Lab 7.2 Uygulama Yükleyici

Lab 7.3 Şans Oyunu

Ödevler

Page 105: YAZILIM VE VERİTABANI - Masonluk ve MasonlarOct 11, 2007  · Sunuş 1989… Bilgisayarla ilk tanıştığım ve Basic dili ile uygulama geliştirdiğim yıllardan itibaren bilgisayar

Operatörler ve Karar YapılarıBu bölümde ilişkisel ve mantıksal operatörler ve program akışını kontrol eden deyimleri incelen-mektedir. Bir veya birden fazla değişkenin durumunu kontrol etmek, hangi durumda programın ne şekilde davranacağı ele alınacaktır.

Bu bölüm tamamlandıktan sonra:

İlişkisel ve mantıksal operatörleri kavrayacak,

if deyimi etkin bir biçimde kullanacak,

switch deyimi ile gelişmiş durum kontrolü yapabileceksiniz.

OperatörlerUygulama geliştirilirken bir durum karşılaştırması yapmak isteyebiliriz. Örneğin kullanıcıdan alı-nan bir bilginin doğruluğunu sınamak isteyebiliriz. Finansman işlemlerinde eksi değerler bir anlam ifade etmeyeceği için kullanıcının girdiği bilginin sıfırdan büyük olup olmadığı gibi bir sınama iliş-kisel operatörler yardımıyla sınanabilir.

İlişkisel ve mantıksal operatörler her zaman bool tipinde bir sonuç döndürürler. Dolayısıyla genel-likle if deyimi ile birlikte kullanılır.

Bir sayı tahmin oyunu yaptığımızı düşünelim ve kullanıcıdan TextBox’a bir sayı girmesini isteye-lim. Kullanıcının sayıyı doğru bilip bilmediğini sınayalım:

1 int sayi = 5;

2 int tahmin = Convert.ToInt32(TextBox1.Text)

4 MessageBox.Show(“Tebrikler, bildiniz.”);

5 else

6 MessageBox.Show(“Üzgünüm, bilemediniz.”);

3 nolu satırda görüldüğü gibi bir ilişkisel operatör kullanılarak eşitliğin sağlanıp sağlanmadığı sınanmıştır.

İlişkisel Operatörler== Eşittir

!= Eşit değildir

< Büyüktür

> Küçüktür

>= Büyüktür veya eşittir

<= Küçüktür veya eşittir

3 if ( sayi == tahmin )

Page 106: YAZILIM VE VERİTABANI - Masonluk ve MasonlarOct 11, 2007  · Sunuş 1989… Bilgisayarla ilk tanıştığım ve Basic dili ile uygulama geliştirdiğim yıllardan itibaren bilgisayar

Mantıksal operatörler ise iki bool değerini karşılaştırmak için kullanılır.

Bunu parola giriş ekranında Kullanıcı Adı ve Parola’nın sınandığı bir örnekte açıklayalım.

1 string KullaniciAdi = txtKullaniciAdi.Text;

2 string Parola = txtParola.Text;

3

5 MessageBox.Show(“Tebrikler, giriş başarılı.”);

6 else

7 MessageBox.Show(“Üzgünüm, giriş başarısız.”)

4 nolu satırda görüldüğü gibi iki adet ilişkisel operatör kullanılmış. KullaniciAdi == “admin” ve Parola == “123”. Daha önce ilişkisel ve mantıksal operatörlerin her zaman bool tipinde değer döndürdüğünden bahsetmiştik. Dolayısıyla bu iki ilişkisel sınamanın bool tipindeki sonuçlarını & mantıksal operatörü ile sınayarak her iki değerinde doğrulunu kontrol etmiş olduk.

Kısa Devre OperatörlerKısa devre operatörlerinin normal VE ( & ) ve VEYA ( | ) operatörlerinden çalışma mantığı biraz farklıdır. Normal operatörlerde ne olursa olsun her iki operatörde kontrol edilir. Örneğin normal VE ( & ) operatöründe ilk operatörün sonucu yanlış ( false ) ise ikinci operatörde ne olursa olsun sonuç yanlış ( false ) çıkacaktır. Aynı şekilde VEYA ( | ) operatörü kullanıldığında ilk operatörün sonucu doğru ( true ) ise ikinci operatör ne olursa olsun sonuç doğru ( true ) çıkacaktır. Bu iki durumda da ikinci operatörün kontrol edilmesi gereksizdir. Kısa devre operatörleri ( && , || ) kul-lanıldığı zaman bu durumlarda ikinci operatör kontrol edilmez. Bu performans artışı sağlayacağı gibi bazı istisnai durumlarda programın hata vermesini de engelleyecektir.

1 string KullaniciAdi = txtKullaniciAdi.Text;

2 string Parola = txtParola.Text;

Mantıksal Operatörler& VE

| VEYA

|| Kısa Devre VEYA

&& Kısa Devre VE

! DEĞİL

4 if( KullaniciAdi == “admin” & Parola == “123” )

Mantıksal Operatörlerin Sonuçlarıp q p & q p | q !p

false false false false true

true false false true false

false true false true true

true true true true false

98 Bölüm 7

Page 107: YAZILIM VE VERİTABANI - Masonluk ve MasonlarOct 11, 2007  · Sunuş 1989… Bilgisayarla ilk tanıştığım ve Basic dili ile uygulama geliştirdiğim yıllardan itibaren bilgisayar

3

5 MessageBox.Show(“Tebrikler, giriş başarılı.”);

6 else

7 MessageBox.Show(“Üzgünüm, giriş başarısız.”)

Örnekte kullanıcı adı yanlış girilse dahi parola da kontrol edilmektedir. Hâlbuki kullanıcı adı yanlış girilirse parola doğru girilse dahi sonuç yanlış çıkacaktır.

false & true = false

Dolayısıyla parolayı ikinci bir kez kontrol etmeye gerek yoktur. 4. satırdaki VE( & ) operatörünü Kısa Devre VE ( && ) yaparsak kullanıcı adının yanlış girilmesi halinde Parola kontrolü yapılma-dan sonuca daha kısa sürede ulaşarak yanlış ( false ) sonucunu döndürecektir.

1 string KullaniciAdi = txtKullaniciAdi.Text;

2 string Parola = txtParola.Text;

3

5 MessageBox.Show(“Tebrikler, giriş başarılı.”);

6 else

7 MessageBox.Show(“Üzgünüm, giriş başarısız.”)

Bu yüzden C#’ta normal VE ( & ) ve VEYA ( | ) operatörlerinden daha çok Kısa Devre ( && ) ve Kısa Devre VEYA ( || ) kullanılmaktadır.

Atama OperatörüAtama operatörü bir adet eşittir ( = ) dir.

değişken = değer;

Sağdaki değeri soldakine aktarır. Ancak sağdaki değer soldakinin veri tipine uyumlu olmak zorun-dadır. Değilse, tip dönüştürme işlemi uygulanmalıdır.

Ardı ardına değer atama işlemine izin verir.

Bir oyun uygulaması geliştirdiğinizi başlangıçta her oyuncuya 30 puan verdiğinizi düşünelim.

byte oyuncu1,oyuncu2,oyuncu3;

oyuncu1 = oyuncu2 = oyuncu3 = 30;

Burada önce oyuncu3’ün değeri 30 olacak, ardından oyuncu2’ye oyuncu3 değeri atanacak ve oyuncu1’e de aynı şekilde oyuncu2’nin değeri atanacak ve sonuçta tüm değişkenler aynı değere sahip olacaktır.

?: Operatörü?: Operatörü C#’ta oldukça kullanışlıdır. Bu operatör üç parçadan oluşur. Bu yüzden üçlü ( ternary ) operatör de denir. ?: operatörü bazı durumlarda ilerleyen bölümlerde göreceğimiz if-else deyimi yerine kullanılır. ?: operatörü genellikle bir atama operatörü ile beraber kullanılır.

4 if( KullaniciAdi == “admin” & Parola == “123” )

4 if( KullaniciAdi == “admin” && Parola == “123” )

99Operatörler ve Karar Yapıları

Page 108: YAZILIM VE VERİTABANI - Masonluk ve MasonlarOct 11, 2007  · Sunuş 1989… Bilgisayarla ilk tanıştığım ve Basic dili ile uygulama geliştirdiğim yıllardan itibaren bilgisayar

Yazımı şu şekildedir:

değişken = koşul ? doğru kısım : yanlış kısım ;

koşul bölümünde bir değişkenin değeri ilişkisel ve mantıksal operatörler ile sınanır. Sonuç doğru ( true ) ise doğru kısım değeri değişkene atanır, sonuç yanlış ( false ) ise yanlış kısım değeri de-ğişkene atanır.

Bir sayının mutlak değerini alacağımızı varsayalım. Önce sayının sıfırdan küçük olup olmadığını kontrol etmemiz gerekir. Eğer sıfırdan küçük ise sayıyı eksi ile çarparız, sıfırdan büyük ise sayının kendi değerini alacağız.

1 int sayi = -5;

2 int mutlakDeger;

Burada mutlakDeger değişkeni sonuç olarak 5’tir. 3 nolu satırda atama yapılmadan evvel sayi’nın sıfırdan küçük olup olmadığı sınanmış sonuç olarak doğru ( true ) çıkmıştır ve ?: operatörünün doğru kısmı çalıştırılmıştır.

3 mutlakDeger = ( sayi < 0 ) ? –1 * sayi : sayi;

Operatörlerin Öncelik Sırası

* / %

+ -

<< >>

< > <= >=

== !=

&

^

|

&&

||

?:

=

100 Bölüm 7

Page 109: YAZILIM VE VERİTABANI - Masonluk ve MasonlarOct 11, 2007  · Sunuş 1989… Bilgisayarla ilk tanıştığım ve Basic dili ile uygulama geliştirdiğim yıllardan itibaren bilgisayar

if DeyimiC#’ta uygulama akışlarını kontrol etmek için kullanılan deyimlerden biri if, diğeri ise switch’tir. Switch deyimi bir sonraki konuda incelenecektir. if, uygulamada bir koşulun kontrolünü sağlayan deyimdir. Genel yazım şekli şöyledir:

if ( koşul )

{

Koşul doğru ise yapılacak işler;

}

else

{

Koşul yanlış ise Yapılacak işler;

}

koşul kısmında İlişkisel ve Mantıksal Operatörler kullanılarak bir değişkenin durumu kontrol edilir. Hatırlarsanız ilişkisel ve mantıksal operatörler her zaman bool tipinde bir sonuç döndürür demiş-tik. if deyimi bu sonuca göre ilgili bloğu çalıştırır. if veya else deyiminden sonra sadece tek satır yazılacaksa süslü parantezler kullanılmadan yazılabilir.

if ( koşul )

doğru ise yapılacak işler;

else

yanlış ise Yapılacak işler;

Bu durumda deyimlerden sonraki ilk satır scope gibi algılanacaktır.

Şimdi kullanıcının girdiği parolayı kontrol eden bir örnek yapalım:

1 string parola = txtParola.Text;

2

4 {

5 MessageBox.Show(“tebrikler, parola doğru”);

6 }

7 else

8 {

9 MessageBox.Show(“üzgünüm, parola yanlış”);

10 }

Örneği incelediğimizde, 3 nolu satırda if deyimi içerisinde parola değişkeninin değeri == operatörü ile kontrol ediliyor. Kullanıcın girdiği değer “123456” değerine eşit ise deyim true değerini döndü-recek ve ilk scope çalışacaktır. Eşit değil ise o zaman false değerini döndürecek ve else deyimin-den sonraki scope çalışacaktır. Şimdi örneğimizi biraz geliştirelim. Kullanıcıdan parola dışında bir de kullanıcı adı bilgisi isteyelim ve her ikisi de doğru ise işlem başarılı olsun.

string parola = txtParola.Text;

string kullaniciAdi = txtKullaniciAdi.Text;

3 if (parola == “123456”)

if (kullaniciAdi == “admin” && parola == “123456”)

101Operatörler ve Karar Yapıları

Page 110: YAZILIM VE VERİTABANI - Masonluk ve MasonlarOct 11, 2007  · Sunuş 1989… Bilgisayarla ilk tanıştığım ve Basic dili ile uygulama geliştirdiğim yıllardan itibaren bilgisayar

{

MessageBox.Show(“tebrikler, Kullanıcı Adı ve Parola doğru”); }

else

{

MessageBox.Show(“üzgünüm, Kullanıcı Adı veya Parola yanlış”); }

Burada if deyiminde VE (&&) operatörü ile iki koşulunda true olması durumunda girişi doğruladık. Fakat durumun false olmasının hangi koşuldan kaynaklandığını bilemiyoruz. Bu durumu iç içe if deyimi kullanarak çözebiliriz.

string parola = txtParola.Text;

string kullaniciAdi = txtKullaniciAdi.Text;

{

{

MessageBox.Show(“tebrikler, Kullanıcı Adı ve Parola doğru”);

}

else

{

MessageBox.Show(“üzgünüm, Parolanız yanlış”);

}

}

else

{

MessageBox.Show(“üzgünüm, Kullanıcı Adınız yanlış”);

}

Bazen uygulama geliştirirken peş peşe birçok if deyimi kullanmak zorunda kalabiliriz.

byte ay = Conver.ToByte(txtAy.Text);

if (ay == 1)

MessageBox.Show(“Ocak”);

else if (ay == 2)

MessageBox.Show(“Şubat”);

else if (ay == 3)

MessageBox.Show(“Mart”);

else if (ay == 4)

MessageBox.Show(“Nisan”);

else if (ay == 5)

MessageBox.Show(“Mayıs”);

else if (ay == 6)

if (kullaniciAdi == “admin”)

if (parola == “123456”)

102 Bölüm 7

Page 111: YAZILIM VE VERİTABANI - Masonluk ve MasonlarOct 11, 2007  · Sunuş 1989… Bilgisayarla ilk tanıştığım ve Basic dili ile uygulama geliştirdiğim yıllardan itibaren bilgisayar

MessageBox.Show(“Haziran”);

else if (ay == 7)

MessageBox.Show(“Temmuz”);

else if (ay == 8)

MessageBox.Show(“Ağustos”);

else if (ay == 9)

MessageBox.Show(“Eylül”);

else if (ay == 10)

MessageBox.Show(“Ekim”);

else if (ay == 11)

MessageBox.Show(“Kasım”);

else if (ay == 12)

MessageBox.Show(“Aralık”);

else

MessageBox.Show(“1-12 arası sayı girmelisiniz”);

Örnekte olduğu gibi 1 ile 12 arası girilen sayıya göre kullanıcıya ay bilgisi dönmektedir. Burada peş peşe 12 adet if yerine tek if deyimi kullanılmış ve devamında ise else if deyimleri ile devam edilmiş girilen değer 1 ile 12 arası değil ise else değiminde uyarı mesajı verilmiştir. Burada kullanı-lan else if deyimi, kodun tüm if deyimlerini kontrol etmesini engellemiş ve sondaki else deyiminin kullanımını sağlamıştır.

switch Deyimiswitch deyimi de if deyimi gibi uygulama akışlarını kontrol etmek için kullanılır. Genellikle daha okunaklı ve birçok durum için daha verimli olduğu için karmaşık else if blokları yerine kullanılır. Genel yazım şekli şöyledir:

switch ( değişken )

{

case durum1 :

yapılacak işler;

break;

case durum2 :

yapılacak işler;

break;

case durum3 :

yapılacak işler;

break;

.

.

.

default :

yapılacak işler;

break;

}

103Operatörler ve Karar Yapıları

Page 112: YAZILIM VE VERİTABANI - Masonluk ve MasonlarOct 11, 2007  · Sunuş 1989… Bilgisayarla ilk tanıştığım ve Basic dili ile uygulama geliştirdiğim yıllardan itibaren bilgisayar

Bir önceki konuda else if deyimi ile yaptığımız örneği birde switch ile yapalım:

byte ay = Conver.ToByte(txtAy.Text);

switch (ay)

{

case 1 :

MessageBox.Show(“Ocak”);

break;

case 2:

MessageBox.Show(“Şubat”);

break;

case 3:

MessageBox.Show(“Mart”);

break;

case 4:

MessageBox.Show(“Nisan”);

break;

case 5:

MessageBox.Show(“Mayıs”);

break;

case 6:

MessageBox.Show(“Haziran”);

break;

case 7:

MessageBox.Show(“Temmuz”);

break;

case 8:

MessageBox.Show(“Ağustos”);

break;

case 9:

MessageBox.Show(“Eylül”);

break;

case 10:

MessageBox.Show(“Ekim”);

break;

case 11:

MessageBox.Show(“Kasım”);

break;

case 12:

MessageBox.Show(“Aralık”);

break;

default :

MessageBox.Show(“1-12 arası sayı girmelisiniz”);

break;

}

104 Bölüm 7

Page 113: YAZILIM VE VERİTABANI - Masonluk ve MasonlarOct 11, 2007  · Sunuş 1989… Bilgisayarla ilk tanıştığım ve Basic dili ile uygulama geliştirdiğim yıllardan itibaren bilgisayar

Örneği incelediğimizde, txtAy isimli TetxBox’a girilen sayıya denk gelen kısım switch deyimi ta-rafından ilgili case’de (durum) çalıştırılır. İşlem yapıldıktan sonra break atlama ifadesi ile diğer case’lerin çalışması önlenir. En sonda bulunan default if deyimindeki else gibi çalışır yani hiçbir case‘in uymadığı durumda çalışan bölümdür.

switch deyimi kullanırken dikkat edeceğimiz hususlardan bir tanesi de du-rumunu kontrol ettiğimiz değişken ile case’lerde belirttiğimiz sabitlerin veri tiplerinin aynı veya uyumlu olması gerektiğidir.

Lab 7.1 Sayı Tahmin OyunuYeni bir Windows projesi açın ve ismini “SayiTahmini” olarak değiştirin. Formunuzun görün-tüsü Şekil 7.1’deki gibi olmalıdır.

Formunuza Tablo 7.1’deki kontrolleri ekleyin.

Tahmin edilecek sayıyı tutmak için int tipinde bir değişken tanımlayın. Ardından bu sayısı rastgele oluşturacak Random nesnesini ekleyin. Bu nesnelere tüm scope’lardan ulaşılacağı için global tanımlanmalıdır.

int sayi;

Random rastgele = new Random();

btnBaslat adlı Button’a çift tıklayarak kod penceresine geçin ve rastgele sayı üreterek oyunun başlatan kodu yazın.

private void btnBaslat_Click(object sender, EventArgs e)

{

//0-100 arsı rastgele bir sayı üretip değerini sayi adlı değişkene atıyoruz.

sayi = rastgele.Next(0, 101);

}

btnTahminEt adlı Button’a çift tıklayarak kod penceresine geçin ve txtSayi kontrolüne girilen sayının tahmin edilen sayı ile aynı olup olmadığını kontrol eden kodları yazın.

1.

2.

3.

4.

5.

case ifadele-rinde değişken kullanılamaz.

Şekil 7.1

Tablo 7.1Name Text

Label lblSayi Bir Sayi Giriniz

Label lblMesaj 1-100 arası bir sayi girin

Button btnTahminEt Tahmin Et

Button btnBaslat Oyunu Başlat

Button btnKapat Oyundan Çık

105Operatörler ve Karar Yapıları

Page 114: YAZILIM VE VERİTABANI - Masonluk ve MasonlarOct 11, 2007  · Sunuş 1989… Bilgisayarla ilk tanıştığım ve Basic dili ile uygulama geliştirdiğim yıllardan itibaren bilgisayar

private void btnTahminEt_Click(object sender, EventArgs e)

{

//Kullanıcının girdiği sayiyi girilenSayi adlı tamsayı değişkene atıyoruz.

int girilenSayi = Convert.ToInt32(textSayi.Text);

//girilen sayı eğer rastgele üretilen sayıya eşitse oyun kazanılır

if (sayi == girilenSayi)

{

lblMesaj.Text = “BRAVOO BULDUNNN !!!”;

}

//girilen sayı eğer rastgele üretilen sayıdan büyükse uyarı uyarı verilir.

if (sayi > girilenSayi)

{

lblMesaj.Text = “Daha büyük bir sayı girin”;

}

//girilen sayı eğer rastgele üretilen sayıdan küçükse uyarı verilir.

if (sayi < girilenSayi)

{

lblMesaj.Text = “Daha küçük bir sayı girin”;

}

}

Son olarak btnKapat adlı Button’un Click olayına formu kapatacak kodları yazın.

private void buttonKapat_Click(object sender, EventArgs e)

{

//Formu Close metodu ile form kapanıyor.

this.Close();

}

Lab 7.2 Uygulama YükleyiciBu örneğimizde arka planda bir program yüklenirken kullanıcıya programın yüklenmesiyle ilgili detayları veren bir uygulama geliştireceğiz. Programınız mevcut yüklenme miktarını da grafiksel olarak gösterebilmelidir. Uygulama bittiğinde programın görüntüsü Şekil 7.2’deki gibi olacaktır.

6.

106 Bölüm 7

Page 115: YAZILIM VE VERİTABANI - Masonluk ve MasonlarOct 11, 2007  · Sunuş 1989… Bilgisayarla ilk tanıştığım ve Basic dili ile uygulama geliştirdiğim yıllardan itibaren bilgisayar

Yeni bir Windows projesi açın ve ismini “ProgramYukleniyor” olarak değiştirin.

Formunuza Tablo 7.2’deki kontrolleri ekleyin.

tmrYukleyici’nin Interval özelliğini 1000 yapın.

Formun Load olayına yükleme işlemini başlatan kodları yazın.

private void Form1_Load(object sender, EventArgs e)

{

//Yükleme işlemi bitmeden devam düğmesine basılamasın

btnDevam.Enabled = false;

//Yükleme işlemi şimdi başlasın

tmrYukleyici.Start();

}

tmrYukleyici adlı Timer kontrolünün Tick olayına uygulamanın gövdesini oluşturacak if deyimi ile yüklenen modülleri gösterecek kodları yazın.

private void tmrYukleyici_Tick(object sender, EventArgs e)

{

//Artışı sağlamak için rastgele sayı oluşturucu tanımlıyoruz

//Artışın rastgele olmasının sebebi kullanıcının uygulamayı her yüklediğinde

//farklı artışlar görüp durumdan şüphelenmemesi :)

//İsterseniz timer’ın interval’ini de rastgele değiştirip daha da gerçekçi hale

//getirebilirsiniz

Random rastgeleSayiOlusturucu = new Random();

int artisOrani = rastgeleSayiOlusturucu.Next(1, 20);

1.

2.

3.

4.

Şekil 7.2

Tablo 7.2Name Text

PictureBox pcbResim

ProgressBar pbDurum

Label lblDurum Birazdan program yüklemesi başlayacak

Button btnDevam Devam ->

Timer tmrYukleyici

107Operatörler ve Karar Yapıları

Page 116: YAZILIM VE VERİTABANI - Masonluk ve MasonlarOct 11, 2007  · Sunuş 1989… Bilgisayarla ilk tanıştığım ve Basic dili ile uygulama geliştirdiğim yıllardan itibaren bilgisayar

//oluşturduğumuz rastgele artışı progress bar’ın artışı olarak atıyoruz.

pbDurum.Step = artisOrani;

//progress bar’dan artışı gerçekleştirmesini sağlıyoruz.

pbDurum.PerformStep();

//artıştan sonraki progress bar’ın değerini suAnkiDeger değişkenine atıyoruz

int suAnkiDeger=pbDurum.Value;

if (suAnkiDeger<=20) //0-20 arasında

{

lblDurum.Text = “Program yüklenmeye hazırlanıyor.”;

}

else if(suAnkiDeger>20&&suAnkiDeger<=45) //21-45 arasında

{

lblDurum.Text=”Güvenlik modülü yükleniyor.”;

}

else if (suAnkiDeger > 45 && suAnkiDeger <= 70) //46-70 arasında

{

lblDurum.Text=”Veritabanı modülü yükleniyor.”;

}

else if(suAnkiDeger>70 && suAnkiDeger<=95) //71-95 arasında

{

lblDurum.Text = “Bellek optimizasyonu yapılıyor.”;

}

else if (suAnkiDeger > 95 && suAnkiDeger < 100) //96-100 arasında

{

lblDurum.Text = “Lazer kalkanları devre dışı burakılıyor.”;

}

else

{

//geriye sadece tek ihtimal kalıyor. O da 100.

//100’ü aşamaz çünkü progress bar’ın maximum değeri 100.

//PerformStep() metodu sayesinde artış 100’ü aşsa bile hata vermeden

//değeri otomatik olarak 100’e taşınır.

//Yükleme bitti yazısı

lblDurum.Text = “Yükleme başarı ile tamamlanmıştır.”;

//timer durdurulur

108 Bölüm 7

Page 117: YAZILIM VE VERİTABANI - Masonluk ve MasonlarOct 11, 2007  · Sunuş 1989… Bilgisayarla ilk tanıştığım ve Basic dili ile uygulama geliştirdiğim yıllardan itibaren bilgisayar

tmrYukleyici.Stop();

//artık kullanıcı devam düğmesine basabilir

btnDevam.Enabled = true;

}

}

btnDevam kontrolüne çift tıklayarak kod penceresinde formu kapatan kodu yazın.

private void btnDevam_Click(object sender, EventArgs e)

{

//ve form kapatılır

this.Close();

}

Lab 7.3 Şans OyunuBu örneğimizde ekrana rastgele gelen 3 numaraya göre oynanan bir şans oyunu uygulaması yapacağız.

Yeni bir Windows projesi açın ve ismini “SansOyunu” olarak değiştirin. Uygulamanız ekran görüntüsü Şekil 7.3’teki gibi olacaktır.

Formunuza Tablo 7.3’teki kontrolleri ekleyin.

5.

1.

2.

Şekil 7.3

Tablo 7.3Name Text

Label lblSayi1 0

Label lblSayi2 0

Label lblSayi3 0

Label lblSonuc label1

Button btnBasla Start

109Operatörler ve Karar Yapıları

Page 118: YAZILIM VE VERİTABANI - Masonluk ve MasonlarOct 11, 2007  · Sunuş 1989… Bilgisayarla ilk tanıştığım ve Basic dili ile uygulama geliştirdiğim yıllardan itibaren bilgisayar

Form1’in Load olayına çift tıklayarak kod penceresine geçin ve gerekli kodları yazın.

private void Form1_Load(object sender, EventArgs e)

{

lblSonuc.Text = “Puanınız : “ + puan.ToString();

}

btnBasla’ya çift tıklayarak kod penceresine geçin ve btnBasla’nın Click olayına gerekli kodları yazın.

int puan=30;

private void btnBasla_Click(object sender, EventArgs e)

{

//Rastgele sayı üretebilmek için kullanacağınız Random türünden bir nesne tanımlayın.

Random rnd = new Random();

//Label kontrollerine rastgele sayilar atayınız.

lblSayi1.Text = rnd.Next(1, 11).ToString();

lblSayi2.Text = rnd.Next(1, 11).ToString();

lblSayi3.Text = rnd.Next(1, 11).ToString();

//Label kontrollerine atanan rastgele sayiları kontrol edin.

//lblSayi1, lblSayi2 ve lblSayi3’ün herbirinin Text özelliği “7” ise puanı 100 arttırın.

if (lblSayi1.Text == “7” && lblSayi2.Text == “7” && lblSayi3.Text == “7”)

{

puan += 100;

}

//lblSayi1 ve lblSayi2’ nin Text özelliği “7” ise puanı 10 arttırın.

else if (lblSayi1.Text == “7” && lblSayi2.Text == “7” )

{

puan += 10;

}

//lblSayi2 ve lblSayi3’ nin Text özelliği “7” ise puanı 10 arttırın.

else if (lblSayi2.Text == “7” && lblSayi3.Text == “7”)

{

puan += 50;

}

//lblSayi3’ün text özelliği “7” ise puanı 5 arttırın.

else if (lblSayi3.Text == “7”)

{

puan += 5;

}

3.

4.

110 Bölüm 7

Page 119: YAZILIM VE VERİTABANI - Masonluk ve MasonlarOct 11, 2007  · Sunuş 1989… Bilgisayarla ilk tanıştığım ve Basic dili ile uygulama geliştirdiğim yıllardan itibaren bilgisayar

//puanı 3 azaltın.

else

{

puan -= 3;

}

//puanı Yazdırın.

lblSonuc.Text=”Puanınız : “ + puan.ToString();

//Eğer puan<=0 ise kullanıcıya yeniden oynayıp oynamak istemediğini sorun.

if (puan<=0)

{

if (MessageBox.Show(“Oyun bitti. Tekrar oynamak ister misiniz?”, this.Text, MessageBoxButtons.YesNo, MessageBoxIcon.Question, MessageBoxDefaultButton.Button1)==DialogResult.Yes)

{

//Tekrar oynamak isterse puan değişkenini ve Label kontrollerini programın başlangıcındaki hale getirin.

puan = 30;

lblSayi1.Text = “0”;

lblSayi2.Text = “0”;

lblSayi3.Text = “0”;

lblSonuc.Text = “Puanınız : “ + puan.ToString();

}

else

{

//Tekrar oynamak istemezse uygulamayı kapatın.

this.Close();

}

}

}

ÖdevlerAçılırken saydamlıktan donukluğa, kapanırken donukluktan saydamlığa geçebilen bir form hazırlayın. Bunun için formun Opacity özelliğini kullanabilirsiniz.

Msn Messenger uygulamasında olduğu gibi Button’a tıklandığında formu titreten uygulamayı hazırlayın.

1.

2.

111Operatörler ve Karar Yapıları

Page 120: YAZILIM VE VERİTABANI - Masonluk ve MasonlarOct 11, 2007  · Sunuş 1989… Bilgisayarla ilk tanıştığım ve Basic dili ile uygulama geliştirdiğim yıllardan itibaren bilgisayar
Page 121: YAZILIM VE VERİTABANI - Masonluk ve MasonlarOct 11, 2007  · Sunuş 1989… Bilgisayarla ilk tanıştığım ve Basic dili ile uygulama geliştirdiğim yıllardan itibaren bilgisayar

8 Döngüler

Page 122: YAZILIM VE VERİTABANI - Masonluk ve MasonlarOct 11, 2007  · Sunuş 1989… Bilgisayarla ilk tanıştığım ve Basic dili ile uygulama geliştirdiğim yıllardan itibaren bilgisayar

8 Döngülerfor Döngüsü

while Döngüsü

do while Döngüsü

foreach Döngüsü

Lab 8.1 Tarih Doğrulama

Lab 8.2 Gazeteler

Lab 8.3 Kelime Arama

Ödevler

Page 123: YAZILIM VE VERİTABANI - Masonluk ve MasonlarOct 11, 2007  · Sunuş 1989… Bilgisayarla ilk tanıştığım ve Basic dili ile uygulama geliştirdiğim yıllardan itibaren bilgisayar

DöngülerDöngüler bir programlama dili için en çok kullanılan ifadelerden biridir. Ardı ardına ya da sıralı bir iş yaptıracağımız zaman bunu döngüler yardımıyla yaparız. C# dilinde 4 adet döngü çeşidi vardır. Bunlar for, while, do while ve foreach döngüleridir.

for Döngüsüfor döngüsü başlangıç değerinden itibaren belirtilen koşul sağlanana kadar içine yazıldığı kod parçasını ardı ardına çalıştırır. Genel yazım şekli şöyledir;

for ( başlangıç;koşul;artım)

{

yapılacak işler;

}

başlangıç, döngü kontrol değişkeni olarak da ifade edilebilir. Döngü içerisinde bir sayaç görevini görür.

koşul, döngünün ne kadar çalışacağını denetleyen mekanizmadır. Koşul sağlanıyorken döngü çalışmaya devam eder. Koşul sağlanmadığında ise döngü durur. Koşulda genellikle başlangıç değerinin durumu denetlenir.

artım, başlangıç değerinin döngünün her adımda artma yada azaltma miktarını belirler. Eğer baş-langıç değeri hiç değişmez ise sonsuz döngü oluşur.

Şimdi 1’den 100’e kadar olan sayıların toplamını bulan bir uygulama geliştirelim:

int toplam = 0;

{

toplam += i;

}

MessageBox.Show(toplam.ToString());

Kodu çalıştırdığınızda sonuç olarak 5050 alacaksınız.

başlangıç, byte i = 1; for döngüsünde döngünün hangi adımda olduğu i değişkeninin durumu ile ifade edilir.

koşul, i <= 100; koşulun görevi döngünün devam edip etmeyeceğine karar vermektir. Her adımda koşul kontrol edilir. Doğru ( true ) verdikçe döngü devam eder. Buradaki örnekte i değişkeni 100 den küçük ve eşit iken döngü çalışmaya devam edecektir.

artım, i++; burada döngünün her adımında i’nin değeri 1 arttırılır.

Bu bilgiler ışığında şimdi de 1’den 100’e kadar çift sayıların toplamını bulalım.

int toplam = 0;

for (byte i = 0; i <= 100; i += 2)

{

for (byte i = 1; i <= 100; i++)

Page 124: YAZILIM VE VERİTABANI - Masonluk ve MasonlarOct 11, 2007  · Sunuş 1989… Bilgisayarla ilk tanıştığım ve Basic dili ile uygulama geliştirdiğim yıllardan itibaren bilgisayar

toplam += i;

}

MessageBox.Show(toplam.ToString());

Sonuç: 2550

Gördüğünüz gibi sadece artım kısmını değiştirdik. Böylelikle döngümüz ilk örnekteki gibi 100 kere değil 50 kere dönmüş oldu.

Şimdiye kadar yaptığımız örneklerde başlangıç değeri artarak devam ediyordu. Bazı durumlarda başlangıç değerinin azalarak devam etmesini isteyebiliriz. Örneğin bir işe başvuru formunda sene bilgilerini bir ComBox’a teker teker elle girdirmek yerine bunu bir for döngüsü yardımıyla rahatlıkla yapabilir. En yakın senenin en üstte olmasını istenirse bu başlangıç değerini 2008’den 1908’e doğru azalarak gitmesi gerekir:

{

cmbSene.Items.Add(i);

}

Kullanıcıdan aldığımız bir sayının asal olup olmadığını denetleyen bir program yazalım. Bildiğiniz gibi asal sayılar 1’e ve kendisinden başka sayılara tam bölünmeyen sayılardır. Bir sayının asal olup olmadığını, onu 1 ve kendisi hariç tüm sayılara bölümünden kalanı denetleyerek bulabiliriz.

Bu örnekte for döngüsü yanında mod ( % ) operatöründen ve program atlama ifadesi break‘ten yararlanacağız. Zira bir sayının birden fazla tam böleni olabilir ve bizim bulduğumuz ilk tam bö-lenden sonra döngünün çalışmasına gerek kalmayabilir. Bu şekilde büyük bir sayı girildiğinde döngünün uzun süre çalışmasını engelleyerek performans artışı sağlamış oluruz.

1 int sayi = Convert.ToInt32(txtSayi.Text);

2 bool asalMi = true;

3 int tamBolen = 0;

4

6 {

8 if (kalan == 0)

9 {

10 tamBolen = i;

11 asalMi = false;

12 break;

13 }

14 }

15

16 if (asalMi == true)

17 MessageBox.Show(sayi.ToString() + “ asaldır.”);

for(short i = 2008; i >= 1908;i -=1)

5 for (int i = 2; i < sayi; i++)

7 int kalan = sayi % i;

116 Bölüm 8

Page 125: YAZILIM VE VERİTABANI - Masonluk ve MasonlarOct 11, 2007  · Sunuş 1989… Bilgisayarla ilk tanıştığım ve Basic dili ile uygulama geliştirdiğim yıllardan itibaren bilgisayar

18 else

19 MessageBox.Show(sayi.ToString() + “ asal değildir. Tam böleni: ” + tamBolen.ToString());

1 nolu satırda kullanıcının girdiği sayıyı alıyoruz.

2 nolu satırda asalMi değişkenine true değerini atıyoruz. Bu, kullanıcının girdiği tüm sayıları ön-ceden asal kabul ettiğimiz anlamına gelir. For döngüsü içerisinde asal sayı kuralını bozan durum gerçekleştirirse asalMi değişkeni false olmaktadır.

3 nolu satırda tamBolen değişkeni ile kullanıcının girdiği sayının en küçük tam bölenini bilgi ma-hiyetinde saklayacağız.

5 nolu satırda gördüğünüz gibi başlangıç noktamız 2 ve koşulumuz küçük eşittir <= değilde sade-ce küçüktür < . Bildiğiniz gibi asal sayı kuralına göre sayı 1 ve kendisinden başka böleni olmayan sayı idi. Başlangıç noktasını 2 vererek 1 sayısını, küçük eşittir yerine küçük yazarak sayının ken-disini bölme işleminden saf dışı tutuyoruz.

7 nolu satırda sayi’nın i‘ye bölümünden kalanı mod kullanarak hesaplanıyor.

8 nolu satırda kalan kontrol ediliyor. Eğer kalan sıfırda ise 10,11 ve 12 numaralı satırlar çalıştırı-lacak.

10 nolu satırda kullanıcıya bilgi mahiyetinde sunulacak tamBolen değeri atanıyor.

11 nolu satırda daha sonra 16 nolu satırda kontrol edeceğimiz asalMi değişkeninin değerine true atanıyor.

12 nolu satır performans için kilit noktadır. Burada break ifadesini kullanmasak da uygulamamız yine doğru sonuç üretecektir. 1000000 gibi büyük bir sayı girildiğinde döngümüz 2 den 999999 a kadar çalışacaktır. Ancak döngümüz henüz ilk adımda iken yani i değişkeni 2 iken tamBolen bulunursa diğer sayıların kontrol edilmesine gerek yoktur. Bu yüzden break ifadesi yardımıyla döngüden çıkılır ve geri kalan sayılar gereksiz yere kontrol edilmez.

16 nolu satırda asalMi değişkeninin durumu kontrol edilerek kullanıcıya uygulamanın sonu hak-kında bilgi verilir.

ContinueBir döngünün sonraki tekrara erken geçişini sağlamak için continue ifadesi kullanılır. Bir bakıma break ifadesinin tamamlayıcısıdır. Daha önceki konuda örneğini yaptığımız 1 ile 100 arasındaki çift sayıların toplamını bulan uygulamayı biraz değiştirerek continue ifadesini kullanarak tekrar yapalım.

1 for (int i = 0; i <= 100; i ++)

2 {

3 İf((i%2) != 0)

5 listBox1.Items.Add(i);

6 }

Örneğimizi incelediğimizde, 3 nolu satırda mod operatörü ile sayının çift olup olmadığı kontrol ediliyor. Eğer sayı çift değilse 4 nolu satırdaki continue ifadesi ile o satırdan itibaren kod icra edilmeyip döngüye tekrar zorlanıyor yani kod 1 nolu satıra dallanıyor. Böylelikle sadece çift olan sayılar için 5 nolu kod satırı çalışıyor ve çift sayılar ListBox kontrolüne ekleniyor.

4 continue;

117Döngüler

Page 126: YAZILIM VE VERİTABANI - Masonluk ve MasonlarOct 11, 2007  · Sunuş 1989… Bilgisayarla ilk tanıştığım ve Basic dili ile uygulama geliştirdiğim yıllardan itibaren bilgisayar

while DöngüsüC#’taki döngülerden bir diğeri ise while döngüsüdür. while döngüsü bir koşul sağlanıyorken dön-meye devam eder. Koşul yanlış ( false ) sonucunu verdiği zaman ise sonlandırılır. Genel yazım şekli şöyledir.

while( koşul )

{

yapılacak işler;

}

1’den 100’e sayıların toplamını bulan bir while döngüsü yazalım:

int toplam = 0;

int sayac = 1;

{

toplam+= sayac;

sayac++;

}

Sonuçta toplam değişkeni 5050 verecektir. Örnekte görüldüğü gibi sayac döngü içerisinde her adımda 1 arttırılıyor. Böylelikle sayac 101 olduğunda döngü artık sonlandırılıyor. Burada koşulu-muz sayac değişkeninin değerinin 100 den küçük veya eşit olmasıdır. Koşul doğru (true) sonu-cunu verdikçe döngü işletiliyor, koşulun yanlış (false) değerini vermesi halinde ise döngü sonlan-dırılıyor.

while döngüsü bu şekilde sırayla yapılacak işlemlerden ziyade problem çözümünde bir koşulun durumun sınamak için kullanılır.

Kullanıcı tarafından girilen bir sayının kaç basamaklı olduğunu bulmak while döngüsü için daha açıklayıcı bir örnek olacaktır.

1 int sayi = Convert.ToInt32(txtSayi.Text);

2 int basamak = 0;

3

5 {

6 basamak++;

8 }

9

10 MessageBox.Show(“Girdiğiniz sayı “ + basamak.ToString() + “basamaklıdır.”);

Örnekte görüldüğü gibi 4 nolu satırda koşulumuz sayi değişkeninin sıfırdan büyük olmasıdır.

6 nolu satırda basamak değişkeni 1 arttırılır.

while( sayac <= 100 )

4 while (sayi > 0)

7 sayi /= 10;

118 Bölüm 8

Page 127: YAZILIM VE VERİTABANI - Masonluk ve MasonlarOct 11, 2007  · Sunuş 1989… Bilgisayarla ilk tanıştığım ve Basic dili ile uygulama geliştirdiğim yıllardan itibaren bilgisayar

7 nolu satırda ise sayı‘nın değeri 10’a bölüp kendisine eşitlenir. (Bir sayıyı sonuç 0 oluncaya ka-dar kaç kere 10’a bölerseniz, o sayının basamak sayısını bulursunuz.)

Böylelikle sayı basamak sayısı kadar 10’a bölünecektir.

do while DöngüsüC#’taki bir diğer döngü de do while döngüsüdür. for ve while döngülerinden farklı olarak koşul döngünün sonunda kontrol edilir. Bu da do while döngüsünün en az bir kere çalıştırılacağı anla-mına gelir.

Genel yazım şekli şöyledir:

do

{

yapılacak işler;

} while ( koşul );

1’den 100’e kadar olan sayıların toplamını do while döngüsü yardımıyla bulalım.

int toplam = 0;

int sayac = 0;

do

{

sayac++;

toplam += sayac;

MessageBox.Show(“toplam “ + toplam.ToString() + “,sayac “ + sayac.ToString());

Hatırlarsanız benzer bir örneği while döngüsü ile yaptık, ancak while döngüsündeki koşulumuzu bir hatırlayalım:

while( sayac <= 100 )

{

....

}

Görüldüğü gibi sayac 100’den küçük ve eşit.

do while’daki koşulumuza tekrar bakalım:

do

{

....

} while ( sayac < 100 );

Görüldüğü gibi do while döngüsünde koşulumuz 100’den küçük olması aranıyor ancak sayac 100 iken bile bir kez çalışıyor ve koşul aşağıda olduğu için sayac 100 iken döngüden çıkıyor.

} while (sayac < 100);

119Döngüler

Page 128: YAZILIM VE VERİTABANI - Masonluk ve MasonlarOct 11, 2007  · Sunuş 1989… Bilgisayarla ilk tanıştığım ve Basic dili ile uygulama geliştirdiğim yıllardan itibaren bilgisayar

foreach D öngüsüC#’ta bir diğer döngü de foreach döngüsüdür. foreach, dizi (Array) ve koleksiyon ( collection ) tabanlı nesnelerin elemanları üzerinden ilerleyen bir döngüdür.

Genel kullanım şekli şöyledir;

foreach(tip değişken in koleksiyon)

{

yapılacak işler;

}

tip: buradaki tip koleksiyonun veri tipi ile aynı veya uyumlu olmak zorundadır.

değişken: foreach döngüsü içerisinde koleksiyonda bulunan sıradaki elemanı temsil eder.

koleksiyon: ArrayList ya da dizi gibi aynı tip verileri barındıran ko-leksiyon.

Lab 8.1 Tarih DoğrulamaBu örnekte amaç, form yüklendiği anda gün, ay ve yıl bilgisini tutan 3 adet ComboBox kontrolünü for döngüleri yardımı ile doldurmaktır.

Formunuzun görüntüsü Şekil 8.1’deki gibi olmalıdır.

Yeni bir Windows projesi açın ve ismini “TarihDogrulama” olarak değiştirin.

Formunuza Tablo 8.1’deki kontrolleri ekleyin.

Formun üzerinde boş bir yere çift tıklayarak kod penceresine geçin ve Load olayına gerekli kodları yazın.

1.

2.

3.

foreach döngüsü bir son-raki bölüm olan Diziler an-latılırken işlenecektir.

Şekil 8.1

Tablo 8-1Name Text

Label lblGun Gün:

Label lblAy Ay:

Label lblYil Yil:

ComboBox cmbGun

ComboBox cmbAy

ComboBox cmbYil

Button btnKontrol Geçerli Tarih mi?

120 Bölüm 8

Page 129: YAZILIM VE VERİTABANI - Masonluk ve MasonlarOct 11, 2007  · Sunuş 1989… Bilgisayarla ilk tanıştığım ve Basic dili ile uygulama geliştirdiğim yıllardan itibaren bilgisayar

private void Form1_Load(object sender, EventArgs e)

{

//cmbGun ve cmbAy adlı Combobox’ları uygun sayılarla doldurabilmek için int tipinde bir değişken tanımlayın.

int counter = 1;

for (int i = 1920; i <= 2008; i++)

{

//cmbYil adlı ComboBox’ a 1920 den 2008’e kadar olan sayıları ekleyin.

cmbYil.Items.Add(i);

if (counter < 13)

{

//cmbAy adlı ComboBox’ a 1’ den 13’e kadar olan sayıları ekleyin.

cmbAy.Items.Add(counter);

}

if (counter < 32)

{

//cmbGun adlı ComboBox’ a 1’ den 32’ye kadar olan sayıları ekleyin.

cmbGun.Items.Add(counter);

}

//Her döngüde counter adlı değişkeni bir arttırın.

counter++;

}

}

İkinci aşamada kullanıcı btnKontrol adlı Button’a tıkladığı anda girdiği tarihin geçerli bir tarih olup olmadığını kontrol edeceğiz. btnKontrol‘a çift tıklayarak kod penceresine geçin ve Click olayına gerekli kodları yazın.

private void btnKontrol_Click(object sender, EventArgs e)

{

try

{

//Kullanıcının ComboBox kontrollerine girdiği değerleri DateTime türünden dt isimli bir değişkene dönüştürmeye çalışın.

Eğer çevirme işlemi başarılı olursa “Geçerli bir tarih seçtiniz” uyarısı verin.

DateTime dt = Convert.ToDateTime(cmbGun.Text + “.” + cmbAy.Text + “.” + cmbYil.Text);

MessageBox.Show(“Geçerli bir tarih seçtiniz”);

}

catch (Exception ex)

{

//Çevirme işlemi başarılı olmazsa “Geçersiz bir tarih seçtiniz” uyarısı verin.

4.

121Döngüler

Page 130: YAZILIM VE VERİTABANI - Masonluk ve MasonlarOct 11, 2007  · Sunuş 1989… Bilgisayarla ilk tanıştığım ve Basic dili ile uygulama geliştirdiğim yıllardan itibaren bilgisayar

MessageBox.Show(“Geçersiz bir tarih seçtiniz”);

}

}

Projenizi çalıştırın ve geçerli bir tarih girip Button‘a basın. Aynı işlemi 31.02.1996 tarihi için yeniden deneyiniz.

Lab 8.2 GazetelerBu örneğimizde foreach döngüsü ile bir kontrolden diğerine öğelerin nasıl aktarıldığına bakaca-ğız.

Formunuzun görüntüsü Şekil 8.2’deki gibi olmalıdır.

Yeni bir Windows projesi açın ve ismini “Gazete” olarak değiştirin.

Tablo 8.2’deki kontrolleri formunuza ekleyin.

clGazeteler adlı CheckedListBox’a Milliyet, Hürriyet, Sabah, Radikal, Posta, Fotomaç, Fanatik, Takvim, Tercüman öğelerini ekleyin.

clGazeteler adlı kontrolde Ctrl tuşuyla biden fazla öğe seçebilmek için kontrolün Properties pane-line girerek SelectionMode özelliğini MultiSimple olarak değiştirin.

Amacımız kullanıcının clGazeteler adlı CheckedListBox’tan seçtiği gazeteleri btnSec adlı düğmeye tıkladığında lbOkunanlar adlı Listbox kontrolüne eklemektir.

Şimdi btnSec isimli Button’un Click olayına aşağıdaki kodları yazın.

private void btnSec_Click(object sender, EventArgs e)

{

//Eğer Button’ a tıklandığında hiç bir gazete seçili değilse kullanıcıya uyarı veriyoruz.

if (clGazeteler.SelectedItems.Count == 0)

MessageBox.Show(“Hiç bir Gazete Seçilmedi”);

else

{

5.

1.

2.

3.

4.

Şekil 8.2

Tablo 8.2Name Text

CheckedListBox clGazeteler

ListBox lbOkunanlar

Button btnSec >>

122 Bölüm 8

Page 131: YAZILIM VE VERİTABANI - Masonluk ve MasonlarOct 11, 2007  · Sunuş 1989… Bilgisayarla ilk tanıştığım ve Basic dili ile uygulama geliştirdiğim yıllardan itibaren bilgisayar

//Seçili öğeleri lbOkunanlar adlı ListBox kontrolüne ekliyoruz.

lbOkunanlar.Items.Clear();

foreach (string gazete in clGazeteler.CheckedItems)

{

lbOkunanlar.Items.Add(gazete);

}

}

}

Foreach döngüsünde, clGazeteler.CheckedItems adlı koleksiyonda clGazeteler adlı kontrol-de seçili olan tüm öğeler bulunur. Bu koleksiyonda bulunan bütün string tipindeki öğeler lbO-kunanlar adlı kontrole ekleniyor.

Lab 8.3 Kelime AramaBu örneğimizde kullanıcının gireceği bir ifadenin aranan metin içerisinde kaç kere geçtiğini veren bir uygulama oluşturacağız.

Formunuzun görüntüsü Şekil 8.3’teki gibi olmalıdır.

Yeni bir Windows projesi oluşturun ve ismini “KelimeArama” olarak değiştirin.

Formunuza Tablo 8.3’teki kontrolleri ekleyin.

Ayrıca lblMetin’in kontrolünün MultiLine özelliğini true olarak değiştirin.

btnAra’ya çift tıklayarak kod penceresine geçin ve kullanıcının txtMetin kontrolü ile girdiği değeri metin içinde arayan kodları yazın.

private void btnAra_Click(object sender, EventArgs e)

{

//aradığımız ifadenin metin içerisinde kaç kere geçtiğini

5.

1.

2.

3.

Şekil 8.3

Tablo 8.3Name Text

TextBox txtKelimeTextBox txtMetinButton btnAra AraLabel lblMetin Arama Yapılacak MetinLabel lblKelime Aranacak Kelime

123Döngüler

Page 132: YAZILIM VE VERİTABANI - Masonluk ve MasonlarOct 11, 2007  · Sunuş 1989… Bilgisayarla ilk tanıştığım ve Basic dili ile uygulama geliştirdiğim yıllardan itibaren bilgisayar

//tutacak olan Sayi adlı integer tipinden değişken tanımlayın.

int Sayi = 0;

//kullanıcının txtMetin’e girmiş olduğu değeri Metin değişkenine atadık.

string Metin = txtMetin.Text;

//kullanıcının txtKelime’ye girmiş olduğu değeri Kelime değişkenine atadık

string Kelime = txtKelime.Text;

//Konum adında integer tipinden değişkenini tanımlayıp Kelime’nin, Metin içerisindeki konumunu bu değişkene atayın.

int Konum = Metin.IndexOf(Kelime);

//Kelime Metin içinde tekrar ettiği sürece devam edecek while döngüsü tanımlayın.

while (Konum!=-1)

{

//Konum değişkenini Kelime’nin Metin içerisinde bir sonra geçtiği konuma eşitleyin.

Konum = Metin.IndexOf(Kelime, Konum + 1);

//Sayi değişkenini bir arttırın.

Sayi++;

}

//Kullanıcıya Kelime’nin Metin içinde kaç kere geçtiğini gösterin

MessageBox.Show(“Girdiğiniz ifade, metin içrisinde “+ Sayi.ToString() + “ kere geçiyor”);

}

IndexOf metodunun tek parametreli kullanımında metot Metin içerisinde Kelime’nin ilk geçtiği yerdeki Kelime’nin ilk harfinin index numarasını geri döner. Örneğin “Bilge Adam Bilgi Tekno-lojileri Akademisi” metninde “Bilgi” kelimesini IndexOf methodunu kullanarak ararsak dönen sonuç 11 olacaktır. Herhangi bir metin içindeki karakterlerin index numarası 0‘ dan başlar.

IndexOf metodunun iki parametre alan kullanımında ise ilk parametre aranacak kelimeyi, ikin-ci parametre ise arama yapmaya başlanacak karakterin index numarasını ifade eder.

IndexOf metodu belirtilen kelime’yi aranan metin içinde bulamazsa geriye -1 döner.

txtMetin ve txtKelime kontrollerine veriler girerek uygulamanızı test edin.

ÖdevlerFor döngüsü kullanarak çarpım tablosu hazırlayın. Sonuçları ListBox kontrolünde gösterin.

Cep telefonlarının PIN giriş ekranına benzer bir form tasarlayın. Kullanıcı 3 defa PIN numara-sını hatalı girerse “Uygulamanız bloke olmuştur” mesajı verin ve Button kontrolünü görünmez yapın. Kullanıcı 3 deneme hakkı içinde doğru olarak PIN numarasını girerse “Hoş geldiniz” mesajı verip formu kapatın.

4.

5.

1.

2.

124124 Bölüm 8

Page 133: YAZILIM VE VERİTABANI - Masonluk ve MasonlarOct 11, 2007  · Sunuş 1989… Bilgisayarla ilk tanıştığım ve Basic dili ile uygulama geliştirdiğim yıllardan itibaren bilgisayar

9 Diziler

Page 134: YAZILIM VE VERİTABANI - Masonluk ve MasonlarOct 11, 2007  · Sunuş 1989… Bilgisayarla ilk tanıştığım ve Basic dili ile uygulama geliştirdiğim yıllardan itibaren bilgisayar

9 DizilerBazı Dizi Özellikleri ve Metotları

Lab 9.1 Sayısal Loto

Ödevler

Page 135: YAZILIM VE VERİTABANI - Masonluk ve MasonlarOct 11, 2007  · Sunuş 1989… Bilgisayarla ilk tanıştığım ve Basic dili ile uygulama geliştirdiğim yıllardan itibaren bilgisayar

DizilerDeğişkenleri öğrenirken gördük ki her değişkene sadece bir değer atayabiliriz. Bazı durumlarda aynı tipteki değişkenleri bir arada tutma ihtiyacı duyabiliriz. C# bize aynı tipteki değişkenleri tek bir adla saklayabileceğimiz dizileri (Array) sunmaktadır.

Bir dizi tanımlamanın genel yazım şekli şöyledir:

tip[] diziismi = new tip[elemansayisi];

tip: dizide tutulacak verilerin tipidir.

diziismi: dizinin ismi.

boyut: dizide tutulacak eleman sayısı. 5 elemanlı tam sayılar dizisi tanımlamak istersek:

int[] sayilar = new int[5];

Dizilere veri atamak istersek:

diziismi [indeks] = değer;

indeks: dizideki verilere verilen sıra numarası. C#’ta indeksler sıfırdan başlar.

Dizilerden değer okumak için ise:

değişken = diziismi [indeks];

Örneğin 10 kişilik bir sınıftaki öğrencilerin notlarını her öğrenci için bir not değişkeni oluşturup tutmak yerine notlar dizisi içerisinde tutabiliriz.

byte[] notlar = new byte[10];

Bu şekilde notlar isminde 10 tane byte değeri tutabilecek bir dizi tanımladık. Şimdi notları diziye aktaralım.

notlar[0] = 50;

notlar[1] = 60;

notlar[2] = 90;

notlar[3] = 40;

notlar[4] = 60;

notlar[5] = 30;

notlar[6] = 40;

notlar[7] = 70;

notlar[8] = 60;

notlar[9] = 100;

Page 136: YAZILIM VE VERİTABANI - Masonluk ve MasonlarOct 11, 2007  · Sunuş 1989… Bilgisayarla ilk tanıştığım ve Basic dili ile uygulama geliştirdiğim yıllardan itibaren bilgisayar

notlar dizi değişkenindeki 5 numaralı Ahmet’in notunu okuyalım:

byte ahmetinNotu;

ahmetinNotu = notlar[5];

Bütün değerlere tek tek erişmek, eğer bu değerler bir kaç tane ise pek sorun olmayacaktır. Fakat tümünü listelemek istersek bu yöntem pek uygun olmayacaktır. Bunun için foreach döngüsü kul-lanılabilir. Şimdi foreach döngüsü ile tüm elemanları ListBox’ ta gösterelim:

foreach(byte not in notlar)

{

listbox1.Items.Add(not);

}

Bir diziyi ilk değerleri vererek de tanımlayabiliriz.

tip[] diziismi = { değer1, değer2, değer3.... değerN};

Bu şekilde süslü parantezler içerisinde dizinin bütün değerleri girilir ve dizinin boyutu da N olur.

byte[] notlar = { 50, 60, 90, 40, 60, 30, 40, 70, 60, 100 };

Şimdi dizide bulunan notların aritmetik ortalamasını alalım. Bunun için dizideki her elemanı genel-Toplam isimli bir değişkene aktaracağız. Sonuçta genelToplam’ı dizi mevcuduna bölüp aritmetik ortalamayı elde edeceğiz.

int genelToplam = 0;

int ortalama;

{

genelToplam += not;

}

MessageBox.Show(“Aritmetik Ortalama :”+ortalama.ToString());

Şimdi Bölüm 4’te Veri Tipleri konusunda string hakkında öğrendiğimiz bir cümleyi hatırlayalım: String bir char dizisidir.

Şekil 9.1

foreach döngüsü bir dizi üzerinde işlem yaparken, dizi elemanları sadece okunur durumdadır, değerleri değiştirilemez.

byte[] notlar = { 50, 60, 90, 40, 60, 30, 40, 70, 60, 100 };

foreach (byte not in notlar)

ortalama = genelToplam / notlar.Length;

128 Bölüm 9

Page 137: YAZILIM VE VERİTABANI - Masonluk ve MasonlarOct 11, 2007  · Sunuş 1989… Bilgisayarla ilk tanıştığım ve Basic dili ile uygulama geliştirdiğim yıllardan itibaren bilgisayar

Dolayısıyla string bir ifadeyi foreach ile çevirip harflerine teker teker ulaşalım. Örnek olarak kulla-nıcının girdiği bir ifadeyi tersten yazdıralım.

string kelime = txtKelime.Text;

string tersKelime = “”;

{

}

MessageBox.Show(tersKelime);

Bazı Dizi Özellikleri ve MetotlarıDiziler, .NET Framework içinde tanımlı Array sınıfı temsil eder. Tüm diziler Array sınıfında tanımlı özellikleri ve metotları kullanırlar. Bu metotlardan ve özelliklerden en sık kullanılanları:

LengthDizinin saklayabileceği toplam eleman sayısını veren özelliktir.

string[] isimler = new string[20];

MessageBox.Show(isimler.Length.ToString());

//Sonuç = 20

ClearParametre olarak verilen dizinin, belirtilen indeks aralığındaki tüm değerlerini temizler. Temizleme işleminde atanan değer, dizi elemanlarının tiplerine göre değişir. Örneğin int tipinde tanımlı bir dizinin elemanları temizlenirse 0 değerini alacaktır. Buna karşın String tipindeki elemanlar “” (boş yazı) değerini alır.

int[] dizi = {50, 63, 64, 75};

//1 nolu elemandan itibaren 2 eleman siler

MessageBox.Show(dizi[2].ToString());

//Sonuç = 0

// Dizideki tüm elemanları siler

ReverseParametre olarak verilen dizinin eleman sırasını tersine çevirir. Dizinin tüm elemanlarının veya belirli indeks aralığındaki elemanlarının sırası tersine çevrilebilir.

string [] harfler = {“A”, “B”, “C”};

MessageBox.Show(harfler[2]);

// Sonuç = A

foreach (char harf in kelime)

tersKelime = harf.ToString() + tersKelime;

Array.Clear(dizi, 1, 2);

Array.Clear(dizi, 0, dizi.Length);

Array.Reverse(harfler);

129Diziler

Page 138: YAZILIM VE VERİTABANI - Masonluk ve MasonlarOct 11, 2007  · Sunuş 1989… Bilgisayarla ilk tanıştığım ve Basic dili ile uygulama geliştirdiğim yıllardan itibaren bilgisayar

SortParametre olarak verilen dizinin elemanlarını küçükten büyüğe sıralar. Eğer dizi numerik ise ra-kamların büyüklüğüne göre, yazı tiplerinde ise baş harflerine göre sıralanır. Reverse’ün tersidir.

string [] harfler = {“C”, “B”, “A”};

MessageBox.Show(harfler[2]);

// Sonuç = C

IndexOfİlk parametrede verilen dizide, ikinci parametrede verilen değeri arar. Aranan değer dizide bulu-nursa bulunan elemanın indeks değeri, bulunamazsa -1 döndürür.

decimal[] sonuclar = {78, 99, 100, 12.2};

decimal maksimum = 100;

// Result= 2

Lab 9.1 Sayısal LotoYeni bir Windows projesi açın ve ismini “SayisalLoto” olarak değiştirin.

Formunuza Tablo 9.1’deki kontrolleri ekleyin.

Formunuzun görüntüsü Şekil 9.2’deki gibi olmalıdır.

Amacımız btnBaslat adlı Button’a tıklandığında 1-49 arası 6 farklı sayıyı Label kontrolleri aracılığı ile form üzerinde görüntülemektir. Şimdi btnBaslat’a çift tıklayarak kod penceresine geçin ve gerekli kodları olayına yazın:

private void btnBaslat_Click(object sender, EventArgs e)

{

1.

2.

3.

4.

Array.Sort(harfler);

MessageBox.Show(Array.IndexOf(sonuclar,maksimum).ToString());

Tablo 9.1Name Text

Label lbl1 1.SayiLabel lbl2 2.SayiLabel lbl3 3.SayiLabel lbl4 4.SayiLabel lbl5 5.sayiLabel lbl6 6.sayiButton btnBaslat Başlat

Şekil 9.2

130 Bölüm 9

Page 139: YAZILIM VE VERİTABANI - Masonluk ve MasonlarOct 11, 2007  · Sunuş 1989… Bilgisayarla ilk tanıştığım ve Basic dili ile uygulama geliştirdiğim yıllardan itibaren bilgisayar

// Boyutu 6 olan int array’ i tanımlayın.

int[] sayilar = new int[6];

//Random tipinden bir değişken oluşturun.

Random r = new Random();

//int tipinden bir değişken oluşturun ve ilk değerini 0 olarak atayın.

int counter = 0;

//Bir while döngüsü tanımlayın ve koşul olarak counter<6 olarak belirtin.

while (counter<6)

{

//int tipinden bir değişken oluşturun ve değerini Random değişkenin 1 ile 49 arası ürettiği tamsayıya eşitleyin.

int sayi = r.Next(1, 50);

//Sayi adlı değişkenin değerinin sayilar adlı dizide var olup olmadığını Array.IndexOf metodu ile kontrol edin.

if (Array.IndexOf(sayilar, sayi) == -1)

{

//Eğer sayi adlı değişkenin değeri sayilar dizisinde yoksa dizinin counter numaralı öğesine sayi değerini eşitleyin.

sayilar[counter] = sayi;

//counter’ı 1 arttırın.

counter++;

}

}

//Sayilar dizisini küçükten büyüğe düzenleyin.

Array.Sort(sayilar);

//Label kontrollerine sayilar dizisindeki değerleri sıra ile yazdırın.

lb1.Text = sayilar[0].ToString();

lbl2.Text = sayilar[1].ToString();

lbl3.Text = sayilar[2].ToString();

lbl4.Text = sayilar[3].ToString();

lb5.Text = sayilar[4].ToString();

lb6.Text = sayilar[5].ToString();

}

Uygulamada kullandığımız IndexOf metodu ilk parametre olarak aldığı dizi içinde ikinci para-metre olarak aldığı değeri arar ve eğer bu değer varsa değerin bulunduğu indeksi yoksa -1’ i geri döndürür.

Uygulamayı çalıştırın ve Label kontrollerinde görünen sayıların birbirinden farklı ve sıralanmış bir biçimde olduğunu gözlemleyin.

5.

6.

131Diziler

Page 140: YAZILIM VE VERİTABANI - Masonluk ve MasonlarOct 11, 2007  · Sunuş 1989… Bilgisayarla ilk tanıştığım ve Basic dili ile uygulama geliştirdiğim yıllardan itibaren bilgisayar

ÖdevlerKullanıcının girdiği TC.Kimlik numarasının geçerli olup olmadığını kontrol eden bir uygulama hazırlayın. Geçerli bir TC.Kimlik numarasında ilk 10 hanenin toplamının birler basamağındaki rakam kimlik numarasının son hanesindeki rakama eşit olmalıdır.

Kullanıcının TextBox kontrolüne girdiği şifreyi belli kriterleri kullanarak zayıf, orta veya kuvvetli şifre olarak tanımlayan bir Windows uygulaması geliştirin.

Kriterler

Girilen şifre 6 karakterden az ise zayıf şifredir.

Girilen karakter sayısı 6 ve daha fazla ise ve,

Sadece sayılardan veya sadece harflerden oluşuyorsa zayıf şifredir.

Rakam ve harflerden oluşuyorsa orta kuvvetli şifredir.

Rakam,harf ve alfanumerik karakterler(*,?,+,#,&,!,é) içeriyorsa kuvvetli şifredir.

1.

2.

132 Bölüm 9

Page 141: YAZILIM VE VERİTABANI - Masonluk ve MasonlarOct 11, 2007  · Sunuş 1989… Bilgisayarla ilk tanıştığım ve Basic dili ile uygulama geliştirdiğim yıllardan itibaren bilgisayar

10 Metotlar

Page 142: YAZILIM VE VERİTABANI - Masonluk ve MasonlarOct 11, 2007  · Sunuş 1989… Bilgisayarla ilk tanıştığım ve Basic dili ile uygulama geliştirdiğim yıllardan itibaren bilgisayar

10 MetotlarMetot Nedir?

Metotları Kullanmak

Parametreler

Kendi Metodumuzu Yazmak

Metot Overload

Lab 10.1 Hesap Makinesi

Lab 10.2 Hepsini Temizle

Lab 10.3 IsNumeric

Ödevler

Page 143: YAZILIM VE VERİTABANI - Masonluk ve MasonlarOct 11, 2007  · Sunuş 1989… Bilgisayarla ilk tanıştığım ve Basic dili ile uygulama geliştirdiğim yıllardan itibaren bilgisayar

MetotlarBu bölümde birçok programlama dilinin olduğu gibi C#’ın da temel kavramlarından olan metotları detayları ile inceleyeceğiz. Metotların tanımları ve kullanımı, parametrelerin özellikleri örneklerle işlenecektir.

Bu bölüm tamamlandıktan sonra:

Metot kavramını öğrenecek,

Problem çözmede metotların yerini kavrayacak,

Parametrelerin tiplerini ve kullanım yerlerini öğreneceksiniz.

Metot Nedir?Program yazarken belli bir işi yapan kod bloğunu bir kaç kez kullanmak gerekebilir. Bunun için aynı kod bloğunu tekrar yazmak yerine bunu bir metot olarak hazırlarız ve ihtiyaç duyduğumuz yerde metot ismi ile çağırarak çalıştırabiliriz. Bu bize daha az kod yazma imkânı sağlayıp zaman kazandırdığı gibi, olası değişikliklerde de daha az hata yapmamızı sağlar.

Bir muhasebe programı yazdığımızı ve maaş hesaplamalarını programımızın birçok yerinde kul-landığımızı düşünelim. Maaş hesaplaması yapan kod bloğunu metot olarak tanımlayıp ilgili yerlerde bu metodu çalıştırarak işimizi kolayca halledebiliriz.

Metotlara örnek vermek gerekirse şu ana kadar kullanılan TextBox’ın Focus metodu, ComboBox’ın Clear (Items.Clear) metodu, Random’ın Next metodu verilebilir. Metotlar Şekil 10.1’de görüldüğü gibi Visual Studio IntelliSense’de mor renkli kutucuklar olarak tanımlanırlar.

Metotları KullanmakBazı metotlar geriye değer döndürür, bazıları ise döndürmez. Geriye değer döndürmeden kasıt şudur: Şu ana kadar birçok örnekte Random sınıfını kullandınız. Random sınıfının Next adlı bir metodu vardır. Bu metot, çağırdığınızda size bir sonuç üretir ve siz onu programınızda uygun yerlerde kullanırsınız. Başka bir örnek de MessageBox sınıfının Show metodudur. Show size Dia-logResult cinsinden bir değer döndürür ve siz onu yakalayıp işlemlerinizi yaparsınız. Bir metodun geriye hangi tip değeri döndüreceği Visual Studio IntelliSense’te kolaylıkla görülebilir:

Görüldüğü gibi Şekil 10.2’deki metot DialogResult tipinden, Şekil 10.3’teki metot ise int tipinden bir değer döner.

Geriye değer döndüren metotları kullanmak için genellikle şu yol izlenir:

MetodunDöneceğiTip degiskenAdi;

degiskenAdi=metot;

Bu yapı kullanılarak Şekil 10.3’teki metot, çağrılmak ve dönen değeri yakalanmak istenirse şu şekilde bir kod yazılabilir:

Şekil 10.1

Şekil 10.2 Şekil 10.3

Page 144: YAZILIM VE VERİTABANI - Masonluk ve MasonlarOct 11, 2007  · Sunuş 1989… Bilgisayarla ilk tanıştığım ve Basic dili ile uygulama geliştirdiğim yıllardan itibaren bilgisayar

1 Random rastgele=new Random();

2 int sayi;

3 sayi = rastgele.Next(1,101);

4 label1.Text=sayi.ToString();

1 nolu satırda daha önceki örneklerden de hatırlayacağınız bir rastgele sayı üretici oluşturuldu.

2 nolu satırda ise Next metodunun döndüğü veri tipine sahip bir değişken oluşturuldu.

3 nolu satırda ise 2 nolu satırdaki değişken yazılıp, eşittir işaretinin sağ tarafında metot yazıldı. Böylelikle metottan dönen değer bu değişkene atandı.

4 nolu satırda ise değer, ekranda gösterildi.

Bazı metotlar ise geriye değer döndürmezler. Bunlara void denir. Bir metodun geriye değer döndürmediği Şekil 10.4’teki gibi, Visual Studio IntelliSense’de rahatça görü-lebilir.

void’leri kullanmak oldukça kolaydır. Tek yapılması gereken isminin yazılmasıdır. Örneğin bir TextBox’ın içeriğini temizlemek için Clear metodunu çalıştırmaya ihtiyaç vardır.:

textBox1.Clear();

Görüldüğü üzere void’ler bir değişkene atanmadan direk çalıştırılırlar.

ParametrelerParametreler, metotların istenilen işlemi yapabilmesi için kullanıcı tarafından değerleri verilmesi gereken değişkenlerdir. Bir metotta istenilen parametrelerin sayısına ve bu parametrelerin veri tiplerine o metodun imza’sı denir.

Örneğin Random sınıfının Next metodu geriye istenilen aralıkta bir rastgele sayı döndürmek için en düşük değer ve en yüksek değer için int tipinde iki adet değer bekler.

Bu değerleri 1 ve 101 olarak vermek için kod şu şekilde yazılabilir:

sayi = rastgele.Next(1,101);

Görüldüğü gibi bir metot birden fazla parametre alıyorsa bu değerler girilirken virgül işareti ile ayrılır.

Başka bir örnek olarak System.Dignosistics.Process.Start metodu verebilir. Şekil 10.6’daki gibi bu metoda IntelliSense ile bakıldığı zaman string veri tipinde bir değer beklediği görülür.

Yazılıma yeni başlayanların çok sık yaptıkları bir hata geriye değer dönen bir metodu kul-lanıp, onu bir değişkene eşitlememesidir.

Şekil 10.4

Şekil 10.5

136 Bölüm 10

Page 145: YAZILIM VE VERİTABANI - Masonluk ve MasonlarOct 11, 2007  · Sunuş 1989… Bilgisayarla ilk tanıştığım ve Basic dili ile uygulama geliştirdiğim yıllardan itibaren bilgisayar

Bu metot şu şekilde çalıştırılır:

System.Diagnostics.Process.Start(“calc”);

ya da

System.Diagnostics.Process.Start(textBox1.Text);

Kendi Metodumuzu YazmakBir metot şu şekilde tanımlanır:

tip metotismi( parametrelistesi )

{

yapılacak işler;

}

tip: Metodun geriye döndüreceği değerin tipidir. An-cak metot geriye değer döndürmüyorsa buraya void yazılır.

metotismi: Metoda verilen isimdir. Metot yazıldık-tan sonra bu isimle çağırılacaktır.

parametrelistesi: Metot içerisine gerekli hesapla-maların yapılması için dışarıdan verilebilecek de-ğerlerdir.

Bir metot, Şekil 10.7’deki gibi geriye değer döndür-me ve parametre alma durumuna göre dört farklı şekilde tanımlanabilir.

İlk olarak verilen bir sayının karesini alan yani o sayıyı kendisi ile çarpan bir metot yapalım. Meto-dun adı KareAl, geriye döndüreceği veri tipi int ve alacağı parametre veri tipi de int olsun.

int KareAl(int sayi)

{

int sonuc;

sonuc=sayi*sayi;

return sonuc;

}

Örnekte görüldüğü gibi önce fonksiyonun geriye döndüreceği veri tipi belirtilir. (int) Daha sonra metoda isim verilir. (KareAl). Parantezler içerisinde metot içerisine gönderilecek parametrelerin veri tipi ve ismi belirtilir. (int sayi)

Metot içerisinde gerekli işlemler yapıldıktan sonra geriye değer döndürebilmek için return ifadesi-ni kullanılır. Eğer return ifadesi yazılmazsa veya her durumda çalışmayacak bir şekilde yazılırsa (mesela bir if bloğu içerisine) uygulama hata verir ve derlenmez. return ifadesi metodun çalışma-sını durdurur ve sağındaki değeri geriye döndürür.

Şekil 10.6

Eğer bir metot parametre istemiyorsa onu çağırmak için metot ismi yazıldıktan sonra parantez açılır ve kapatılır. Temizle() gibi...

Şekil 10.7

137Metotlar

Page 146: YAZILIM VE VERİTABANI - Masonluk ve MasonlarOct 11, 2007  · Sunuş 1989… Bilgisayarla ilk tanıştığım ve Basic dili ile uygulama geliştirdiğim yıllardan itibaren bilgisayar

Geriye değer döndürmeyen bir metot ise şu şekilde yazılabilir:

void Temizle()

{

textBox1.Clear();

textBox2.Clear();

comboBox1.Items.Clear();

}

İlk olarak metodun bir değer döndürmediğini belirtmek için void kelimesi kullanılır. Sonra metoda isim verilir. Daha sonra parantezler içerisine parametreler yazılır. (Bu örnekte metodun paramet-reye ihtiyacı yoktur)

void’lerde, geri değer dönen metotlardan farklı olarak return ifadesi kullanmak zorunlu değildir. Ancak istenilirse kullanılabilir. Return ifadesi void’lerde metottan çıkmak için kullanılır.

void Sil(bool eminMi)

{

İf(eminMi==false)

{

//eminMi parametresinin değeri false gelirse metodun //geri kalanı çalışmaz.

return;

}

//silme işlemi yapan kodlar...

}

Metot tanımlarken dikkat etmeniz gereken bir diğer konu da, metotların sadece kendi işlerini yapa-cak şekilde tasarlamak olacaktır. Yani bir metoda hem toplama işlemi hem de sonucu TextBox’a yazdırma görevi vermemek gerekir. Bu durum metodun kullanışlı olmasını engeller. Örneğin:

1 int topla(int sayi1, int sayi2)

2 {

3 int toplam = sayi1 + sayi2;

5 return toplam;

6 }

4 nolu satır metodu txtToplam adlı TextBox kontrolüne bağımlı hale getirdiğinden fonksiyonel olma özelliğini kaybetmiştir.

Metot OverloadMethot Overload (metotları aşırı yükleme), bir metodun birden fazla, farklı imza ile tanımlanması-dır. Daha farklı bir anlatımla aynı isimli metodun birden fazla farklı parametre imzası almasıdır.

Uygulama, return ifadesini gördükten sonra metodu çalıştırmayı bırakır. Bu yüz-den return ifadesi kullanıldıktan sonraki yazılan kodlar çalışmayacaktır. Bu durum size Visual Studio tarafından “Unreachable code detected” uyarısı olarak verilir.

4 txtToplam.Text = toplam.ToString();

138 Bölüm 10

Page 147: YAZILIM VE VERİTABANI - Masonluk ve MasonlarOct 11, 2007  · Sunuş 1989… Bilgisayarla ilk tanıştığım ve Basic dili ile uygulama geliştirdiğim yıllardan itibaren bilgisayar

Güncel hayattan bir örnek ile konuyu açalım. Biri size “Benim doğum tarihim 6.5.1980. Ben kaç yaşındayım?” diye sorabilir. Aynı soru “Benim doğum yılım 1980. Ben kaç yaşındayım?” olarak da sorulabilir. Aslında burada iki farklı hesaplama söz konusudur. Birincisinde günümüzdeki yıldan verilen değerdeki yıl bulunarak çıkartılır. İkincisinde ise günümüzdeki yıldan doğrudan verilen de-ğer çıkartılır. Bu iki farklı hesaplama dolayısı ile iki farklı metot gerektirir. Bu metotları kod olarak yazmak istersek şu şekilde yazabiliriz:

int TariheGoreYasHesapla(DateTime tarih)

{

int sonuc;

int dogumYili=tarih.Year;

sonuc = DateTime.Now.Year - dogumYili;

return sonuc;

}

int YilaGoreYasHesapla(int yil)

{

int sonuc;

sonuc = DateTime.Now.Year - yil;

return sonuc;

}

Ancak görüldüğü gibi bu iki metodun da amacı aynıdır: Yaş Hesaplamak! C#, parametrelerin im-zası ayrı olduğu sürece birden fazla metoda aynı ismi verme olanağını tanır.

Bu bilgi ışığında kodlar şu şekilde yazılabilir:

int YasHesapla(DateTime tarih)

{

int sonuc;

int dogumYili=tarih.Year;

sonuc = DateTime.Now.Year - dogumYili;

return sonuc;

}

int YasHesapla(int yil)

{

int sonuc;

sonuc = DateTime.Now.Year - yil;

return sonuc;

}

Artık sadece YasHesapla ismi kullanılarak iki metot da çağırılabilir. Eğer metoda DateTime tipinde bir değer gönderirseniz ilk metot, int veri tipinde değer gönderirseniz ikinci metot çalışacaktır. Vi-sual Studio’da bir metodun kaç overload’u olduğu görülebilir. Ayrıca bu metodun overload’larının istediği imzalar IntelliSense’de aşağı-yukarı ok tuşları ile gezilebilir.

139Metotlar

Page 148: YAZILIM VE VERİTABANI - Masonluk ve MasonlarOct 11, 2007  · Sunuş 1989… Bilgisayarla ilk tanıştığım ve Basic dili ile uygulama geliştirdiğim yıllardan itibaren bilgisayar

Overload’ların kullanılma nedeni yazılımcıyı metot kargaşasından kurtarmaktır. Şekil 10.10’da görüldüğü gibi MessageBox sınıfının Show metodunun 21 tane overload’ı vardır.

MessageBox’ın kullanımını hatırlayın. Bazen sadece ekranda mesaj olarak görünmesi gereken metni verirken, bazen metnin yanında pencere başlığını, bazen pencerede gözükecek ikonu, bazen de Yes-No, OK gibi gösterilecek düğmeleri veriyoruz. Aslında bunların hepsi ayrı ayrı me-totlardır. Eğer MessageBox’ın Show metodunda overload kullanılmasaydı,

MessageBox.SadeceMetinGoster(“Merhaba Dünya”);

MessageBox.MetinVeBaslikGoster(“Merhaba Dünya”,”İlk Programımım”);

MessageBox.MetinBaslikVeDugmeGoster(“Merhaba Dünya”,”İlk Programımım”, Buttons.YesNo);

gibi kargaşaya yol açan bir çok metot kullanılacaktı. Oysa overload sayesinde sadece Show me-todunu kullanıp parametrelerini değiştiriyoruz.

Lab 10.1 Hesap MakinesiBu örneğimizde 4 işlem yapabilen bir hesap makinesi uygulaması geliştireceğiz. Uygulamamızda karar yapılarını, try...catch ifadesini ve metot yazmayı inceleyeceğiz.

Yeni bir Windows projesi açın ve ismini “HesapMakinesi” olarak değiştirin. Formunuzun gö-rüntüsü Şekil 10.11’deki gibi olmalıdır.

Formunuza Tablo 10.1 deki kontrolleri ekleyin.

1.

2.

Şekil 10.8 Şekil 10.9

Şekil 10.10

Şekil 10.11

Tablo 10.1Name Text

Label lblSayi1 İlk Sayi

Label lblSayi İkinci Sayi

Label lblIslem İşlem

TextBox txtSayi1

TextBox txtSayi2

ComboBox cmbIslem

Button btnIslemYap İşlem Yap

140 Bölüm 10

Page 149: YAZILIM VE VERİTABANI - Masonluk ve MasonlarOct 11, 2007  · Sunuş 1989… Bilgisayarla ilk tanıştığım ve Basic dili ile uygulama geliştirdiğim yıllardan itibaren bilgisayar

Öncelikle btnIslemYap’a tıklandığında kullanılacak bir metot hazırlayın. Kod penceresine ge-çin ve gerekli kodları yazın.

//3 parametre alan ve geriye değer döndürmeyen bir metot tanımlayın.

void IslemYap(int ilkSayi, int ikinciSayi, string islemTipi)

{

//Islemin sonucunu tutacak bir değişken tanımlayın ve ilk değerini 0 olarak atayın.

int sonuc = 0;

//Kullanıcının cmbIslem’den seçeceği işleme göre parametre olarak aldığınız ilkSayi ve ikinciSayi’yi işleme sokun.

switch (islemTipi)

{

case “Topla”:

sonuc = ilkSayi + ikinciSayi;

break;

case “Çıkar”:

sonuc = ilkSayi - ikinciSayi;

break;

case “Çarp”:

sonuc = ilkSayi * ikinciSayi;

break;

case “Böl”:

sonuc = ilkSayi / ikinciSayi;

break;

default:

break;

}

//Sonucu gösterin

MessageBox.Show(sonuc.ToString());

}

btnIslemYap’a çift tıklayın ve kod penceresine geçerek btnIslemYap’ın Click olayına gerekli kodları yazın.

private void btnIslemYap_Click(object sender, EventArgs e)

{

//Kullanıcının 0 ile bölme yapmasını engelleyin.

if (Convert.ToInt32(txtSayi2.Text) == 0 && cmbIslem.Text = “Bölme”)

MessageBox.Show(“0 ile bölme yapılmaz”);

else

{

//Kullanıcının girdiği değerlere göre işlemi yapmayı deneyin.

3.

4.

141Metotlar

Page 150: YAZILIM VE VERİTABANI - Masonluk ve MasonlarOct 11, 2007  · Sunuş 1989… Bilgisayarla ilk tanıştığım ve Basic dili ile uygulama geliştirdiğim yıllardan itibaren bilgisayar

try

{

IslemYap(Convert.ToInt32(txtSayi1.Text), Convert.ToInt32(txtSayi2.Text), cmbIslem.Text);

}

//Islem Yap metodunun bir hata ile karşılaşması durumunda (Kullanıcının herhangi bir TextBox kontrolünü boş geçmesi veya bu kontrollere sayı haricinde veri girmesi) uyarı verin.

catch (Exception)

{

MessageBox.Show(“Veri uyuşmuyor”);

}

}

}

Lab 10.2 Hepsini TemizleBu örneğimizde Form içindeki TextBox kontrollerinin içeriğini temizleyen bir metot hazırlayaca-ğız.

Yeni bir Windows projesi oluşturun ve ismini ”TextBoxTemizle” olarak değiştirin. Formun gö-rünümü Şekil 10.12’deki gibi olmalıdır.

Formunuza Table 10.2’deki kontrolleri ekleyin.

Kod penceresine geçerek TextBoxTemizle adlı metot için gerekli kodları yazın.

private void textBoxTemizle()

{

//Form1’deki tüm kontrollere foreach döngüsü ile erişin.

foreach (Control c in this.Controls)

{

1.

2.

3.

Şekil 10.12

Tablo 10.2TextBox txt1 1.Textbox

TextBox txt2 2.Textbox

TextBox txt3 3.Textbox

TextBox txt4 4.TextBox

Button btnTemizle Temizle

142 Bölüm 10

Page 151: YAZILIM VE VERİTABANI - Masonluk ve MasonlarOct 11, 2007  · Sunuş 1989… Bilgisayarla ilk tanıştığım ve Basic dili ile uygulama geliştirdiğim yıllardan itibaren bilgisayar

//Eğer kontrol TextBox ise Text’ini temizleyin.

if (c is TextBox)

{

c.Clear();

}

}

}

btnTemizle çift tıklandığı zaman textBoxTemizle adlı metodu çağırın. btnTemizle’ye çift tıkla-yın ve kod penceresinde btnTemizle’nin Click olayına gerekli kodları yazın.

private void btnTemizle_Click(object sender, EventArgs e)

{

//textBoxTemizle’yi çağırın.

textBoxTemizle();

}

Lab 10.3 IsNumericYeni bir Windows projesi açın ve adını ”NumaraTest ” olarak değiştirin.

Tablo 10.3’ teki kontrolleri formunuza ekleyin.

Şimdi NumberTest isimli metot için gerekli kodları ekleyin:

public bool NumberTest(object value)

{

try

{

int i = Convert.ToInt32(value);

return true;

}

catch (Exception)

{

return false;

}

}

Bu metot parametre olarak aldığı değeri try bloğu içerisinde sayıya dönüştürmeye çalıştırmak-tadır. Eğer olumlu sonuç alırsa true değer dönecektir. Bu değeri sayıya dönüştüremezse catch bloğu çalışacak ve false değer dönecektir.

Şimdi btnTest isimli Button’ un üzerine çift tıklayarak kod penceresine geçin ve btnTest’ in Click olayına gerekli kodları ekleyin:

4.

1.

2.

3.

4.

Tablo 10.3 Name TextButton btnTest Test EtTextBox txtGirilen -

143Metotlar

Page 152: YAZILIM VE VERİTABANI - Masonluk ve MasonlarOct 11, 2007  · Sunuş 1989… Bilgisayarla ilk tanıştığım ve Basic dili ile uygulama geliştirdiğim yıllardan itibaren bilgisayar

private void btnTest_Click(object sender, EventArgs e)

{

if (NumberTest(txtGirilen.Text))

{

MessageBox.Show(“Sayı girildi..”);

}

else

{

MessageBox.Show(“Sayı girilmedi!”);

}

}

if yapısı içerisinde koşul olarak NumberTest metodu çağırılmaktadır. Eğer bu metottan dönen değer true ise “Sayı girildi..” mesajı görüntülenecektir. Eğer bu metottan dönen değer false ise “Sayı girilmedi!” mesajı görüntülenecektir.

ÖdevlerGirilen sayı dizisindeki tek sayıları, ayrı bir dizide sıralayan uygulamayı yazın.

Bir TextBox’a sayı girilirken, girilen sayıyı basamaklara ayıran ve aralarına nokta koyan uygulamayı yazın. (basamaklar üçer üçer ayrılacak ve aralarına nokta konulacaktır. Bu işlem rakamlar girilirken yapılacaktır.)

Döviz kurlarına göre, girilen ücret miktarını Türk Lirası(YTL), Euro(€) ve Dolar($)’a çeviren uygulamayı yazın.

1.

2.

3.

144 Bölüm 10

Page 153: YAZILIM VE VERİTABANI - Masonluk ve MasonlarOct 11, 2007  · Sunuş 1989… Bilgisayarla ilk tanıştığım ve Basic dili ile uygulama geliştirdiğim yıllardan itibaren bilgisayar

11 String – Math – DateTime Metotları

Page 154: YAZILIM VE VERİTABANI - Masonluk ve MasonlarOct 11, 2007  · Sunuş 1989… Bilgisayarla ilk tanıştığım ve Basic dili ile uygulama geliştirdiğim yıllardan itibaren bilgisayar

11 String – Math – Date-

Time MetotlarıString

ToCharArray

Math

DateTime

IsLeapYear

Lab 11.1 Kaç Gündür Yaşıyorum

Lab 11.2 Kayan Yazı

Lab 11.3 Kelimeyi Ters Çevir

Lab 11.4 İlk Harf Büyük

Lab 11.5 Metot Çalışma Zamanı

Ödevler

Page 155: YAZILIM VE VERİTABANI - Masonluk ve MasonlarOct 11, 2007  · Sunuş 1989… Bilgisayarla ilk tanıştığım ve Basic dili ile uygulama geliştirdiğim yıllardan itibaren bilgisayar

String – Math – DateTime MetotlarıBu bölümde .NET Framework içerisinde en sık kullanılan metotları inceleyeceğiz. Bu metotları üç ana bölümde ele alacağız. Karakter tabanlı işlemler için String, matematiksel işlemler için Math ve tarih ile ilgili işlemler için de DateTime başlıkları altında metotları tek tek açıklayıp örneklendi-receğiz.

StringCompareCompare metodu iki string ifadeyi karşılaştırmak için kullanılır. İlk parametre değeri ikinci para-metre değerinden büyük ise 1, küçük ise -1 değerler eşit ise 0 döndürür.

Tanımı:

int Compare ( string strA, string strB)

Örnek:

int sonuc = string.Compare(“a”, “b”);

//sonuc -1

int sonuc = string.Compare(“b”, “a”);

//sonuc 1

int sonuc = string.Compare(“a”, “a”);

//sonuc 0

ContainsContains metodu, string ifadeler içinde arama yapmak için kullanılır. Parametre olarak verilen string değer Contains metodunu çağıran string değer içinde mevcut ise geriye true, değilse false döndürür.

Tanım:

bool Contains(string str);

Örnek:

string cumle = “Bilgeadam Bilgi Teknolojileri”;

string kelime1 = “Bilgi”;

string kelime2 = “Bilge”;

string kelime3 = “emre”;

bool sonuc = cumle.Contains(kelime1);

//sonuc = true

bool sonuc = cumle.Contains(kelime2);

//sonuc = true

Page 156: YAZILIM VE VERİTABANI - Masonluk ve MasonlarOct 11, 2007  · Sunuş 1989… Bilgisayarla ilk tanıştığım ve Basic dili ile uygulama geliştirdiğim yıllardan itibaren bilgisayar

bool sonuc = cumle.Contains(kelime3);

//sonuc = false

StartsWith - EndsWithEndsWith, string ifadeler içinde arama yapmak için kullanılan başka bir metottur. Metodu çağıran string değer parametre olarak verilen string değer ile bitiyor ise geriye true, bitmiyor ise false dön-dürür. StartsWith metodu ile de parametre olarak verilen string değer ile başlayıp başlamadığını öğrenebilirsiniz.

Tanım:

bool EndsWith(string str);

bool StartWith(string str);

Örnek:

string cumle = “<b>Bu yazı kalın olacak</b>”;

string kelime1 = “/b>”;

string kelime2 = “<b”;

bool sonuc = cumle.EndsWith(kelime1);

//sonuc = true

bool sonuc = cumle.StartsWith(kelime2);

//sonuc = true

IndexOfIndexOf, string ifadeler içinde arama yapmak için en çok kullanılan metottur. Metodu çağıran string değer parametre olarak verilen string değeri içeriyor ise ilk konumun indeksini, içermiyor ise -1 döndürür.

Tanım:

int IndexOf(string str);

int IndexOf(char c);

Örnek:

string cumle = “Fizik evrenin işletim sistemidir.”;

char karakter = ‘j’;

string kelime = “sistem”;

int sonuc = cumle.IndexOf(karakter);

//sonuc = -1

int sonuc = cumle.IndexOf(kelime);

//sonuc = 22

148 Bölüm 11

Page 157: YAZILIM VE VERİTABANI - Masonluk ve MasonlarOct 11, 2007  · Sunuş 1989… Bilgisayarla ilk tanıştığım ve Basic dili ile uygulama geliştirdiğim yıllardan itibaren bilgisayar

InsertInsert metodu string değerlere belirtilen indeksten itibaren parametre olarak verilen string değer-ler eklemek için kullanılır. Elde edilen string değer geri döner.

Tanım:

string Insert(int indeks, string str);

Örnek:

string cumle = “Fizik işletim sistemidir.”;

string kelime = “evrenin” + “ “;

cumle = cumle.Insert(6, kelime);

//cumle = Fizik evrenin işletim sistemidir.

JoinJoin metodu string dizilerini birleştirmek için kullanılır. İlk parametre değeri ile ikinci parametre değeri olarak verilen string dizisindeki elemanları birleştirir. Geriye elde edilen string değer döner. Bu metodun tam tersi Split’tir.

Tanım:

string Join(string ayrac, string[] dizi);

Örnek:

string[] dizi = {“Fizik”,”evrenin”,”işletim”,”sistemidir”}; string cumle = string.Join(“ “, dizi); //cumle = Fizik evrenin işletim sistemidir;

PadLeft - PadRightBir string değer soldan ya da sağdan yeni değerler eklemek için PadLeft ve PadRight metotları kullanılır. İlk parametre değeri metodu çağıran string değerin toplam uzunluğuna eşit olana kadar ikinci parametrede verilen karakter değerini ekler.

Tanım:

string PadLeft(int uzunluk, char karakter);

string PadRight(int uzunluk, char karakter);

Örnek:

string kelime = “7”;

sonuc = kelime.PadLeft(2,’0’);

//sonuc = “07”

sonuc = kelime.PadRight(2, ‘0’);

//sonuc = “70”

RemoveRemove metodu ile string bir değerin belirli bir bölümünü çıkarabilirsiniz. İlk parametre değeri başlangıç indeksini ikinci parametre değeri ise kaç karakter çıkarılacağını belirtir.

149String – Math – DateTime Metotları

Page 158: YAZILIM VE VERİTABANI - Masonluk ve MasonlarOct 11, 2007  · Sunuş 1989… Bilgisayarla ilk tanıştığım ve Basic dili ile uygulama geliştirdiğim yıllardan itibaren bilgisayar

Tanımı:

string Remove(int indeks,int karakterSayisi);

Örnek:

string kelime = “HoTMaiL”;

sonuc = kelime.Remove(0, 1);

//sonuc=otMail

sonuc = kelime.Remove(kelime.Length-1, 2);

//sonuc = hoTMa -- son 2 karakteri çıkarır

ReplaceReplace metodunu kullanarak string bir ifadenin belli bir parçasını değiştirebilirsiniz. İlk parametre değeri değişecek parçayı ikinci parametre değeri ise yerine geçecek parçayı ifade eder. Elde edilen değer geri döner.

Tanım:

string Replace(string str1, string str2)

Örnek:

string işlem = “1 + 5 = 6”;

işlem = işlem.Replace(“1”, “Bir”);

işlem = işlem.Replace(“+”, “artı”);

işlem = işlem.Replace(“5”, “beş”);

işlem = işlem.Replace(“=”, “eşittir”);

işlem = işlem.Replace(“6”, “altı”);

//işlem = Bir artı beş eşittir altı

//istenmeyen karakterleri silmek için de kullanılabilir.

string kelime=”merhaba@ dünya”;

kelime=kelime.Replace(“@”,””)

//kelime= merhaba dünya

SplitSplit metodu, bir string değeri, parametre olarak verilen karakter ile bölmek için kullanılır. Geriye string dizisi döner.

Tanım:

String[] Split(char karakter);

Örnek:

string cumle = “Yusuf,Emre,AYRILMAZ”;

string[] dizi = cumle.Split(‘,’);

//dizi[0] = Yusuf, dizi[1] = Emre v dizi[2] = AYRILMAZ

150 Bölüm 11

Page 159: YAZILIM VE VERİTABANI - Masonluk ve MasonlarOct 11, 2007  · Sunuş 1989… Bilgisayarla ilk tanıştığım ve Basic dili ile uygulama geliştirdiğim yıllardan itibaren bilgisayar

SubstringSubstring metodu ile string bir değerin belirtilen bir parçasını elde edebilirsiniz.

Tanım:

string Substring(int indeks, int karakterSayisi)

Örnek:

string kelime = “Bilgeadam”;

string parca = kelime.Substring(5,4);

//parca = adam

ToCharArrayToCharArray metodu, çağıran string değerin karakter dizisini döner.

Tanım:

char[] ToCharArray()

Örnek:

String kelime = “Emre”;

Char[] dizi = kelime.ToCharArray();

//dizi[0] = E, dizi[1] = m, dizi[2] = r ve dizi[3] = e

ToLowerToLower metodu ile bir string değerin tüm karakterlerini küçük harfe çevirebilirsiniz.

Tanım:

string ToLower()

Örnek:

string kelime = “BİLGEADAM”;

kelime = kelime.ToLower();

//kelime = bilgeadam

ToUpperToUpper metodu ile bir string değerin tüm karakterlerini büyük harfe çevirebilirsiniz.

Tanım:

string ToUpper()

Örnek:

string kelime = “Bilgeadam”;

kelime = kelime.ToUpperr();

//kelime = BİLGEADAM

151String – Math – DateTime Metotları

Page 160: YAZILIM VE VERİTABANI - Masonluk ve MasonlarOct 11, 2007  · Sunuş 1989… Bilgisayarla ilk tanıştığım ve Basic dili ile uygulama geliştirdiğim yıllardan itibaren bilgisayar

Trim - TrimStart - TrimEndTrim metodu ile string bir değerin başındaki ve sonundaki boşlukları temizleyebilirsiniz. TrimStart ve TrimEnd metotları ile de sadece solundaki ya da sağındaki boşluklar temizlenebilir.

Tanım:

string Trim()

Örnek:

string kelime = “ Bilgeadam “;

kelime = kelime.Trim();

//kelime = “Bilgedadam”

kelime = kelime.TrimStart();

//kelime = “Bilgedadam ”

kelime = kelime.TrimEnd();

//kelime = “ Bilgedadam”

MathCeilingCeiling metodu ile parametre değeri olarak verilen ondalıklı sayı yukarı yuvarlanarak tam sayıya çevrilir.

Tanım:

double Ceiling(double sayı)

Örnek:

double sayi1 = 2.1;

double sayi2 = 2.7;

double sayi3 = -2.7;

double sonuc = Math.Ceiling(sayi1);

//sonuc = 3.0

double sonuc2 = Math.Ceiling(sayi2);

//sonuc2 = 3.0

double sonuc3 = Math.Ceiling(sayi3);

//sonuc3 = -2.0

FloorFloor metodu ile parametre değeri olarak verilen ondalıklı sayı aşağı yuvarlanarak tam sayıya çevrilir.

Tanım:

double Floor(double sayı)

152 Bölüm 11

Page 161: YAZILIM VE VERİTABANI - Masonluk ve MasonlarOct 11, 2007  · Sunuş 1989… Bilgisayarla ilk tanıştığım ve Basic dili ile uygulama geliştirdiğim yıllardan itibaren bilgisayar

Örnek:

double sayi1 = 2.1;

double sayi2 = 2.7;

double sayi3 = -2.7;

double sonuc = Math.Floor(sayi1);

//sonuc = 2.0

double sonuc2 = Math.Floor(sayi2);

//sonuc2 = 2.0

double sonuc3 = Math.Floor(sayi3);

//sonuc3 = -3.0

MaxMax metodu ile parametre değeri olarak verilen iki sayıdan büyük olanı elde edilir. Tüm sayı tip-lerinde kullanılabilir.

Tanım:

double Max(double sayi1, double sayi2)

Örnek:

Double sayi1 = 90, sayi2 = 91;

Double sonuc = Math.Max(sayi1, sayi2);

//sonuc = 91

MinMin metodu ile parametre değeri olarak verilen iki sayıdan küçük olanı elde edilir. Tüm sayı tiple-rinde kullanılabilir.

Tanım:

double Min(double sayi1, double sayi2)

Örnek:

Double sayi1 = 90, sayi2 = 91;

Double sonuc = Math.Min(sayi1, sayi2);

//sonuc = 90

PowPow metodu ile bir sayının kuvveti elde edilir. İlk parametre değeri olarak verilen sayının ikinci parametre olarak verilen sayıya olan kuvveti geriye döner.

Tanım:

double Pow(double sayi1, double sayi2)

153String – Math – DateTime Metotları

Page 162: YAZILIM VE VERİTABANI - Masonluk ve MasonlarOct 11, 2007  · Sunuş 1989… Bilgisayarla ilk tanıştığım ve Basic dili ile uygulama geliştirdiğim yıllardan itibaren bilgisayar

Örnek:

Double sayi = 9;

Double sonuc = Math.Pow(sayi, 2);

//sonuc = 81

RoundRound metodu ile parametre olarak verilen ondalıklı sayıyı en yakın sayıya yuvarlar.

Tanım:

double Round(double sayi)

Örnek:

Double sayi1 = 9.4;

Double sayi2 = 9.9;

Double sayi3 = -9.1;

Double sonuc = Math.Round(sayi1);

//sonuc = 9

Double sonuc2 = Math.Round(sayi2);

//sonuc2 = 10

Double sonuc3 = Math.Round(sayi3);

//sonuc3 = -9

SqrtSqrt metodu ile parametre değeri olarak verilen sayının karekökü geri döner.

Tanım:

double Sqrt(double sayi)

Örnek:

Double sayi = 9;

Double sonuc = Math.Sqrt(sayi);

//sonuc = 3

DateTimeAddXAddX metotları ile parametre olarak verilen sayı değer, metodu çağıran tarihe eklenir.

X yerine kullanılabilecek değerler:

Years (Yıl), Months (Ay), Days (Gün), Hours (Saat), Minutes (Dakika), Seconds (Saniye) ve MiliSeconds (Milisaniye).

Tanım:

DateTime AddDays(double deger)

DateTime AddMinutes(double deger)

DateTime AddYears(deger)

154 Bölüm 11

Page 163: YAZILIM VE VERİTABANI - Masonluk ve MasonlarOct 11, 2007  · Sunuş 1989… Bilgisayarla ilk tanıştığım ve Basic dili ile uygulama geliştirdiğim yıllardan itibaren bilgisayar

Örnek:

//10.11.2007

DateTime bugun = DateTime.Now;

DateTime BesGunSonrakiTarih = bugun.AddDays(5);

//sonuç 15.11.2007

DaysInMonthDaysInMonth metodu ile parametre değeri olarak verilen yıl ve ayın kaç gün olduğunu öğrenebilirsi-niz.

Tanım:

int DaysInMonth(int yıl, int ay)

Örnek:

int gunSayisi = DateTime.DaysInMonth(1996,2);

//gunSayisi = 29;

IsLeapYearIsLeapYear metodu ile parametre olarak verilen 4 haneli yıl değeri, artık yıl ise geriye true, değilse false döner.

Tanım:

bool IsLeapYear(int yıl)

Örnek:

bool sonuc = DateTime.IsLeapYear(2004);

//sonuc = true;

bool sonuc = DateTime.IsLeapYear(2005);

//sonuc = false;

SubtractSubstract metodu ile iki tarih arasındaki farkı bulabilirsiniz.

Tanım:

TimeSpan Substract(DateTime tarih)

Örnek:

// 5.4.1976

DateTime tarih1 = new DateTime(1976, 4, 5);

//bugün 10.11.2007

Eğer verilen parametre negatif olursa tarihin eklen-miş değil çıkarılmış hali döner. 4 gün öncenin tarihi-ni bulmak için bugun.AddDays(-4) kullanılır.

155String – Math – DateTime Metotları

Page 164: YAZILIM VE VERİTABANI - Masonluk ve MasonlarOct 11, 2007  · Sunuş 1989… Bilgisayarla ilk tanıştığım ve Basic dili ile uygulama geliştirdiğim yıllardan itibaren bilgisayar

TimeSpan fark = DateTime.Now.Subtract(tarih1);

//fark = 11541 gün, 277000 saat ve 16620046 dakika

Lab 11.1 Kaç Gündür YaşıyorumBu örneğimizde girilen doğum tarihine göre kullanıcının hangi gün doğduğunu ve kaç gündür hayatta olduğunu hesaplayan bir uygulama geliştireceğiz.

Yeni bir Windows uygulaması oluşturun ve ismini “KacGundurYasiyorum” olarak değiştirin. Form görüntüsü Şekil 11.1’deki gibi olmalıdır.

Formunuza Tablo 11.1’deki kontrolleri ekleyin. lblDogumGunu ve lblYasanGun, label1 ve label2’nin sağındadır.

btnHesapla’ya çift tıklayarak kod penceresine geçin ve btnHesapla’nın Click olayına gerekli kodları yazın.

//DateTime türünden bir değişken tanımlayın.

DateTime dogumTarih;

try

{

//txtDogumTarih’e girilen değeri Datetime türüne çevirerek değişkene eşitleyin

dogumTarih = Convert.ToDateTime(txtDogumTarih.Text);

}

catch (Exception)

{

//Hatalı bir tarih girilirse uyarı verin.

MessageBox.Show(“Geçerli bir tarih giriniz.”);

return;

1.

2.

3.

Şekil 11.1

Tablo 11.1Name Text

TextBox txtDogumTarih

Label label1 Doğduğunuz Gün:

Label label2 Yaşadığınız Gün Sayısı:

Button btnHesapla Hesapla

Label lblDogumGunu

Label lblYasananGun

Label label3 Doğum Tarihi:

156 Bölüm 11

Page 165: YAZILIM VE VERİTABANI - Masonluk ve MasonlarOct 11, 2007  · Sunuş 1989… Bilgisayarla ilk tanıştığım ve Basic dili ile uygulama geliştirdiğim yıllardan itibaren bilgisayar

}

string ingilizceGunAdi;

//DateTime nesnesinin DayOfWeek özelliğini kontrol ederek bu değerin ingilizcesini yakalayın.

ingilizceGunAdi = dogumTarih.DayOfWeek.ToString();

//Türkçe’sini, lblDogumGunu’ne yazdırın

switch (ingilizceGunAdi)

{

case “Sunday”:

lblDogumGunu.Text = “Pazar günü doğdunuz”;

break;

case “Monday”:

lblDogumGunu.Text = “Pazartesi günü doğdunuz”;

break;

case “Tuesday”:

lblDogumGunu.Text = “Salı günü doğdunuz”;

break;

case “Wednesday”:

lblDogumGunu.Text = “Çarşamba günü doğdunuz”;

break;

case “Thursday”:

lblDogumGunu.Text = “Perşembe günü doğdunuz”;

break;

case “Friday”:

lblDogumGunu.Text = “Cuma günü doğdunuz”;

break;

case “Saturday”:

lblDogumGunu.Text = “Cumartesi günü doğdunuz”;

break;

default:

break;

}

//TimeSpan türünden bir değişken oluşturun ve kullanıcının girdiği tarih ile bugünün tarihi arasındaki farkı bu değişkene atayın.

TimeSpan fark = DateTime.Now.Subtract(dogumTarih);

//double türünden bir değişken tanımlayın ve kullanıcının girdiği tarih ile bugünün tarihi arasındaki toplam gün sayısını bu değişkene eşitleyin.

double yasananGun = fark.TotalDays;

157String – Math – DateTime Metotları

Page 166: YAZILIM VE VERİTABANI - Masonluk ve MasonlarOct 11, 2007  · Sunuş 1989… Bilgisayarla ilk tanıştığım ve Basic dili ile uygulama geliştirdiğim yıllardan itibaren bilgisayar

//yasananGun’ü lblYasananGun’ e yazdırın.

lblYasananGun.Text = Convert.ToInt32(yasananGun) + “ gündür hayattasınız”;

Uygulamamızda kullandığımız TimeSpan türü zaman aralığı belirlemek için kullanılır. Total-Days o aralıktaki toplam gün sayısını belirtir. Uygulamanızı çalıştırın ve geçerli bir tarih gire-rek test edin.

Lab 11.2 Kayan YazıYeni bir Windows projesi açın ve adını ”KayanYazi” olarak değiştirin. Formunuzun görüntüsü Şekil 11.2’deki gibi olmalıdır.

Formunuza Tablo 11.2’deki kontrolleri ekleyin.

Şimdi Form1 içerisinde global olarak yazi değişkenini tanımlayın.

string yazi = “C S H A R P “;

Şimdi Form1’ in üzerine çift tıklayarak kod penceresine geçin ve Form1’in Load olayına ge-rekli kodları ekleyin:

private void Form1_Load(object sender, EventArgs e)

{

this.Text = yazi;

}

Şimdi btnBaslat isimli Button’un üzerine çift tıklayarak kod penceresine geçin ve btnBaslat’in Click olayına gerekli kodları ekleyin:

private void btnBaslat_Click(object sender, EventArgs e)

{

timer1.Start();

}

4.

1.

2.

3.

4.

5.

Şekil 11.2

Tablo 11.2 Name Text Interval

Button btnBaslat Başlat -

Button btnDurdur Durdur -

Timer timer1 - 500

158 Bölüm 11

Page 167: YAZILIM VE VERİTABANI - Masonluk ve MasonlarOct 11, 2007  · Sunuş 1989… Bilgisayarla ilk tanıştığım ve Basic dili ile uygulama geliştirdiğim yıllardan itibaren bilgisayar

Şimdi btnDurdur isimli Button’un üzerine çift tıklayarak kod penceresine geçin ve btnDurdur’un Click olayına gerekli kodları ekleyin:

private void btnBitir_Click(object sender, EventArgs e)

{

timer1.Stop();

}

Şimdi timer1 isimli Timer’ın üzerine çift tıklayarak kod penceresine geçin ve timer1’in Tick olayına gerekli kodları ekleyin:

private void timer1_Tick(object sender, EventArgs e)

{

string ilkharf = yazi.Substring(0, 1);

yazi = yazi.Remove(0, 1);

yazi += ilkharf;

this.Text = yazi;

}

Bu kod kelimemizin ilk harfini bir değişken içerisine kaydettikten sonra kelimemizin ilk harfini silerek 1 karakter kısaltır. Daha sonra değişken içerisindeki bu harfi kelimenin sonuna ekleyerek kayma efektini gerçekleştirir.

Lab 11.3 Kelimeyi Ters ÇevirBu örneğimizde TextBox kontrolüne girilen ifadeyi tersine çeviren bir uygulama hazırlayacağız.

Yeni bir Windows projesi açın ve ismini “TersKelime” olarak değiştirin. Form görüntüsü Şekil 11.03’teki gibi olmalıdır.

Formunuza Tablo 11.3‘teki kontrolleri ekleyin.

btnTersCevir’e çift tıklayarak kod penceresine geçin ve btnTersCevir’in Click olayına gerekli kodları yazın.

6.

7.

1.

2.

3.

Şekil 11.3

Tablo 11.3Name Text

TextBox txtKelime

Label lblKelime Kelime:

Label lblSonuc Girdiğiniz Kelimenin Tersi:

Button btnTersineCevir Tersine Çevir

159String – Math – DateTime Metotları

Page 168: YAZILIM VE VERİTABANI - Masonluk ve MasonlarOct 11, 2007  · Sunuş 1989… Bilgisayarla ilk tanıştığım ve Basic dili ile uygulama geliştirdiğim yıllardan itibaren bilgisayar

private void btnTersineCevir_Click(object sender, EventArgs e)

{

//kullanıcının girdiği yazıyı tutan değişken

string girilenYazi = txtKelime.Text;

//oluşacak yazı bu değişkende tutulacak

string tersYazi = “”;

for (int i = 0; i < girilenYazi.Length; i++)

{

//sırasıyla girilenTazi’daki her harf dolaşılıp, oluşan yazının başına atılıyor.

tersYazi = girilenYazi.Substring(i, 1) + tersYazi;

}

//sonuç kullanıcıya gösteriliyor

lblSonuc.Text = tersYazi;

}

Lab 11.4 İlk Harf BüyükBu örneğimizde Textbox kontrolüne girilen metin içerisindeki her kelimenin ilk harfini büyük harf yapan bir uygulama hazırlayacağız.

Yeni bir Windows uygulaması açın ve ismini “BuyukHarfeCevirme” olarak değiştirin. Form görüntüsü Şekil 11.4’teki gibi olmalıdır.

Formunuza Tablo 11.4’teki kontrolleri ekleyin.

btnCevir’e çift tıklayarak kod penceresine geçin ve btnCevir’in Click olayına gerekli kodları yazın.

private void btnCevir_Click(object sender, EventArgs e)

{

//sonucu tutacak değişken

1.

2.

3.

Şekil 11.4

Tablo 11.4Name Text

TextBox txtMetin

Label lblMetin Metin Giriniz:

Button btnCevir Çevir

Label lblSonuc Sonuc:

160 Bölüm 11

Page 169: YAZILIM VE VERİTABANI - Masonluk ve MasonlarOct 11, 2007  · Sunuş 1989… Bilgisayarla ilk tanıştığım ve Basic dili ile uygulama geliştirdiğim yıllardan itibaren bilgisayar

string sonuc=””;

//kullanıcının girdiği değerin ,sağındaki ve solundaki boşluklar alınarak girilenYazi değişkenine atılır.

string girilenYazi = txtMetin.Text.Trim() ;

//girilenYazi boşluk karakterinden Split edilerek kelimeler ayrıştırılır.

string[] kelimeler = girilenYazi.Split(‘ ‘);

//her kelime dönülür

for (int i = 0; i < kelimeler.Length; i++)

{

//kelimenin ilk harfi alınıp ilkHarf değişkenine atanır.

string ilkHarf = kelimeler[i].Substring(0,1);

//ilk harf haricindeki harfler sonrakiHarfler değişkenine atanır.

string sonrakiHarfler = kelimeler[i].Substring(1);

//kelimenin düzgün yazılmış hali ilk harf büyük, diğerleri de küçük harflere çevrilerek duzeltilmisKelime değişkenine atanır.

string duzeltilmisKelime = ilkHarf.ToUpper() + sonrakiHarfler.ToLower();

//elde edilen kelime sonuc değişkenine eklenir ve bir sonraki kelime için boşluk bırakılır.

sonuc += duzeltilmisKelime+” “;

}

//en sondaki boşluk karakteri temizlenir.

sonuc = sonuc.TrimEnd();

//sonuç kullanıcıya gösterilir.

lblSonuc.Text = sonuc;

}

Uygulamayı çalıştırın ve txtMetin’e değer girerek test edin. Çalışan uygulamanın ekran görün-tüsü Şekil 11.05’teki gibidir.

4.

Şekil 11.5

161String – Math – DateTime Metotları

Page 170: YAZILIM VE VERİTABANI - Masonluk ve MasonlarOct 11, 2007  · Sunuş 1989… Bilgisayarla ilk tanıştığım ve Basic dili ile uygulama geliştirdiğim yıllardan itibaren bilgisayar

Lab 11.5 Metot Çalışma ZamanıBu örneğimizde program içinde kullandığımız metotların çalışmalarının kaç saniye sürdüğünü gösteren bir uygulama geliştireceğiz.

Yeni bir Windows projesi açın ve ismini “MethodCalismaSuresi” olarak değiştirin. Form görün-tünüz Şekil 11.06’daki gibi olmalıdır.

Formunuza Tablo 11.5’teki kontrolleri ekleyin.

Öncelikle uygulamamızda kullanacağımız ve çalışma süresini gözlemleyeceğimiz metodu tanımlayın. Örneğimizde 1-100 arası asal sayıları bulan bir metot kullanacağız. Bu metot çalışma süresi gözlemleyebilmemiz için iyi bir örnek oluşturacaktır. Kod penceresine geçin ve gerekli kodları yazın.

//1-100 arası asal sayiları bulan ve asal sayilari lstAsalSayi’da görüntüleyen bir method yazın.

private void asalSayi()

{

for (int i = 2; i < 100; i++)

{

int ortakbolenSayisi = 0;

for (int j = 2; j < i; j++)

{

if (i % j == 0)

ortakbolenSayisi++;

}

if (ortakbolenSayisi == 0)

lbAsalSayi.Items.Add(i);

}

}

1.

2.

3.

Şekil 11.6

Tablo 11.5Button btnCalistir Çalıştır

ListBox lsAsalSayi

Label lblBaslangic Başlama Zamanı:

Label lblBitis Bitiş Zamanı:

Label lblSure Çalışma Süresi :

162 Bölüm 11

Page 171: YAZILIM VE VERİTABANI - Masonluk ve MasonlarOct 11, 2007  · Sunuş 1989… Bilgisayarla ilk tanıştığım ve Basic dili ile uygulama geliştirdiğim yıllardan itibaren bilgisayar

btnCalistir’a çift tıklayarak kod penceresine geçin ve btnCalistir’in Click olayına gerekli kodları yazın.

private void btnCalistir_Click(object sender, EventArgs e)

{

//Metot çağırılamdan önceki zamanı alın.

DateTime baslangic = DateTime.Now;

// Metot çağrılmadan önceki zamanı lblBaslangic’ a yazdırın. Daha ayrıntılı hesaplama için

//baslangic adlı DateTime türünden değişkenin Millisecond özelliğini de kullanın.

lblBaslangic.Text += baslangic.ToLongTimeString() + “:” + baslangic.Millisecond;

//Metodu çalıştırın

asalSayi();

//Metodun çalışmasının bitiği andaki zamanı alın.

DateTime bitis = DateTime.Now;

//Metodun çalışması bittikten sonraki zamanı lblBitis’ e yazdırın. Daha ayrıntılı hesaplama için

//bitis adlı DateTime türünden değişkenin Millisecond özelliğini de kullanın.

lblBitis.Text += bitis.ToLongTimeString()+”:”+bitis.Millisecond;

//Çalışma süresini elde edebilmek için TimeSpan türünden bir nesne tanımlayın ve baslangic ve bittiş arasındaki farkı bu nesneye atayın.

TimeSpan sonuc = bitis - baslangic;

//Metodun kaç milisaniye çalıştığını görüntüleyin.

lblSonuc.Text += sonuc.TotalMilliseconds.ToString();

}

Çalışan uygulamanın ekran görüntüsü Şekil 11.7’deki gibidir.

4.

5.

Şekil 11.7

163String – Math – DateTime Metotları

Page 172: YAZILIM VE VERİTABANI - Masonluk ve MasonlarOct 11, 2007  · Sunuş 1989… Bilgisayarla ilk tanıştığım ve Basic dili ile uygulama geliştirdiğim yıllardan itibaren bilgisayar

ÖdevlerTemel olarak 4 işlem yapabilen (Daha fazla işlem yaptırabilirsiniz) hesap makinesi uygulama-sı geliştirin.

Finans sektörü için uygulama geliştiren yazılım takımında yer alıyorsunuz. Günlük kurların takip edildiği modülü yazmanız gerekiyor. Modüldeki amaç ondalık kısmı 6 haneli elde dilen döviz değerlerini ekranda yuvarlanmış ve ondalık kısmı 2 hane olarak göstermek

1.

2.

164 Bölüm 11

Page 173: YAZILIM VE VERİTABANI - Masonluk ve MasonlarOct 11, 2007  · Sunuş 1989… Bilgisayarla ilk tanıştığım ve Basic dili ile uygulama geliştirdiğim yıllardan itibaren bilgisayar

A .NET Framework – MSIL – CLR Kavramları

Page 174: YAZILIM VE VERİTABANI - Masonluk ve MasonlarOct 11, 2007  · Sunuş 1989… Bilgisayarla ilk tanıştığım ve Basic dili ile uygulama geliştirdiğim yıllardan itibaren bilgisayar

A .NET Framework – MSIL

– CLR Kavramları.NET Framework Nedir ?

C# Compiler Kullanarak Uygulama Derlemek

Wizard (Sihirbaz) Yardımıyla Setup Hazırlama

Online MSDN Üzerinden Arama

ToString Metodu – Numerik Biçimlendirme

Page 175: YAZILIM VE VERİTABANI - Masonluk ve MasonlarOct 11, 2007  · Sunuş 1989… Bilgisayarla ilk tanıştığım ve Basic dili ile uygulama geliştirdiğim yıllardan itibaren bilgisayar

.NET Framework – MSIL – CLR KavramlarıUygulama geliştirme sürecine başlamış olduğunuz ilk 50 saat içerisinde temel olarak bir uygu-lama geliştiricisinin hangi özelliklere sahip olması gerektiği, hangi ortamların kullanılabileceği ve temel kavramların ne olacağı konusunda bilgi sahibi oldunuz. Bu bölümde ise .NET Platformunu daha yakından tanıyacağız. Bu bölümde anlatılanlar ön bilgi amaçlı olup, eğitimin daha sonraki süreçlerinde işinize yarayacak olan temel konuları içermektedir.

.NET Framework Nedir ?

.NET Framework, dilden, işletim sisteminden ve cihazdan bağımsız uygulama geliştirebilecek olduğumuz esnek, genişletilebilir ve “kullanımı kolay” bir uygulama geliştirme platformudur.

Platform kelimesini mercek altına aldığımızda ise .NET Framework’ ün bir programlama dili ol-madığını, içerisinde çeşitli amaçlar için geliştirilmiş birçok aracın bulunduğu bir paket olarak de-ğerlendirebiliriz.

Temel olarak .NET Framework ; CLS, CTS ve CLR olarak 3 ana araçtan oluşur. Şu an için bu araçlardan sadece CLR‘ın biliniyor olması sizin için yeterli olacaktır. CLR‘ın ne olduğu konusunda bilgi sahibi olmadan önce .NET Framework’ün nasıl dilden bağımsız bir yapısı olduğu hakkında bilgi sahibi olalım.

.NET Framework kitap içerisinde de bahsedildiği üzere 50’den fazla dili desteklemektedir. Peki, bu kadar dil, ortak bir noktada nasıl buluşabilmektedir? İşte bu noktada karşımıza Microsoft ta-rafından geliştirilen, 50’den fazla dilin derleme aşamasında otomatik olarak dönüştürüldüğü, orta seviyeli bir dil olan MSIL (Microsoft Intermediate Language) karşımıza çıkmaktadır. .Net Fra-mework uyumlu dillerin derleyicileri, derleme işlemi esnasında eğer kod içerisinde herhangi bir problem ile karşılaşmaz ise kullanılan uygulama geliştirme dilinin kodlarını MSIL adı verilen ortak bir dile çevirmektedir.

Konunun daha rahat anlaşılabilmesi açısından Şekil A.1 sizlere yardımcı olacaktır.

Şekil A.1’den de anlaşılabileceği üzere işlem 3 adımda oluşmaktadır.

Şekil A.1

Page 176: YAZILIM VE VERİTABANI - Masonluk ve MasonlarOct 11, 2007  · Sunuş 1989… Bilgisayarla ilk tanıştığım ve Basic dili ile uygulama geliştirdiğim yıllardan itibaren bilgisayar

Yazılan kodlar derleyici tarafından önce MSIL’e dönüştürülmekte, daha sonra bu orta seviyeli kod hangi platform üzerinde çalıştırılıyor ise o platforma uygun makine diline çevrilmektedir. Peki, bu noktada platforma uygun makine diline çevirim işlemi nasıl gerçekleşmektedir? Bu hangi araç ile sağlanmaktadır? Temel yaklaşımla bakıldığında bu noktada karşımıza CLR (Common Language Runtime) isimli araç çıkmaktadır. CLR çalışma anında MSIL kodlarını belirli kurallar çerçevesinde makine diline çevirmekte ve uygulama çalıştırılacak hale getirilmektedir.

Peki, bu araçlar sistem üzerine nasıl kurulabilmektedir?

Eğitim süreci içerisinde sözü geçtiği üzere Microsoft tarafından geliştirilmiş, .Net Framework adı verilen yaklaşık 25 MB’lık bir yükleme paketi bulunmaktadır. .Net Framework ile geliştirilen bir uygulamanın diğer bir makinede (Örn: Arkadaşınızın makinesi, annenizin Notebook’u, halanızın Surface PC’si v.b.) çalıştırılabilmesi için minimum yaklaşımla bu paketin sistem üzerine kurulu olmuş olması gerekmektedir. Bu paketin yüklemesi sonucunda sisteminize .NET Framework ile geliştirilen bir uygulamanın çalıştırılabilmesi için gereken temel araçlar sisteme kurulacaktır.

C# Compiler Kullanarak Uygulama DerlemekBu bölümde VS.NET 2008 arayüzünü kullanmadan Notepad üzerinde yazacak olduğumuz kod bloğunu C# Compiler’ın üzerine gönderecek ve uygulamayı derleme sürecini izleyebileceğiz.

Aşağıdaki kod bloğunu boş bir Notepad sayfasına yazın.

using System;

public static class CSharpCompiler

{

public static void Main(string [] Args)

{

Console.WriteLine(“Merhaba Dünya !”);

Console.ReadLine();

}

}

Dosyayı C:\ dizini altına Kodlar.txt olarak kaydedin.

Bir sonraki adımda Başlat > Çalıştır’a (Start > Run) şu komutları yazarak Enter tuşuna basın:

%comspec% /k “”C:\Program Files\Microsoft Visual Studio 9.0\VC\vcvarsall.bat”” x86

Açılan pencereye aşağıdaki komutu yazınız ve Enter tuşuna basın:

csc c:\Kodlar.txt

Ekran üzerinde herhangi bir hata çıkmamış ise uygulamamız derlenmiş; kodlarınız çalıştırılmak üzere MSIL kodlarına dönüştürülmüş demektir.

Uygulamayı C:\Program Files\Microsoft Visual Studio 9.0\VC dizini altında EXE yani Executable (Çalıştırılabilir) formatta bulabilirsiniz.

Exe’ye çift tıkladığınızda Şekil A.2’deki ekranı görüntüleyebilirsiniz.

Dosyayı txt olarak kaydediyoruz, exe olarak değil !

168 Ek-A

Page 177: YAZILIM VE VERİTABANI - Masonluk ve MasonlarOct 11, 2007  · Sunuş 1989… Bilgisayarla ilk tanıştığım ve Basic dili ile uygulama geliştirdiğim yıllardan itibaren bilgisayar

Bu bölümde derleme işlemi için normal şartlarda VS.NET‘e ihtiyacımızın olmadığını ama mantıklı bir yaklaşımla bakıldığında VS.NET kullanmamanın ne kadar da zor olduğu ile ilgili bilgi sahibi olmuş olduk.

Wizard (Sihirbaz) Yardımıyla Setup HazırlamakBu bölümde VS.NET üzerinde tanımlı sihirbazlar yardımıyla, geliştirmiş ve yayınlamayı düşündü-ğümüz bir uygulamanın Setup (Yükleme) paketinin nasıl hazırlanacağı ile ilgili basit ve anlaşılır bir örnek hazırlayacağız.

Örneğimizi geliştirmeye geçmeden önce bir yükleme paketinin neden oluşturulması gerektiği ile ilgili temel olarak bilgi sahibi olalım.

Geliştirmiş olduğumuz uygulamaları farklı bilgisayarlar üzerinde çalıştırmak isteyebiliriz.

Örneğin geliştirmiş olduğumuz bir kart oyununu MSN üzerinden bir arkadaşımıza göndererek uygulamayı arkadaşımız ile paylaşmak isteyebiliriz. Peki, bu noktada ne tip problemler ile karşı-laşabiliriz?

Öncelikle karşılaşabilecek olduğumuz en temel problem; uygulamanın .Net Framework ile geliş-tirilmiş olmasından dolayı uygulamayı gönderiyor olduğumuz kişinin makinesinde bu kurulumun gerçekleştirilmiş olmasının gerekliliğidir. Bu kontrolü ancak ve ancak uygulamayı gönderiyor ol-duğumuz kişiye sorarak gerçekleştirebiliriz.

Bir diğer yaşanabilecek problem ise uygulama ile birlikte birden fazla dosyanın bulunmasının gerektiği durumlarda dosyaları tek tek göndermek, tek tek gönderilse bile bunların ilgili klasörlere tek tek kopyalanmasını sağlamak kolay bir iş değildir.

Peki, tüm bu problemlere çözüm olabilecek yapıda, hemen hemen internet üzerinden indirmiş ol-duğumuz tüm uygulamaların ilk çalıştırılma sürecinde karşımıza çıkan bir “yükleme paketi” modeli üzerinden ilerlesek hem bizim açımızdan hem de uygulamayı gönderdiğimiz kişi açısından daha uygun olmaz mıydı?

İşte bu noktada karşımıza VS.NET üzerinde hazır tanımlı olan Setup Projesi şablonları çıkmak-tadır. Bu şablonlar yardımıyla birkaç tıklama ile uygulamalarımıza yükleme paketi oluşturabilir, yüklenecek olan makinede yapılması gereken tüm işlemleri bu paket içerisinde tanımlayabiliriz.

Yükleme paketinin bir diğer avantajı ise uygulamanın yüklenecek olduğu sistemde .Net Fra-mework kontrolünü yapması, şayet yok ise kişiyi ilgili Download sayfasına yönlendirmesidir.

Şimdi daha fazla vakit kaybetmeden örnek projemizi oluşturalım.

Şekil A.2

169Ek-A

Page 178: YAZILIM VE VERİTABANI - Masonluk ve MasonlarOct 11, 2007  · Sunuş 1989… Bilgisayarla ilk tanıştığım ve Basic dili ile uygulama geliştirdiğim yıllardan itibaren bilgisayar

VS.NET’ i açtıktan sonra File > New > Project penceresinden şekildeki proje şablonunu seçiyoruz.

Bir sonraki adımda karşımıza çıkan Sihirbaz penceresindeki yönergeleri izleyelim.

Çıkan sihirbaz penceresinde Create a setup for a Windows Application seçeneğini seçelim.

Şekil A.3

Şekil A.4

170 Ek-A

Page 179: YAZILIM VE VERİTABANI - Masonluk ve MasonlarOct 11, 2007  · Sunuş 1989… Bilgisayarla ilk tanıştığım ve Basic dili ile uygulama geliştirdiğim yıllardan itibaren bilgisayar

Next düğmesine tıkladıktan sonra Setup paketi içerisinde hangi dosyaların bulunacağını seçme-mizi isteyecek olan bir sihirbaz penceresi karşımıza gelmektedir.

Şekil A.5

Şekil A.6

171Ek-A

Page 180: YAZILIM VE VERİTABANI - Masonluk ve MasonlarOct 11, 2007  · Sunuş 1989… Bilgisayarla ilk tanıştığım ve Basic dili ile uygulama geliştirdiğim yıllardan itibaren bilgisayar

Add düğmesine tıklayarak sistemimiz üzerinde bulunan uygulamamızı seçiyoruz ve Next düğme-sine tıklıyoruz.

Finish düğmesine tıklıyoruz ve projeyi Build ediyoruz.

Setup paketimiz hazır. Hazırlanan yükleme dosyasını projeyi açtığımız uygulama klasörü içerisin-de .msi uzantılı olarak bulabiliriz.

Şekil A.7

Şekil A.8

Şekil A.9

172 Ek-A

Page 181: YAZILIM VE VERİTABANI - Masonluk ve MasonlarOct 11, 2007  · Sunuş 1989… Bilgisayarla ilk tanıştığım ve Basic dili ile uygulama geliştirdiğim yıllardan itibaren bilgisayar

Online MSDN Üzerinden AramaBu bölümde internet erişiminin olduğu durumlarda Microsoft’un çevrimiçi yardım kütüphanesi MSDN üzerinden ihtiyacımız olan herhangi bir bilgiye nasıl ulaşabileceğimiz üzerinde çalışaca-ğız. Resimler üzerinden adım adım bir MSDN araması gerçekleştireceğiz.

Bilindiği üzere MSDN Yardım kütüphanesinin bilgisayarımız üzerinde yapılacak yükleme sonrası kaplayacağı alan en az 3-4GB olacaktır.

Kütüphanenin boyutunun bu kadar büyük olmasının yanı sıra kütüphane çevrimdışı bir model üzerinden çalıştığından gerekli güncellemelerinin internet üzerinden sürekli yapılması gerekmek-tedir.

İnternet erişiminin olduğu çevrimdışı paketi yüklemenin hiç bir gereği yoktur. Aynı sonuca “daha güncel bir şekilde” internet üzerinden erişebiliriz.

Hızlı bir şekilde konuyu örneklendirmemiz gerekirse, Bitmap sınıfının nasıl kullanılacağı ile ilgili bir MSDN araması gerçekleştirelim ve sonucunu birlikte değerlendirelim.

İnternet erişiminin olduğu bir ortamda tarayıcımızın adres çubuğuna Şekil A.10’daki adresi yaza-lım.

Sol üst köşedeki arama kutusuna Bitmap değerini yazarak Enter tuşuna basalım ve çıkan sonuç-lardan ilkine tıklayalım.

Şekil A.10

Şekil A.11

173Ek-A

Page 182: YAZILIM VE VERİTABANI - Masonluk ve MasonlarOct 11, 2007  · Sunuş 1989… Bilgisayarla ilk tanıştığım ve Basic dili ile uygulama geliştirdiğim yıllardan itibaren bilgisayar

Çıkan sayfa içerisinde sınıfın yapısını inceleyelim. Uygun olan kod bloğunu değerlendirdikten sonra örnek kodu denemek için VS.NET içerisine açılan bir projeye kodu yapıştıralım ve uygula-mayı çalıştıralım.

İlgili kod bloğunu (C#) seçerek uygulamayı deneyebiliriz.

ToString Metodu – Numerik BiçimlendirmeTüm standart .Net numerik tipleri içerisinde bulunan ToString metodu, yapısı gereği numerik de-ğeri çalışma zamanında string tipine dönüştürmeye yaramaktadır.

Bu dönüştürme işlemi esnasında ToString metodunun “Numeric Format String” parametresi üze-rinden dönüştürme işlemi farklı ihtiyaçlar doğrultusunda kişiselleştirilebilmektedir.

Bilgilendirmeye geçmeden önce parametrenin temel kullanımını incelemek daha doğru olacak-tır.

Parametrenin temel yapısı aşağıdaki gibidir:

{N:FormatString,M}

Bu noktada sembolik olarak ifade edilen değerlerden N, parametrenin indeks değerini, FormatS-tring sayının nasıl görüntüleneceğini, M ise alanın uzunluğunu temsil etmektedir.

Aşağıdaki tabloda FormatString parametresine gelebilecek değerler ve açıklamaları listelenmiş-tir.

Şekil A.12

Şekil A.13

174 Ek-A

Page 183: YAZILIM VE VERİTABANI - Masonluk ve MasonlarOct 11, 2007  · Sunuş 1989… Bilgisayarla ilk tanıştığım ve Basic dili ile uygulama geliştirdiğim yıllardan itibaren bilgisayar

Aşağıda konu ile ilgili örnek bir kullanım gösterilmiştir:

static void Main(string[] args)

{

Decimal ondalikSayi = 88.8M;

int tamSayi = 88;

Console.WriteLine(“Parasal Format: “ + ondalikSayi.ToString(“C4”));

Console.WriteLine(“Decimal Integer Formatı: “ + tamSayi.ToString(“D7”));

Console.WriteLine(“Üstel Formatlama:” + ondalikSayi.ToString(“E”));

Console.WriteLine(“SabitNoktalıFormatlama:”+ondalikSayi.ToString(“F5”));

Console.WriteLine(“Genel Formatlama: “ + ondalikSayi.ToString(“G”));

Console.WriteLine(“Virgülle Ayrılmış: “ + ondalikSayi.ToString(“N”));

Console.WriteLine(“Hexadecimal Notasyon: “ + tamSayi.ToString(“X4”));

Console.ReadLine();

}

Kod bloğu çalıştırıldığında ekrana Şekil A.14’teki görüntü gelmektedir:

Tablo A.1Kullanılan Karakter Anlamı

CNumerik değer, lokal sistemin kullanıyor olduğu para birimi formatı üzerinden dönüştürmeye sokulur.

DDeğeri decimal integer formatında görüntüler. Belirlenen değer kadar sayının başına 0 karakteri eklenir.

E Değer üstel formatta görüntülenir.

F Değer sabit-noktalı formatta görüntülenir.

GDeğer sabit-noktalı ya da tamsayı olarak görüntülenir. Bu noktada en uygun seçim otomatik olarak yapılmaktadır.

N Değer virgülle ayrılarak görüntülenir.

X Değer hexadecimal notasyon kullanılarak görüntülenir.

175Ek-A

Page 184: YAZILIM VE VERİTABANI - Masonluk ve MasonlarOct 11, 2007  · Sunuş 1989… Bilgisayarla ilk tanıştığım ve Basic dili ile uygulama geliştirdiğim yıllardan itibaren bilgisayar

IntelliSenseC# (csharp) yapısı itibariyle yazımı kolay olmayan bir dildir. Bu sebepten dolayı bu dili ilk defa öğrenecek olanlar için hata çoğu zaman kaçınılmaz olmaktadır. Burada sözü edilen hatalar ya-zım (syntax) hatalarıdır. Bu hataları en aza indirmek için Visual Studio arayüzü bize IntelliSense yazım yardımcısını sunmaktadır. Bu yardımcıyı iyi kullandığınız takdirde hataların en aza indiğini göreceksiniz.

Kod yazarken, ilk harfe basmanızla beraber devreye giren IntelliSense yardımcı size o scope içerisinde yazılabilecek değişken, metot, özellik gibi öğeleri listeler. Yazmak istediğiniz öğe seçili hale geldiğinde devamını yazmanız gerekmez. Bu durumda yapmanız gereken en mantıklı adım bir sonraki yazmak istediğiniz karakteri tuşlamak olacaktır. Örneğin TextBox kontrolünün Text özelliğine metinsel bir değer atayan kodu yazacaksınız.

txtAd.Text = “metinsel ifade”;

t ve x harflerine basın hemen ardından txtAd’ın geldiğini göreceksiniz. Şimdi yapmanız gereken nokta “.” ya basmak. IntelliSense burada eksik olan kısmı tamamlayacak ve noktadan sonra ge-

lecek diğer kodları listeleyecektir. Tekrar T harfine basın TabIndex gelecek aşağı ok tuşu ile ilerleyip Text’i bulun ve eşit (=) tuşuna basıp bir boşluk verin. Bundan sonra çift tırnak içine “metinsel ifade” yi yazın.

Bazı durumlarda IntelliSense size cevap vermeyecektir. Bu durumlar:

Kod yazdığınız satırda ya da üstünde hatalı kodlar olduğunda,

Komut satırlarında iken,

String bir ifadeyi yazıyor iken.

Sık Yapılan HatalarC# ta satırlar mutlaka noktalı virgül (;) ile bitmelidir.

Yanlış

string kelime = “yirmiyedi”

Doğru

string kelime = “yirmiyedi”;

1.

Şekil A.14

IntelliSense’ i herhangi bir scope içinde kod yazmadan aktif hale getirmek için Ctrl + Boş-luk tuş kombinasyonunu kullanabilirsiniz.

176 Ek-A

Page 185: YAZILIM VE VERİTABANI - Masonluk ve MasonlarOct 11, 2007  · Sunuş 1989… Bilgisayarla ilk tanıştığım ve Basic dili ile uygulama geliştirdiğim yıllardan itibaren bilgisayar

Bir atama işlemi yapılıyorsa eşittir (=), karşılaştırma yapılıyorsa çift eşittir (==) kullanılmalı-dır.

Yanlış

if(a = 10)

Doğru

if(a == 10)

Karmaşık bir aritmetik işlem yapılıyorsa parantezler ile öncelik sırası belirtmek gerekir.

Yanlış

int sonuc = 12 + 7 * 2; //sonuç=26

Doğru

int sonuc = (12 + 7) * 2; //sonuç=38

Metotlar aç kapa patantez () ile kullanılır. Eşit (=) ile değer veremezsiniz. Sadece parametre-ler aracılığı ile değer geçirebilirsiniz.

Yanlış

Math.Round = 90;

Math.Round() = 90;

Doğru

Math.Round(90);

Eğer bir metot geriye değer döndürecek ise mutlaka return ile uygun tipteki değer döndürül-melidir.

Yanlış

int toplam(int sayi1, int sayi2)

{

int sonuc = sayi1 + sayi2;

}

int toplam(int sayi1, int sayi2)

{

return int sonuc = sayi1 + sayi2;

}

Doğru

int toplam(int sayi1, int sayi2)

{

return sayi1 + sayi2;

}

2.

3.

4.

5.

177Ek-A

Page 186: YAZILIM VE VERİTABANI - Masonluk ve MasonlarOct 11, 2007  · Sunuş 1989… Bilgisayarla ilk tanıştığım ve Basic dili ile uygulama geliştirdiğim yıllardan itibaren bilgisayar

Metotlar oluşturulurken parantezlerden sonra noktalı virgül (;) konulmaz.

Yanlış

void metod1();

{

}

string metod2(string ad);

{

}

Doğru

void metod1()

{

}

string metod2(string ad)

{

}

for, foreach ve while döngüleri ile if, switch deyimlerini tanımlarken noktalı virgül (;) kullanıl-maz. Sadece do while döngüsünden sonra kullanılır.

Yanlış

for(int i = 0;i<=10;i++);

{

}

while(true);

{

}

Doğru

for(int i = 0;i<=10;i++)

{

}

while(true)

{

}

do

{

}while(true);

6.

7.

178 Ek-A