Câu trả lời ngắn:
Một trong những yếu tố khiến mọi người nói rằng mã lập trình chức năng rất khó đọc là nó ưu tiên cho một cú pháp nhỏ gọn hơn.
Câu trả lời dài:
Bản thân chức năng lập trình không thể đọc được hoặc không đọc được, vì đó là một mô hình, không phải là một kiểu viết mã. Trong C # chẳng hạn, lập trình chức năng trông giống như:
return this.Data.Products
.Where(c => c.IsEnabled)
.GroupBy(c => c.Category)
.Select(c => new PricesPerCategory(category: c.Key, minimum: c.Min(d => d.Price), maximum: c.Max(d => d.Price)));
và sẽ được xem là có thể đọc được bởi bất kỳ người nào có đủ kinh nghiệm về Java, C # hoặc các ngôn ngữ tương tự.
Mặt khác, cú pháp ngôn ngữ nhỏ gọn hơn đối với nhiều ngôn ngữ chức năng (bao gồm Haskell và F #) so với các ngôn ngữ OOP phổ biến, ưu tiên cho các ký hiệu hơn là từ tiếng Anh.
Điều này cũng áp dụng cho các ngôn ngữ bên ngoài FP. Nếu bạn so sánh các ngôn ngữ OOP phổ biến với một số ngôn ngữ ít phổ biến hơn có xu hướng sử dụng nhiều từ tiếng Anh hơn, những ngôn ngữ cuối cùng sẽ cảm thấy dễ hiểu hơn đối với những người không có kinh nghiệm lập trình.
Đối chiếu:
public void IsWithinRanges<T>(T number, param Range<T>[] ranges) where T : INumeric
{
foreach (var range in ranges)
{
if (number >= range.Left && number <= range.Right)
{
return true;
}
}
return false;
}
đến:
public function void IsWithinRanges
with parameters T number, param array of (Range of T) ranges
using generic type T
given that T implements INumeric
{
for each (var range in ranges)
{
if (number is from range.Left to range.Right)
{
return true;
}
}
return false;
}
Theo cùng một cách:
var a = ((b - c) in 1..n) ? d : 0;
có thể được diễn đạt bằng một ngôn ngữ tưởng tượng như:
define variable a being equal to d if (b minus c) is between 1 and n or 0 otherwise;
Khi cú pháp ngắn hơn là tốt hơn?
Mặc dù cú pháp dài hơn dễ hiểu hơn đối với người mới bắt đầu, cú pháp gọn hơn sẽ dễ dàng hơn cho các nhà phát triển có kinh nghiệm. Mã ngắn hơn có nghĩa là ít ký tự để nhập, có nghĩa là năng suất cao hơn.
Đặc biệt, nó thực sự không có ý nghĩa khi buộc một người gõ từ khóa để chỉ ra một cái gì đó có thể được suy ra từ cú pháp.
Ví dụ:
Trong PHP bạn cần gõ function
trước mỗi hàm hoặc phương thức, không có lý do cụ thể để làm điều đó.
Ada luôn làm tôi kinh hoàng khi buộc các nhà phát triển phải gõ rất nhiều từ tiếng Anh, đặc biệt là vì không có IDE chính xác với tính năng tự động hoàn thành. Gần đây tôi đã không sử dụng Ada và hướng dẫn chính thức của họ không hoạt động nên tôi không thể đưa ra một ví dụ; nếu bất cứ ai có một ví dụ, vui lòng sửa đổi câu trả lời của tôi.
Cú pháp 1..n
, sử dụng trong nhiều FP (và Matlab), có thể được thay thế bằng between 1, n
hoặc between 1 and n
hoặc between (1, n)
. Các between
từ khóa làm cho nó dễ dàng hơn để hiểu đối với những người không quen thuộc với cú pháp ngôn ngữ, nhưng vẫn còn, hai chấm là nhanh hơn nhiều để gõ.