Forum: D Programlama Dili RSS
out parametresi hakkında
zafer #1
Üye Tem 2009 tarihinden beri · 719 mesaj · Konum: Ankara
Grup üyelikleri: Üyeler
Profili göster · Bu konuya bağlantı
Konu adı: out parametresi hakkında
Aşağıdaki örnekte değişken tipi int olduğunda hiç bir sorun yokken. Değişken tipi double olduğunda dönüş değeri nan olarak görünüyor. Sorun ne olabilir?

import std.stdio;
 
void deneme(out double parametre) {
    parametre = parametre + 10;
    writeln("İşleve girildiğinde   : ", parametre);
}
 
void main()
{
    double değer = 100;
 
    writeln("İşlev çağrılmadan önce: ", değer);
    deneme(değer);
    writeln("İşlevden dönüldüğünde : ", değer);
}

Running ./d-test
İşlev çağrılmadan önce: 100
İşleve girildiğinde   : nan
İşlevden dönüldüğünde : nan

zafer@zafer-pc /depo/d-test $
https://github.com/zafer06 - depo
Avatar
zekeriyadurmus #2
Kullanıcı başlığı: Talha Zekeriya Durmuş
Üye Eki 2012 tarihinden beri · 702 mesaj · Konum: Samsun/Türkiye
Grup üyelikleri: Üyeler
Profili göster · Bu konuya bağlantı
Out kullanımında değişkeni okuma yetkisi yok sadece yazma yetkisi var diye biliyorum.

Parametre değişkenini okuyamadığın için geçersiz bir değeri de out olarak vermiş oluyorsun.

Zekeriya
Bilgi meraktan gelir...
acehreli (Moderatör) #3
Kullanıcı başlığı: Ali Çehreli
Üye Haz 2009 tarihinden beri · 4589 mesaj
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
Yanıtlanan mesaj #1
out parametreler otomatik olarak .init değeri ile ilklenirler; int için 0, double için nan...

Ali
acehreli (Moderatör) #4
Kullanıcı başlığı: Ali Çehreli
Üye Haz 2009 tarihinden beri · 4589 mesaj
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
out parametreler okunabilir.

Ali
zafer #5
Üye Tem 2009 tarihinden beri · 719 mesaj · Konum: Ankara
Grup üyelikleri: Üyeler
Profili göster · Bu konuya bağlantı
Anladığım kadarıyla söylenmek istenen parametrenin değerinin nan olmasından dolayı bir sayı ile toplamaya çalıştığımda yine nan değerini elde ediyorum. Şöyle bir şey;

import std.stdio;
 
void main()
{
    double parametre = double.init;
    parametre = parametre + 10;
 
    writeln("Beklenen sonuç: ", parametre);
}

Running ./d-test
Beklenen sonuç: nan

zafer@zafer-pc /d-test $

Sanırım fonksiyona girişte parametre değerini elle sıfırlamak bir çözüm olacaktır. Teşekkürler.
https://github.com/zafer06 - depo
kerdemdemir #6
Üye Eyl 2013 tarihinden beri · 152 mesaj · Konum: Danimarka
Grup üyelikleri: Üyeler
Profili göster · Bu konuya bağlantı
Ben anlayamadim pek

deneme(değer);

dediginde niye 100 atanmadi anlayamadim simdi. Bir bakayim bu out neymis diye. Ben hep C++ daki referansla ayni gibi birsey diye dusunuyordum. Biraz degisik bir mantigi var galiba.
kerdemdemir #7
Üye Eyl 2013 tarihinden beri · 152 mesaj · Konum: Danimarka
Grup üyelikleri: Üyeler
Profili göster · Bu konuya bağlantı
Ali abinin dedigini anladim simdi.

https://dlang.org/spec/function.html#parameters

void foo(out int x)
{
    // x is set to int.init,
    // which is 0, at start of foo()
}

int a = 3;
foo(a);

Acaba niye buna ihtiyac duyulurki? Bu kadar anahtar kelime olmasi cok kafa karistirici degil mi ?
acehreli (Moderatör) #8
Kullanıcı başlığı: Ali Çehreli
Üye Haz 2009 tarihinden beri · 4589 mesaj
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
Bence de gereksiz bir olanak ve fazla kullanıldığını görmüyorum.

.nan'ın hep .nan kalması ise güzel bir olanak çünkü böylece ilklenmemiş kesirli sayı değişkenlerini yakalayabiliyoruz. (Buna karşı çıkanlar da var: "keşke kesirli sayıların otomatik ilk değerleri de 0 olsaymış" derler.)

Ali
zafer #9
Üye Tem 2009 tarihinden beri · 719 mesaj · Konum: Ankara
Grup üyelikleri: Üyeler
Profili göster · Bu konuya bağlantı
Bende ikinci gruptayım. Tutarlılık açısından int değer sıfırlandığına göre double değerinide sıfır veya benzer bir başlanğıç değeri ile gelmesini beklerdim.
https://github.com/zafer06 - depo
acehreli (Moderatör) #10
Kullanıcı başlığı: Ali Çehreli
Üye Haz 2009 tarihinden beri · 4589 mesaj
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
Haklısın tabii. D'ciler ise geçersiz değere yerleri olmadığından tamsayı türlerinin şanssız olduklarını ve o yüzden ilk değer olarak mecburen 0 kullanmak gerektiğini düşünmüşler. (Walter, bool türünü de iki değerli bir tamsayı olarak görür ama ben o düşünceye katılmıyorum.)

Sonuçta, geçersiz değeri bulunan kesirli sayı ve karakter türleri 0'dan farklı ilkleniyorlar. Karakter türleri Unicode standardının belirlediği geçersiz değerlere sahipler:
  • char.init: 0xff
  • wchar.init: 0xffff
  • dchar.init: 0x0000ffff

Ali
Doğrulama Kodu: VeriCode Lütfen resimde gördüğünüz doğrulama kodunu girin:
İfadeler: :-) ;-) :-D :-p :blush: :cool: :rolleyes: :huh: :-/ <_< :-( :'( :#: :scared: 8-( :nuts: :-O
Özel Karakterler:
Bağlı değilsiniz. · Şifremi unuttum · ÜYELİK
This board is powered by the Unclassified NewsBoard software, 20100516-dev, © 2003-10 by Yves Goergen
Şu an: 2018-01-19, 21:22:51 (UTC -08:00)