Thread overview
out parametresi hakkında
Jan 03, 2018
zafer
Jan 03, 2018
zafer
Jan 04, 2018
kerdemdemir
Jan 04, 2018
kerdemdemir
Jan 12, 2018
zafer
January 03, 2018

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);
}

Alıntı:

>

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 $

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

January 03, 2018

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

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

January 03, 2018

out parametreler otomatik olarak .init değeri ile ilklenirler; int için 0, double için nan...

Ali

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

January 03, 2018

out parametreler okunabilir.

Ali

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

January 04, 2018

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);
}

Alıntı:

>

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.

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

January 04, 2018

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.

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

January 04, 2018

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 ?

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

January 04, 2018

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

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

January 12, 2018

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.

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

January 13, 2018

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

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]