Blogger tarafından desteklenmektedir.

Java — Değer ve Referans Veri Tipleri



GÜNCELLEME NOTU: Bu ve diğer yazılar tamweblik.com adresine taşınmıştır. İgili yazının güncel halini buraya tıklayarak görüntüleyebilirsiniz.

 

En popüler programlama dillerinden biri olan Java’yı öğrenmeye çalışıyoruz ve karşımıza sürekli “değişken”, “veri tipi; değer tip, referans tip” gibi tanımlar çıkıyor. Peki nedir bu değer ve referans tip değişkenler? Bir programlama dili için veri denen olgu nedir? Bir harf ya da rakam mı yoksa bir elektrik sinyali mi? Gelin bu kavramların Java dili için ne anlam ifade ettiğini hep birlikte anlamaya çalışalım.

Programlamada Değişken (Variable) Nedir?

Programlamada bir işlemi gerçekleştirmek için ilk olarak işlemde kullanacağımız sayısal, metinsel veya mantıksal verileri programın hafızasına kaydetmemiz ve işlem anında o veriyi hafızadan okumamız/çağırmamız gereklidir. İşte hafızaya kaydedilen her türlü verinin; tipi, ismi, işlemde kullanılacak değeri ve tipine göre hafızada tutulduğu yerin referans/adres bilgilerini taşıyan yapıya “değişken” denir.

 

Pekiştirmek için gelin bisküvi ve gazoz almaya bir markete gidelim. Evet kremalı bisküviyi bulduk ve etiketinde 8 TL yazdığını gördük. Gazozu da bulduk ve etiketinde 12.50 TL yazdığını gördük. Hafızamızda toplama işlemini yaptık ve 20.50 TL ödeyeceğimiz sonucuna vardık.

Bu sürecin kodlarını yazdığımız programdaki karşılığını şöyle açıklayabiliriz: Programımızda bisküvi adında bir değişken oluşturduk ve ona 8 değerini atadık. Aynı şekilde gazoz değişkenini oluşturup ona da 12.50 değerini atadık. Sonrasında hafızamızda ödeyeceğimiz tutar için “toplam” adında bir yer oluşturduk ve yaptığımız işlem sonucu bulduğumuz 20.50 değerini de oraya atadık.

 

İşte bu çerçevede her biri için geçerli olmak üzere hafızamızda oluşturduğumuz ve bisküvi diye isimlendirdiğimiz yapıya “değişken”, bu değişkenin değeri olarak hafızamıza kaydettiğimiz sayılara da “veri” diyebiliriz. Bu olayı Java dilinde yazacak olursak;

int biskuvi = 8; //tam sayı

double gazoz = 12.5; //kesirli sayı

double toplam = 20.5; //kesirli sayı (toplam = bisküvi + gazoz)


*****

Java programlama dili, değişken tanımlama konusunda katı bir dildir. Bu durum Java’ da bir değişken tanımlarken, mutlak suretle değişkenin veri tipinin ve isminin belirtilmesini gerekli kılar.

*****


Değişkenlerin taşıdığı bilgileri belleğe/hafızaya kaydediyoruz dedik. Bu hafıza dediğimiz yapı, programı çalıştırdığımız cihazın rastgele erişimli belleği, yani RAM’ dir. Belleğin, yazdığımız tüm kodları sakladığı stack ve heap denilen kısımları vardır. Stack için kısaca boyutları belli sabit değerlerin saklandığı kısım, heap için de değişken değerlerin saklandığı kısım denilebilir.

Java’ da Kullanılan Veri Tipleri

Değişkenin ne olduğunu anladığımıza ve bellek kısımlarına az da olsa değindiğimize göre, şimdi Java’ da kullanılan veri tiplerine bakabiliriz.

Java da veri tipleri genel hatlarıyla değer tip (ilkel tip) ve referans tip olarak ikiye ayrılır. Bu genel ayrım, veri türünün bellekte tutulduğu yere göre belirlenmektedir.

Değer Tip (İlkel — Primitive)

İlkel veri tipleri diye tanımlanan byte, short, int, long, float, double, char ve boolean türündeki değişkenler, eğer bir nesneye ait değilseler, değerleriyle birlikte belleğin stack olarak adlandırılan bölümünde saklanırlar. Örneğin int elifinBoyu = 170; şeklinde tanımladığımız ilkel tip bir değişken, belleğin stack diye adlandırılan bölümünde elifinBoyu adında 32 bit’ lik bir alan ayrıldığı ve o alana 170 tamsayı değerinin kaydedildiği anlamına gelir. Bu değişkeni “Elif’ in boyunun değeri 170' tir.” şeklinde okuyabiliriz.

Referans Tip (Non-Primitive)

Referans veri tipleri, programımızda oluşturduğumuz bir nesnenin bellekte depolandığı yeri belirten adres bilgisini tutarlar. Java da sınıflar ve diziler referans veri tipine örnektirler. Öyle ki, oluşturulup başlatılan her sınıf nesnesi için belleğin heap kısmında bir alan ayrılır. Nesne içerdiği bilgilerle birlikte heapte kendisine ayırılan bu alanda tutulur. Bu alanın belleğin neresinde olduğunun bilgisi, yani bir nevi adresi de belleğin stack kısmında tutulur.

Bu konuyu da günlük yaşamdan bir örnekle açıklayalım. Diyelim ki bir arkadaşımızın evinin salonunda oturmuş TV izlerken canımız atıştırmalık kuru yemiş istedi. Arkadaşımıza kuru yemiş var mı diye sorduk ve o da yerini tarif etti. Tarif edildiği şekilde mutfağa gidip kiler dolabının en üst rafında istediğimiz kuru yemişi bulduk. Bir de seslenip kase sorduk ve mutfak dolabındaki yerini öğrenip kaseyi oradan aldık. Kuruyemişleri kaseye koyduk ve salona döndük. Bu süreçte neler oldu? Programımızda atıştırmalık sınıfından bir nesne oluşturulmuş ve adına kuru yemiş denmiş. Belleğin stack kısmında yani arkadaşımızda kuru yemişin nerede olduğu bilgisi var. Stackten referans adresi alıp belleğin heap kısmına yani mutfağa gidip, belirtilen adreste kuru yemiş nesnesini bulduk. Kuru yemiş nesnesini kase nesnesine koymayı düşündüğümüzde de aynı şekilde tabak çanak sınıfından oluşturulmuş kase nesnesinin heapteki (mutfaktaki) yerini belirten referans bilgisini stackten (arkadaşımızda) öğrenip, kase nesnesini almış olduk.

 
Programlama ile haşır neşir olunan ilk zamanlarda, ilkel veri tipinde

int a = 54;

şeklinde tanımlanmış bir değişkeni okurken, “a’nın değeri 54' tür” diye okumak ve

int[] sayilar = new int[]{22, 54, 34};

şeklinde tanımlanmış referans tip bir değişkeni de, “sayılar adresindeki dizinin elemanları 22, 54 ve 34'tür” şeklinde okumak, değer ve referans tipleri karıştırmama konusunda yardımcı olabilir diye düşünüyorum.

Umarım programlamaya yeni başlayanlar için aydınlatıcı olmuştur, kodlarınız bol olsun.



Hiç yorum yok