2016-01-20 18 views

Trả lời

13

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.

+2

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

10

(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.

3

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.

+0

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

+0

Ồ, 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. –

Các vấn đề liên quan