TYPESCRIPT
Java/C# Geliştiricilerine TypeScript-1
TypeScript kurumsal ve diğer şirketlerde, kod altyapıları Java/C# olan geliştiricilerin Object-Oriented alışkanlıklarını bırakmasını gerektirmeden Javascript kod oluşturmalarına imkan sağlıyor, Interface, Abstract, Class, Extends, Static vb.. Bu yazıda TypeScript in Java diline syntax olarak ne kadar benzediğini, bu benzerliğinin de aslında Java/C# geliştiricilerin JavaScript olan ısınma süreçlerini kısalttığını göreceksiniz.
Burda yalnız şöyle bir yanılgıya da düşmemek lazım. TypeScript ile herşeyi Class ve Object-Oriented yapılar ile geliştirmeliyim. Bu yanlış bir düşünce tarzı çünkü UI Domainde Object-Oriented yaklaşım çokda uygun değil. Bu yüzden daha Fonksiyonel Programlamaya doğru bir yönelme var.
Tabi günümüzde Javascript sadece UI geliştirmede değil Node ile Sunucu ve Local ortamlarda farklı uygulama, api vb.. amaçlar için kullanılıyor. Bu yüzden TypeScript hem Object-Oriented, hemde Functional Programming özellikleri desteklemesini bir zenginlik olarak görmek ve bu özellikleri uygun yerlerde kullanmak gerekir.
Aşağıda TypeScript sayfasında aşağıda kırmızı ile çizdiğim kısımlarda bu konulara değiniyor. Yani OOP yaklaşımı ve Hiyerarşinin Domain Modelleri oluşturmada bazı problemlere çözümler getirir.
Ama bazı alanlar içinde uygun değildir ve JS fonksiyon bazlı bir yaklaşım olduğunu bu fonksiyonların her yerde yaşayıp farklı veri türlerine erişebiliyor olması JS çok büyük güç katar. Fonksiyonları Objeler içerisine sıkıştırıp bu güçten feragat etmek ne kadar doğru ?
Bu konu UI geliştirme kısmında da bu şekilde. OOP gelen kavramları yani Class yapısını React Hook ile Function Component dönüştürerek bizim daha aza class görmemizi sağladılar. Zaten Facebook React Class Component kullanım best practice lerinde çoklu hiyerarşi yapmayın composition kullanın diyor. Bu konuda UI Bileşenleri Nasıl Evrimleşti ? yazımı okuyabilirsiniz. Bu yazıda extends /mixin vb.. kavramların UI için neden uygun olmadığı anlatılıyor.
Diğer bir konuda JS ve üzerinde geliştirilen kütüphanelerin giderek Fonksiyonel Programlamaya yaklaşma çabaları. Bu konuda daha detaylı öğrenmek için JS ile Fonksiyonel Programlama yazılarıma bakabilirsiniz.
Tabi OOP gelen bir takım alışkanlıklarımızın bize API, kütüphane ve veri modeli tasarımında faydaları var.
- TypeScript bu 2 yapıyı bünyesinde bulundurması (OOP ve FP) ve
- JS çıktı oluşturması
- Giderek TS olan ilginin artmasına ve
- iş ilanlarında daha fazla talep edilmesine neden olmaktadır.
Class
class TypeScript den gelen bir özellik değil EcmaScript versiyonları JS içerisine gelmiş durumda ve mevcut Prototype yapısı üzerinden class ve kalıtım özelliklerini sağlıyor. Bu konuda daha detaylı öğrenmek için JS te Kalıtım(Inheritance) Nasıl Gerçekleşir ? yazımı okuyabilirsiniz.
Peki biz Function olarak User oluştursak nasıl yapacağız ? Buna prototype ile yeni metodlar ekleyebiliriz.
Burda fonksiyonu kullanarak Class oluşturduk ama bunu JS standart syntax kullanarak yapabilirdik. Class yapıları bize OOP benzer syntax arka planda __proto___ altyapısı ile sunar.
Inheritance
Kalıtım konusu yine JS içerisinde gelen bir kavram extends ile başka bir sınıftan yeni sınıfınızı türetebiliyorsunuz. Ama burda önemli bir husus var super constructor çağırarak kalıtım oluşturduğunuz sınıfın constructor çağrılır. Çünkü üst sınıfın belli özelliklerini kullanacaksanız onun önce initialize edilmesi olası hataların önlenmesi için çok önemlidir.
Peki Java’da kullandığımız interface ve abstract kavramlarını kullanabiliyor muyuz ? Cevap TypeScript ile evet. İşte burda TypeScript devreye giriyor. Aşağıda aynı Java’daki benzer
Interface: Namable, Agable
Abstract : AbstractPerson
ConcreteClass: PersonA
SubConcreteClass : UserB
Static
Örneğin aşağıda bir siparişte aldığımız malın KDV’sini hesaplasın isteyelim. Ve bu hesaplamada %18 vergi olsun. Örneğin elma, armut vs.. ne olursa olsun bu Sınıf tanımlaması ile birlikte yaşayan yapılar oluşturmak için static kullanırız.
Referanslar
Kaynak Kod
Okumaya Devam Et 😃
Bu yazının devamı veya yazı grubundaki diğer yazılara erişmek için bu linke tıklayabilirsiniz.