2009-08-28 39 views

Trả lời

35

Đọc đọc Daniel Spiewak's excellent blog series về Scala. Với Scala bạn có thể giữ:

  • tất cả các thư viện Java của bạn
  • tất cả những ưu điểm của chạy trên một JVM (có mặt khắp nơi, các công cụ hành chính, hồ sơ, thu gom rác thải vv)

Nhưng bạn có thể viết Scala mã:

  • ngắn gọn hơn và rõ ràng hơn so với Java (đặc biệt là sử dụng nhiều chức năng phong cách, ví dụ như trong thư viện các bộ sưu tập)
  • nó có đóng cửa và chức năng như là một phần của ngôn ngữ
  • nó có vận hành quá tải (từ quan điểm của sử dụng)
  • nó có mixins (ví dụ: các giao diện có chứa triển khai)
6

Tôi không chắc bạn có thể dễ dàng sử dụng Scala trong các chương trình Java của bạn hay không, như trong "gọi một lớp Scala từ một lớp Java".

Bạn có thể thử, theo dõi bài viết "Mixing Java and Scala".
chiết xuất liên quan:

Vấn đề là các bước biên dịch Java và Scala là riêng biệt: bạn không thể biên dịch file cả Java và Scala trong một đi.
Nếu không có tệp Java nào của bạn tham chiếu bất kỳ lớp Scala nào trước tiên bạn có thể biên dịch tất cả các lớp Java của bạn, sau đó biên dịch các lớp Scala của bạn.
Hoặc nếu không có tệp Scala nào của bạn tham chiếu bất kỳ lớp Java nào, bạn có thể thực hiện theo cách khác.
Nhưng nếu bạn muốn các lớp Java của bạn có quyền truy cập vào các lớp Scala của bạn và cũng có các lớp Scala có quyền truy cập vào các lớp Java của bạn, đó là một vấn đề.

Scala mã có thể dễ dàng gọi trực tiếp vào mã Java, nhưng đôi khi gọi mã Scala từ mã Java là phức tạp hơn, vì bản dịch từ Scala vào bytecode không phải là khá đơn giản như cho Java:
đôi khi trình biên dịch Scala thêm ký tự để biểu tượng hoặc thực hiện các thay đổi khác phải được xử lý rõ ràng khi gọi từ Java.
Nhưng một lớp Scala có thể thực hiện một giao diện Java, và một thể hiện của lớp đó có thể được chuyển tới một phương thức Java mong đợi một thể hiện của giao diện.
Lớp Java sau đó gọi các phương thức giao diện trên cá thể đó chính xác như thể nó là một cá thể lớp Java.

Điều ngược lại có thể, tất nhiên, như được mô tả trong Roundup: Scala for Java Refugees, từ Daniel Spiewak.

16

Ngoài ra, hãy xem bài đăng tin tức gần đây này trên trang web của Scala: "Research: Programming Style and Productivity".

Trong bài báo của mình, Gilles Dubochet, mô tả cách ông điều tra hai khía cạnh của phong cách lập trình bằng cách sử dụng theo dõi chuyển động mắt.Ông nhận thấy rằng, trung bình, nhanh hơn 30% để hiểu các thuật toán sử dụng cho hiểu và bản đồ, như trong Scala, chứ không phải là những thuật toán lặp lại trong Java.

Và một trích dẫn quan trọng từ các mục tin tức:

Alex McGuire, người viết dự án quan trọng sứ mệnh tại Scala cho các công ty mua bán điện, nói về Scala "The conciseness có nghĩa là tôi có thể xem chi tiết của một chương trình Khi tôi có một số mô hình toán học để viết bằng Java, tôi phải giữ hai mô hình trong đầu, chính mô hình toán học và mô hình thứ hai là cách thực hiện nó trong Java. Scala một mô hình, một mô hình toán học, sẽ làm. Nhiều hơn nữa hiệu quả. ”

