Çoğu programlama dili (hem dinamik hem de statik olarak yazılmış diller), işlevleri bildirmek için değişken bildirmekten çok farklı görünen özel anahtar kelime ve / veya sözdizimine sahiptir. İşlevleri tıpkı adlandırılmış başka bir varlık bildirmek gibi görüyorum:
Örneğin Python'da:
x = 2
y = addOne(x)
def addOne(number):
return number + 1
Neden olmasın:
x = 2
y = addOne(x)
addOne = (number) =>
return number + 1
Benzer şekilde, Java gibi bir dilde:
int x = 2;
int y = addOne(x);
int addOne(int x) {
return x + 1;
}
Neden olmasın:
int x = 2;
int y = addOne(x);
(int => int) addOne = (x) => {
return x + 1;
}
Bu sözdizimi, bir şeyi (bir işlev veya değişken olabilir) ve bazı dillerde defveya daha az anahtar kelimeyi tanımlamanın daha doğal bir yoludur function. Ve IMO, daha tutarlıdır (değişken veya fonksiyonun tipini anlamak için aynı yere bakarım) ve muhtemelen ayrıştırıcı / gramer yazmayı biraz daha basitleştirir.
Çok az dilde bu fikri kullandığını biliyorum (CoffeeScript, Haskell) ancak çoğu dilde işlevler için özel sözdizimi vardır (Java, C ++, Python, JavaScript, C #, PHP, Ruby).
Her iki yolu da destekleyen (ve tür çıkarımı olan) Scala'da bile yazmak daha yaygındır:
def addOne(x: Int) = x + 1
Ziyade:
val addOne = (x: Int) => x + 1
IMO, Scala'da en az bu olanı, muhtemelen en kolay anlaşılabilir versiyonudur, ancak bu deyim nadiren izlenir:
val x: Int = 1
val y: Int = addOne(x)
val addOne: (Int => Int) = x => x + 1
Kendi oyuncak dilim üzerinde çalışıyorum ve dilimi bu şekilde tasarlarsam herhangi bir tuzak olup olmadığını ve herhangi bir tarihsel veya teknik sebep olup olmadığını merak ediyorum.
(int => int) addOne = (x) => {için çok daha "özel" ve "karmaşık" int addOne(int) {...