Tôi có nên sử dụng dấu chấm phẩy để phân định các câu lệnh Scala không?


9

Tôi đã sử dụng để phân định các câu lệnh bằng dấu chấm phẩy từ Java, do đó, tự nhiên tôi cũng làm điều đó trong mã Scala. Tôi cũng cảm thấy rằng mã dễ đọc hơn, bởi vì nó rõ ràng khi một câu lệnh kết thúc và một câu lệnh khác bắt đầu. Nhưng nhiều khi tôi đăng một đoạn mã Scala lên SO, mã được chỉnh sửa chỉ để xóa dấu chấm phẩy.

  1. Có nên sử dụng dấu chấm phẩy hay không? Có bất kỳ hướng dẫn "chính thức" hoặc phong cách mã hóa?
  2. Có trường hợp nào cần phải có dấu chấm phẩy, nếu không thì mã không rõ ràng?

5
Haskell có dạy gì cho bạn không? ; P loại bỏ cú pháp không cần thiết, dấu chấm phẩy chỉ nên được sử dụng để phá vỡ nhiều mệnh đề / câu lệnh trên cùng một dòng
Jimmy Hoffa

@JimmyHoffa Haskell đã dạy tôi rằng cú pháp phải đẹp và nhất quán :).
Petr Pudlák

2
Phần đầu tiên là lý do tại sao tôi cảm thấy khó chịu mỗi khi nhìn thấy đoạn trích Scala ...
Jimmy Hoffa

Câu trả lời:


9

Không có cách làm chính thức "đúng", nhưng hầu hết các học viên bỏ qua dấu chấm phẩy bất cứ nơi nào họ có thể (đó là lý do tại sao rất nhiều người loại bỏ dấu chấm phẩy theo phản xạ).

Ngôn ngữ rất cố gắng để làm cho bạn quên đi sự cần thiết phải chấm dứt các tuyên bố. Thật không may, nó không hoàn toàn thành công, do đó, có nhiều tình huống phức tạp khác nhau trong đó dấu chấm phẩy, hoặc một bộ dấu ngoặc đơn bổ sung hoặc "gợi ý" tương tự là cần thiết để tránh ngữ nghĩa không mong muốn. Những tình huống như vậy hầu như hiếm đến mức thông thường bạn không phải nghĩ về chúng. Ý kiến ​​khác nhau về việc điều này có nghĩa là bạn nên chấm dứt phòng thủ (đó là điều tôi nghĩ) hoặc không bao giờ chấm câu cho đến khi bạn gặp rắc rối (đó là điều mà phần lớn người dùng nghĩ). Cuối cùng, nó thuộc về việc bạn tự nhận mình là một kẻ bội ước hay một công dân kiểu mẫu.


Cảm ơn, có lẽ bạn có thể đưa ra một ví dụ (hoặc một vài :)) về các tình huống phức tạp như vậy?
Petr Pudlák

3
Tôi sợ rằng tôi đã được hỏi điều này ... Lập trình trong Scala liệt kê một vài trong số đó làm tôi ngạc nhiên, nhưng hiện tại tôi không có cuốn sách này và tôi quên các chi tiết. Đó là điểm mà tôi đang cố gắng thực hiện: nếu tôi có thể nhớ những tình huống đặc biệt này thì nó sẽ không tệ lắm, nhưng vì nó, tôi luôn cảm thấy không chắc chắn liệu tôi có thể thực sự bỏ qua dấu chấm phẩy hay không - vì vậy tôi không.
Kilian Foth

Huh. Tôi chưa bao giờ gặp phải tình huống thiếu dấu chấm phẩy ở Scala làm tôi đau. Tôi không bao giờ bao gồm chúng. Tôi cũng chỉ lập trình Scala cho những thứ giống như sở thích, nên có thể nó sẽ sớm cắn tôi.
KChaloux

4

