08.11.2014 Views

c_kitap

c_kitap

c_kitap

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

C ve Sistem Programcıları Derneği - C Ders Notları - Necati Ergin<br />

İşlevlerin Geri Dönüş Değerleri<br />

Bir işlevin yürütülmesi sonunda onu çağıran işleve gönderdiği değere, işlevin geri dönüş<br />

değeri (return value) denir. Her işlev bir geri dönüş değeri üretmek zorunda değildir. Bir<br />

işlev yapacağı bir işle ilgili olarak bir geri dönüş değeri üretir ya da üretmez.<br />

İşlevlerin geri dönüş değerleri farklı amaçlar için kullanılabilir:<br />

1. Bazı işlevler zaten tek bir değeri elde etmek, tek bir değeri hesaplamak amacıyla<br />

tanımlanırlar. Elde ettikleri değeri de kendilerini çağıran işlevlere geri dönüş değeri olarak<br />

iletirler. Bir küpün hacim değerini bulan bir işlev tanımladığımızı düşünelim. Böyle bir<br />

işlev, hacmini bulacağı küpün kenar uzunluğunu çağrıldığı yerden alır, bu değeri<br />

kullanarak hacim değerini hesap eder, hesap ettiği değeri dışarıya geri dönüş değeri<br />

olarak iletebilir.<br />

2. Her işlevin amacı bir değer hesaplamak değildir. Bazı işlevler ise çağrılmalarıyla<br />

kendilerine sorulan bir soruya yanıt verirler. Örneğin bir sayının asal olup olmadığını<br />

sınayan bir işlev tanımlandığını düşünelim. İşlev çağrıldığı yerden, asallığını sınayacağı<br />

değeri alır. Tanımında bulunan bazı kodlar ile sayının asal olup olmadığını sınar. Sayının<br />

asal ya da asal olmamasına göre dışarıya iki farklı değerden birini geri dönüş değeri<br />

olarak gönderebilir. Bu durumda işlevin geri dönüş değeri, hesap edilen bir değer değil,<br />

sorunun yanıtı olarak yorumlanacak bir değerdir.<br />

3. Bazı işlevler ise ne bir değeri hesaplamak ne de bir soruya yanıt vermek için<br />

tanımlanırlar. Tanımlanma nedenleri yalnızca bir iş yapmaktır. Ancak işlevin yapması<br />

istenen işin, başarıyla yapılabilmesi konusunda bir garanti yoktur. Örneğin bir dosyayı<br />

açmak için bir işlev tanımlandığını düşünelim. İşlev çağrıldığı yerden açılacak dosyanın<br />

ismi bilgisini alıyor olabilir. Ancak dosyanın açılabilmesi çeşitli nedenlerden dolayı<br />

güvence altında değildir. Çağrılan işlev istenen dosyayı ya açar ya açamaz. İşlev geri<br />

dönüş değeriyle yaptığı işin başarısı hakkında bilgi verir. Bu durumda işlevin geri dönüş<br />

değeri, hesap edilen bir değer değil, yapılması istenen işin başarısı konusunda verilen bir<br />

bilgi olarak yorumlanır.<br />

4. Bazı işlevler hem belli bir amacı gerçekleştirirler hem de buna ek olarak amaçlarını<br />

tamamlayan bir geri dönüş değeri üretirler. Bir yazı içinde bulunan belirli bir karakteri<br />

silecek bir işlev tasarlandığını düşünelim. İşlevin varlık nedeni yazının içinden istenen<br />

karakterleri silmektir. Çağrıldığı yerden, silme yapacağı yazıyı ve silinecek karakterin ne<br />

olduğu bilgisini alır ve işini yapar. Ancak işini bitirdikten sonra yazıdan kaç karakter silmiş<br />

olduğunu geri dönüş değeri ile çağrıldığı yere bildirilebilir.<br />

5. Bazı işlevlerin ise hiç geri dönüş değerleri olmaz.<br />

i) İşlevin amacı yalnızca bir işi gerçekleştirmektir, yaptığı işin başarısı güvence altındadır.<br />

Örneğin yalnızca ekranı silme amacıyla tasarlanmış olan bir işlevin geri dönüş değerine<br />

sahip olması gereksizdir. Sistemlerin çoğunda çıktı ekranının silinmesi konusunda bir<br />

başarısızlık riski yoktur.<br />

ii) İşlev dışarıya bir değer iletir ancak değeri iletme işini geri dönüş değeri ile değil de<br />

başka bir aracı kullanarak gerçekleştirir.<br />

İşlevlerin geri dönüş değerlerinin de türleri söz konusudur. İşlevlerin geri dönüş değerleri<br />

herhangi bir türden olabilir. Geri dönüş değerlerinin türleri, işlevlerin tanımlanması<br />

sırasında belirtilir.<br />

İşlevlerin Tanımlanması<br />

İşlevlerin kodunun yazılması için tanımlama (definition) terimi kullanılır. C'de işlev<br />

tanımlama işleminin genel biçimi şöyledir:<br />

[Geri dönüş değerinin türü] ([parametreler])<br />

{<br />

/***/<br />

}<br />

54/529

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!