Vì tất cả những ưu điểm đó cũng là nhược điểm.
Chương trình không quốc tịch; Không có tác dụng phụ
Các chương trình trong thế giới thực là tất cả về tác dụng phụ và đột biến. Khi người dùng nhấn nút đó là vì họ muốn điều gì đó xảy ra. Khi họ gõ vào một cái gì đó, họ muốn trạng thái đó thay thế bất kỳ trạng thái nào đã từng ở đó. Khi Jane Smith làm kế toán kết hôn và đổi tên thành Jane Jones, cơ sở dữ liệu ủng hộ quy trình kinh doanh in tiền lương của cô ấy tốt hơn hết là xử lý loại đột biến đó. Khi bạn bắn súng máy vào người ngoài hành tinh, hầu hết mọi người không mô hình hóa tinh thần đó là việc xây dựng một người ngoài hành tinh mới với ít điểm nhấn hơn; họ mô hình hóa nó như một sự đột biến của các thuộc tính của người ngoài hành tinh hiện có.
Khi các khái niệm ngôn ngữ lập trình hoạt động cơ bản chống lại miền được mô hình hóa, thật khó để biện minh cho việc sử dụng ngôn ngữ đó.
Đồng thời; Chơi cực hay với công nghệ đa lõi đang lên
Vấn đề chỉ là đẩy xung quanh. Với cấu trúc dữ liệu bất biến, bạn có sự an toàn của luồng giá rẻ với chi phí có thể làm việc với dữ liệu cũ. Với cấu trúc dữ liệu có thể thay đổi, bạn có lợi ích là luôn luôn làm việc với dữ liệu mới với chi phí phải viết logic phức tạp để giữ cho dữ liệu nhất quán. Nó không giống như một trong những thứ đó rõ ràng là tốt hơn cái kia.
Các chương trình thường ngắn hơn và trong một số trường hợp dễ đọc hơn
Ngoại trừ trong trường hợp chúng dài hơn và khó đọc hơn. Học cách đọc các chương trình được viết theo phong cách chức năng là một kỹ năng khó; mọi người dường như tốt hơn nhiều trong việc hình thành các chương trình như một loạt các bước cần tuân thủ, giống như một công thức, thay vì một loạt các tính toán được thực hiện.
Năng suất tăng (ví dụ: Erlang)
Năng suất phải tăng lên rất nhiều để biện minh cho chi phí khổng lồ của việc thuê các lập trình viên, những người biết cách lập trình theo phong cách chức năng.
Và hãy nhớ rằng, bạn không muốn vứt bỏ một hệ thống làm việc; hầu hết các lập trình viên không xây dựng các hệ thống mới từ đầu, mà là duy trì các hệ thống hiện có, hầu hết được xây dựng bằng các ngôn ngữ phi chức năng. Hãy tưởng tượng cố gắng biện minh điều đó cho các cổ đông. Tại sao bạn lại loại bỏ hệ thống bảng lương làm việc hiện tại của mình để xây dựng một hệ thống mới với chi phí hàng triệu đô la? "Bởi vì lập trình chức năng là tuyệt vời" không thể làm hài lòng các cổ đông.
Lập trình mệnh lệnh là một mô hình rất cũ (theo như tôi biết) và có thể không phù hợp với thế kỷ 21
Lập trình chức năng cũng rất cũ. Tôi không thấy tuổi của khái niệm này có liên quan như thế nào.
Đừng hiểu lầm tôi. Tôi yêu thích lập trình chức năng, tôi tham gia nhóm này vì tôi muốn giúp đưa các khái niệm từ lập trình chức năng vào C # và tôi nghĩ rằng lập trình theo phong cách bất biến là con đường của tương lai. Nhưng có những chi phí rất lớn để lập trình theo kiểu chức năng không thể bỏ qua. Sự thay đổi theo hướng phong cách chức năng hơn sẽ diễn ra chậm và dần dần trong một khoảng thời gian nhiều thập kỷ. Và đó là những gì nó sẽ là: một sự thay đổi theo phong cách chức năng hơn, không phải là sự bán buôn bao gồm sự thuần khiết và vẻ đẹp của Haskell và việc từ bỏ C ++.
Tôi xây dựng trình biên dịch để kiếm sống và chúng tôi chắc chắn đang nắm giữ một phong cách chức năng cho thế hệ công cụ biên dịch tiếp theo. Đó là bởi vì lập trình chức năng về cơ bản là một kết hợp tốt cho các loại vấn đề chúng ta gặp phải. Vấn đề của chúng tôi là tất cả về việc lấy thông tin thô - chuỗi và siêu dữ liệu - và chuyển đổi chúng thành các chuỗi và siêu dữ liệu khác nhau. Trong các tình huống xảy ra đột biến, giống như ai đó đang gõ vào IDE, không gian vấn đề vốn đã tự cho mình sử dụng các kỹ thuật chức năng, chẳng hạn như chỉ xây dựng lại các phần của cây đã thay đổi. Nhiều miền không có các thuộc tính đẹp này khiến chúng rõ ràng có thể tuân theo kiểu chức năng .