Làm thế nào để chuyển từ Java sang Ruby?
Trong hướng dẫn này, bạn sẽ học khác biệt chính giữa hai ngôn ngữ để giúp bạn thực hiện bước nhảy.
Nó tuyệt vời cho nhiều người muốn chuyển từ Java/C# sang Ruby.
Nhưng…
Nếu bạn chỉ tò mò về sự khác biệt, thì bài này cũng dành cho bạn.
Hãy làm đi!
Kiểu Tĩnh (Static Typing) Vs Kiểu Động (Dynamic Typing)
Kiểu gõ (typing style) là khác biệt lớn & đáng chú ý nhất khi nhìn code của một trong hai ngôn ngữ lập trình.
Tình hình:
- Java dùng kiểu tĩnh (static typing)
- Ruby dùng kiểu động (dynamic typing)
Điều đó có nghĩa là gì, chính xác?
Kiểu gõ (typing) đề cập đến cách biến & tham số phương thức hoạt động.
Một ngôn ngữ kiểu mạnh (hoặc kiểu tĩnh) phải khai báo kiểu (lớp) nào mà mọi biến có thể chấp nhận.
Trông như sau:
int n = 1;
Nơi int là kiểu, trong trường hợp này, Integer.
Tại sao điều đó hữu ích?
Vì nếu bạn cố gán bất kỳ kiểu đối tượng nào khác cho biến này, trình biên dịch sẽ ném lỗi & chương trình của bạn thậm chí không chạy được.
Điều này nghĩa là bạn sẽ luôn biết kiểu đối tượng bạn đang làm việc.
Với nhược điểm là kém linh hoạt.
Ngược lại…
Kiểu động toàn về sự linh hoạt, biến không bị gắn vào kiểu cụ thể, nên kiểu có thể thay đổi.
Ví dụ:
n = 1 n = "abc"
Nhược điểm là bạn có thể gặp nhiều lỗi hơn nếu code cẩu thả & bạn không được nhiều thông tin khi đọc code.
Đó là một trong những khác biệt chính!
Thêm ở phần tiếp theo.
Cú Pháp: Những Việc Đơn Giản & Boilerplate
Java là vua của boilerplate.
Boilerplate là tất cả code „thiết lập“ mà bạn phải thêm chỉ để làm cho code của bạn hợp lệ về mặt cú pháp.
Kết quả…
Java làm cho việc ĐƠN GIẢN trở nên phức tạp!
Hello World trong Java:
class Hello {
static public void main() {
System.out.println("Hello World");
}
}
Sau đó bạn phải biên dịch này thành tệp class & chạy nó.
Hai bước!
(IDE giúp đỡ với việc này.)
Khác biệt khác là biểu thức trong Java kết thúc bằng dấu chấm phẩy, không bắt buộc trong Ruby. Bạn cũng có thể bỏ qua dấu ngoặc đơn trong Ruby, hầu hết thời gian.
Hello World trong Ruby:
puts "Hello World"
Ừ.
Chỉ thế thôi.
Có vẻ như Ruby cho code sạch hơn. Đồng ý?
Trên hết đó…
Bạn có thể chạy code này bằng một lệnh từ terminal!
Không cần bước biên dịch.
Chơi Với Code: REPL Tích Hợp Sẵn
Ruby đi kèm irb, làm cho việc test một chút code thật nhanh.
Bạn thậm chí không cần lưu tệp.
Hay mở trình soạn thảo!
Java không có tích hợp sẵn, ít nhất không cho đến Java 9.
Tên Tệp & Tổ Chức Tệp
Java ép buộc cấu trúc tổ chức & đặt tên tệp cụ thể.
Ví dụ:
Nếu bạn có lớp (public) tên Hello, tên tệp BẮT BUỘC là Hello.java.
Điều này không xảy ra trong Ruby.
Cũng, chúng ta không có khái niệm lớp private trong Ruby.
Xử Lý Ngoại Lệ
Java có hai loại ngoại lệ:
- Checked exception (ngoại lệ được kiểm tra)
- Unchecked exception (ngoại lệ không được kiểm tra)
Khác biệt?
Bạn BẮT BUỘC phải xử lý checked exception!
Hoặc chương trình của bạn thậm chí không chạy.
Bây giờ:
Ruby chỉ có một loại ngoại lệ.
Bạn có thể xử lý nếu muốn, trình thông dịch sẽ không phàn nàn, nhưng nó có thể làm crash chương trình.
Trình Biên Dịch & Cấp Phép Ngôn Ngữ
Cuối cùng, hãy nói về cấp phép.
Điều này thường không phải vấn đề với ngôn ngữ lập trình.
Tại sao?
Vì chúng là mã nguồn mở, với một người làm người duy trì & thiết kế chính.
Java khác ở đây.
Nó thuộc một tập đoàn lớn (Oracle) & điều đó có hàm ý cho phép của nó.
Thực tế:
Có hai phiên bản Java runtime, „Oracle JDK“, mà (nếu tôi hiểu đúng) bắt đầu từ phiên bản 9 là sản phẩm thương mại.
Sau đó bạn có „Open JDK“, cũng thuộc Oracle.
Nhưng nó có giấy phép mã nguồn mở.
Phân Phối Thư Viện & Code
Một sự khác biệt LỚN khác, một trong những thứ yêu thích của tôi (cũng là của Matz) về Ruby là RubyGems.
Nó làm cho việc phân phối thư viện (như HTTP client) dễ dàng hơn nhiều.
Bởi vì:
- Có kho trung tâm (central repository)
- Nó tích hợp vào ngôn ngữ
- Nhiều gem mã nguồn mở có sẵn & dễ tìm
Theo tôi biết, Java không có gì gần giống như vậy, nên đây là chiến thắng lớn cho Ruby.
Tóm Tắt
Bạn đã học về khác biệt chính giữa Java & Ruby. Bao gồm kiểu tĩnh, boilerplate, và đặt tên tệp.
Bây giờ bạn chuẩn bị tốt hơn để hiểu Ruby để đưa ra quyết định đúng cho bạn.
Cảm ơn bạn đã đọc! 🙂