> For the complete documentation index, see [llms.txt](https://afatihyavasi.gitbook.io/typescript-notlari/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://afatihyavasi.gitbook.io/typescript-notlari/handbook/fonksiyonlar.md).

# Fonksiyonlar

### Parametre Tipleri

**TypeScript** ile oluşturduğumuz fonksiyonların parametrelerinin tiplerini aşağıdaki gibi belirleyebiliriz. Ayrıca [type](/typescript-notlari/handbook/type.md) ve [interface](/typescript-notlari/handbook/interfaces.md) sayfalarında diğer yöntemleri de kullanabiliriz.

Aşağıdaki gibi fonksiyonumuzun parametre tiplerini belirtebiliriz.

```typescript
const add = (num1: number, num2: number) => {
    return num1 + num2;
}
add(2, 3)
```

### Fonksiyonun Dönüş Değeri

Fonksiyonumuzun döndüreceği değer önemli olduğu taktirde, aşağıdaki gibi fonksiyon parantezlerinin sonuna **`:type`** ile fonksiyonumuzun dönüş değerini tanımlayabiliriz.

```typescript
const add = (num1: number, num2: number): number => {
    return num1 + num2;
}
let sum: number;
sum = add(3, 2)
```

Fonksiyonumuz herhangi bir değer döndürmüyorsa, **void** ile değer dönmediğimizi belirtebiliriz.

```typescript
const printConsole = (keyword: string): void => {
    console.log(keyword)
}
```

Dönüş değeri olarak **void** belirlediğimiz bir fonksiyondan dönüş yaptığımız takdirde hata alırız.

![](https://1559559760-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Meec30BW_fl6QaxZdtW%2F-MeoMB43x9KTe73NssMv%2F-MeoQJxQ4tPucGhwlG2n%2FEkran%20Resmi%202021-07-17%2015.24.42.png?alt=media\&token=7f12861a-9a5b-4cd0-8756-fcd6bde280b5)

{% hint style="info" %}
Dönüş değeri **void** olarak belirlediğimiz fonksiyonlarda kullanılan return fonksiyondan çıkış amaçlı kullanıldıysa hata vermez.
{% endhint %}

### Default parametreler

Fonksiyonumuzun parametrelerinde default parametre kullanmak istersek aşağıdaki örnekteki gibi **`parametreIsmi: parametreTipi = defaultParametre`** şeklinde default değer atayabiliriz.

```typescript
const add = (num1: number, num2: number = 4) => {
    return num1 + num2;
}
add(2)
```

### **Rest Parametreler**

Rest operatörü ile parametre tanımladığımızda, rest öğelerin tiplerini array tip tanımlaması yaptığımız gibi yapabiliriz.

Aşağıdaki örnekte fonksiyonumuzda rest operatörü kullandığımızda nasıl tip tanımlaması yaptığımızı görebilirsiniz.

```typescript
function Greet(greeting: string, ...names: string[]) {
    return greeting + " " + names.join(", ") + "!";
}

Greet("Hello", "Steve", "Bill"); // returns "Hello Steve, Bill!"

Greet("Hello");// returns "Hello !"
```
