Typescript Dersleri - Fonksiyonlarda Tip Özelliği

in #tr7 years ago

ts.png
Merhaba arkadaşlar. Daha önce veri tiplerinden bahsettiğim bir yazı yazmıştım. Şimdi Typescript'in bazı dillerle kıyaslandığında garip gelecek bir işlevinden bahsedeceğim. Nasıl değişken atarken Type Annotation işlemiyle değişkenimizin türünü belirleyip farklı tipte bir değer almasını engelleyebiliyorsak, fonksiyonlar için de aynısını yapabiliyoruz. Bikaç fonksiyon tanımlayıp açıklamaya başlayalım.

let kullaniciAdi: string;
kullaniciAdi = "scaevola";

function kullaniciAdim(): string {
    return kullaniciAdi
}

Fonksiyonumuzu tamamladıktan sonra : işaretinin ardından döndürmesini istediğimiz değerin tipini yazdık. Eğer fonksiyonumuz belirlediğimiz veri tipinden farklı bir tipte değer döndürürse, derleme sırasında hata alacağız. Örneğin fonksiyon number türünde bir değer döndürünce ne olacağına bakalım.

function kullaniciAdim(): string {
    return 1992
}

01.png

Gördüğünüz gibi intellisense'miz 1992 değerinin string tipine atanamayacağınız söylüyor. Fonksiyonlara değişkenler gibi tip atayabileceğimiz öğrendik. Peki bir fonksiyonu, bir değişkene atayabilir miyiz? Hemen bir fonksiyon tanımlayıp öğrenelim.

function topla(toplanan1: number, toplanan2: number): number {
    return toplanan1 + toplanan2;
}

Girilen 2 değeri toplayan bir fonksiyon yazdık. Sonuçta toplama işlemi yaptığımız için girilecek değerlerin tipini number olarak belirledik. 2 sayının toplamı da yine bir sayı olacağı için fonksiyonumuzun döndüreceği değere de number tipini belirledik. Şimdi bir değişkene fonksiyonumuzu atamayı deneyelim.

let toplamFonksiyonu;
toplamFonksiyonu = topla;

02.png

Görüldüğü üzere herhangi bir hata almadık. Şimdi fonksiyonumuzu değişken üzerinden çağıralım. 8 + 19 gibi bir işlem yaptıracağız.

console.log(toplamFonksiyonu(8,19));

03.png

Fonksiyonumuz hatasız bir şekilde çalıştı. Şimdi milyon dolarlık soruya gelelim. Bir değişkeni tanımlarken Type Annotation işlemiyle veri tipini belirlemeyi zaten öğrendik. Peki bu değişkene değer olarak bir fonksiyon atanacağını ve parametrelerin tipini belirtebiliyor muyuz? Cevabımız evet. Nasıl yapıldığını görelim.

function topla(toplanan1: number, toplanan2: number): number {
    return toplanan1 + toplanan2;
}

let toplamFonksiyonu: (deger1: number, deger2:number) => number;
toplamFonksiyonu = topla;

console.log(toplamFonksiyonu(8,19));

Gözünüze hayati işlemler gibi gelmeyebilir fakat bu işlemleri ne kadar uygularsak çıktılarımızda o kadar az sürprizle karşılaşırız. Şimdi değişkenimizi önce 3 parametre alan bir fonksiyon gibi ardından da 2. parametresi string olan bir fonksiyon gibi belirleyip sonuçlarına bakalım ve yazımızı noktalayım.

function topla(toplanan1: number, toplanan2: number): number {
    return toplanan1 + toplanan2;
}

let toplamFonksiyonu: (deger1: number, deger2:number, deger3: number) => number;
toplamFonksiyonu = topla;

console.log(toplamFonksiyonu(8,19));

04.png

Görüldüğü üzere hata aldık fakat uyarmakta fayda var: Eğer fonksiyonu çağırırken 3. bir parametre kullanırsanız fonksiyon çalışacak ve sadece ilk 2 değer işleme sokacaktır. Yani çıktı yine 27 olacaktır.

function topla(toplanan1: number, toplanan2: number): number {
    return toplanan1 + toplanan2;
}

let toplamFonksiyonu: (deger1: number, deger2:string) => number;
toplamFonksiyonu = topla;

console.log(toplamFonksiyonu(8,19));

05.png

Sort:  

Congratulations @scaevola! You have completed some achievement on Steemit and have been rewarded with new badge(s) :

Award for the number of upvotes received

Click on any badge to view your own Board of Honor on SteemitBoard.
For more information about SteemitBoard, click here

If you no longer want to receive notifications, reply to this comment with the word STOP

By upvoting this notification, you can help all Steemit users. Learn how here!