Merhaba arkadaşlar,
İnsanlar için hafızanın önemi yadsınamaz
bir gerçek. Biz onunla bilir, onunla farkında olur, onunla analiz yapar, özetle
onunla yaşarız.
Fakat hayatta hafızadan mahrum olan
insanlar da vardır tabi.
Leonard Shelby, karısı öldükten sonra tüm
hayatını karısını öldüren adamı bulup ondan intikam almaya adar. Yalnız katili
belirleme aşamasında büyük bir zorlukla karşı karşıyadır. Leonard nadir görülen
ve tedavisi olmayan kısa süreli hafıza kaybı hastalığına yakalanmıştır. 15
dakikalık hafızaya sahiptir O. Eğer uzun cümleler kurarsa cümlenin başını
unutabilecek kadar hastadır hatta. Buna rağmen adalet arayışı sonucu çözümü de
bulmuştur. Hayatını vücuduna dövme şeklinde yaptığı ve ufak kağıtlara aldığı notlara göre yaşamaktadır. Hafıza
defteri (Memento) isimli film de adını Leonard'ın notlarından almaktadır.
Aklınızda tutamadığınız her bilgi,
Leonard gibi vücudunuza veya bir kağıt parçasına yazmıyorsanız eğer, yok olmaya
mahkumdur..
Bir deney..
Size şuan aklınızdan bir sayı tutun ve
daha sonra da tuttuğunuz sayı ile 8'i toplayın ve bana sonucu söyleyin desem ne
yaparsınız? Önce aklınızda tuttuğunuz sayıyı alır yanına 8'i koyarak toplama
işlemini yapar ve sonucu söylersiniz değil mi?
Gelin bu işin detaylarına inelim..
Sayı tutun dediğimde ilk yaptığınız işlem
onu unutmamak için ekstra bir konsantrasyonla sayının hafızanızda yer etmesini
sağlamak oldu. Eğer böyle bir çabanız olmasaydı bilgi boşlukta yok olup
gidecekti. Bu tıpkı enfes bir tabloyu duvara asmanıza benzer. Eğer duvarda çivi
yoksa güzelim tablo yere düşecektir. Dolayısıyla öncelikle duvara bir çivi
çakmalı ve sonrasında da tabloyu asmalısınız. Bilgiyi de hafızanızdan düşmesini
engelleyecek şekilde aklınıza çivilemelisiniz.
Bilgisayarlar.. İnsanı, onun akıl
yapısını, hayatını kendine model alırak onu taklit ederler.. Dolayısıyla
yukarıdaki senaryo bilgisayarlar için de geçerlidir.
Dikkat!.. Can alıcı nokta!
O halde ileride programımda kullanacağım
sayı veya değerleri bilgisayarın hafızasına yerleştirebilirsem balık hafızalı
programlar yerine çok ciddi projeler yazabilirim.
Peki bunu nasıl yaparım?
"Saklamak" sihirli
kelime..
Karşılaştığımız bu sorunun çözümü
yazılımdaki değişken kavramında gizlidir. Değişkenin kısa bir tanımını yapacak
olursak önümüzdeki sis bulutu biraz daha aralanmış olacaktır. Değişkenler,
programlarımızda kullanıcıdan aldığımız veya program içinde bizim ürettiğimiz
değerlerin yok olmasının önüne geçer. Değişkenler bizim değerlerimizi saklayan
kutular gibidir. Onlara ihtiyacımız olduğunda yanlarına gider, değeri alır veya
içine değer koyar programımıza kaldığı yerden devam ederiz.
Peki değişkenleri nasıl tanımlayabiliriz?
Size matematikten bir örnekle bunu
açıklayamaya çalışacağım ve ne kadar kolay olduğunu göreceksiniz..
Gelin matematikteki çok basit bazı
kuralları hatırlayalım..
Şuan matematikten konuşuyoruz. Size bir
soru sorsam, elimde bir x değişkeni var ve ben ona 2 değerini vermek istiyorum
desem bunu nasıl ifade edersiniz? "x = 2" olarak değil mi?
Kesinlikle!
Bakın C#'ta da değer tanımlaması aynen bu
şekilde yapılır. Soldaki değişken eşitliğin sağındaki değeri alır ve yoluna
devam eder.
Bu bilgiden sonra ilk değişken
tanımlamamızı yapalım.
string mesaj = "Merhaba";
Bunun anlamı şudur: aynen matematikteki
gibi isim değişkeni "Merhaba!" ya
eşittir. Buraya kadar herhangi bir sorun yok sanırım.
Yalnız aklınıza mesaj değişkeninin önüne
yazılmış olan string ifadesi takılmış olabilir. Bu ifade değişkenin tipini
göstermektedir. Hemen açıklayalım..
Öncelikle bir kaç soru..
1.
Adınız soyadınız
nedir?
2.
Yaşınız?
3.
Aylık kazancınız?
4.
Üniversite mezunu
musunuz?
C#'ta bilgiler işlerimizi kolaylaştırmak
için farklı veri tipleri ile saklanır. Örneğin ad ve soyad bilgisi alfanümerik
yani metinsel, yaşınız ise nümerik bir bilgidir dolayısıyla farklı bir tip ile
değeri saklanır. Aylık kazanç bilgisi ise parasal olduğundan bu veri tipi de
para birimi ile ilgili değişken tipinde tutulur. Son sorunun da cevabı yalnızca
doğru veya yanlış olabilen özel bir tür ile değeri tutulan bir veridir.
Önemli nokta.. Amaca göre değişken..
C#'ta farklı veri tiplerinin bulunmasının
ana nedeni ihtiyaçların farklı farklı olmasıdır. İhtiyaçlar göz önünde
bulundurularak her yazılımcının gereksinimini karşılayacak veri tipleri C#
içerisine konmuştur.
Bu veri tipleri nelerdir?
Sayısal veri tipleri
1- Tamsayılar;
byte : 0 - 255 arasında
değerler alır. byte bir değişkene 255 üzerinde bir değer atamanız durumunda
visual studio tarafında daha programınız derlenmeden hata alırsınız. Dikkat!
Değişken tiplerine
alabileceği kadar değerler vermek yazacağınız programın sorunsuz çalışmasına
katkı sağlayacaktır.
Bu tip ile hangi
veriler saklarım? Ayakkabı numarası, insanın yaşı vs bilgiler için byte veri
tipi biçilmiş kaftandır.
RAM yönetimi
açısından da byte veri tipinin sadece 8 bit yer kapladığını söylemek yararlı
olacaktır. Dolayısıyla byte ile degerini saklayabileceğiniz bir değişkeni daha
büyük değerleri de alabilen int gibi bir veri tipinde tutmak RAM'de daha fazla
yeri işgal etmenize neden olacaktır. Bu, yarım litre suyu 1 litrelik kova (burada
byte oluyor) yerine 4 litrelik kovada (bu da int veri tipidir) muhafaza etmek
gibi oluyor. Dolayısıyla bu durum kovanın koyulan yerde de daha fazla yer
kaplamasına neden olacaktır. Günümüz bilgisayarlarında RAM kapasitelerinin çok
yüksek seviyelere getirildiğini biliyoruz.
Ancak buna rağmen RAM yönetimi konusunda olabildiğimiz kadar cimri
davranmalıyız. Bu durum daha hızlı çalışan programlar olarak bize geri dönüş
sağlayacaktır.
sbyte
: byte veri tipinde negatif değerler tutmamız mümkün değildir. Örneğin
-10 değerini bir değişkende tutmak isterseniz ne yaparsınız?
Bu ihtiyaç göz
önünde bulundurulmuş ve negatif değerler de alabilen 'signed byte' (işaretli byte) veri tipi
oluşturulmuştur. Bu veri tipinde saklayabileceğiniz değer aralığı -128 ile +127 'dir.
RAM'de kapladığı
yer de byte gibi 8 bit'tir.
short
: Basit bir toplama işlemi yaptığınızı düşenelim. Sonuç ortalama olarak
1000 civarında çıkıyor. Bu toplam değerini hangi değişkende tutarız? Şuana
kadar gördüğümüz byte ve sbyte kabul edersiniz ki bu konuda aciz kalıyor. Evet
bu gibi 255'ten daha büyük değerler için short veri tipi imdadımıza yetişen bir
kurtarıcı gibidir.
short veri tipi
-32.768 ile 32.767 arasında değer alabilir.
RAM'de kapladığı
alan 16 bit'tir.
ushort
: Bazen negatif
sayılar hesaplamalarınıza dahil olmayabilir. Siz yapacağınız işlemlerde sürekli
pozitif sayılarla çalışacak olabilirsiniz. Bu durumda işaretsiz short (unsigned
short) veri tipi hizmetinize sunulmuştur. Söz konusu veri tipi 0 ile 65.535'e
kadar değerler alır.
int : Programlarımızın
prensi olan ve sayısal veriler için en çok kullanılan veri tipidir. int veri
tipi short'a göre daha büyük değerler alabiliyor olması sebebiyle programcılar
tarafından tercih edilir. int -2.147.483.648 ile 2.147.483.647 arasında
değerler alabilir.
RAM'de kapladığı alan 32 bit'tir.
uint : int veri tipinin
işaretsiz hali (unsigned int) yani yalnızca pozitif sayılar için üretilmiş
versiyonudur. Söz konusu veri tipi 0 ile 4.294.967.295 arasında değerler
saklayabilir.
long : Çok çok büyük
sayıları saklamak için kullanılır. long veri tipi -9.223.372.036.854.775.808
ile 9.223.372.036.854.775.807 arasında değerler alabilir.
RAM'de kapladığı alan 64 bit'tir.
ulong
: long veri tipinin işaretsiz halidir. Sadece pozitif değerler alabilir.
Alabileceği değer aralığı 0 ile 18.446.744.073.709.551.615 arasındadır.
2- Ondalıklı Sayılar
double
: İki sayıyı böldüğünüzü düşünelim, örneğin sonuç da '2,3' gibi bir
değer çıktı. Bu değeri nasıl tutarım? Bu zamana kadar biz tamsayıları
inceledik. Eğer bir tamsayı veri tipinde bu değeri tutmaya kalkışırsanız
tamsayı veri tipi doğası gereği virgülden sonrasını almayacak ve bu değeri 2
olarak saklayacaktır. Bu durum da ince hesapların karışmasına neden olarak
başınızı baya bi ağırtacaktır. Böyle bir eksiklik double türü ile
giderilmiştir. Bu tip ondalıklı sayıları saklayabilmeniz için yaratılmıştır.
Özellikle matematiksel işlemlerde, bölüm sonucu yansıtmak ve bunun benzeri
işlerde sıklıkla kullanılan bir tiptir.
RAM'de 64 bit yer
kaplar.
decimal
: Hatırlarsanız veri tiplerine giriş yapmadan önce 4 soru sormuştum.
Bunların 3.'sü maaşınızın ne kadar olduğu ile ilgiliydi. Bu tip soruları
kullanıcıya yönelttikten sonra kullanıcının gireceği değeri decimal veri
tipinde tutarsınız. Çünkü söz konusu veri tipi parasal değerler için özel
olarak üretilmiştir. Özellikle bankalara ait programlarda bu veri tipi sıkça
kullanılır.
RAM'de 128 bit yer
kaplar.
float : double veri tipinden daha hassas davranır. Virgülden sonra daha çok
basamak gösterir ve daha çok grafiksel işlemlerde kullanılır.
RAM'de kapaladığı
alan 32 bit'tir.
Karaktersel veri
tipleri
char : Bankalar açısından
anne kızlık soyadının ilk harfi büyük önem taşımaktadır. Bankada çalışan
görevliler çok işlemde bankaya müracat eden müşterilerine bu soruyu
yöneltirler. Peki biz tek bir karakter saklamamız gerektiğinde hangi veri
tipini kullanırız?
Şuana kadar gördüğümüz veri tiplerinin
hepsi sayısaldı. Burada ise amacımız çok farklıdır. Bir karakter tutmak
istediğinizde size yardımcı olacak veri tipi char'dır. İçinde bir harf yani
karakter saklar.
string
: Adınız, soyadınız, yaşadığınız şehir, mezun olduğunuz okullar,
hobileriniz, vs. bilgiler tek bir karakterden ziyade karakterler bütünüdür.
Böyle bir veri de ancak şuana kadar incelemediğimiz bir veri tipinde
tutulabilir. Çünkü dikkat ederseniz saklayacağımız olan değer tek bir karakter
yerine karakterler bütününden oluşmaktadır. Buradaki gereksinim yeni bir veri
tipini ortaya çıkarmıştır. O da string anahtar kelimesi ile temsil edilir.
Sayısız miktarda harf içerebilir, karaktersel veri tipleri içinde en çok
kullanılan tiptir.
Mantıksal veri tipleri
bool : Arabanız var mı? İstanbul'da mı yaşıyorsunuz? Lise mezunu musunuz?
Sigara kullanır mısınız? vs vs sorular çoğaltılabilir. Dikkat ederseniz bu soru
cevaplarının iki ihtimali var. Karşı taraf bu soruları ya evet ya da hayır
olarak yanıtlayacaktır. Böyle durumlarda bizim de evet veya hayır alabilen bir
değişkene ihtiyacımız var değil mi? Kesinlikle!
bool veri tipinin
ortaya çıkışında da bu ihtiyaç yatmaktadır arkadaşlar. Bu veri tipi true(doğru)
ve false(yanlış) olarak iki değer alabilmektedir.
Sınıflama dışı bir veri tipi
object : Bazı sinema
oyuncuları hakkında, her rolün oyuncusu gibi sözler duyarız. Hatta bazen
futbolda veya diğer sporlarda da yaşanır bu, spor yorumcuları başarılı bir
oyuncu için hangi mevkiye koyarsan koy en iyi şekilde oynar diye yorumlar
yapar. Bahsi geçen oyuncular gerektiği yerlerde farklı kişiliklere bürünerek
görevlerini en iyi şekilde yaparlar.
object veri tipi de aynen böyledir. Tüm
değerlerin atası olarak da niteleyebileceğimiz bu tip içine her türden değeri
alabilmektedir.
object ile birlikte yazımızın sonuna da
iyice yaklaştık..
Sonuç olarak kullanıcıdan aldığım değerleri
programımda kullanamıyorum veya programım içinde üretilen değerleri
kaybediyorum diyorsanız bir hastalığa yakalandığınız kesin..
Yakalanmış olduğunuz hastalık yazılım
dilinde "değişkensizlik sendromu" olarak adlandırılan bir vak'adır.
C#'taki reçeteniz int, string, double vs türünden veri tiplerini kullanmak..
Bi doktordan tavsiye, program yazarken
değişkenlerinizi yanınıza alın ve gerektiği yerde kullanmaktan sakınmayın..
Bir sonraki yazımızda görüşmek dileğiyle.
Sağlıklı günler..
2 yorum:
Yine çok güzel bir makale olmuş Keyifle okudum. Emeğine ve ellerine sağlık. Yeni yazılarını beklemeye devam ediyorum.
İbrahim KILIÇ
Kardeşim yorumların beni mutlu etmekle birlikte bu işe daha da motivasyonlu bir şekilde sarılmamı sağlıyor. Çok teşekkürler..
Yorum Gönder