2009-09-21 17 views
6

Tôi đang viết một ứng dụng Java bằng Struts 2, nhưng bây giờ tôi muốn biến nó thành một dự án Java lai & Scala lai thay thế. Tôi không có nhiều kinh nghiệm với Scala, nhưng tôi đã học Haskell nhiều năm trước đại học - tôi thực sự thích mô hình chức năng được lập trình, nhưng tất nhiên trong lớp chúng tôi chỉ đưa ra những vấn đề vô cùng phù hợp với giải pháp chức năng! Trong thế giới thực, tôi nghĩ rằng một số mã phù hợp hơn với một phong cách bắt buộc, và tôi muốn tiếp tục sử dụng Java cho điều đó (tôi biết Scala hỗ trợ cú pháp bắt buộc, nhưng tôi chưa sẵn sàng đi theo hướng của một dự án Scala thuần túy chỉ chưa).Những phần nào của ứng dụng Java nên được viết bằng Scala?

Trong một dự án hỗn hợp, làm thế nào để quyết định mã nào trong Java và mã gì trong Scala?

Trả lời

3

Hãy hỏi những câu hỏi sau về dự án của bạn: "Hoạt động nào cần tác dụng phụ?" và "Các chức năng nào đã được các thư viện Java bảo vệ tốt?" Sau đó, thực hiện phần còn lại trong Scala.

Tuy nhiên, tôi sẽ cảnh báo rằng các dự án lai là do bản chất của chúng khó khăn hơn so với các dự án độc lập khi bạn cần sử dụng nhiều ngôn ngữ/môi trường. Vì vậy, cho bạn yêu cầu không có nhiều kinh nghiệm với Scala Tôi khuyên bạn nên chơi với một số dự án đồ chơi đầu tiên, có lẽ là một tập hợp con của mục tiêu đầy đủ của bạn. Điều đó cũng sẽ cho bạn cảm giác về sự phân chia sẽ xảy ra ở đâu.

+0

Điểm lấy ... may mắn thay đó là một dự án nhà, vì vậy tôi có thể tận dụng nó như một kinh nghiệm học tập. Nếu nó chứng tỏ thành công, tôi chắc chắn sẽ xem xét việc truyền giáo Scala tại văn phòng. –

+0

Vâng tôi đồng ý. Dự án đa ngôn ngữ là rất có vấn đề. Chúng tôi đang trải qua điều tương tự ở đây. –

+0

Thực ra tôi là fan của JVM + ... Tôi chỉ ra rằng để làm điều đó một cách hiệu quả, nó thực sự đơn giản hơn nhiều khi học 100% dự án đầu tiên. –

10

Hai điều:

  1. 99% của mã Java có thể được thể hiện bằng Scala
  2. Bạn có thể viết các dự án có hỗ trợ Java hỗn hợp + Scala biên dịch. Mã Scala của bạn có thể gọi mã Java của bạn và mã Java của bạn có thể gọi mã Scala của bạn. (Nếu bạn muốn làm điều sau, tôi đề nghị xác định giao diện trong Java và sau đó chỉ cần thực hiện nó trong Scala. Nếu không, gọi mã Scala từ Java có thể có một chút xấu xí.)

Vì vậy, câu trả lời là: các bộ phận bạn muốn. Mã Scala của bạn không cần phải hoàn toàn hoạt động. Mã Scala của bạn có thể gọi các thư viện Java. Vì vậy, khá nhiều phần bạn có thể viết bằng Java, bạn cũng có thể viết trong Scala.

Bây giờ, một số cân nhắc thực tế hơn. Khi lần đầu tiên thử Scala, một số người chọn các phần tương đối cô lập, phi sứ mệnh trong chương trình của họ để viết trong Scala. Bài kiểm tra đơn vị là một ứng cử viên tốt nếu bạn thích cách tiếp cận đó.

Nếu bạn đã quen thuộc với Java và đã học được Haskell trong quá khứ, tôi khuyên bạn nên coi Scala là "Java tốt hơn". Về cơ bản, Scala biên dịch sang bytecode JVM rất, rất giống với kết quả đầu ra Java. Sự khác biệt duy nhất là Scala là "hiệu quả" hơn: nó tạo ra nhiều bytecode trên mỗi dòng mã hơn Java. Scala có rất nhiều điểm chung với Haskell (các hàm hạng nhất, cho hiểu cũng giống như ký hiệu của Haskell, suy luận kiểu giới hạn), nhưng nó cũng rất khác nhau (nó không phải là lười theo mặc định, nó không thuần túy). Vì vậy, bạn có thể sử dụng một số thông tin chi tiết của bạn từ Haskell để truyền cảm hứng cho phong cách Scala của bạn, nhưng "dưới mui xe" đó là tất cả bytecode Java.

6

Theo tinh thần câu hỏi của bạn, tôi khuyên bạn nên viết trong Scala bất kỳ mã nào liên quan đến thao tác nặng nề của các bộ sưu tập hoặc xử lý XML.

Thư viện bộ sưu tập của Scala là tính năng chức năng quan trọng nhất của Scala, và bạn sẽ trải nghiệm việc giảm thiểu LoC tuyệt vời thông qua việc sử dụng nó. Có, có các lựa chọn thay thế Java, chẳng hạn như thư viện bộ sưu tập của Google, nhưng bạn đã hỏi bạn nên viết gì ở Scala. :-)

Scala cũng có xử lý XML gốc.Bạn cũng có thể tìm thấy sự chuyển tiếp khó khăn, nếu bạn cố gắng lấy mã DOM và làm cho nó hoạt động trên Scala. Nhưng nếu bạn, thay vào đó, cố gắng tiếp cận vấn đề và quan điểm Scala và viết nó từ đầu cho Scala, bạn sẽ có lợi.

Tôi cũng khuyên bạn nên sử dụng diễn viên, nhưng tôi không chắc bạn có thể tích hợp tốt như thế nào với mã Struts 2 trên Java. Nhưng nếu bạn có mã đồng thời, hãy cho các diễn viên trong Scala một ý nghĩ.

5

Nghe có vẻ ngớ ngẩn, nhưng tại sao bạn không viết toàn bộ dự án trong Scala? Đó là một ngôn ngữ tuyệt vời có ý nghĩa hơn nhiều so với Java trong khi vẫn duy trì khả năng truy cập tương thích nhị phân với các thư viện Java hiện có.

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