Sebagian besar bahasa pemrograman (baik bahasa yang diketik secara dinamis maupun statis) memiliki kata kunci dan / atau sintaksis khusus yang terlihat jauh berbeda dari mendeklarasikan variabel untuk mendeklarasikan fungsi. Saya melihat fungsi sama seperti mendeklarasikan entitas bernama lain:
Misalnya dengan Python:
x = 2
y = addOne(x)
def addOne(number):
return number + 1
Kenapa tidak:
x = 2
y = addOne(x)
addOne = (number) =>
return number + 1
Demikian pula, dalam bahasa seperti Java:
int x = 2;
int y = addOne(x);
int addOne(int x) {
return x + 1;
}
Kenapa tidak:
int x = 2;
int y = addOne(x);
(int => int) addOne = (x) => {
return x + 1;
}
Sintaksis ini sepertinya cara yang lebih alami untuk mendeklarasikan sesuatu (baik itu fungsi atau variabel) dan satu kata kunci yang kurang disukai def
atau function
dalam beberapa bahasa. Dan, IMO, ini lebih konsisten (saya melihat di tempat yang sama untuk memahami jenis variabel atau fungsi) dan mungkin membuat parser / tata bahasa sedikit lebih mudah untuk ditulis.
Saya tahu sangat sedikit bahasa menggunakan ide ini (CoffeeScript, Haskell) tetapi bahasa yang paling umum memiliki sintaks khusus untuk fungsi (Java, C ++, Python, JavaScript, C #, PHP, Ruby).
Bahkan dalam Scala, yang mendukung kedua cara (dan memiliki tipe inferensi), lebih umum menulis:
def addOne(x: Int) = x + 1
Daripada:
val addOne = (x: Int) => x + 1
IMO, setidaknya di Scala, ini mungkin versi yang paling mudah dimengerti tetapi idiom ini jarang diikuti:
val x: Int = 1
val y: Int = addOne(x)
val addOne: (Int => Int) = x => x + 1
Saya sedang mengerjakan bahasa mainan saya sendiri dan saya bertanya-tanya apakah ada jebakan jika saya merancang bahasa saya sedemikian rupa dan jika ada alasan historis atau teknis, pola ini tidak diikuti secara luas?
(int => int) addOne = (x) => {
jauh lebih "istimewa" dan "kompleks" daripada int addOne(int) {
...