Triết lý đằng sau việc biến các biến cá thể thành công theo mặc định trong Scala là gì. Không nên đặt chúng ở chế độ riêng tư theo mặc định, nhà phát triển có ít sai sót hơn và khuyến khích sáng tác không?Triết lý đằng sau việc biến các biến mẫu là gì theo mặc định trong Scala?
Trả lời
Trước tiên, bạn nên biết rằng khi bạn viết:
class Person(val name: String, val age: Int) {
...
}
name
và age
không biến dụ nhưng accessors phương pháp (thu khí), mà là công khai theo mặc định.
Nếu bạn viết thay vì:
class Person(name: String, age: Int) {
...
}
name
và age
chỉ biến Ví dụ, đó là riêng tư như bạn có thể mong đợi.
Triết lý của Scala là thích các biến mẫu bất biến, sau đó có các phương thức truy cập công khai không còn là vấn đề nữa.
Riêng tư khuyến khích nguyên khối. Ngay sau khi nó dễ dàng hơn để đưa chức năng không liên quan vào một lớp chỉ vì nó cần phải đọc một số biến xảy ra là riêng tư, các lớp bắt đầu phát triển.
Nó chỉ là một mặc định xấu và là một trong những lý do chính cho các lớp học với hơn 1000 dòng trong Java.
Scala mặc định là không thay đổi, loại bỏ một số lượng lớn các lỗi mà mọi người thường sử dụng riêng để hạn chế (nhưng không loại bỏ, vì các phương thức riêng của lớp vẫn có thể biến đổi các biến) trong Java.
- với immutables được ưa thích ở nhiều nơi, công không phải là quá nhiều của một vấn đề
- bạn có thể thay thế một val công với getter và setter mà không thay đổi mã khách hàng, do đó bạn không cần thêm lớp getters và setters chỉ trong trường hợp bạn cần nó. (Trên thực tế bạn nhận được lớp đó nhưng bạn không nhận thấy nó hầu hết thời gian.)
- java chống mô hình của lĩnh vực tư nhân + setters công cộng và thu khí không đóng gói nhiều anyway
(Một thêm xem bổ sung các câu trả lời khác :)
Một trình điều khiển chính đằng sau việc đóng gói các trường của Java là chính sách truy cập thống nhất, tức là bạn không phải biết hoặc quan tâm liệu một cái gì đó đã được thực hiện đơn giản như một trường hay được tính bằng phương thức con ruồi. Sự lộn ngược lớn của việc này là người bảo trì của lớp đang nghi ngờ có thể chuyển đổi giữa hai người theo yêu cầu, mà không cần phải sửa đổi các lớp khác.
Trong Java, điều này yêu cầu mọi thứ được truy cập thông qua một phương pháp, để cung cấp tính linh hoạt cú pháp để tính toán giá trị nếu cần. Trong Scala, các phương thức và trường có thể được truy cập thông qua cú pháp tương đương - vì vậy nếu bạn có một thuộc tính đơn giản ngay bây giờ, sẽ không mất gói gọn để hiển thị trực tiếp, vì bạn có thể chọn nó như một phương thức no-arg sau này. mà không có người gọi của bạn cần phải biết bất cứ điều gì về sự thay đổi.
- 1. Lý do đằng sau việc đặt các hằng số trong các câu lệnh if là gì?
- 2. Có lý do cụ thể nào đằng sau việc sử dụng $ với biến trong jQuery
- 3. Triết lý quản lý bộ nhớ trong C++ là gì?
- 4. Khái niệm đằng sau R.java là gì?
- 5. Các biến mẫu có được đặt thành nil theo mặc định trong Objective-C không?
- 6. Lý do đằng sau việc phải chỉ định L cho dài, F, D cho nổi, đôi
- 7. Lý do đằng sau cbegin/cend là gì?
- 8. Biến mặc định Perl $ _
- 9. Giả lập các mẫu biến thể trong Scala
- 10. Lý do đằng sau `=>` trong một kiểu tự là gì?
- 11. Lý do đằng sau việc loại bỏ crt0.o khỏi gcc4.7.x là gì?
- 12. Phép thuật đằng sau Escape (\) là gì
- 13. Triết lý thiết kế tổng thể của php là gì?
- 14. Phép thuật đằng sau Lightstreamer là gì?
- 15. Xử lý một mẫu biến không xác định trong Tornado
- 16. Lý do cơ bản đằng sau các tiêu đề là gì?
- 17. Tại sao các biến trong Java dễ bay hơi theo mặc định?
- 18. Lý do thiết kế đằng sau STL
- 19. Trong MATLAB, các biến REALLY có chính xác kép theo mặc định không?
- 20. Suy nghĩ đằng sau việc triển khai thực đơn thả xuống trong Twitter Bootstrap là gì?
- 21. gradle doLast triết lý
- 22. Truy cập biến từ mã đằng sau thông qua javascript
- 23. Biến thể Python Biến thành Tham số Mặc định
- 24. 'mặc định' làm tên biến
- 25. Điều gì thay thế các biến lớp trong scala?
- 26. Biến các biến mẫu trong các thử nghiệm rspec
- 27. Lý do cơ bản đằng sau bảo mật tên miền chéo AJAX là gì?
- 28. Việc sử dụng biến chia sẻ trong VB.NET là gì?
- 29. Việc sử dụng "biến thành" trong qt là gì?
- 30. Truyền các loại giá trị bất biến theo tham chiếu theo mặc định
Trong ví dụ thứ hai của bạn, 'name' và' age' cũng có thể chỉ là tham số hàm tạo và không phải là biến mẫu, tùy thuộc vào cách chúng được sử dụng trong nội dung của 'Person'. –
Có bạn nói đúng, tôi không muốn làm phức tạp câu trả lời. – paradigmatic