Trong cả năm qua tôi đã được viết mã Scala (đến từ nền Java). Tôi thực sự thích cách bạn có thể tạo mã đơn giản và gọn gàng hơn, với các vals, lớp trường hợp, hàm map / bộ lọc / lambda, hàm ý và kiểu suy luận. Tôi đã sử dụng nó chủ yếu cho một ứng dụng dựa trên Akka .
Năm nay tôi tham gia một dự án Scala với một nhóm mới, người thực sự thích lập trình chức năng. Họ sử dụng rất nhiều Scalaz và mã được lấp đầy ở khắp mọi nơi với các ứng dụng, giới hạn bối cảnh, độc giả / nhà văn / nhà nước, thậm chí phương thức chính được "bọc" trong một đơn nguyên I / O. Lý do của họ là điều này làm cho trình biên dịch "làm việc cho chúng tôi" khi khẳng định rằng mã là chính xác và mỗi hàm không có tác dụng phụ.
Mặc dù vậy, theo quan điểm của tôi, tất cả cú pháp này thực sự cản trở logic kinh doanh. Chẳng hạn, một loại "MyBusinessObject" cũng tốt, cũng như các loại như "Danh sách [MyBusinessObject]", "Tùy chọn [MyBusinessObject]" hoặc thậm chí "Tương lai [MyBusinessObject]". Chúng đều có một ý nghĩa và mục đích rõ ràng. Mặt khác, mã như:
def method[M[_]: Applicative] = {
case (a, b) => (ca[M](a) |@| cb[M](b)) {
case t @ (ra, rb) =>
if (ra.result && rb.result) t.right
else t.left
}
}
nó có làm tăng thêm sự phức tạp cho chương trình không, hay chỉ là tôi không quen với cách lập trình này?
>>=
và <$>
không có nghĩa gì cho đến khi bạn biết những gì họ làm. Sau khi biết ý nghĩa của chúng, tuy nhiên, bây giờ chúng đọc rất tự nhiên và nhanh chóng với tôi. Không thực sự là một câu trả lời, chỉ là kinh nghiệm khách quan của tôi với những thứ như thế này. Tôi cũng sử dụng Scala, nhưng không có kinh nghiệm với thư viện Scalaz.
for(i=0; i<7; ++i) { trivialOperation(i); }
với một số trivialOperationCount
biến khó xử , phải không?) Bây giờ, ngôn ngữ lập trình chức năng với khớp mẫu đôi khi sẽ giới thiệu thêm một số biến trong đó bạn 'Chỉ cần viết ra các cuộc gọi phương thức truy cập trong OO. Kết quả nói chung ngắn gọn hơn; có lẽ ít tự giải thích hơn, nhưng việc tra cứu khai báo dữ liệu thường làm cho nó rõ ràng nhanh chóng. Gõ tĩnh giúp ích rất nhiều, nó không giống như trong APL.