Bạn đọc phần còn lại của bài đăng và các mục được liên kết khác there.

+0

Liên kết cho giấy bị hỏng, googling Tôi đã tìm thấy http://infoscience.epfl.ch/record/138586/files/dubochet2009coco này – pedrofurla

9

tôi có thể đặt tên một số điểm rất rõ ràng trong ngôn ngữ rất đơn giản từ kinh nghiệm hạn chế của tôi:

  1. Properties. C++ và Java có khái niệm về một hàm getter/setter công cộng "property" bao quanh một biến lớp nội bộ dẫn đến một lượng lớn mã soạn sẵn. C# đã chính thức hóa tính năng này như một tính năng ngôn ngữ thực tế và giảm phần lớn các bản mẫu trong C# 3.0 với các thuộc tính tự động thực hiện. Các lớp Scala định nghĩa các thuộc tính tầm thường đơn giản như các vals chỉ đọc thông thường hoặc các ghi đọc/ghi. Lớp này sau đó có thể chọn để thay thế những người có phương thức get hoặc get/set mà không ảnh hưởng đến mã máy khách. Đối với điều này, Scala cung cấp các giải pháp thanh lịch nhất với các tính năng ngôn ngữ ít nhất và phức tạp.

  2. Mảng sử dụng Generics thông thường. Trong Java/C#, generics được bắt đầu như một suy nghĩ sau và hoàn toàn tách biệt nhưng có hành vi chồng chéo với các mảng.

  3. Scala có bất biến "val" như là một tính năng langauge hạng nhất. Trên thực tế, val tương tự như biến cuối cùng của Java: tham chiếu trên cùng là không thay đổi, nhưng nội dung có thể thay đổi.

  4. Scala cho phép nếu các khối, vòng lặp cho sản lượng và mã trong dấu ngoặc trả lại giá trị. Điều này rất thanh lịch trong nhiều tình huống. Một điểm cộng rất nhỏ là việc này loại bỏ sự cần thiết của một toán tử ternary riêng biệt.

  5. Scala có đối tượng singleton thay vì C++/Java/C# class static. Đây là một giải pháp sạch hơn.

  6. Đối sánh mẫu. Giải nén đối tượng. Rất đẹp trong một số lượng lớn các tình huống.

  7. Bộ dữ liệu gốc.

  8. Bộ sưu tập không thay đổi liên tục là mặc định và được tích hợp vào thư viện chuẩn.

1

Dưới đây là một số lợi thế của việc sử dụng Scala:

  • Một giải pháp chức năng cho một vấn đề phải lúc nào cũng tốt hơn: Đây là viewand cá nhân của tôi là mở cửa cho tranh chấp. Việc loại bỏ đột biến từ mã ứng dụng cho phép ứng dụng chạy song song trên các máy chủ và lõi mà không có bất kỳ khóa chết nào.
  • Mô hình đồng thời tốt hơn: Scala có mô hình diễn viên tốt hơn mô hình khóa của Java trên một chuỗi.
  • Mã súc tích: Mã Scala ngắn gọn hơn so với người anh em họ dài dòng hơn, Java.
  • Nhập an toàn/nhập tĩnh: Scala thực hiện kiểm tra kiểu tại thời gian biên dịch.
  • Đối sánh mẫu: Các tuyên bố trường hợp trong Scala cực kỳ mạnh.
  • Thừa kế: Các đặc điểm mixin rất tuyệt, và chúng chắc chắn làm giảm sự lặp lại mã.
  • Ngôn ngữ cụ thể theo miền (DSL): Cú pháp Scala cho phép lập trình viên tự động tìm kiếm DSL. Khả năng này được xây dựng cẩn thận vào thiết kế ngôn ngữ gốc. Đây là một tính năng rất mạnh mẽ của Scala. Scala test/specs được xây dựng dựa trên tính năng này.
Các vấn đề liên quan