Ini agak subyektif, tapi saya berharap untuk mendapatkan pemahaman yang lebih jelas tentang faktor-faktor apa yang membuat operator jelas untuk menggunakan vs tumpul dan sulit. Saya telah mempertimbangkan desain bahasa baru-baru ini, dan satu masalah yang selalu saya lingkari adalah kapan membuat operasi kunci dalam bahasa menjadi operator, dan kapan harus menggunakan kata kunci atau fungsi.
Haskell agak terkenal karena hal ini, karena operator khusus mudah dibuat dan sering kali tipe data baru akan dipaket dengan beberapa operator untuk digunakan. Perpustakaan Parsec, misalnya, hadir dengan banyak operator untuk menggabungkan parser bersama, dengan permata seperti >.
dan .>
saya bahkan tidak dapat mengingat apa artinya saat ini, tetapi saya ingat mereka sangat mudah untuk dikerjakan setelah saya hafal apa sebenarnya maksud mereka. Apakah panggilan fungsi seperti leftCompose(parser1, parser2)
lebih baik? Tentu saja lebih bertele-tele, tetapi dalam beberapa hal lebih jelas.
Kelebihan operator dalam bahasa mirip-C adalah masalah yang sama, tetapi diperbesar oleh masalah tambahan yaitu pemuatan yang berlebihan dari operator yang dikenal seperti +
dengan makna baru yang tidak biasa.
Dalam bahasa baru apa pun, ini akan tampak seperti masalah yang cukup sulit. Dalam F #, misalnya, casting menggunakan operator tipe-casting yang diturunkan secara matematis, alih-alih sintaks cor gaya C # atau gaya VB verbose. C #: (int32) x
VB: CType(x, int32)
F #:x :> int32
Secara teori, bahasa baru dapat memiliki operator untuk sebagian besar fungsi bawaan. Alih-alih def
atau dec
atau var
untuk deklarasi variabel, mengapa tidak ! name
atau @ name
atau yang serupa. Ini tentu saja mempersingkat deklarasi diikuti dengan mengikat: @x := 5
bukan declare x = 5
atau let x = 5
Kebanyakan kode akan membutuhkan banyak definisi variabel, jadi mengapa tidak?
Kapan operator jelas dan berguna, dan kapan itu mengaburkan?
+
untuk penggabungan string atau <<
untuk stream). Dengan Haskell, di sisi lain, operator dapat berupa fungsi dengan nama khusus (yaitu, tidak kelebihan beban) atau bagian dari kelas tipe yang berarti bahwa sementara itu polimorfik, ia melakukan hal logis yang sama untuk setiap jenis, dan bahkan memiliki tipe tanda tangan yang sama. Begitu >>
juga >>
untuk setiap tipe dan tidak akan pernah sedikit berubah.