Một trường hợp sử dụng tốt cho scala là gì? [đóng cửa]


8

Trong một dự án hiện tại, chúng tôi đã thiết lập bản dựng để có thể kết hợp Java và Scala. Tôi muốn sử dụng nhiều Scala hơn trong cơ sở mã của chúng tôi để làm cho mã dễ đọc và súc tích hơn. Trong quá trình cũng học ngôn ngữ bằng cách bàn giao các tính năng thực sự.

Vì vậy, tôi dự định sử dụng Scala cho một số lớp để giới thiệu lợi ích của nó và thuyết phục các nhà phát triển khác xem xét sử dụng Scala.

Đối với một máy chủ web dựa trên phần còn lại hoặc một chương trình nói chung loại cấu trúc mã nào cho vay theo phong cách lập trình chức năng của Scala.


7
-1: Tôi là tất cả để học các ngôn ngữ mới ( đặc biệt là các ngôn ngữ có nhiều chức năng hơn hiện nay) ... nhưng tìm kiếm một lý do để trộn lẫn một ngôn ngữ và mô hình khác vào mã sản xuất? Đó là không. Đi với một dự án cá nhân, hoặc một ứng dụng / tiện ích / công cụ riêng biệt mà quản lý ký tắt ... nhiều nhất là.
Steven Evers

1
Dự án đang trong giai đoạn Pre-alpha và chúng tôi có nhiệm vụ thử nghiệm.
Usman Ismail

2
@SnOrfus: "Điều đó là không.": Tôi thấy đó là một cách tốt để làm việc với mã kế thừa (thay vì chờ đợi bản sửa đổi tương thích ngược của ngôn ngữ mà mã kế thừa được viết).
Giorgio

2
Yêu cầu một danh sách các thứ (như các lớp và trường hợp sử dụng) thường không phù hợp với trang web này. Tôi nghĩ rằng bạn có một câu hỏi tốt trong đó, mặc dù. Bạn có thể muốn thử đọc lại nó.
Karl Bielefeldt

1
Nếu ứng dụng của bạn sử dụng đồng thời và thông tin liên lạc rất nhiều, bạn có thể muốn xem xét akka.io . Mặt khác, hãy thử viết một ví dụ trong đó bạn sử dụng rất nhiều các bộ sưu tập với các biến đổi phức tạp như lọc, gấp, ánh xạ. Đối với điều này, Scala có thể ngắn gọn hơn nhiều so với Java.
Giorgio

Câu trả lời:


4

Một ví dụ điển hình nếu bạn muốn minh họa tính đồng nhất của mã chức năng có thể sử dụng các bộ sưu tập và các hoạt động của chúng. Ví dụ, hãy xem xét một lớp Customervà một phương thức tạo ra một danh sách sắp xếp tên khách hàng từ danh sách khách hàng.

Đây là cách triển khai Java:

class Customer
{
    String name;

    ... // Other attributes.
}

List<String> sortedCustomerNames(List<Customer> customers)
{
    List<String> names = new ArrayList<String>();

    for (Customer customer : customers)
        names.add(customer.name);

    Collections.sort(names);

    return names;
}

Phiên bản Scala:

class Customer(val name: String, /* ... other attributes */)

def sortedCustomerNames(customers: List[Customer]): List[String] =
  customers.map(c => c.name).sorted

GHI CHÚ

Sự đồng nhất về các tổ hợp phím không phải lúc nào cũng là thước đo tốt về chất lượng mã và khả năng bảo trì.

Ngoài ra, nói chung tôi sẽ không khuyên chuyển từ Java sang Scala chỉ vì Scala mới hơn. Nếu hầu hết các thành viên trong nhóm quen thuộc với Java, nhóm sẽ làm việc hiệu quả hơn với Java so với Scala (hoặc bất kỳ ngôn ngữ lập trình nào khác mà họ không biết rõ).

