> For the complete documentation index, see [llms.txt](https://hanuce.gitbook.io/javascript-egitimi/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://hanuce.gitbook.io/javascript-egitimi/fonksiyonlar-temel/deger-donduren-fonksiyonlar.md).

# Değer Döndüren Fonksiyonlar

Bir fonksiyon **sonunda** **`return`** ifadesi ile o fonksiyondan dışarı gönderilecek değer ifade edilir. Örnek.

{% code lineNumbers="true" %}

```javascript
function foo () {
    let mesaj = 'Merhaba Fonksiyon';
    return mesaj;
}
alert( foo() ); // 'Merhaba Fonksiyon' çıktısı verir.
```

{% endcode %}

**`return`** ifadesi sayesinde bir değişkenin değerini fonksiyon ile atayabiliriz. Örnek.

{% code lineNumbers="true" %}

```javascript
function kareleriTopla (a, b) {
    let sonuc;
    sonuc = a**2 + b**2;
    return sonuc;
}
let islem = kareleriTopla (12, 15); // fonksiyonun return ettiği değer oldu
alert(islem);
```

{% endcode %}

{% code lineNumbers="true" %}

```javascript
// veya daha temiz ifade ile
function kareleriTopla (a, b) {
    return a**2 + b**2;
}
let sonuc = kareleriTopla (12, 15);
alert(sonuc);
```

{% endcode %}

**`return`** ifadesinin temel işlevi fonksiyon bloktan çıkıştır, bitiştir. **`return`** ile değer döndürmek zorunlu değildir. Çıkış olarak da kullanılabilir. Örnekler.

{% code lineNumbers="true" %}

```javascript
function islemOnay () {
    if ( !confirm('İşleme Devam Edilecek Onaylıyor Musunuz?') ){
        alert('İşlem Sonlandırıldı.');
        return; //değer döndürmeden çıktık.
    }
    alert('İşleme devam ediliyor...');
    return;
}
islemOnay();
```

{% endcode %}

{% code lineNumbers="true" %}

```javascript
function incToCM(uzunluk) {
    return uzunluk /= 0.393;
}
alert( incToCM( prompt('İnç uzunluk değeri giriniz.',0)) );
```

{% endcode %}

{% code lineNumbers="true" %}

```javascript
function aralikToplama(min,max) {
    alert(`${min} sayısından ${max} sayısına kadar olan sayılar toplanacak!`);
    let sonuc = 0;
    for (let i = Number(min); i < Number(max) + 1; i++) {
        sonuc += i;
    }
    return sonuc;
}
alert( aralikToplama( prompt('Başlangıç Sayısı',0), prompt('Bitiş Sayısı',0)) );
```

{% endcode %}

{% code lineNumbers="true" %}

```javascript
function faktoriyel(n) {
    let sonuc = 1;
    for (let i = Number(n); i > 1; i--) {
        sonuc *= i;
    }
    return sonuc;
}
alert( faktoriyel( prompt('Faktöriyeli alınacak sayıyı giriniz.',0)) );
```

{% endcode %}

Bir fonksiyon genellikle karmaşık olmayan tek bir görevi yerine getirir. Uzun ve karmaşık görevler için fonksiyonları parçalamanız önerilir.

{% hint style="warning" %} <mark style="color:red;">**Bir Fonksiyon = Bir Görev**</mark>
{% endhint %}

Fonksiyon isimleri fonksiyonun görevini tanımlayan şekilde seçilmelidir.

{% code lineNumbers="true" %}

```javascript
function asalKontrol(sayi) {
    for (let i = 2; i < sayi) {
        if (sayi % i === 0) return 'Asal Değil';
    }
    return 'Asal';
}
alert( asalKontrol( prompt('Asallığı test edilecek sayıyı giriniz',0)) );
```

{% endcode %}

Fonksiyonu **çağırdığımızda** yürütülmesini sağlayan kritik sembol **`()`** parantezleridir. Peki bir fonksiyon ismini **`()`** ile çağırmadan kullanırsak? Deneyelim.

{% code lineNumbers="true" %}

```javascript
alert(foo);
function foo() {
    //kodlar
    return 'foo fonksiyonu';
}
```

{% endcode %}

Fonksiyonu oluşturan ifadeleri ***`string`***'miş gibi ekrana basar. Yani **fonksiyonun ismi bir değişken ismi ve** **değeri de fonksiyonu oluşturan kodların `string` ifadesidir**. Bu şu anlama gelmektedir:

{% hint style="warning" %}
Fonksiyon tanımlarken kullandığınız ismi **`let`** ile değişken olarak deklare edemezsiniz, hata verir. **`var`** ile de deklare etmemeye de dikkat ediniz.
{% endhint %}

Bu uyarıyı test edelim.

<pre class="language-javascript" data-line-numbers><code class="lang-javascript">alert(foo);
function foo() {
    //kodlar
    return 'foo fonksiyonu';
}
<strong>let foo = 'Bir değişken'; //bu satırda hata verir. aşağıdaki uyarı çalışmaz.
</strong>alert (foo);
</code></pre>

{% code lineNumbers="true" %}

```javascript
alert(foo);
function foo() {
    //kodlar
    return 'foo fonksiyonu';
}
var foo = 'Artık bir fonksiyon değil';
alert(foo); //fonksiyonun üzerine yazdık.fonksiyon diye birşey kalmadı :)
```

{% endcode %}

**`()`** olmadan da kullanabilme sayesinde bir fonksiyonu başka bir fonksiyona argüman yaparak **geri çağırabilir** veya bir değişkene değer olarak atayarak **ifade edebiliriz**.
