Một đặc điểm của lập trình chức năng là tính bất biến của dữ liệu. static
ngụ ý rằng bạn không cần một đối tượng (ví dụ) đại diện cho nhà nước, vì vậy đó không phải là một khởi đầu tồi. Tuy nhiên, bạn có trạng thái ở cấp lớp, nhưng bạn có thể thực hiện điều này final
. Vì các phương thức (tĩnh) không phải là các hàm hạng nhất, bạn sẽ vẫn cần các công trình xấu xí như các lớp ẩn danh để tiếp cận một kiểu nhất định của lập trình hàm trong Java.
FP được thực hiện tốt nhất bằng ngôn ngữ chức năng vì ngôn ngữ cần thiết hỗ trợ cho những thứ như chức năng bậc cao hơn, bất biến, tính minh bạch tham chiếu, v.v.
Tuy nhiên, điều này không có nghĩa là bạn không thể lập trình theo kiểu chức năng bằng ngôn ngữ bắt buộc như Java. Các ví dụ khác cũng có thể được đưa ra. Nó không phải vì bạn đang lập trình trong Java mà bạn đang làm OOP. Bạn có thể lập trình với dữ liệu toàn cầu và luồng điều khiển không có cấu trúc (goto
) bằng ngôn ngữ có cấu trúc như C++. Tôi có thể làm OOP trong một ngôn ngữ chức năng như Scheme. Vv
Steve McConnell đề cập đến sự khác biệt của chương trình trong một ngôn ngữ lập trình so với vào một ngôn ngữ trong Code Complete (cũng là một tài liệu tham khảo rất phổ biến trên SO).
Vì vậy, trong ngắn hạn, nếu bạn nói rằng "phương pháp tĩnh bắt chước chức năng hạng nhất", tôi không đồng ý.
Nếu, tuy nhiên, và tôi nghĩ rằng đây là điểm bạn muốn vượt qua, bạn sẽ nói rằng "các phương pháp tĩnh có thể giúp lập trình theo kiểu chức năng trong Java", tôi đồng ý.
Tôi nghĩ bạn đang bối rối về chức năng với thủ tục. Một lỗi phổ biến. –
Java không có chức năng ẩn danh, bạn có thể nghĩ đến các lớp ẩn danh. Trong thực tế Java không có chức năng ở tất cả ... chỉ có phương pháp ;-) –