Trong Haskell, tôi thường viết các biểu thức với $ 's. Tôi thấy nó khá tự nhiên và dễ đọc, nhưng đôi khi tôi đọc nó là hình thức xấu và không hiểu tại sao nó phải như thế.
Trả lời
Sau đây là tất cả các hình thức tốt:
foo = bar . baz . quux
foo x = bar . baz . quux $ x
foo x = (bar . baz . quux) x
foo x = bar (baz (quux x))
Tôi đã đặt chúng theo thứ tự sơ bộ sở thích của tôi, mặc dù như mọi khi nếm khác nhau, và bối cảnh có thể yêu cầu một sự lựa chọn khác nhau. Tôi cũng đã thỉnh thoảng nhìn thấy
foo = bar
. baz
. quux
khi mỗi bar
, baz
, và quux
subexpressions dài. Sau đây là hình thức xấu:
foo x = bar $ baz $ quux $ x
Có hai lý do khiến việc này ít thích hợp hơn. Đầu tiên, có thể sao chép và dán các biểu thức con nhỏ hơn vào một định nghĩa phụ trong quá trình tái cấu trúc; với tất cả các toán tử ($)
, chỉ các biểu thức phụ bao gồm đối số x
là các phép tái cấu trúc hợp lệ, trong khi các toán tử (.)
và ($)
thậm chí là các biểu thức con như bar . baz
hoặc baz . quux
có thể được tách ra thành định nghĩa riêng.
Lý do thứ hai để thích (.)
được dự đoán là có thể thay đổi về độ cố định của ($)
; hiện nay, ($)
là infixr
, có nghĩa là nó liên kết ở bên phải, như vậy:
foo x = bar $ (baz $ (quux $ x))
Tuy nhiên, ($)
sẽ có ích trong các biểu thức hơn nếu nó là infixl
; ví dụ: một cái gì đó như
foo h = f (g x) (h y)
foo h = f $ g x $ h y
foo h = (f $ g x) $ h y
... hiện không thể được thể hiện mà không có dấu ngoặc đơn. Ví dụ "hình thức xấu", khi được phân tích cú pháp bằng ứng dụng infixl
, sẽ là
foo x = ((bar $ baz) $ quux) $ x
có nghĩa là có sự khác biệt đáng kể. Vì vậy, trong tương lai bằng chứng mã của bạn bằng cách tránh hình thức này.
Tôi cũng thỉnh thoảng thấy những thứ như 'bar. baz $ quux x' hoặc 'bar (baz. quux $ x)' hoặc các hỗn hợp khác, thường là khi các toán tử infix khác tham gia, hoặc khi các ứng dụng chức năng cụ thể đang được nhấn mạnh một cách khái niệm. –
IMO, đối số cố định kém hấp dẫn hơn so với thực tế là kiểu tổng hợp cho phép bạn cấu trúc lại đường ống vào một hàm với thao tác cắt và dán đơn giản. – ehird
Với tính cố định hiện tại, nếu bạn có 'bar $ baz $ quux $ x', điều này tương đương với' bar. baz. quux $ x'. Sau này, tất nhiên, được khuyến khích trước đây. –
- 1. Tại sao các biến toàn cầu được coi là hành vi xấu?
- 2. $$ (đô la hoặc đô la đôi) có nghĩa là gì trong PHP?
- 3. Đây có phải là cách sử dụng của nhà điều hành "instanceof" được coi là không hợp lệ không?
- 4. Tại sao tất cả các mũ liên tục được coi là phong cách mã hóa xấu?
- 5. Dấu đô la nghĩa là gì trong PHP?
- 6. Tại sao nhà điều hành đường ống hoạt động?
- 7. Tại sao sizeof được coi là toán tử?
- 8. Tại sao nhiều bài tập trong một dòng được coi là kiểu xấu?
- 9. Breaking the Build, Tại sao nó là một điều xấu?
- 10. Tại sao nhà điều hành Sobel trông như vậy?
- 11. Tên biến không được bắt đầu bằng 'm_': Quy tắc StyleCop 1308 - Tại sao tên này được coi là hành vi xấu (hoặc không tốt/tiêu chuẩn)?
- 12. dấu ba đô la trong jquery là gì?
- 13. Nếu xử lý tiền trong một phao là xấu, thì tại sao money_format() làm điều đó?
- 14. # $ làm gì trong bash? (aka: dấu đô la băm, dấu đô la bảng Anh)
- 15. Tại sao Redis được coi là CP?
- 16. Giữ lại chu kỳ: Tại sao điều xấu như vậy?
- 17. Tại sao C# không hỗ trợ quá tải cho nhà điều hành bằng cách tham chiếu?
- 18. Tại sao javascript: void (0) được coi là có hại?
- 19. Tại sao chứng chỉ X.509 này bị coi là không hợp lệ?
- 20. Tại sao mọi người gọi jQuery $ alias là 'nhà máy'?
- 21. Cách grep cho ký hiệu đô la ($)?
- 22. Tại sao C# quá tải của nhà điều hành phải là tĩnh?
- 23. LaTeX: ký hiệu đô la so với \ (\)
- 24. Điều gì là sự tinh tế của, nhà điều hành?
- 25. Nhà điều hành tồn tại CoffeeScript và điều này
- 26. Groovy *. Nhà điều hành
- 27. javascript - trần của một số đô la
- 28. Đồng đô la theo sau là chỉ số có nghĩa là gì trong tên lớp?
- 29. Nhà điều hành flip-flop là gì?
- 30. "là" - nhà điều hành cho Loại
Bạn có tham chiếu về vị trí được mô tả dưới dạng không hợp lệ không? – bobbymcr
Câu trả lời ngắn gọn: không. –