Tôi đã học Scala trong thời gian rảnh khoảng hai năm nay và chỉ gần đây (sau khi tham gia một khóa học trực tuyến) tôi có cảm giác tôi có thể làm việc hiệu quả hơn ở Scala so với tôi ở Java. Trước khi đạt đến điểm này, tôi sẽ không cân nhắc sử dụng Scala cho sản xuất.


1
Conciseness in terms of keystrokes is not always a good measure of code quality and maintainabilityĐặc biệt là khi viết mã bằng Perl.
yannis

Đây là một ví dụ tốt về những gì tôi đang tìm kiếm, tôi không muốn chuyển mọi thứ sang scala ngay lập tức nhưng các lớp tiện ích nhỏ làm những điều hiển nhiên sẽ là một nơi tốt để bắt đầu. thx
Usman Ismail

1
@Usman Ismail: Một thứ khác bạn có thể xem là bộ sưu tập Scala. Gần đây tôi rất ấn tượng với những gì người ta có thể làm với Stream: bạn có thể thực hiện các tìm kiếm đầu tiên phức tạp trong không gian giải pháp cho đến khi bạn gặp một giải pháp (như tìm đường dẫn từ một đối tượng nhất định đến một đối tượng khác, với một số ràng buộc nhất định). Tôi không biết nếu điều này có liên quan đến bạn.
Giorgio

3

Đối với tất cả, ở mọi nơi có thể hoặc không có gì, chỉ cần sử dụng Java. Bằng cách này, nó sẽ làm việc lành mạnh. Tôi đã thực hiện những thí nghiệm như vậy từ lâu nhưng trong những lần sau, bạn viết lại mọi thứ thành một hoặc hai (để bạn giữ một số thứ nếu điều đó không thể được thực hiện bằng ngôn ngữ khác) chỉ để rõ ràng.

Nếu bạn có thể khai báo lớp ngắn hơn trong 2 dòng mã, đó không phải là lợi thế, bạn không được sử dụng ngôn ngữ cho "tính năng" này. Ví dụ, bạn cũng có thể viết mã chức năng đẹp trong các dòng xxx và dành thời gian yyy và có thể đồng thời bạn có thể viết mã theo kiểu OOP theo xxx + 150 dòng trong thời gian yyy-2 giờ với lợi ích về độ hoàn hảo (ai biết được). Điều tôi muốn nói là không thể nói "phần này sẽ tốt hơn trên Scala" và "phần này trên Java". Trong quá trình phát triển, bạn không được khám phá các tính năng, theo tôi, bạn chỉ cần phát triển mà không pha trộn và suy nghĩ về logic chung thay vì thực hiện bằng ngôn ngữ X hoặc Y, tại sao, theo tôi, để rõ ràng và năng suất, bạn phải chọn ngôn ngữ cho dự án thay vì cho tính năng .


Tôi sẽ không đồng ý một chút ở đó vì hiện tại có ít hơn 150 dòng mã để kiểm tra và có các lỗi tiềm ẩn.
Usman Ismail

2
Các dòng mã không có ý nghĩa gì cả. nếu mã perl có thể nhỏ hơn 5x so với python, điều đó không có nghĩa là nó dễ kiểm tra hơn và chứa các lỗi tiềm năng ít hơn. Vâng, có một số dự án với hỗn hợp perl và python nhưng tôi không thực sự xem đó là tính năng thú vị.
cnd

Quan điểm của bạn là hợp lệ, tuy nhiên hãy xem Project Lombok, như một ví dụ về cách bạn có thể giảm mức độ chi tiết của Java một cách thanh lịch. Tôi đã tự hỏi nếu có một lợi ích tương tự với các tính năng chức năng của Scala. Scala được thiết kế để trộn với Java không giống như các ngôn ngữ chức năng khác như erlang, có lẽ sẽ là một lựa chọn tốt hơn nếu chúng ta có đầy đủ chức năng.
Usman Ismail

