Tôi có hai hàm là thành phần của hàm thuần túy. Chức năng đầu tiên phải mất một bưu kiện, xây dựng một ngôi nhà trên đó, và chụp ảnh để quảng cáo nó trong một tạp chí:Làm thế nào để tránh tính toán không cần thiết khi soạn các hàm thuần túy trong một ngôn ngữ chức năng?
let buildAndAdvertiseHouse parcel =
parcel
|> inspect
|> buildWalls
|> buildRoof
|> takePhoto
|> advertise
Chức năng thứ hai cũng có một bưu kiện, xây dựng một ngôi nhà trên đó, và cho biết thêm một hoàn thiện chạm vào nó:
let buildAndCompleteHouse parcel =
parcel
|> inspect
|> buildWalls
|> buildRoof
|> paintWalls
|> addFurniture
Rõ ràng là hai hàm cũng thuần túy, vì chúng là một thành phần của hàm thuần túy. Bây giờ tôi có một bưu kiện, giả sử niceParcel
và tôi muốn áp dụng cả hai chức năng cho nó. Tuy nhiên, tôi muốn tránh rằng ba hàm đầu tiên được tính hai lần vì chúng mất một thời gian lớn để tính toán và chúng được chia sẻ giữa hai hàm.
Làm cách nào để tôi tái cấu trúc mã của mình, vì vậy các tính toán không cần thiết này có thể tránh được, trong khi vẫn giữ các hàm thuần túy đẹp có ý nghĩa rõ ràng?
Nếu 'bưu kiện' không phải là loại chung, thì bạn có thể làm cho mã thành ngữ hơn với' let buildAnd ... = inspect >> buildWalls >> ... >> quảng cáo' (và có thụt đầu dòng thích hợp) –
Về câu hỏi, tại sao không chia hai chức năng của bạn thành ba hàm có tên 'build',' advertising' và 'completeHouse'? –
Chúng tạo thành một thực thể có thể được sử dụng trong các phần khác nhau của chương trình. Tất nhiên họ có thể được chia, nhưng sau đó thực thể này bị mất. Trong trường hợp đó, nếu bạn muốn sử dụng chúng, bạn sẽ phải biết các hoạt động bên trong, cụ thể là nó được xây dựng đầu tiên và sau đó hoàn thành hoặc được quảng cáo. Tôi muốn tránh rằng bạn phải biết các hoạt động bên trong. – Tuur