18 poin oleh kciter1 2024-07-22 | 2 komentar | Bagikan ke WhatsApp
  • Tipe adalah kontrak ketat yang harus dipatuhi oleh fungsi dan data
  • Tipe adalah himpunan tempat suatu nilai dapat menjadi anggota
  • Tipe dapat ditransformasikan melalui fungsi, dan melalui itu cakupannya dapat berubah
    • Fungsi injektif - mentransformasikan dari tipe dengan cakupan kecil ke tipe dengan cakupan besar
    • Fungsi surjektif - mentransformasikan dari tipe dengan cakupan besar ke tipe dengan cakupan kecil
    • Fungsi bijektif - berkorespondensi satu lawan satu
  • Input dan output logika dapat dinyatakan dengan tipe
    • Artinya, logika dapat diabstraksikan melalui tipe
    • Kita dapat merepresentasikan input dan output dengan tipe, lalu merancang logika berdasarkannya
  • Kita dapat memberi nama pada tipe data dasar agar dibedakan sebagai tipe lain
  • Dengan memanfaatkan sistem tipe, berbagai masalah dapat diselesaikan
    • Generalisasi menggunakan generik
    • Pembatasan cakupan menggunakan phantom type
    • Pembatasan perilaku menggunakan union type (atau sum type)
    • Penanganan TODO menggunakan tipe minimum
    • Implementasi finite state machine menggunakan tipe
    • Validasi menggunakan dependent type
  • Type-driven development adalah metodologi yang mendefinisikan tipe terlebih dahulu, lalu menulis kode berdasarkannya
  • Type-driven development pada dasarnya bisa diterapkan di mana saja jika diinginkan, dan dimulai dengan mendefinisikan hasil dari setiap prosedur sebagai tipe
  • Saat menganalisis requirement, cobalah mengabstraksikannya dengan tipe
  • Meskipun tipe data dasarnya sama, jika maknanya berbeda maka sebaiknya didefinisikan sebagai tipe yang berbeda agar dapat dibedakan
  • Setelah menganalisis requirement dan memikirkan tipenya, cobalah mengabstraksikan logikanya sebagai tipe
    • Dapat diabstraksikan dengan nuansa seperti (String) -> List<Token>
  • Type-driven development cocok dipadukan dengan test-driven development
    • Type-driven development dan test-driven development serupa dalam hal mendefinisikan lebih dulu input dan hasil output sebelum menulis kode
    • Jika type-driven development dapat memeriksa stabilitas lebih awal pada waktu kompilasi dengan memanfaatkan sistem tipe, maka test-driven development dapat menangkap error atau situasi pengecualian yang tidak bisa dideteksi hanya dengan tipe melalui kode pengujian
  • Dari sudut pandang perancang, memanfaatkan sistem tipe sama seperti membuat aturan kode untuk pengembang lain
  • Namun, jika setiap tipe didefinisikan satu per satu hingga jumlahnya terlalu banyak atau definisinya menjadi rumit, hal itu justru dapat membuat penulisan kode lebih sulit atau menurunkan keterbacaan, sehingga penting untuk selalu menjaga keseimbangan yang tepat

2 komentar

 
chabulhwi 2024-07-23

> Fungsi injektif adalah ketika himpunan nilai hasil transformasi tidak membuat kodomain dan range menjadi sama. Jika dinyatakan sedikit lebih sederhana, ini berarti mengubah dari tipe dengan cakupan kecil ke tipe dengan cakupan besar.

Fungsi injektif adalah fungsi yang untuk sembarang dua variabel berbeda, hasil pemetaannya juga berbeda. Dengan kata lain, untuk semua elemen a dan b yang termasuk dalam domain X dari fungsi injektif f, jika a ≠ b maka f(a) ≠ f(b). Dalam matematika SMA di Korea, yang disebut 'fungsi satu-satu' adalah fungsi injektif.

 
kciter1 2024-07-23

Terima kasih atas penjelasan yang detail. :) Ternyata saya memang salah memahaminya. Kebetulan ini juga bagian yang sudah beberapa kali dikoreksi kepada saya, jadi saya akan belajar sedikit lebih lanjut dan menyusun ulang isinya.