Ç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 def
veya 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) {
...