- Türler, fonksiyonların ve verilerin uyması gereken katı sözleşmelerdir
- Tür, herhangi bir değerin ait olabileceği bir kümedir
- Türler fonksiyonlar aracılığıyla dönüştürülebilir ve bu sayede kapsamları değiştirilebilir
- Enjektif fonksiyon - kapsamı küçük bir türden daha büyük bir türe dönüştürme
- Sürjektif fonksiyon - kapsamı büyük bir türden daha küçük bir türe dönüştürme
- Bijektif fonksiyon - bire bir eşleme
- Mantığın girdileri ve çıktıları türlerle ifade edilebilir
- Bu, türler aracılığıyla mantığı soyutlamanın mümkün olduğu anlamına gelir
- Girdi ve çıktılar türlerle ifade edilip, mantık bunun üzerinden tasarlanabilir
- Temel veri türlerine isim verilerek başka türler olarak ayırt edilebilir
- Tür sistemi kullanılarak çeşitli problemler çözülebilir
- Generics kullanarak genelleştirme
- Phantom type kullanarak kapsam sınırlama
- Union type (veya toplam tür) kullanarak davranış sınırlama
- En küçük türü kullanarak TODO işleme
- Türleri kullanarak sonlu durum makinesi gerçekleştirme
- Dependent type kullanarak doğrulama
- Type-driven development, önce türleri tanımlayıp bunun üzerinden kod yazma metodolojisidir
- Type-driven development istenirse her yerde uygulanabilir ve her adımın sonucunu bir tür olarak tanımlamakla başlar
- Gereksinimleri analiz ederken onları türlerle soyutlamayı deneyin
- Aynı temel veri türü olsa bile anlamı farklıysa, bunları ayırt etmek için farklı türler olarak tanımlamak iyi olur
- Gereksinimleri analiz edip türleri düşündüyseniz, mantığı türlerle soyutlamayı deneyin
(String) -> List<Token> gibi bir biçimde soyutlanabilir
- Type-driven development, test-driven development ile iyi uyum sağlar
- Girdi ve çıktı sonuçlarını önceden tanımlayıp sonra kod yazma açısından type-driven development ile test-driven development benzerdir
- Type-driven development, tür sistemi sayesinde derleme zamanında güvenliği önceden kontrol edebiliyorsa; test-driven development ise yalnızca türlerle yakalanamayan hataları veya istisnai durumları test kodu ile yakalayabilir
- Tasarımcı açısından tür sistemini kullanmak, diğer geliştiriciler için kod kuralları oluşturmakla aynıdır
- Ancak türleri tek tek tanımlayıp sayıları gereğinden fazla artarsa veya tür tanımları karmaşıklaşırsa, bu durum kod yazmayı zorlaştırabilir ya da okunabilirliği düşürebilir; bu yüzden her zaman uygun dengeyi korumak önemlidir
2 yorum
> Birebir fonksiyon, dönüştürülen değerler kümesinin kodomain ve görüntü kümesinin birbiriyle örtüşmediği durumu ifade eder. Bunu biraz daha basit söylemek gerekirse, kapsamı dar bir tipten daha geniş bir tipe dönüşüm anlamına gelir.
Birebir fonksiyon, birbirinden farklı herhangi iki değişkenin görüntülerinin de farklı olduğu bir fonksiyonu ifade eder. Yani birebir fonksiyon
fiçin, tanım kümesiXiçinde yer alan tümavebelemanları açısındana ≠ bisef(a) ≠ f(b)olur. Kore lise matematiğinde "bire bir fonksiyon" olarak adlandırılan şey, enjeksiyon fonksiyonudur.Ayrıntılı açıklama için teşekkürler. :) Meğer ben yanlış anlamışım. Zaten birkaç kez dikkat çekilen bir konuydu; biraz daha çalışıp içeriği yeniden düzenleyeceğim.