Bạn muốn hiểu bao nhiêu ngôn ngữ bạn sử dụng? Bạn có muốn chơi đến những điểm mạnh của nó hay không? Cú pháp của Scala khuyến khích mã rõ ràng và súc tích; một số ít trường hợp lợi dụng điều này gây ra vấn đề cho trình phân tích cú pháp Scala mang tính hướng dẫn (nghĩa là bạn tìm hiểu thêm về Scala bằng cách gặp và học cách tránh chúng) và dần dần được sửa chữa (ví dụ ký hiệu hậu tố ). Phòng thủ sử dụng dấu chấm phẩy có thể có nghĩa là bạn sẽ không bao giờ phải tìm hiểu về những vấn đề này nhưng bạn có thực sự thấy đó là một điều tốt không? Các bản sửa lỗi cho các vấn đề này thường có ý nghĩa khác nhưng bạn sẽ bỏ lỡ những khả năng này.

Một cân nhắc khác là, như Kilian thừa nhận, hầu hết các nhà phát triển Scala đều bỏ qua các dấu chấm phẩy theo mặc định. Làm thế nào bạn mong đợi làm việc với mã của người khác nếu bạn tránh sử dụng Scala thành ngữ? Bạn sẽ thấy nó khó hơn nhiều so với nó cần.

Tôi không thể nhấn mạnh đủ rằng các tính năng này của trình phân tích cú pháp Scala đã được chọn để khuyến khích mã sạch, có thể sử dụng lại và chức năng (theo nghĩa fp). Lấy cú pháp toán tử infix làm ví dụ; nó khuyến khích các nhà phát triển cung cấp các lớp với các phương thức đơn giản, đơn mục đích kết hợp tốt với nhau. Thư viện bộ sưu tập của Scala cho thấy nó có thể hoạt động tốt như thế nào. Các nhà phát triển Java được đào tạo kinh điển nắm bắt được điều này sẽ có xu hướng phát triển các thói quen tốt hơn và cách suy nghĩ mới về mã của họ. Những người dính vào tất cả những dấu chấm và dấu ngoặc quen thuộc sẽ bỏ lỡ. Tôi cho rằng điều này cũng đúng với những người quá rụt rè khi từ bỏ dấu chấm phẩy.


8
-1 có, bị "ép buộc" học ngôn ngữ do trình biên dịch gotchas không hợp thời với C ++. Ngoài ra, có rất ít bằng chứng đằng sau những lời khẳng định, mà tôi muốn có một câu trả lời với giọng điệu thiên vị như vậy.
Telastyn

(1) Những gì @Telastyn nói - nếu bạn thực sự muốn học một ngôn ngữ theo cách này, hãy lấy một con mèo, chúng thích ngồi trên bàn phím vì chúng quan tâm đến giáo dục của bạn. (2) Bỏ dấu chấm phẩy không liên quan gì đến phong cách sạch sẽ hoặc khuyến khích nó - nếu có bất cứ điều gì, việc bỏ dấu chấm phẩy đang che giấu thực tế rằng đây những câu lệnh riêng biệt được thực hiện tuần tự và có thể có tác dụng phụ. Để lại dấu chấm phẩy giúp bạn nhận ra điều đó và do đó thích một phong cách chức năng hơn. Do đó, quyết định hoàn toàn là cú pháp (ví dụ: phong cách, phân tích cú pháp, v.v.).
Eli Barzilay

Trong khi "buộc phải học ngôn ngữ" không bay, "sử dụng ngôn ngữ như tác giả của nó" và "như hầu hết các nhà phát triển khác sử dụng nó" là những điểm tham khảo quan trọng. Duy trì phong cách nhất quán giữa nhiều nhà phát triển là hữu ích. Từ cả câu trả lời này và từ @Killan Foth, các nhà bảo trì và hầu hết các nhà phát triển dường như xem dấu chấm phẩy là không liên quan.
Sarah Messer
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.