Tại sao kotlin thả từ khóa mới? Nó làm cho nó khó khăn hơn để thấy sự khác biệt giữa một cuộc gọi chức năng và phân bổ đối tượng.Tại sao kotlin thả từ khóa "mới"?
Trả lời
Các Kotlin Coding Conventions nêu rõ rằng:
- sử dụng camelCase cho tên (và tránh gạch dưới trong tên)
- loại bắt đầu với chữ hoa
- method và thuộc tính bắt đầu với chữ thường
Nếu bạn theo dõi bên trên và coi constructor
là chức năng thông thường có thể được gọi là val invoice = Invoice()
từ khóa new
trở thành dư thừa. Khi bạn tự mình làm quen với quy ước, rõ ràng mã đang làm.
Trong thực tế, ngay cả trong mã Java bạn sẽ có nhiều ngầm phân bổ chỉ xảy ra dưới một phương pháp gọi như Collections.singleton(o)
hoặc ổi của Lists.newArrayList()
vì vậy tôi không nghĩ rằng lập luận của mình về tầm nhìn phân bổ là tốt hơn với các từ khóa new
hoàn toàn có hiệu lực.
Bằng cách này, có ý nghĩa khi thiết lập tô sáng cú pháp trong IDE sao cho nó sẽ làm nổi bật tên lớp trong * hơi * màu khác nhau. Nó sẽ làm cho các cuộc gọi hàm tạo khác biệt dễ dàng hơn. – hotkey
(IMO) Nó được thực hiện vì không có sự khác biệt thực sự giữa các hàm và xây dựng đối tượng, tức là không có gì ngăn cản một hàm phân bổ một đối tượng (và chúng thường làm).
Ví dụ điển hình là chức năng của nhà máy. Các hàm này tạo ra các đối tượng mới, nhưng chúng không phải là các hàm tạo lớp.
AFAIK, từ khóa new
được tạo vì trải nghiệm tiêu cực với C \ C++, trong đó hàm, trả về đối tượng mới, phải được đánh dấu đặc biệt (theo quy ước tên) để không quên (thủ công) giải phóng bộ nhớ . Trong một ngôn ngữ quản lý bộ nhớ tự động như Java \ Kotlin nó không phải là một mối quan tâm.
Một số ngôn ngữ khác không có từ khóa new
(Python, Scala, có thể là Ceylon) và những người đã chuyển sang các ngôn ngữ đó dường như không bao giờ bỏ lỡ nó. Tôi biết tôi không.
Scala có từ khóa 'mới'. Nó chỉ là có những trường hợp mà bạn không cần phải sử dụng nó, giống như với các trường hợp lớp học. – marcospereira
Ồ, bạn nói đúng. Và, bằng cách sử dụng các đối tượng đồng hành, bạn có thể làm cho lớp không thể phát tán và chuyển hướng đó tới hàm tạo, loại bỏ hiệu quả nhu cầu mới. Tôi đã nhìn thấy điều đó trong cái nhìn ngắn gọn của tôi về Scala, và đã quên rằng đó không phải là chuẩn mực. –
- 1. Tại sao từ khóa mới không cần thiết cho Chuỗi
- 2. Từ khóa chéo của Kotlin
- 3. Từ khóa 'by' làm gì ở Kotlin?
- 4. Gọi hàm kotlin là từ khóa trong java từ java?
- 5. Tại sao sử dụng từ khóa void?
- 6. Tại sao JSLint cấm từ khóa "này"?
- 7. Tại sao từ khóa "gói" và .h?
- 8. Tại sao tôi cần từ khóa `mới` cho một phiên bản` Ngày` trong JavaScript?
- 9. Từ khóa mới: tại sao phương thức dẫn xuất không được gọi?
- 10. Tại sao mã để mô hình UNTIL/REPEAT yêu cầu từ khóa mới?
- 11. Tại sao từ khóa không đồng bộ tồn tại
- 12. Tại sao khóa khi đọc từ một từ điển
- 13. Python, tại sao lại là từ khóa elif?
- 14. Từ khóa header/impl có nghĩa là gì trong kotlin?
- 15. Mục đích của từ khóa `external` trong Kotlin là gì?
- 16. Từ khóa "mới" trong Scala
- 17. Tại sao phần tử thả xuống
- 18. Tại sao MySQL sử dụng bảng tạm thời để thả khóa chính?
- 19. Tại sao Clojure có "từ khóa" ngoài "biểu tượng"?
- 20. Tại sao IntPtr không cần từ khóa không an toàn?
- 21. Tại sao LINQ không bao gồm từ khóa `khác biệt`?
- 22. Tại sao từ khóa params không theo ngữ cảnh?
- 23. Tại sao loại null null vô hạn trong Kotlin?
- 24. PHP từ khóa bản sao
- 25. Observable.combineLoại suy luận mới nhất trong kotlin
- 26. Sử dụng từ khóa mới trong C#
- 27. C++: struct và mới từ khóa
- 28. Tại sao chức năng javascript cần phải có từ khóa "async"? Không phải là từ khóa "đang chờ" đủ?
- 29. Tại sao tôi không thể đặt {của một lớp ẩn danh ở một dòng mới trong Kotlin?
- 30. Tại sao Kotlin không cho phép sử dụng lateinit với các kiểu nguyên thủy?
http://stackoverflow.com/help/dont-ask –