Dưới đây là một vài lý do, có thể ít nhiều hấp dẫn đối với bạn, tùy thuộc vào sở thích của riêng bạn:
Đừng chỉ đơn giản là giảm giá vì nó là "đường cú pháp". Mặc dù bạn có thể nói rằng một cái gì đó chỉ là đường cú pháp, nhưng sau tất cả các loại đường làm ngọt cuộc sống của bạn - với tư cách là một lập trình viên cũng như một người uống cà phê hoặc trà.
Singletons - mỗi Scala object
vốn dĩ là một singleton. Xem xét rằng trong thế giới Java, mọi người đang triển khai các singleton theo đủ mọi cách khác nhau và thường xuyên hơn là không mắc một số lỗi trong quá trình thực hiện, bạn không thể mắc lỗi đơn giản như trong Scala. Viết object
thay vì class
làm cho nó một singleton và bạn đã hoàn thành.
Truy cập vào các phương thức tĩnh: Các phương thức tĩnh trong Java có thể được truy cập từ các đối tượng. Ví dụ, giả sử bạn có một lớp C
với một phương thức tĩnh f
và một đối tượng c
kiểu C
. Sau đó, bạn nên gọi C.f
, nhưng Java cho phép bạn (mặc dù có cảnh báo) để sử dụng c.f
, khi bạn đến từ nền Scala thực sự không có ý nghĩa gì, bởi vì các đối tượng thực sự không có phương thức f
.
Xóa tách: Trong Java, bạn có thể trộn các thuộc tính và phương thức tĩnh và không tĩnh trong một lớp. Nếu bạn làm việc có kỷ luật, điều này không trở thành vấn đề, tuy nhiên, nếu bạn (hoặc người khác cho vấn đề đó) không, thì bạn kết thúc với các phần tĩnh và không tĩnh xen kẽ và rất khó để nói nhanh cái gì tĩnh và cái gì không. Trong Scala, mọi thứ nằm trong đối tượng đồng hành rõ ràng không phải là một phần của các đối tượng thời gian chạy của lớp tương ứng, nhưng có sẵn từ một bối cảnh tĩnh. Ngược lại, nếu nó được viết bên trong một lớp, nó có sẵn cho các thể hiện của lớp đó, nhưng không phải từ một bối cảnh tĩnh. Điều này trở nên đặc biệt nặng nề trong Java, khi bạn bắt đầu thêm các khối khởi tạo tĩnh và không tĩnh vào lớp của mình. Điều này có thể rất khó để hiểu theo thứ tự thực hiện động.
Ít mã hơn: Bạn không cần thêm từ tĩnh vào từng thuộc tính hoặc phương thức trong một object
, do đó giữ cho mã ngắn gọn hơn (thực sự, không thực sự là một lợi thế nổi bật).
Nhược điểm là khó tìm hơn nhiều. Người ta có thể lập luận rằng các phần tĩnh và không tĩnh phải thuộc về nhau, nhưng được phân tách bằng khái niệm Scala của các đối tượng đồng hành. Ví dụ, có thể có một sơ đồ lớp có vẻ lạ, nhưng sau đó cuối cùng phải tạo hai thứ trong mã và phân tích thuộc tính nào đi đâu.