ภาษาโปรแกรมส่วนใหญ่ (ทั้งภาษาแบบไดนามิกและแบบคงที่) มีคำหลักพิเศษและ / หรือไวยากรณ์ที่มีลักษณะแตกต่างจากการประกาศตัวแปรสำหรับฟังก์ชั่นการประกาศ ฉันเห็นฟังก์ชั่นเช่นเดียวกับการประกาศเอนทิตีที่มีชื่ออื่น:
ตัวอย่างเช่นใน Python:
x = 2
y = addOne(x)
def addOne(number):
return number + 1
ทำไมจะไม่ล่ะ:
x = 2
y = addOne(x)
addOne = (number) =>
return number + 1
ในทำนองเดียวกันในภาษาเช่น Java:
int x = 2;
int y = addOne(x);
int addOne(int x) {
return x + 1;
}
ทำไมจะไม่ล่ะ:
int x = 2;
int y = addOne(x);
(int => int) addOne = (x) => {
return x + 1;
}
ไวยากรณ์นี้ดูเหมือนเป็นธรรมชาติมากขึ้นในการประกาศบางสิ่งบางอย่าง (ไม่ว่าจะเป็นฟังก์ชั่นหรือตัวแปร) และคำหลักที่น้อยกว่าเช่นdef
หรือfunction
ในบางภาษา และ IMO ก็มีความสอดคล้องกันมากขึ้น (ฉันมองในที่เดียวกันเพื่อทำความเข้าใจกับชนิดของตัวแปรหรือฟังก์ชั่น) และอาจทำให้ parser / ไวยากรณ์ง่ายขึ้นในการเขียน
ฉันรู้ว่าภาษาน้อยมากที่ใช้ความคิดนี้ (CoffeeScript, Haskell) แต่ภาษาส่วนใหญ่มีไวยากรณ์พิเศษสำหรับฟังก์ชั่น (Java, C ++, Python, JavaScript, C #, PHP, Ruby)
แม้ใน Scala ซึ่งรองรับทั้งสองวิธี (และมีการอนุมานประเภท) มันเป็นเรื่องธรรมดามากที่จะเขียน:
def addOne(x: Int) = x + 1
ค่อนข้างมากกว่า:
val addOne = (x: Int) => x + 1
IMO, atleast ใน Scala นี่อาจเป็นเวอร์ชั่นที่เข้าใจง่ายที่สุด แต่สำนวนนี้ไม่ค่อยจะตามมา:
val x: Int = 1
val y: Int = addOne(x)
val addOne: (Int => Int) = x => x + 1
ฉันทำงานเกี่ยวกับภาษาของเล่นของตัวเองและฉันสงสัยว่ามีข้อผิดพลาดใด ๆ หรือไม่หากฉันออกแบบภาษาของฉันด้วยวิธีการดังกล่าวและหากมีเหตุผลทางประวัติศาสตร์หรือทางเทคนิค
(int => int) addOne = (x) => {
คือ "พิเศษ" และ "ซับซ้อน" มากกว่าint addOne(int) {
...