Programlama

Call By Reference

03.01.2008

Efendim yazma peiyodumuz oldukça uzadı bari yazmışken düzgün bir şeyler yazalım kaygısıyla şöyle teknik olarak siz okuyucularımı bilgilendirecek bir şeyler yazmak ister bu gönül. Bugünkü konumuz da Call By Reference yani türkçesi ile Referans Olarak Çağırma. Şimdi nedir bu Referans olarak Çağırma? (Referans olarak Atama şeklinde de söylenir).

Bu şudur efendim:

Şimdi diyelim ki sizin güzel bir fonksiyonunuz var. Bu fonksiyonun da çok şık bir parametresi mevcut. Yalnız bu parametre o kadar güzel bir parametre ki bu fonksyonu kullandığınız zaman bu parametreye atadığınız değer fonksiyon içerisinde değişiyorsa (başka bir değer alıyorsa) fonksiyondan değişik halde çıkıyor ve hayatına böyle devam ediyor. İşte böyle büyülü bir olay Call By Reference! Şimdi böyle kuru kuru bir b.k anlamayanlar olacaktır elbet. Şöyle güncel C# diliyle bir örnek vermek ister bu deli gönül:

Değer Olarak Atama (Call By Value) :

function degistir(int a)
{
    a = 18;
}

int b = 10;
degistir(b);
Console.WriteLine(b); // Sonuc 10 yani fonksiyon içerisinde atanan deger olmadı.

Bakınız bu fonksiyon Call By Value kullanarak aldığı a değişkeninin bir örneğini oluşturuyor. Ve artık ne yaparsa bu oluşturduğu örnek üzerinde yapıyor ve fonksiyon bitiminde bu örneği atıyor çöpe. Oysa ki;

Referans Olarak Atama (call By Reference) :

function degistir(ref int a)
{
    a = 18;
}

int b = 10;
degistir(b);
Console.WriteLine(b); // Sonuc 18 yani referans olarak atanan b değişime uğradı.

İşte bu harika örnekte "ref" anahtar kelimesi kullanılmak suretiyle Referans olarak atanan b değişkeni fonksiyon içerisinde 18 değerini almıştır. Yani referans olarak atama işleminde örnek oluşturulmaz doğrudan o değişken üzerinde işlem yapılır.

Yani böyle işte sayın okuyucular. Gelin şimdi de hangi dilde bu işin nasıl yapıldığına bakalım. Dilden dile o kadar fark ediyor ki bu meret şaşar kalırsınız :)

C# 'da yukarıdaki örnekde olduğu gibin "ref" anahtar kelimesi ile. Bir de "out" var ve ref'den farklı olarak ilk değer almamış olan değişkenleri için kullanılıyor.

Java'da durum çok dertli. Bütün her şey Değer Olarak Atama kullanıyor. Yalnız kendi sınıfınızı yazıp onun bir üyesini ayarladıktan sonra sonra değişken parametre olarak atarsanız ve atadığınız object'in üyelerini fonksyion içinde değiştirirseniz ahanda değişmiş olarak çıkıyor! yoksa kıçınızı yırtsanız nafile :)

PHP'de function deneme(&$degisken) olarak yazıyoruz.

C++'da void (int& a);

C'de void (int* a); // değişken olarak &b gibi adresini göndermemiz gerekiyor.

Javascript'de de Java'da olduğu gibi Object kullanıyorsunuz. a.deger = 10; diyip a'yı gönderiyoruz mesela.

Falan filan işte okuyun anasını satayım uf amma yazdım be!:)

Bunları da Oku, Sorucam

Yorum Yok

Yorum Yaz