C# İle biLGİsayar programlama temelleri (C# Programlama Kitabı) Svetlin Nakov & Co



Yüklə 3,36 Mb.
səhifə4/31
tarix03.11.2017
ölçüsü3,36 Mb.
#28822
1   2   3   4   5   6   7   8   9   ...   31

1.9.2 Visual Studio Nedir?



Visual Studio, Windows ve .NET Framework platformu üzerinde yazılım uygulamaları geliştirmek için güçlü bir tümleşik ortamdır (IDE). Visual Studio (VS), farklı programlama dillerini (örneğin, C#, VB.NET ve C++) ve farklı yazılım geliştirme teknolojilerini (Win32, COM, ASP.NET, ADO.NET Entity Framework, Windows Forms, WPF, Silverlight Windows Store uygulamaları ve daha birçok Windows ve .NET teknolojileri) destekliyor. Kod yazma, derleme, yürütme, hata ayıklama ve uygulamaları test etme, kullanıcı arayüzü tasarımı (formlar, diyaloglar, web sayfaları, görsel kontroller ve diğerleri), veri ve sınıf modelleme, testleri ve yüzlerce diğer fonksiyonları çalıştırmak için güçlü bir bütünleşik bir ortam sunuyor.
IDE "tümleşik geliştirme ortamı" anlamına gelir - kod yazmak, derlemek, çalıştırmak, test etmek, hata ayıklamak vb. için her şeyin tek bir yerde entegre edildiği bir araçtır. Visual Studio tipik bir geliştirme IDE örneğidir.
.NET Framework 4.5 Visual Studio 2012 (VS 2012) ile birlikte gelir. Bu Mart 2013 itibariyle en son Visual Studio sürümüdür. C# 5, .NET 4.5 ve Windows 8 ile uygulama geliştirmek için tasarlanmıştır.
VS 2012 ticari bir üründür, ancak Visual Studio Ekspres 2012 adı verilen ücretsiz bir sürümü de vardır. http://microsoft.com/visualstudio/downloads adresindeki Microsoft web sitesinden ücretsiz olarak indirebilirsiniz.
Birkaç tane Visual Studio 2012 Ekspres sürümü bulunmaktadır (masaüstü, Web, Windows 8 ve diğerleri için). Bu kitabın içeriğinde bulunan C # kodunu yazmak istiyorsanız, Masaüstü için Visual Studio 2012 Ekspres kullanabilirsiniz yada bulunduğunuz Üniversiteden veya kurumdan tam Visual Studio ücretsiz lisansına sahip olup olmadığınızı kontrol edin. Birçok akademik kurum Windows, Visual Studio, SQL Server ve diğer geliştirme araçlarını ücretsiz lisanslamak için öğrencilerine Microsoft DreamSpark hesapları sağlamaktadır. Eğer öğrenci iseniz, üniversite yönetiminize DreamSpark programını sorun. Dünyanın her tarafında çoğu üniversite bu programın üyeleridir.
Bu kitapta VS Ekspres 2012’nin yalnızca en önemli işlevlerinden biri göz önüne alınacaktır – kodlama ile ilgili olanlar. Program oluşturma, düzenleme, derleme, yürütme ve hata ayıklama için fonksiyonları bulunmaktadır.
Bu kitapta örnekler için VS 2010 ve VS 2008 gibi eski Visual Studio sürümlerinin de kullanılabilir olduğunu unutmayın, ancak kullanıcı arayüzleri biraz farklı görünebilir. Örneklerimiz Windows 8 üzerinde VS 2012’ye dayanmaktadır.
Bir örnek ile devam etmeden önce, Visual Studio 2012'nin görsel arayüz yapısına daha detaylı bir göz atalım. Windows bunun ana parçasıdır. Her birinin uygulamaların geliştirilmesine bağlı farklı bir işlevi vardır. Visual Studio 2012’nin varsayılan kurulum ve yapılandırma sonrasında nasıl göründüğünü görelim:


Visual Studio’nun araştıracağımız birkaç pencere vardır:


  • Başlangıç ​​Sayfası - başlangıç ​​sayfasından son projelerimizden herhangi birini rahatlıkla açabiliriz veya yeni bir proje başlatabiliriz, ilk C# programımızı oluşturmak veya C# kullanımı hakkında yardım almak için.

  • Kod Editörü - programın kaynak kodunu tutar ve birden fazla dosyanın açılmasını ve düzenlenmesini sağlar.

  • Hata Listesi - geliştirdiğimiz programdaki hataları (varsa) gösterir. Daha sonra C# programlarımızı Visual Studio içinden derlerken bu pencereyi nasıl kullanacağımızı öğreneceğiz.

  • Çözüm Gezgini - hiçbir proje yüklenmediğinde, bu pencere boştur, ancak C# programcıları olarak hayatımızın bir parçası haline gelecek. Projemizin yapısını gösterir – C# kodu olsun olmasın, içerdiği tüm dosyaları, resimleri veya diğer bazı tür kod ve kaynakları.

  • Özellikler - Geçerli nesnenin özelliklerinin bir listesini tutar. Özellikler esas olarak bileşen tabanlı programlamada kullanılır, örneğin WPF, Windows Store veya ASP.NET Web Forms uygulaması geliştirirken.



Visual Studio’nun yardımcı işlevsellikleri ile ilgili diğer birçok pencere vardır ama biz şu anda bunları gözden geçirmeyeceğiz.

1.9.3 Yeni bir C# Projesi Oluşturma
Visual Studio ile başka bir şey yapmadan önce, yeni bir proje oluşturmak veya varolan bir projeyi yüklememiz gerekir. Tasarlanan proje çok sayıda dosyayı mantıklı bir şekilde gruplandırır, bir yazılım uygulaması veya sistemi uygulamak üzere. Her yeni program için ayrı bir proje oluşturmanız önerilir.

Aşağıdaki adımları izleyerek Visual Studio'da bir proje oluşturabilirsiniz:

  • File -> New Project

  • "New Project" iletişim kutusu görünür ve oluşturabileceğimiz projelerin tüm farklı türlerini listeler. Bir proje türünü seçin (örneğin Konsol Uygulaması veya WPF Uygulaması), programlama dili (örneğin C# veya VB.NET) ve .NET Framework sürümü (örneğin .NET Framework 4.5) ve projenize bir ad verin (bizim durumumuzda "IntroToCSharp"):





  • Konsol Uygulaması’nı seçin. Konsol uygulamaları varsayılan girdi ve çıktı olarak konsolu kullanan programlardır. Veri klavye ile girilir ve sonuç basılacak olduğunda bu, konsolda görünür (program penceresinde ekrandaki metin olarak). Konsol uygulamalarının yanı sıra, bir grafik kullanıcı arayüzü ile (örneğin Windows Forms veya WPF) de uygulamalar, Web uygulamaları, web hizmetleri, mobil uygulamalar, Windows Store uygulamaları, veritabanı projeleri ve diğerlerini de oluşturabiliriz.

  • Projenin adını "Name" alanına girin. Bizim durumumuzda IntroToCSharp adını seçin.

  • [OK] düğmesine basın.




Yeni oluşturulan proje şimdi Çözüm Gezgini’nde gösterilir. Ayrıca, program kodunu içeren ilk dosyamız da, otomatik olarak eklenir. Program.cs olarak adlandırılmıştır. Dosyalar, sınıflar, yöntemler ve programın diğer elemanları için anlamlı isimler vermek çok önemlidir, böylece onları kolayca bulabiliriz ve kodda gezinebilirsiniz. Anlamlı bir isim demek şu soruya cevap vermesi anlamına gelir: "Bu dosya/sınıf/yöntem/değişkenin oluşturulma amacı nedir?" ve kodun nasıl çalıştığını anlamaları için geliştiricilere yardımcı olur. Alıştırmalar bölümünün 3.problemini çözüyor olsanız da, bir isim olarak Problem3 vermeyin. Proje/sınıflarınızı amacına göre adlandırın. Projeniz iyi adlandırılmıştır ise, birkaç ay veya bir yıl sonra ne yapmak için tasarlandığını açmadan ve içine bakmadan açıklamak mümkün olacaktır. Problem3 bu projenin aslında ne yaptığı hakkında hiçbir şey söylemez.
Program.cs dosyasını yeniden adlandırmak için, Çözüm Gezgini’nde üzerine tıklayın ve "Rename" seçeneğini seçin. C# programımızı içeren ana dosyayı HelloCSharp.cs olarak adlandırabiliriz. Dosyayı yeniden adlandırmayı dosya Çözüm Gezgini’nde seçiliyken [F2] tuşu ile de yapılabiliriz:


Sınıf adını bunun yanı sıra dosya adını yeniden adlandırmak isteyip istemediğimizi bize soran bir diyalog penceresi görünür. "Evet" seçeneğini seçin.


Yapmamız gereken tek şey Main() yöntemi için kod eklemektir. Varsayılan olarak, HelloCSharp.cs kodu yüklü ve düzenleme için hazır olmalıdır. Değilse, Çözüm Gezgini’nde HelloCSharp.cs dosyasına çift tıklayarak onu yükleriz. Aşağıdaki kaynak kodu girin:


1.9.4 Kaynak Kodun Derlenmesi
Visual Studio’da derleme işlemi birkaç adım içerir:


  • Sözdizimi hatalarının kontrolü;





  • Eksik kütüphaneler gibi diğer hataların kontrolü;

  • Çalıştırılabilir bir dosya içine (.NET assembly) C# kodunun dönüştürülmesi. Konsol uygulamaları için bu bir .exe dosyasıdır.


Visual Studio'da bir dosyayı derlemek için, [F6] tuşuna veya [Shift + Ctrl + B] tuşuna basın. Genellikle, hatalar biz hâlâ yazarken ya da en geç derlerken programcının dikkatini çekmek için kırmızı renkle altı çizilidir. Görünür olması durumunda "Hata Listesi" penceresinde listelenir (Eğer görünür değilse, Visual Studio’nun "Görünüm" menüsünden gösterebiliriz).
Projemizde en az bir hata varsa, bu "Hata Listesi" penceresinde küçük kırmızı bir "x" ile işaretlenmiş olacaktır. Dosya adı, satır numarası ve proje adı – gibi sorun hakkındaki kısa bilgiler her hata için görüntülenir.  "Hata Listesi"nde listelenen hatalardan biri üzerine çift tıklarsanız, Visual Studio otomatik olarak hatanın oluştuğu kod dosyasına ve satıra sizi götürecektir. Yukarıdaki ekran görüntüsünde sorun, “using System” yerine “using Systema” yazmış olmamızdı.

1.9.5 Projeyi Başlatma
Projeyi başlatmak için, basın [Ctrl + F5] basın ( [Ctrl] tuşuna basılı tutarak ve aynı anda [F5] tuşuna basarak). Program başlayacak ve sonucu takiben "Devam etmek için herhangi bir tuşa basın..." mesajı konsolda görüntülenir:

Son mesaj program tarafından üretilen sonucun bir parçası değildir. Programın yürütmesi bittikten sonra Visual Studio tarafından üretilen bir hatırlatma mesajıdır ve bize sonucunu görmek için zaman verir. Sadece [F5] tuşuna basarak programı çalıştırırsanız, bu mesaj görünmez ve sonuç göründükten sonra anında kaybolur, çünkü program kendi yürütmesini bitirmiş olacaktır, ve pencere kapanacaktır. Her zaman [Ctrl+F5] tuşuna basarak konsol uygulamalarını başlatmamızın nedeni budur.
Tüm proje türleri yürütülebilir değildir. Bir C# projesini yürütmek için, bu bölümde daha önce anlatılan şekilde bildirilmiş bir Main() metotunu gerçekleştiren en az bir sınıfın olması gerekir.

1.9.6 Programda Hata Ayıklama
Program aynı zamanda böcek (bug) olarak da bilinen hataları içerdiğinde, onları bulmanız ve kaldırmanız gerekir, yani programın hatalarını ayıklamak zorundayız. Hata ayıklama işlemi aşağıdaki adımları içerir:


  • Sorunları (bug) farketmek;

  • Sorunlara neden olan kodu bulmak;

  • Program düzgün çalışacak şekilde kodu düzeltmek;

  • Değişiklikleri yaptıktan sonra programın beklendiği gibi çalıştığından emin olmak için test etmek.


Program düzgün çalışmaya başlayana kadar bu işlem birkaç kez tekrar edilebilir. Sorunu fark ettikten sonra, ona neden olan kodu bulmamız gerekir. Visual Studio her şeyin planlandığı gibi çalışıp çalışmadığını adım adım kontrol etmemize izin vererek bize yardımcı olabilir.
Belirlenen pozisyonlarda programın yürütülmesini durdurmak için kesme noktaları (breakpoint) yerleştirebilirsiniz. Kesme noktası programın bir satırı ile ilişkilidir. Program kesme noktaları ile ilişkili satırlar üzerinde yürütmesini durdurur, kalan kodun adım adım yürütülmesine izin verir. Her adımda mevcut değişkenlerin değerlerini kontrol edebilir ve hatta değiştirebiliriz.
Hata ayıklama, programı bir tür yavaş hareketlerle adım adım yürütmeyi gerektirir. Kolayca kod detaylarını anlamak için fırsat verir ve tam olarak nerede ve neden hata oluştuğunu görmemizi sağlar.
Kesme noktalarının nasıl kullanılacağını göstermek için, programımızda kasıtlı bir hata yaratalım. Yürütme sırasında bir ayrıcalık yaratan satırı programa ekleyeceğiz ("İstisnai Durum İşleme" Bölümü’nde ayrıcalıklara detaylı göz atacağız).
Şimdilik aşağıdaki şekilde programımızı düzenleyelim:

HelloCSharp.cs

class HelloCSharp

{

static void Main()



{

throw new System.NotImplementedException(

"Intended exception.");

System.Console.WriteLine("Hello C#!");



}

}



[Ctrl + F5] ile programı tekrar başlattığınızda bir hata alırsınız ve bu konsolda basılacaktır:



Kesme noktalarının sorunu bulmada bize nasıl yardımcı olacağını görelim. Main() metotunun açılış parantezini taşıyan satıra imleci götürün ve [F9] basın (bunu yaparak bu satır üzerine bir kesme noktası yerleştiririz). Hata ayıklama modunda yürütüldüğünde, programın orada duracağını belirten bir kırmızı nokta görünür:

Şimdi hata ayıklama modunda programı başlatmanız gerekir. Debug->Start Debugging seçin veya [F5] basın. Programı başlayacak ve karşılaştığı ilk kesme noktasında anında duracaktır. Satır sarı renkli olacak ve bundan sonra programı adım adım çalıştırabileceksiniz. [F10] tuşu ile bir sonraki satıra geçilir.
Verilen bir satır üzerindeyken satır sarı renkli olduğunda, satırdaki kod henüz yürütülmemiştir anlamına gelir. Satırı geçtiğimizde bir kez yürütülür. Eklediğimiz satırda bulunmamıza ve buranın hataya sebep olması gerektiğine rağmen, bu örneğimizde biz hata almadık.




Satırı yürütmek için bir kez daha [F10] basın. Bu kez, Visual Studio, hatanın oluştuğu satırı ve yanı sıra bununla ilgili bazı ek ayrıntıları belirten bir pencere görüntüler.

Programda sorunun nerede olduğunu bir kez anladıktan sonra, onu kolayca düzeltebilirsiniz. Bunu yapmak için, önce programın yürütülmesi bitmeden durdurmak gerekir. Debug–>Stop Debugging seçin veya [Shift + F5] basın. Bundan sonra sorunlu satırı silin ve [Ctrl + F5] tuşuna basarak (hata ayıklama olmadan) normal modda programı başlatın.

1.10 Diğer .NET Dilleri
C# en popüler .NET dilidir, ancak .NET programlarını yazmak için kullanılan birkaç diğer dil de vardır:


  • VB.NET - Visual Basic .NET (VB) .NET Framework’te çalışması için adapte edilmiş Basic dilidir. Microsoft Visual Basic 6’dan (Windows 3.1 ve Windows 95 için eski geliştirme ortamı) sonra geldiği kabul edilir. Garip sözdizimi vardır (C# geliştiricileri için), ancak genellikle C# gibi aynı işi yapar, sadece farklı sözdizimiyle. VB.NET’nin var olmasının tek sebebi tarihseldir: VB6’den sonra gelmiştir ve onun kendi sözdizimini devam ettirir. VB6 programcısı olmadığınız sürece önerilmez.

  • Managed C++ - C++ programlama dilinin .NET Framework için adaptasyonu. Hızlı bir şekilde mevcut C++ kodunu .NET'te kullanılmak üzere dönüştürmek gerekiyorsa yararlı olabilir. Yeni projeler için tavsiye edilmez. Bu kitabın okuyucuları için, C++ deneyime sahip olsanız bile tavsiye edilmez, çünkü .NET programlamayı gereksiz yere karmaşık yapar.

  • F # - .NET Framework içine işlevsel programlama paradigmasını koymak için bir deneme. (Fonksiyonel programlama gurusu olmadığınız sürece) hiç tavsiye edilmez.

  • JavaScript - WinJS teknolojisi aracılığıyla Windows 8 (Windows Store) uygulamaları geliştirmek için kullanılabilir. İyi JavaScript becerilerine sahip uzman HTML5 geliştiricileri için iyi bir seçim olabilir. Konsol uygulamalarını desteklemediği için bu kitabın okuyucuları için tavsiye edilmez.



Alıştırmalar


  1. Microsoft Visual Studio ve Microsoft Developer Network (MSDN) Kütüphanesi Dokümantasyonu’nu yükleyin ve kendinizi alıştırın.

  2. Standart .NET API belgelerinden (MSDN Kütüphanesi) System.Console sınıfının tanımını bulun.

  3. System.Console.WriteLine() metotunun açıklamasını ve değişik olası parametrelerini MSDN Kütüphanesi’nden bulun.

  4. Komut istemini (konsol) ve Visual Studio'yu kullanarak bu bölümdeki örnek programı derleyin ve çalıştırın.

  5. Farklı bir selamlama yazdırmak için örnek programı değiştirin, örneğin "İyi günler!".

  6. Konsol üzerinde adınızı ve soyadınızı bastıran bir konsol uygulaması yazın.

  7. Konsol üzerinde her biri yeni satırda olmak üzere aşağıdaki sayıları bastıran bir program yazın:1, 101, 1001.

  8. Konsol üzerinde geçerli tarih ve zamanı yazdıran bir program yazın.

  9. 12345 sayısının karekökünü bastıran bir program yazın.

  10. 2, -3, 4, -5, 6, -7, 8 dizisinin ilk 100 elemanını bastıran bir program yazın.

  11. Konsoldan şimdiki yaşınızı okuyup 10 yıl sonraki yaşınızı bastıran bir program yazın.

  12. C# ve .NET Framework arasındaki farkı açıklayın.

  13. En popüler programlama dillerinin bir listesini yapın. C# hangi bakımlardan onlardan farklıdır?


Bölüm 2. Temel Türler ve Değişkenler

2.1 Bölümün İçindekileri
Bu bölümde C# temel türleri ve değişkenleri ile tanışacağız – ne oldukları ve onlarla nasıl çalışılacağı hakkında. Önce veri türlerini dikkate alacağız – tamsayı türleri, gerçek türler ile kayan nokta, Boole, karakter, dize ve nesne türleri. Değişkenler ile devam edeceğiz, özelliklerini, nasıl bildirildiklerini, bir değerin nasıl atandığını, ve değişkenlere ilk değer atamanın yani başlatmanın ne olduğunu anlatacağız. İki çeşit C# veri türü ile tanışacağız – değer türleri ve referans türleri. Nihayet değişik türdeki değişmezleri ve onların kullanımını inceleyeceğiz.

2.2 Değişken Nedir?
Tipik bir program yürütme (çalıştırma) sırasında değişen çeşitli değerleri kullanır. Örneğin, kullanıcı tarafından girilen değerler üzerinde bazı hesaplamalar gerçekleştiren bir program oluşturabiliriz. Herhangi bir kullanıcı tarafından girilen değerler, açıktır ki, başka bir kullanıcı tarafından girilenlerden farklı olacaktır. Bu programı oluştururken, programcı, girdi olarak sunulacak değerlerden hangisinin girileceğini bilmiyor anlamına gelir, ve bunun gerektirdiği kullanıcı tarafından girebilen tüm olası değerleri işlemek için hesaplama yapmak demektir.
Bir kullanıcı hesaplama işleminde kullanılacak yeni bir değer girdiğinde, bilgisayarın rasgele erişim belleğinde (geçici olarak) onu koruyabilirsiniz. Belleğin bu bölümündeki değerler yürütme boyunca değişebilir ve bu nedenle – değişkenler olarak adlandırılır.

2.3 Veri Türleri
Veri türleri benzer özelliklere sahip değerlerin kümeleridir (aralıklarıdır). Örneğin byte türü [0 ... 255] aralığında tamsayılar kümesini belirtir.

2.3.1 Özellikleri
Veri türleri aşağıdakilerle karakterize edilir:


  • İsim – örneğin, int;

  • Boyut (ne kadar bellek kullandıkları) - örneğin, 4 bayt;

  • Varsayılan değer - örneğin 0.



2.3.2 Türler
C# temel veri türleri aşağıdaki türlerle belirlenmiştir:


  • Tamsayı türleri sbyte, byte, short, ushort, int, uint, long, ulong;

  • Gerçek kayan nokta türleri – float, double;

  • Ondalık hassasiyette gerçek tür – decimal;

  • Boole türü – bool;

  • Karakter türü – char;

  • Dize – string;

  • Nesne türü – object.


Bu veri türlerine temel türler denir (yerleşik türler), çünkü C# diline düşük seviyede gömülüdürler. Aşağıdaki tablo, yukarıda belirtilen veri türleri için geçerli veri aralıklarını ve varsayılan değerlerini gösteriyor:


Veri Türü

Varsayılan Değer

En Küçük Değeri

En Büyük Değeri

sbyte

0

-128

127

byte

0

0

255

short

0

-32768

32767

ushort

0

0

65535

int

0

-2147483648

2147483647

uint

0u

0

4294967295

long

0L

-9223372036854775808

9223372036854775807

ulong

0u

0

18446744073709551615

float

0.0f

±1.5×10-45

±3.4×1038

double

0.0d

±5.0×10-324

±1.7×10308

decimal

0.0m

±1.0×10-28

±7.9×1028

bool

false

İki olası değer: true ve false

char

'\u0000'

'\u0000'

'\uffff'

object

null

-

-

string

null

-

-



2.3.3 C# ve .NET Türleri Arasındaki İlişki
C# temel veri türleri ile .NET Framework’te bulunan ortak tür sisteminin (Common Type System: CTS) türleri arasında doğrudan ilişki vardır. Örneğin, C# int türü CTS System.Int32 türüne ve VB.NET dilinde Integer türüne karşılık gelirken, C# long türü CTS System.Int64 türüne ve VB.NET dilinde Long türüne tekabül etmektedir. .NET Framework ortak tür sistemi (CTS) sayesinde, farklı programlama dilleri arasında uyumluluk vardır (örneğin, C#, Managed C++, VB.NET ve F# gibi). Aynı nedenle C#’de bulunan int, Int32 ve System.Int32 türleri aslında tek ve aynı veri türü için gösterilen – işaretli 32-bit tamsayılar için farklı takma adlardır.

2.3.4 Tamsayı Türleri
Tamsayı türleri tamsayı numaralarını temsil eder ve sbyte, byte, short, ushort, int, uint, long ve ulong olarak tanımlıdır. Şimdi bunları teker teker inceleyelim.
sbyte türü 8-bitlik işaretli tamsayıdır. onun için olası değerlerin sayısı 28 dir, yani tümüyle 256 değer alabildiği anlamına gelir, ve her ikisi de, pozitif ve negatif olabilir. sbyte içinde saklanabilir en düşük değer, Sbyte.MinValue = -128 ( -27 ), ve en büyük değer Sbyte.MaxValue = 127 ( 27 – 1 ) 'dir. Varsayılan değeri 0 sayısıdır.
byte türü 8-bitlik işaretsiz tamsayı türüdür. Sadece negatif olmayan 256 farklı tamsayı değeri ( 28 ) vardır. Varsayılan değeri 0 sayısıdır. Minimum değeri Byte.MinValue = 0, ve en yüksek değeri Byte.MaxValue = 255 ( 28 – 1 ) 'dir.
short türü 16-bitlik işaretli tamsayıdır. Minimum değeri Int16.MinValue = -32768 ( -215 ), ve maksimum değeri Int16.MaxValue = 32767 ( 215 – 1 ) 'dir. short türü için varsayılan değer 0 sayısıdır.
ushort türü 16-bitlik işaretsiz tamsayıdır. Saklayabildiği en küçük değer UInt16.MinValue = 0 ve en büyük değer UInt16.MaxValue = 65535 ( 216 – 1 ) 'dir. Varsayılan değeri 0 sayısıdır.
Değerlendireceğimiz sonraki tamsayı türü int 'dir. 32-bitlik işaretli tamsayıdır. Anlaşıldığı gibi, bit sayısı arttıkça bir türün saklayabileceği olası değerler de artmaktadır. int için varsayılan değer 0 'dır. Minimum değeri Int32.MinValue = -2,147,483,648 ( –231 ), ve maksimum değeri Int32.MaxValue = 2,147,483,647 ( 231 – 1 ) 'dir.
int türü programlamada en sık kullanılan türdür. Programcılar genellikle tamsayılar ile çalışırken int kullanır, çünkü bu tür 32-bit mikroişlemci için doğaldır ve günlük yaşamda gerçekleştirilen hesaplamaların çoğu için yeterince "büyük"tür.
uint türü 32-bitlik işaretsiz tamsayı türüdür. Varsayılan değeri 0u veya 0U (ikisi eşdeğerdir) sayısıdır. 'u' harfi sayının uint (aksi takdirde int olarak anlaşılır) türünde olduğunu gösterir. Alabileceği en küçük değeri UInt32.MinValue = 0, ve en büyük değeri is UInt32.MaxValue = 4,294,967,295 ( 232 – 1 ) 'dir.
long türü varsayılan değeri 0l veya 0L (ikisi eşdeğerdir, ancak 'l' harfi '1' bir basamağı ile kolayca karıştırılabileceği için 'L' kullanılması tercih edilir) sayısı olan 64-bitlik işaretli türdür. 'L' harfi sayının long türüne (aksi takdirde int anlaşılmalıdır) sahip olduğunu göstermektedir. long türünde saklanabilen en küçük değer Int64.MinValue=-9,223,372,036,854,775,808 ( -263 ) ve en büyük değer Int64.MaxValue = 9,223,372,036,854, 775,807 ( 263 – 1 ) 'dir.
En büyük tamsayı türü ulong türüdür. Varsayılan değeri 0u veya 0U (ikisi eşdeğerdir) sayısı olan 64-bitlik işaretsiz türdür. 'u' eki sayının ulong türünde (aksi takdirde long anlaşılmaktadır) olduğunu gösterir. long türünde saklanabilen en küçük değer UInt64.MinValue = -0 ve en büyük değer UInt64.MaxValue = 18,446,744,073,709,551,615 ( 264 – 1 ) 'dir.

2.3.4.1 Tamsayı Türleri – Örnek

Tamsayı türünde bildiğimiz birkaç değişkeni bildiren, bu değişkenleri ilk değer atayarak başlatan ve değerlerini konsola bastıran bir örneği ele alalım:

// Bazı değişkenleri bildirelim

byte centuries = 20;

ushort years = 2000;

uint days = 730480;

ulong hours = 17531520;

// Konsola sonucu yazdıralım

Console.WriteLine(centuries + " centuries are " + years +

" years, or " + days + " days, or " + hours + " hours.");
// Konsol çıktısı:

// 20 centuries are 2000 years, or 730480 days, or 17531520

// hours.
ulong maxIntValue = UInt64.MaxValue;

Console.WriteLine(maxIntValue); // 18446744073709551615


Aşağıda yer alan "Değişkenleri Bildirmek" ve "Değişkenleri Başlatmak" Bölümleri’nde bir değişkenin bildirilmesini ve başlatılmasını detaylı olarak görmeniz mümkün olacaktır ve örnekler bunu daha açık hale getirecektir.

Yukarıdaki kod parçasında, tamsayı türlerinin kullanımını gösterdik. Küçük sayılar için byte türünü, ve çok büyük sayılar için – ulong türünü kullandık. Kullanılan tüm değerler pozitif sayılar olduğu için işaretsiz türleri kullandık.
2.3.5 Kayan Noktalı Gerçek Sayı Türleri
C# gerçek türleri matematikten bildiğimiz gerçek sayılardır. IEEE 754 Standartına uygun bir kayan nokta ile temsil edilirler ve float ve double olarak bulunmaktadır. Şimdi bu iki veri türünü detaylarıyla düşünelim ve aralarındaki benzerlikler ve farklılıklar nedir anlamaya çalışalım.
2.3.5.1 Gerçek Sayı Türü: Float
Değerlendireceğimiz birinci tür 32-bitlik gerçek kayan noktalı türü olan float olacak. Aynı zamanda tek duyarlıklı gerçek sayı olarak bilinir. Varsayılan değeri 0.0f veya 0.0F 'dır (her ikisi de eşdeğerdir). Sonuna konan 'f' karakteri açıkça sayının float türünde olduğunu gösterir (çünkü varsayılan olarak tüm gerçek sayılar double olarak kabul edilir). Bu özel sonek hakkında daha fazla bilgiyi "Gerçek Değişmezler" Bölümü’nde okuyabilirsiniz. Dikkate aldığımız tür yedi ondalık basamağa kadar doğruluğa sahiptir (diğerleri kaybolmuştur). Örneğin 0,123456789 sayısı float türü olarak tutulduğu takdirde, 0,1234568 olarak yuvarlanacaktır. float türüne dahil edilebilen değerler aralığı (7 önemli ondalık basamak duyarlığına yuvarlandığı takdirde) ±1.5 × 10-45 ile ±3.4 × 1038 aralığındadır.
2.3.5.2 Gerçek Sayı Türlerinin Özel Değerleri

Gerçek veri türleri gerçek sayı olmayan fakat bazı matematiksel soyutlamalar olan birkaç özel değere de sahiptir:

  • Negatif sonsuz –∞ (Single.NegativeInfinity). Örneğin -1.0f sayısı 0.0f tarafından bölündüğü zaman elde edilir.

  • Pozitif sonsuz +∞ (Single.PositiveInfinity). Örneğin 1.0f sayısı 0.0f tarafından bölündüğü zaman elde edilir.

  • Belirsizlik (Single.NaN) – Geçersiz bir işlem gerçek sayılar üzerinde yapıldığı anlamına gelir. Örneğin 0.0f sayısı 0.0f tarafından bölündüğü zaman, yada negatif bir sayının karekökünü hesaplarken elde edilir.


2.3.5.3 Gerçek Sayı Türü: Double
C# dilinde ikinci gerçek kayan noktalı türü double türüdür. Buna ayrıca çift duyarlıklı gerçek sayı da denir. 0.0d ve 0.0D varsayılan değerine sahip 64-bit türüdür ('d' soneki olarak zorunlu değildir çünkü C# dilinde tüm gerçek sayı türleri varsayılan olarak double olmaktadır). Bu tür 15 ila 16 ondalık basamak duyarlığına sahiptir. double türü için kaydedilebilen değerler (15-16 önemli ondalık basamak duyarlığına yuvarlandığında), ±5.0 × 10-324 ile ±1.7 × 10308 aralığındadır.
double türünün en küçük değeri Double.MinValue = -1.79769e + 308 sabiti ve en büyük değeri Double.MaxValue = 1.79769e+308 sabitidir. 0 pozitif sayısına en yakın double türü Double.Epsilon = 4.94066e-324 sayısıdır. double türündeki değişkenler de float türünde olduğu gibi bazı özel değerler alabilir: Double.PositiveInfinity (+∞), Double.NegativeInfinity (-∞) ve Double.NaN (geçersiz sayı).

2.3.5.4 Kayan Noktalı Gerçek Sayı Türleri - Örnek
Gerçek sayı türünde değişkenleri bildiren, bu değişkenlere değer atayan ve değerlerini konsola bastıran bir örnek aşağıda verilmiştir:

float floatPI = 3.14f;

Console.WriteLine(floatPI); // 3.14

double doublePI = 3.14;

Console.WriteLine(doublePI); // 3.14

double nan = Double.NaN;

Console.WriteLine(nan); // NaN

double infinity = Double.PositiveInfinity;

Console.WriteLine(infinity); // Infinity



2.3.5.5 Gerçek Sayı Türlerinin Duyarlılığı



Matematik belirli bir aralıkta sayısız tane gerçek sayı vardır (bu aralıktaki tamsayıların sayısı sınırlıdır), yani herhangi iki a ve b gerçek sayısı arasında a < c < b olan sayısız adet bir c sayısı vardır. Bunun sonucu olarak, bilgisayar belleğinde saklanabilen gerçek sayılar sınırlı bir doğruluk gerektirir.
Matematik ve fizik bilimleri çoğunlukla son derece büyük sayılarla (pozitif ve negatif), ve (sıfıra çok yakın) son derece küçük sayılarla çalıştığı için, bilgisayar ve elektronik cihazlardaki gerçek türler uygun şekilde saklanmalı ve işlenmelidir. Örneğin, fizik bilimine göre elektronun kütlesi yaklaşık 9.109389*10-31 kilogramdır ve 1 gram molekül maddede yaklaşık 6.02*1023 atom vardır. Her iki değer de float ve double türünde kolaylıkla saklanabilir.
Esnekliği sayesinde, gerçek sayıların modern kayan noktalı gösterimi bize çok büyük sayılar için (örneğin yüzlerce basamağı olan pozitif ve negatif sayılar) maksimum sayıda anlamlı basamak ile ve sıfıra çok yakın sayılarla (örneğin, ilk önemli basamağından önceki ondalık noktadan sonra yüzlerce sıfırı olan pozitif ve negatif sayılar) çalışmak olanağını veriyor.

2.3.5.6 Gerçek Sayı Türlerinin Doğruluğu - Örnek
Üzerinden geçtiğimiz C# dilinin gerçek türleri – float ve double sadece alabilecekleri farklı olası değerler aralığı bakımından değil ama aynı zamanda hassasiyetleri (koruyabildikleri ondalık basamak sayısı) bakımından da farklılık gösterirler. Birinci tür 7 basamaklı, ikinci tür 15-16 basamaklı bir hassasiyete sahiptir.
Gerçek sayı türünde bildiğimiz birkaç değişkeni bildiren, bu değişkenlere ilk değer atayarak başlatan ve değerlerini konsola bastıran bir örnek aşağıda verilmiştir. Örneğin amacı, aralarındaki doğruluk farkını açıklamaktadır:

// Declare some variables

float floatPI = 3.141592653589793238f;

double doublePI = 3.141592653589793238;
// Print the results on the console

Console.WriteLine("Float PI is: " + floatPI);

Console.WriteLine("Double PI is: " + doublePI);
// Console output:

// Float PI is: 3.141593

// Double PI is: 3.14159265358979

float olarak bildirilen π sayısının 7.nci basamağa kadar yuvarlandığını ve double olarak bildirilen π sayısının 15.nci basamağa kadar yuvarlandığını görüyoruz. double gerçek türünün float türüne göre daha fazla kesinlik içerdiği sonucuna varabiliriz, böylece ondalık noktadan sonra daha büyük bir hassasiyete ihtiyacımız varsa, onu kullanabileceğiz.
2.3.5.7 Gerçek Sayı Türlerinin Sunumu Hakkında
C# dilindeki gerçek kayan noktalı sayılar üç bileşenden oluşmaktadır (IEEE 754 Standartına göre): işaret (1 veya –1), mantis ve kuvvet (üs), ve bunların değerleri karmaşık bir formülle hesaplanır. Gerçek sayıların gösterimi hakkında daha detaylı bilgi "Sayısal Sistemler" Bölümü’nde verilmiştir. Burada veri türlerinin temsiline ve hesaplanabilen diğer veri türlerine derinlemesine bakacağız.
2.3.5.8 Gerçek Sayı Türleri ile Hesaplamalarda Hatalar
Gerçek kayan noktalı veri türleri ile hesaplamalarda alışılmamış davranışlar gözlemlemek mümkündür, çünkü belirli bir gerçek sayının gösterimi sırasında sık sık doğruluğun kaybedilmesine rastlanır. Bunun nedeni bazı gerçek sayıların 2'nin negatif güçlerinin toplamı olarak tam olarak temsil edilmesinde yetersiz kalınmasıdır. float ve double türleri tarafından doğru bir temsili olmayan sayılara örnekler 0.1, 1/3, 2/7 olarak verilebilir. İşte C# kayan nokta sayıları ile hesap hatalarını gösteren bir örnek C# kodu:

float f = 0.1f;

Console.WriteLine(f); // 0.1 (correct due to rounding)

double d = 0.1f;

Console.WriteLine(d); // 0.100000001490116 (incorrect)
float ff = 1.0f / 3;

Console.WriteLine(ff); // 0.3333333 (correct due to rounding)

double dd = ff;

Console.WriteLine(dd); // 0.333333343267441 (incorrect)

İlk örnekte, beklenmeyen sonucun nedeni 0,1 (yani 1/10) sayısının IEEE 754 gerçek kayan noktalı sayı formatında hiçbir doğru temsilinin olmamasıdır ve bu nedenle yaklaşık değeri kaydedilmiştir. Doğrudan yazdırıldığında sonuç yuvarlama nedeniyle doğru görünüyor. Yuvarlama sayının konsolda basılacak dize için dönüşümü sırasında yapılır. double türünden float türüne geçilirken, IEEE 754 biçimde sayının yaklaşık temsili daha belirgindir. Bu nedenle, yuvarlama, artık yanlış temsili gizlemez, ve sekizinci basamaktan sonra o hataları gözlemleyebilirsiniz.
İkinci durumda 1/3 sayısının hiçbir doğru temsili yoktur ve 0,3333333’e çok yakın bir sayıya yuvarlanır. Bu sayının değeri double türünde yazıldığında daha önemli basamak koruduğu için açıkça görülebilir.
Her iki örnek de kayan nokta sayı aritmetiğinin hatalar üretebilir olduğunu göstermektedir ve bu nedenle hassas finansal hesaplamalar için uygun değildir. Neyse ki, C# 0,1 gibi rakamları yuvarlama olmadan bellekte tutabilen hassas ondalık aritmetiği desteklemektedir.




float ve double türleri için tüm gerçek sayıların doğru temsili yoktur. Örneğin, 0,1 sayısı float türünde yuvarlanmış olarak 0,099999994 ile temsil edilir.



2.3.6 Ondalık Duyarlıklı Gerçek Sayı Türleri
C# sayıların ikili sistem yerine ondalık rakam sistemi vasıtasıyla temsil edildiği ondalık kayan nokta aritmetiğini destekler. Böylece C# dilindeki ondalık kayan nokta aritmetik türü kayan nokta sayılarını depolarken ve işlerken doğruluğunu kaybetmez.
C# dilinde ondalık duyarlıklı gerçek sayılar için veri türü 128-bitlik decimal türüdür. 28 – 29 ondalık basamağa kadar bir duyarlığı vardır. En küçük değeri -7.9×1028 ve en büyük değeri +7.9×1028 'dir. Varsayılan değeri 0.0m veya 0.0M 'dir. 'm' soneki sayının decimal türde olduğunu açıkça göstermektedir (çünkü varsayılan olarak tüm gerçek sayılar double türündedir). decimal türünde 0’a en yakın kaydedilebilen sayı ±1.0 × 10-28 'dir. decimal türünde ne çok büyük pozitif veya negatif sayıların ne de 0'a çok yakın sayıların saklanamayacağı açıktır. Ancak, finansal hesaplamalar için bu veri türü neredeyse mükemmeldir çünkü sayıları 10’un kuvvetlerinin toplamı olarak temsil eder ve yuvarlamadan kaynaklanan veri kayıpları ikili gösterim ile kullanıldığında çok daha küçüktür. decimal türündeki gerçek sayılar, finansal hesaplamalar için son derece elverişlidir – gelirler, vergiler, borçlar, faizler, ödemeler, vb. hesaplamalar.
decimal türünde bir değişkeni bildiren ve ona değer atayan bir örnek aşağıda verilmiştir:


decimal decimalPI = 3.14159265358979323846m;

Console.WriteLine(decimalPI); // 3.14159265358979323846


decimal türünde bildirdiğimiz decimalPI sayısı 1 pozisyon kadar bile yuvarlanmamıştır çünkü onu 21 basamaklı duyarlıkla kullandık ve bu da yuvarlatılmamış decimal türüne uyuyor.
Yüksek duyarlık ve hesaplamalar sırasında alışılmamış davranışların olmaması (float ve double türlerinde rastladığımız) nedeniyle doğruluğun önem arz ettiği finansal hesaplamalar için decimal türü son derece uygundur.




Daha küçük veri aralığına rağmen, decimal türünde saklanabilen tüm ondalık sayılar duyarlığını korur. Bu nedenle decimal türü hassas hesaplamalar için çok daha elverişli ve finansal olanlar için çok uygundur.


Gerçek kayan noktalı sayılar ve ondalık duyarlıklı gerçek sayılar arasındaki temel fark hesaplamaların doğruluğu ve hangi kapsama kadar saklanan değerlerin yuvarlandığıdır. double türü bize çok büyük değerler ve sıfıra çok yakın değerler ile çalışma olanağı sağlar ama doğruluktan fedakarlık ederek ve bazı tatsız yuvarlama hatalarına da göz yumarak. decimal türü daha küçük bir aralıkta çalışır ama hesaplamalarda daha fazla doğruluk sağlar, bunun yanı sıra ondalık sayılar ile anomalilere rastlanmaz.




Eğer para ile hesaplamalar yapıyorsanız float veya double yerine decimal türünü kullanın. Aksi halde hesaplamalar sırasında hoş olmayan anomaliler sonucunda hatalar ile karşılaşabilirsiniz!


decimal türünde tüm hesaplamalar doğrudan daha düşük bir mikroişlemci seviyesi yerine tamamen yazılım ile yapıldığı için bu tür için yapılan hesaplamalar double türü ile yapılan aynı hesaplamalardan onlarca ve yüzlerce kat daha yavaş çalışır, bu nedenle gerçekten gerekli olduğu zaman bu türü kullanınız.

2.3.7 Boole Türü
Boole türü bool anahtar sözcüğü ile bildirilir. İki olası değeri vardır: true ve false. Varsayılan değeri false olur. En sık olarak mantıksal ifadelerin hesaplama sonucunu depolamak için kullanılır.

2.3.7.1 Boole Türü – Örnek



Halen bildiğimiz türde birkaç değişkeni bildiren, bu değişkenlere ilk değer atayarak başlatan, onları karşılaştıran ve sonucu konsola bastıran bir örnek aşağıda verilmiştir:

// Declare some variables

int a = 1;

int b = 2;

// Which one is greater?

bool greaterAB = (a > b);

// Is 'a' equal to 1?

bool equalA1 = (a == 1);

// Print the results on the console

if (greaterAB)

{

Console.WriteLine("A > B");

}

else

{

Console.WriteLine("A <= B");

}
Console.WriteLine("greaterAB = " + greaterAB);

Console.WriteLine("equalA1 = " + equalA1);
// Console output:

// A <= B

// greaterAB = False

// equalA1 = True

Yukarıdaki örnekte, int tipinde iki değişken bildiriyoruz, bunları karşılaştırıyoruz ve bool türündeki greaterAB değişkenine sonucu atıyoruz. Benzer şekilde, equalA1 değişkeni için de aynı şeyi yapıyoruz. Değişken greaterAB değeri true ise, o zaman A > B konsola yazdırılıyor, aksi takdirde A <= B yazdırılıyor.


Yüklə 3,36 Mb.

Dostları ilə paylaş:
1   2   3   4   5   6   7   8   9   ...   31




Verilənlər bazası müəlliflik hüququ ilə müdafiə olunur ©muhaz.org 2024
rəhbərliyinə müraciət

gir | qeydiyyatdan keç
    Ana səhifə


yükləyin