Lập trình chức năng là một con thú kỳ lạ đối với tôi. Tôi đã học F # và Haskell, đã viết một vài chương trình đơn giản và thích sử dụng chúng, nhưng không bao giờ có "ánh sáng mặc khải" mà một số người nói đến. Nhưng dần dần, tôi nhận thấy rằng càng ngày tôi càng viết mã có nghĩa là bất biến, chia nhỏ các nhiệm vụ thành nhiều chức năng nhỏ hơn và cố gắng sử dụng các đại biểu nhiều hơn nữa. Đó là một điều mà, nếu bạn thích nó, len lỏi vào công việc của bạn bởi vì giá trị của những kỹ thuật đó là hiển nhiên.
Bây giờ, thực tế hơn cho đào tạo: Tôi thấy rằng hai khái niệm thực sự nhấp vào Lập trình chức năng như một phong cách đối với tôi.
Đầu tiên, kiểu FP dựa trên cấu trúc dữ liệu, không phải thành phần như trong OOP. Tôi đã xem một cái gì đó như Danh sách trong C # là một mẹo thông minh để tạo danh sách an toàn loại, thứ gì đó bao gồm loại (chuỗi) vào loại (danh sách) khác. Sau khi học FP, tôi nhìn vào tướng giống như Monads bây giờ. Danh sách là một hình thức có cấu trúc mà mã có thể lấy và nó trang trí các chuỗi.
Thứ hai, và có lẽ hữu ích hơn cho các lập trình viên C # / ASP, là ý tưởng rằng FP hoạt động trên đệ quy và lặp lại, trong khi OOP hoạt động trên khả năng biến đổi và lặp. Bây giờ tôi có xu hướng nghĩ về vòng đời của trang ASP như một loại FP: mỗi yêu cầu được xử lý từ đầu trong toàn bộ vòng đời, do đó, toàn bộ trang thực sự là một chương trình đệ quy chậm. Nếu bạn có thể thu hẹp khái niệm đó xuống, bạn sẽ hiểu rõ hơn về cách một chương trình bắt buộc có thể được cấu trúc xung quanh các vòng lặp của các hàm lấy dữ liệu, vận hành trên nó và trả lại dữ liệu mới thay vì sửa đổi dữ liệu cũ.
Rào cản khó khăn nhất, ít nhất là đối với tôi, để vượt qua với phương pháp này là cảm giác chìm khi bạn lãng phí hàng tấn tài nguyên khi sử dụng các vật thể đột biến sẽ tiết kiệm được rất nhiều bộ nhớ. Trong GC chúng tôi tin tưởng, và tôi chỉ cần học cách loại bỏ các mối quan tâm về hiệu suất cho đến khi tôi thực sự thấy chương trình chạy và xác minh nếu có, và nếu vậy hãy sử dụng một trình lược tả để xem chính xác vấn đề ở đâu.