İlkay İlknur

just a developer...

Typescript Nedir

Bu makaleye Github üzerinden katkıda bulunabilirsiniz.

Evet bu yazımızın konusu "Typescript nedir ?". Typescript yeni bir programlama dili değil belki ancak bu yazıda istedim ki bilmeyenler için kısaca bir özet geçelim, bilenler ve kullananlar için de bilgi tazelemesi olsun.

Son yıllarda eminim ki Javascriptin önlenemez bir şekilde yükselişini farketmişinizdir. Javascript artık sadece browserda istemci tarafında işler yapmak için kullandığımız bir dil olmaktan çok daha farklı bir yerde. NodeJS gibi platformlarla artık Javascript serverda da çalışabiliyor. İstemci tarafında çalışan büyük masaüstü uygulamaları geliştirmek de artık Javascript ile mümkün. Bakınız electron.js.

Gördüğünüz gibi aslında başlarda sadece browserda çalışan bir programlama dili olarak tasarlanan Javascript zaman geçtikçe çok daha farklı ve tahmin edilemez bir noktaya ulaştı. Javascript'in ilk tasarlandığı zamanlarda büyük ölçekli uygulamalar geliştirmek için kullanılması çok da planlanmadığından aslında içerisinde büyük ölçekli uygulamalar geliştirirken bize oldukça yardımcı olan classlar, modüller, interfaceler vb.. yapıları da içerisinde bulundurmuyordu. Bu nedenle büyük ölçekli uygulamaları Javascript ile geliştirmek ve geliştirdikten sonra bu uygulamaların bakımını yapmak çokta kolay değil.

Javascript programlama dili aynı zamanda dinamik bir dil. Dinamik olması ona büyük bir güç katarken aynı zamanda development esnasında da bize bir o kadar zorluk çıkarıyor. Kod içerisindeki hataları bulmamız ve kodun bakımını yapmamız zorlaşıyor. Statik programlama dillerinin(C#,Java vb..) development esnasında bize sağladığı güzellikleri (refactoring, find references vb..) düşünürsek Javascript doğası gereği bu yeteneklerden de mahrum kalıyor. Eğer 100-200 satırlı bir kod yazıyorsanız bu eksiklikler size çok kritik gelmese de 10000-20000 satırlık bir uygulama yazıyorsanız emin olabilirsiniz ki bu özellikler size büyük zaman kazandıracaktır.

İşte Typescript'in amacı da aslında yukarıda bahsettiğim Javascript'in sıkıntılı yanlarından bizi kurtarak büyük ölçekli uygulamalar geliştirmemizi sağlamak. Bu nedenle Typescript aslında Javascript'in bir üst kümesi olarak konumlanıyor. Yani Javascript'in sahip olduğunu yapıların daha fazlasını içerisinde barındırıyor. Ayrıca Typescript statik bir dil olduğu için statik programlama dillerinin sahip olduğu yeteneklere de sahip oluyorsunuz.

Typescript kodu derlendiğinde çıktı olarak Javascript kodu üretiliyor. Yani Typescript içerisinde kullandığımız enum, interface gibi yapılar geçerli bir Javascript koduna çevriliyor. Kodumuzun düzenini sağlamak için kullandığımız bazı yapılar ise(örneğin interfaceler) Javascripte bile çevrilmiyor. Onlar sadece derleme işlemi sırasında Typescript tarafından kullanılıyor. Böylece temiz bir Javascript çıktısı elimizde bulunuyor. Ayrıca Typescript sadece derleme esnasında görev aldığı için çalışma zamanında Typescript'ten doğabilecek bir performans sorunu da söz konusu değil. Çünkü Typescript kodu derlenip Javascript kodu üretildiğinde Typescript'in işi burada bitiyor. Bunun yanında dışarıya çıkan kod tamamen Javascript olduğu için Typescript kullandığınız için herhangi ekstra bir runtime veya kütüphane vs.. kullanmanız gerekmiyor.

Bu kadar teorik bilgi sanırım yeterli. Şimdi istiyorsanız kısaca bir Typescript'e göz atalım. Örnek yapabilmek için hızlıca Typescript Playground'u kullanacağız. Typescript Playground, online olarak Typescript'i denememizi ve örnek yapabilmemizi sağlayan bir ortam. Sol tarafa Typescript olarak yazdığımız kodun Javascript'e çevrilmiş halini anında sağ tarafta görebiliyoruz. Unutmadan bahsediyim Typescript Playground da Typescript kullanılarak geliştirilmiş.

Typescript'in Javascript'in bir üst kümesi olduğundan bahsetmiştik. Yani yazdığımız Javascript kodları aynı zamanda geçerli bir Typescript kodu. Dolayısıyla Typescript içerisinde alışık olduğunuz gibi Javascript yazabilirsiniz veya elinizde daha önceden yazılmış Javascript kodları varsa bunları Typescript içerisinde kullanabilirsiniz. Eğer aşağıdaki kodu playground'a kopyalarsanız Typescript'in kodu başarılı bir şekilde derlediğini göreceksiniz.

var button = document.createElement('button');
button.textContent = "Hello";
button.onclick = function () {
    alert("Hello Typescript !");
};

Örneği biraz daha geliştirelim. Örneğin Typescript içerisinde OOP dillerinde olduğu gibi classlar kullanabiliyoruz.

class Hello {
    WriteHelloWorld() {
        alert("Hello World");
    }
}

var hello = new Hello();
hello.WriteHelloWorld();

Typescript tarafından da bu kod aşağıdaki gibi Javascript'e çevriliyor. Dolayısıyla biz classlar üzerinden operasyonlarımızı daha kolay bir şekilde yönetirken Typescript işin Javascript tarafıyla kendisi ilgileniyor.

var Hello = (function () {
    function Hello() {
    }
    Hello.prototype.WriteHelloWorld = function () {
        alert("Hello World");
    };
    return Hello;
})();
var hello = new Hello();
hello.WriteHelloWorld();

Typescript sahip olduğu statik programlama yetenekleri nedeniyle kod yazarken bize tanımladığımız değişkenlerle ilgili tip bilgisi verebiliyor. Aynı zamanda hatalı bir kod yazdığımızda da bu hatayı runtime sırasında değil kodu yazma esnasında alıyoruz. Belki de bu Typescriptin sağladığı en güzel fayda diyebiliriz.

Gördüğünüz gibi Typescript Javascript kodu yazmak istediğimizde işimizi oldukça kolaylaştırıyor. Bu yazı yazıldığı sıralarda Typescript 1.7 versiyonunda ve hızla 2.0 versiyonuna doğru ilerliyor. Pek çok büyük projede şu an Typescript etkin bir şekilde kullanılıyor. Mesela Angular 2 projesi şu an Typescript kullanılarak geliştiriliyor. Yani geleceği oldukça parlak bir programlama dili. Eğer şimdiye kadar hiç duymadıysanız veya kullanmadıysanız bir gözatmanızda fayda var derim. İleride eminim bir şekilde karşınıza çıkacaktır. ;)

Bir sonraki yazıda görüşmek üzere.



Yorum Gönder


Yorumlar

  • profile

    İlkay İlknur

    • 21
    • 1
    • 2016

    @Ahmet Rica ederim. Elimden geldiğince paylaşmaya çalışıyorum. Faydalı olduysa ne mutlu bana :)

  • profile

    Ahmet Sönmez

    • 20
    • 1
    • 2016

    İlkay hocam, paylaşımlarınız için çok teşekkürler. Özellikle İngilizce düzeyinde makaleler, videolar da zorluk çekenler (ör : ben) için müthiş bir destek sağlıyorsunuz.