10 lí do để học Scala và FP

3236

Một trong những câu hỏi mà độc giả của tôi thường hỏi là, “Các nhà phát triển Java có nên học Scala không? Scala có tương lai tốt hơn Java không? Tại sao các nhà phát triển Java nên học Scala?”.

Ở đây, chúng ta sẽ nói về những lý do khuyến khích các nhà phát triển Java học Scala.

Đó là ngôn ngữ JVM được lựa chọn, để lại Groovy và Kotlin phía sau, và được ưa thích như ngôn ngữ mà mọi người muốn viết nhất.

Scala có một số điểm mạnh, trong đó có thể nhắc tới là việc nó là một ngôn ngữ đa mô hình (multi-paradigm language). Nó không chỉ giải quyết được nhiều vấn đề của Java ví dụ: bất biến với các từ khóa val và case class.

Hơn nữa, dù nó có sự lưu loát và linh hoạt của các ngôn ngữ như Python, Scala vẫn là một ngôn ngữ statically typed. Điều này giúp bạn ít phạm phải sai lầm hơn.

Tôi chắc rằng các nhà phát triển Scala sẽ có thêm nhiều lý do vào danh sách này, nhưng từ góc nhìn của Java, tôi nghĩ Scala chắc chắn có những lý do sau đây để thu hút các nhà phát triển Java.

Ngôn ngữ đa mô hình – Multi-Paradigm Language

Scala có một chút khác biệt so với Java, vì nó hỗ trợ hai mô hình lập trình: lập trình hướng đối tượng (OOP) và lập trình hàm (FP). Để nâng cao kỹ năng lập trình của bạn, tôi khuyên nên học ít nhất một ngôn ngữ từ các mô hình khác nhau, ví dụ: imperative, logical, functional và OOP. Scala sẽ cung cấp cho bạn một cơ hội để khám phá cả functional và OOP với nhau.

Cuốn Pragmatic Programmer cũng khuyên bạn nên học một ngôn ngữ lập trình mới mỗi năm. Scala cho phép bạn define type với cả data attribute (với các class hoạt động như C++/Java class) và behavior attribute (với các đặc điểm tương ứng với Java interface).

Cũng giống như các ngôn ngữ lập trình chức năng khác (functional programming language), Scala function là hàm hạng nhất (có nghĩa là bạn có thể chuyển chúng thành giá trị) và Scala cũng hỗ trợ các hàm ẩn danh và currying (một phần ứng dụng của các hàm đa đối số).

Sự kết hợp các tính năng này giúp bạn có thể viết các chương trình Scala khá ngắn gọn và thanh lịch. Đây cũng chính là điểm mạnh nhất của Scala, mà Java 8 cũng đã cố gắng bắt chước theo bằng cách giới thiệu các biểu thức lambda, nhưng nó vẫn còn cách Scala một khoản khá xa.

Khả năng tương tác với Java

Theo ý kiến ​​của tôi, sự lựa chọn phát triển cho Scala với khả năng tương tác với Java là điều tốt nhất từng xảy ra với ngôn ngữ này. Scala chạy trên Java Virtual Machine (JVM) và có thể tương thích với code Java. Điều này có nghĩa là các nhà phát triển có thể sử dụng các thư viện Java trực tiếp từ code Scala.

Do đó mà đối với việc các nhà lập trình Java chuyển qua sử dụng Scala thì đây là cách hoàn hảo để tận dụng những năm kinh nghiệm của họ trong lập trình.

Nó cũng có thể gọi Scala code từ Java, và bạn sẽ vẫn dễ dàng viết một phần chương trình trong Scala và phần còn lại trong Java.

Tóm lại, khả năng tương tác với Java mang lại cho Scala tiềm năng to lớn để trở thành ngôn ngữ lập trình mạnh nhất, vì rất nhiều code của thế giới được viết bằng Java và rất nhiều nhà phát triển đang làm việc trên Java.

Các phương pháp hay nhất được đưa vào trong ngôn ngữ

Một điều mà bạn có thể không biết về Scala là nó được phát triển ban đầu tại trường đại học Thụy Sĩ EPFL nhằm với nỗ lực áp dụng các innovation ​​gần đây trong nghiên cứu ngôn ngữ lập trình.

Một số các phương pháp và cấu trúc tốt nhất được xây dựng vào trong Scala, ví dụ: val tuyên bố bất biến mức cao nhất, điều này sẽ tốt hơn nhiều so với việc từ khóa cuối cùng bị quá tải trong Java.

Nó cũng có case classes, giúp dễ dàng tạo ra các class không thay đổi (immutable) trong Scala.

Khả năng biểu cảm – Expressiveness

Khi bạn so sánh Scala với Java, Scala chắc chắn đạt điểm số tốt hơn.

Scala vốn rất biểu cảm. Ngoài ra, nó còn có hàng tấn code thực sự đẹp và hữu ích được viết bằng Scala. Điều này đang thu hút ngày càng nhiều nhà phát triển Java học Scala, những người vốn thích code đẹp.

Để cho bạn dễ hình dùng hơn, đây là chương trình đếm chữ được viết bằng cả Java và Scala, bạn có thể thấy sự khác biệt về tính biểu cảm của chúng.

Scala đã đạt được điều mà Java phải thực hiện tới hơn 10 dòng chỉ với 1 dòng code duy nhất.

Nhu cầu việc làm cao

Lập trình viên nào không muốn có việc là tốt? Một lý do để học một công nghệ hoặc framework mới luôn là để phát triển sự nghiệp.