1
Tôi vẫn không hiểu sự pha trộn đó. Nếu Scala tốt cho bạn thì hãy sử dụng nó ở mọi nơi bạn có thể trong dự án của mình. Điều đó sẽ lành mạnh và tôi hiểu nó nhưng sử dụng nó cho một số tính năng trong một số trường hợp theo quan điểm của tôi là sai. Có lý do để không chỉ chuyển đổi dự án sang Scala?
cnd

@Ash: Có lẽ họ cần giao diện với mã kế thừa? Trong trường hợp này, mã chính sẽ là Scala và mã kế thừa (và có thể một số giao diện hoặc trình bao bọc) trong Java.
Giorgio

2

Tôi nghi ngờ đây là vấn đề các lập trình viên trong nhóm giỏi đến mức nào và họ sẵn sàng học hỏi những điều mới như thế nào.

Scala ngắn gọn và biểu cảm hơn nhiều, nhưng cũng phức tạp không kém. Bất kỳ lập trình viên nào có thể sử dụng tốt các trừu tượng mức cao mà nó cung cấp sẽ thích nó và có năng suất cao hơn trong đó và sẽ không bao giờ muốn quay lại mức độ quá mức của Java. Nhưng một lập trình viên không giỏi về trừu tượng cấp cao hoặc đơn giản là không muốn học sẽ không bao giờ có được nó.

Ngoài ra tôi không nghĩ bạn nên sử dụng bất kỳ trường hợp nào được thiết kế riêng cho Scala. Chỉ cần bắt đầu viết nguyên mẫu trong đó và bạn sẽ thấy liệu nó có hiệu quả hơn hay không. Nó sẽ có năng suất cao hơn cho mọi thứ có giá trị chuyển đổi.

Và tôi chắc chắn sẽ không trộn lẫn các ngôn ngữ ngoại trừ việc sử dụng các thư viện được viết bằng ngôn ngữ khác. Bắt đầu tạo mẫu trong Scala, xem nó tốt như thế nào và chọn cái này hay cái khác.


-2

Theo kinh nghiệm (hạn chế) của tôi, trường hợp sử dụng mà tôi thấy nhiều nhất là sử dụng nó để có được cảm giác vượt trội và tự mãn so với các đồng nghiệp của bạn, những người thực sự vận chuyển đồ đạc, và / hoặc che giấu những hạn chế của bạn bằng cách đổ lỗi cho "lỗi thời và không phù hợp" ngôn ngữ bạn bị "ép buộc" sử dụng thay vì độ nóng mới;)


1
-1: Lập trình hàm cũ hơn nhiều so với Java.
Giorgio

2
Này, đó ít nhiều là cùng một đối số mà tôi đã sử dụng khi Java lần đầu tiên xuất hiện! Nhưng lúc đó tôi 17 tuổi ...
yannis

2
BTW, các kỹ thuật lập trình chức năng là về vận chuyển mọi thứ (nhanh hơn), không phải về khoe khoang (xem ví dụ paulgraham.com/avg.html ).
Giorgio

-3? Thôi nào, bạn có thể làm tốt hơn. @Giorgio, tôi hoàn toàn không đề cập đến Java, IMO nó cũng rất tệ :)
ggambett

@ggambett: Bạn đã tham khảo Java một cách gián tiếp: Câu hỏi hỏi về việc giới thiệu Scala (và phong cách chức năng của nó) trong một môi trường sử dụng Java . Câu trả lời của bạn so sánh một "ngôn ngữ cổ xưa mà bạn buộc phải sử dụng" (Java?) Với "độ nóng mới" (Scala - lập trình chức năng?) Có trường hợp sử dụng phổ biến nhất là "để có được cảm giác vượt trội ... hơn các đồng nghiệp của bạn ". Hoặc ý nghĩa chính xác của câu trả lời của bạn là gì?
Giorgio
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.