Değer döndüren ve döndürmeyen fonksiyon farkı nedir?

TFoxT

Decapat
Katılım
23 Kasım 2018
Mesajlar
18
1546773681650.png


Şimdi 2 tane fonksiyon oluşturdum fakat ikisi de aynı olayı gerçekleştiriyor, bu değer döndürmek tam olarak neyi kastediyor? Void değer döndürmüyorsa ben X ve Y parametresini hesaplayıp tekrardan ekrana yazdırabiliyorum. İnt fonksiyonun değer döndürmesi o zaman ne oluyor, ikisi de aynı işlemi yapmış olmuyor mu? Kilit noktasını bir türlü anlamıyorum.
 
Son düzenleyen: Moderatör:
Sen toplama yaptiktan sonra onu print ile ekrana yazdirmak istemiyorsun diyelim. Varsayalim ki bir dosyaya yazdirmak istiyorsun. 2 gun sonra fikir degistirdin, network'te baska bir bilgisayara gondermek istiyorsun. Hepsi icin tek tek "void" bir fonksyon yazmazsin.

Toplama islemi 2 sayiyi alir; matematiksel bir uygulama yapar sana tek bir skaler sonuc verir. En az 2 inputu olan ve 1 tane outputu olan bir fonksiyon dur toplama. O yuzden toplamayi bir "int" fonksiyonu olarak tanimlayabilirsin.

Ancak her islem sonucunda bir karsilik beklemezsin. Ekrana bir sey yazdirmak gibi. Ornegin kullandigin printf() fonksyonu void 'dir. Input alir, output vermez.

Programlama yaparken dizayn ettigin fonksyon her neyse, sana vermesini istedigin sonuc onun "return" edecegi sey olur.

Daha teknik tabirle, stack'te bulunan her fonksyon/metod cagrisinin, ilgili signature'a gore sana return etme garantisi bulunur. "void" tanimli olan stack cagrilarinin return ettigi deger stack'te allocate edilmez. Bu sebeple cogu C benzeri dillerde void metodlarda "return" keyword' unu kullandiginda programin compile/runtime hatasi vermez.

Yani

void foo(){
// biseyler
return;
}

yazabilirsin. Bu fonskyonu isleyen thread return eder, ama ettigi deger "void" dir. Null degil, void.
 
Son düzenleme:
Sen toplama yaptiktan sonra onu print ile ekrana yazdirmak istemiyorsun diyelim. Varsayalim ki bir dosyaya yazdirmak istiyorsun. 2 gun sonra fikir degistirdin, network'te baska bir bilgisayara gondermek istiyorsun. Hepsi icin tek tek "void" bir fonksyon yazmazsin.

Toplama islemi 2 sayiyi alir; matematiksel bir uygulama yapar sana tek bir skaler sonuc verir. En az 2 inputu olan ve 1 tane outputu olan bir fonksiyon dur toplama. O yuzden toplamayi bir "int" fonksiyonu olarak tanimlayabilirsin.

Ancak her islem sonucunda bir karsilik beklemezsin. Ekrana bir sey yazdirmak gibi. Ornegin kullandigin printf() fonksyonu void 'dir. Input alir, output vermez.

Programlama yaparken dizayn ettigin fonksyon her neyse, sana vermesini istedigin sonuc onun "return" edecegi sey olur.

Daha teknik tabirle, stack'te bulunan her fonksyon/metod cagrisinin, ilgili signature'a gore sana return etme garantisi bulunur. "void" tanimli olan stack cagrilarinin return ettigi deger stack'te allocate edilmez. Bu sebeple cogu C benzeri dillerde void metodlarda "return" keyword' unu kullandiginda programin compile/runtime hatasi vermez.

Yani

void foo(){
// biseyler
return;
}

yazabilirsin. Bu fonskyonu isleyen thread return eder, ama ettigi deger "void" dir. Null degil, void.

Evet konuyu açtıktan 10 dk sonra olayı çözdüm bir nevi aslında basit mantık fakat çok fazla değişik makaleye bakınca inanılmaz kafam karıştı sizce mantığı doğrumu anlamışım ?
1546776527719.png
 
Valla cizgilerle tam olarak ( neden 2 renk? ) ne belirtmek istedigini anlamasam da, dogru yoldasin gibi duruyor : )
 
Sen toplama yaptiktan sonra onu print ile ekrana yazdirmak istemiyorsun diyelim. Varsayalim ki bir dosyaya yazdirmak istiyorsun. 2 gun sonra fikir degistirdin, network'te baska bir bilgisayara gondermek istiyorsun. Hepsi icin tek tek "void" bir fonksyon yazmazsin.

Toplama islemi 2 sayiyi alir; matematiksel bir uygulama yapar sana tek bir skaler sonuc verir. En az 2 inputu olan ve 1 tane outputu olan bir fonksiyon dur toplama. O yuzden toplamayi bir "int" fonksiyonu olarak tanimlayabilirsin.

Ancak her islem sonucunda bir karsilik beklemezsin. Ekrana bir sey yazdirmak gibi. Ornegin kullandigin printf() fonksyonu void 'dir. Input alir, output vermez.

Programlama yaparken dizayn ettigin fonksyon her neyse, sana vermesini istedigin sonuc onun "return" edecegi sey olur.

Daha teknik tabirle, stack'te bulunan her fonksyon/metod cagrisinin, ilgili signature'a gore sana return etme garantisi bulunur. "void" tanimli olan stack cagrilarinin return ettigi deger stack'te allocate edilmez. Bu sebeple cogu C benzeri dillerde void metodlarda "return" keyword' unu kullandiginda programin compile/runtime hatasi vermez.

Yani

void foo(){
// biseyler
return;
}

yazabilirsin. Bu fonskyonu isleyen thread return eder, ama ettigi deger "void" dir. Null degil, void.
Çok güzel anlatmışsınız ama bir yerde hata var printf fonksiyonunun void olduğunu söylemişsiniz ama printf int bir fonksiyondur prototipi de şu şekildedir: int printf(const char *format, ...);
Geriye döndürdüğü değerde içerideki değerin karakter sayısı kadar.
 

Geri
Yukarı