# 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**.


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://hanuce.gitbook.io/javascript-egitimi/fonksiyonlar-temel/deger-donduren-fonksiyonlar.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