Học Scala chắc chắn sẽ làm cho bạn dễ kiếm được công việc hơn. Ngày càng có nhiều công ty đang sử dụng hoặc chuyển sang Scala, bao gồm Twitter, LinkedIn, Foursquare và Quora.

Do Scala là ngôn ngữ có thể mở rộng, bạn có thể mong chờ một tương lai không xa khi giới tài chính và ngân hàng cũng sẽ bắt đầu bám lấy Scale làm giải pháp cho độ trễ trong app của họ.

Nếu mọi thứ đang đi đúng hướng thì Scala sẽ phát triển như là giải pháp thay thế chính cho Java.

Statically Typed

Nói chung, một ngôn ngữ statically typed như Java ngăn các lập trình viên phạm phải nhiều sai lầm, trong khi, với một ngôn ngữ động như Python, bạn chỉ biết về lỗi khi chạy chương trình.

Scala có được những điều tốt nhất của cả hai thế giới. Nó vô cùng năng động, nhưng lại rất kỉ luật. Scala compiler thực sự thông minh và sử dụng type-inference đến mức tối đa của nó.

Scala cung cấp type inference cho các variable và function, tốt hơn nhiều so với type inference bị giới hạn trong Java và C #.

Framework phát triển mạnh mẽ

Một điều bạn có thể biết về hệ sinh thái của Scala là nó đang phát triển nhanh chóng với rất nhiều thư viện và framework tốt.

Các công ty đã bắt đầu sử dụng Scala cũng góp phần vào sự phát triển gần đây của nó như một ngôn ngữ chính thống.

Có một số Scala web framework tốt trên mạng, bao gồm cả Lift và Play.

Akka, một Scala framework khác đã tự thiết lập bộ công cụ và thời gian chạy để xây dựng các ứng dụng với khả năng phân tán và chịu lỗi cao trên JVM.

Scala cũng được sử dụng trong Big Data cùng với Apache Spark, nhờ đó mà tiếp tục thúc đẩy sự chấp nhận từ nhiều nhà phát triển Java quan tâm đến Big Data.

Cộng đồng tích cực

Cùng với ngôn ngữ và các framework liên quan, cộng đồng Scala cũng đang phát triển. Rất nhiều lập trình viên, bao gồm cả các nhà phát triển Java, đang tham gia vào nhóm Scala.

Ngày càng có nhiều IDE đã bắt đầu hỗ trợ cú pháp Scala. Ngoài ra còn có hỗ trợ công cụ xây dựng tuyệt vời trong SBT, Maven và Ant.

Trong các cuộc khảo sát gần đây, Scala cũng được xem là giải pháp thay thế số một cho Java. Theo tôi, để phát triển Scala như là sự thay thế thực sự của Java, nó phải thu hút ngày càng nhiều nhà phát triển Java càng tốt. Đồng thời, việc các tổ chức lớn như Twitter áp dụng Scala chắc chắn sẽ giúp cộng đồng, vì họ có nhiều nguồn lực và ảnh hưởng hơn.

Cú pháp ngắn gọn

Java từ lâu đã bị chỉ trích vì cú pháp nặng nề và dài dòng. Mặc dù nó làm cho Java dễ đọc hơn, giống như tiếng Anh, Scala đã thiết lập một chuẩn mực mới với ngắn gọn và dễ đọc cùng một lúc. Scala compiler, được gọi là scalac làm được nhiều thứ hơn bạn mong đợi. Nó có thể tạo ra toString (), equals (), hasCode () và các thứ khác nữa. Hãy xem xét hai đoạn mã của cùng một class được viết bằng Java và Scala để giúp bạn lựa chọn:

public class Book {
    private final String name;
    private final double price;
    public Star(String name, double price) {
        this.name = name;
        this.price = price;
    }
    @Override
    public int hashCode() {
        int hash = 7;
        hash = 23 * hash + Objects.hashCode(this.name);
        return hash;
    }
    @Override
    public boolean equals(Object obj) {
        if (obj == null) {
            return false;
        }
        if (getClass() != obj.getClass()) {
            return false;
        }
        final Test other = (Test) obj;
        if (!Objects.equals(this.name, other.name)) {
            return false;
        }
        if (Double.doubleToLongBits(this.price) != Double.doubleToLongBits(other.price)) {
            return false;
        }
        return true;
    }
    @Override
    public String toString() {
        return "Test{" + "name=" + name + ", price=" + price + '}';
    }
}

Bạn có thể viết cũng với yêu cầu như trên bằng Scala:

case class Book(name: String, price: double)

Nhân tiện, bạn cũng có thể sử dụng thư viện Lombok, một trong những thư viện cần thiết cho các nhà phát triển Java, để loại bỏ các code liên quan đến getters, setters, equals, hashCode và toString. Nó có thể tự động tạo ra những cái đó cho bạn.

Tương đối dễ học

Đối với một nhà phát triển Java, việc học một ngôn ngữ lập trình chức năng cổ điển như Haskell hoặc OCaml sẽ khá khó khăn hơn Scala. Nói cách khác, Scala tương đối dễ học vì chức năng OOP của nó.

Trong khi dành thời gian để học những function mới, các nhà phát triển Java vẫn có thể làm việc hiệu quả trong Scala bằng cách tận dụng kiến ​​thức hiện có của họ về OOP. Giống như Java, Scala có cú pháp rõ ràng, thư viện đẹp, tài liệu trực tuyến tốt và rất nhiều người trong ngành sử dụng nó.

Với một cộng đồng ngày càng phát triển của Scala trên các diễn đàn, không khó để tìm ra câu trả lời cho bất kỳ câu hỏi nào của Scala.

Topdev via dzone