Ruby đang phát triển chóng mặt, dần trở thành ngôn ngữ lập trình được ưa thích và dễ kiếm ra tiền từ nó.
Ở vào thời điểm hiện tại, bạn có rất nhiều lựa chọn một ngôn ngữ lập trình để theo đuổi. Ví dụ như học Java: bạn có thể làm được phần mềm chạy trên PC, hoặc cross-platform đa nền tảng, làm web, phát triển ứng dụng cho các thiết bị Android - nghề mới đang rất hot. Tương tự như Java, các công nghệ development bằng bộ .NET Framework của Microsoft cũng đã hấp dẫn rất nhiều lập trình viên trong mấy chục năm qua. Hay là bạn có thể làm web với bộ PHP-MySQL...
Tuy nhiên, Ruby đang là một
"HOT TREND", một xu hướng mới thu hút nhiều lập trình viên tham gia phát triển các ứng dụng của mình bằng ngôn ngữ này.
Vậy, Ruby là gì?
Đọc đến đây, bạn đang tự hỏi vì sao Ruby đang dần trở nên phổ biến?
Các fans của Ruby thì khen nó là một
ngôn ngữ lập trình "beautyful - đẹp", "artful - đầy nghệ thuật". Không chỉ thế, họ còn nói rằng nó rất tiện dụng dễ học dễ làm.
Những lời khen có cánh đó không phải là vô lý nếu bạn tiếp tục theo dõi bài viết này, và có thể ngay sau đó, bạn sẽ hào hứng bắt tay vào học Ruby.
Ý tưởng của Người tạo ra Ruby
Ruby là ngôn ngữ rất quan tâm đến sự cân bằng. "Cha đẻ" ra nó, Yukihiro Matsumoto "Matz" (người Nhật Bản), đã pha trộn những phần tuyệt vời nhất mà ông nhận thấy ở những ngôn ngữ ông ưa thích trước đó (Perl, Smalltalk, Eiffel, Ada, Lisp) vào một ngôn ngữ mới, cân bằng giữa yếu tố: lập trình chức năng với sở thích lập trình.
Ông thường nói rằng ông "cố gắng làm cho Ruby trở nên tự nhiên, không phải đơn giản".
Và thế là coding bằng ngôn ngữ Ruby được hiển thị (appearance) một cách rất đơn giản, nhưng bên trong nó lại rất phức tạp, giống như cơ thể con người vậy.
Về sự phát triển của Ruby
Kể từ khi được giới thiệu vào năm 1995, Ruby đã không được sự ủng hộ của giới coder. Tuy nhiên, đến năm 2006, nó đã được chấp nhận rộng rãi.
Khắp nơi người ta đã nói đến Ruby, và vào top 10 các ngôn ngữ được bàn luận nhiều nhất.
Hiện tại cũng có vô vàn các group nhỏ vẫn đang thảo luận về Ruby. Đặc biệt là RoR - Ruby on Rails.
Ruby cũng
Hoàn Toàn Miễn Phí. Bạn không phải trả một xu nào, thoải mái sử dụng, sửa chữa, phân phối lại cho người khác.
Những điểm nổi bật của Ruby so với ngôn ngữ khác
Trong Ruby - mọi thứ đều được coi là một Object
Khởi đầu, Matz đã tham khảo các ngôn ngữ khác để tìm một ý tưởng về cú pháp các câu lệnh. Nhớ lại lúc đó, ông nói: "Tôi đã muốn một ngôn ngữ kịch bản mà có nhiều sức mạnh hơn Perl, và hướng đối tượng Object-Oriented hơn là Python2".
Trong Ruby, mọi thứ là một đối tượng object. Mỗi bit thông tin, và code có thể sở hữu các thuộc tính cũng như actions của chúng. Lập trình hướng đối tượng gọi các properties là các biến instance, và các actions thường được biết như là những methods phương thức. Phương thức thuần hướng đối tượng của Ruby thể hiện qua một dòng code dưới đây, đó là áp dụng action vào một số.
5.times { print "We *love* Ruby -- it's outrageous!" }
Dòng code trên nghĩa là thực hiện 5 lần liên tiếp việc in ra dòng text: "We *love* Ruby -- it's outrageous!"
Trong nhiều ngôn ngữ, numbers số và một số kiểu dữ liệu gốc primitive types không phải là object (ví dụ trong java boolean, int, float,...). Ruby thì làm theo cách của ngôn ngữ Smalltalk bằng cách cung cấp các methods cũng như là các properties cho toàn bộ các kiểu data.
Tính mềm dẻo của Ruby’s Flexibility
Ruby được thấy là một ngôn ngữ khá mềm dẻo, khi mà nó cho phép người dùng tự do thay đổi các thành phần của nó. Ngay cả những thành phần nòng cốt của Ruby cũng có thể bị loại bỏ đi, hoặc có thể định nghĩa lại nếu muốn. Các phần đang sẵn có thì có thể thêm vào tuỳ thích. Ruby cố gắng không hạn chế coder.
Ví dụ, phép cộng được thực hiện thông qua ký tự (+). Nhưng, bạn nếu muốn nó trở nên dễ đọc hơn nữa, bạn có thể thêm mới 1 method vào lớp Numeric có sẵn của Ruby như dưới đây:
class Numeric
def plus(x)
self.+(x)
end
end
y = 5.plus 6
# kết quả là y = 11
Blocks - Khối: a Truly Expressive Feature Một tính năng thực sự Ấn tượng
Khối trong Ruby, cũng được xem là nguồn gốc của tính mềm dẻo tuyệt vời của nó. Một coder có thể gán một closure (tôi cũng không biết được từ tương đương trong tiếng Việt nữa) cho mọi method, mô tả method đó sẽ làm gì. Closure được gọi là một
block và trở thành một tính năng phổ biến nhất đối với những người mới chuyển sang code Ruby từ các ngôn ngữ khác như PHP hoặc VB.
Block được lấy cảm hứng từ tính năng của ngôn ngữ. Matz nói, "trong Ruby closures, tôi muốn bày tỏ sự cảm ơn đến văn hoá của ngôn ngữ Lisp."
search_engines =
%w[Google Yahoo MSN].map do |engine|
"http://www." + engine.downcase + ".com"
end
Trong đoạn code trên, block được mô tả bên trong cấu trúc
do ... end. Phương thức
map được gán cho block để cung cấp một danh sách các từ.
Có nhiều method trong Ruby để lại một lỗ trống mở cho code có thể tự viết block của mình nhằm thực hiện việc mà method cần làm.
Ruby và Mixin
Không giống như nhiều ngôn ngữ hướng đối tượng khác, Ruby chỉ cho phép thừa kế đơn. Nhưng Ruby cũng có những concept về modules (trong
Objective-C thì gọi là Categories). Modules là một tập các methods.
Trong lập trình hướng đối tượng, mixin là một class tổng hợp chứa nhiều methods từ các class khác.
Các class có thể mixin một module, và ngay lập tức có được các methods có trong module đó. Ví dụ
class MyArray
include Enumerable
end
Trong đoạn code trên, class MyArray sẽ đồng thời có cả những method do class Enumerable cung cấp.
Thông thường, những Ruby developer nhìn việc này là cách rõ ràng hơn là đa thừa kế, đa thừa kế vốn rất phức tạp và quá hạn chế.
Ruby’s Visual Appearance - Cái nhìn về Ruby (sự hiển thị code để bạn có thể đọc được)
Trong khi Ruby thường sử dụng rất hạn chế các dấu chấm, và thường sử dụng các từ khoá bằng English, thậm chí phép đánh dấu chấm thường chỉ để sử dụng trang trí. Ruby không phải khai báo biến, nó sử dụng một quy tắc rất đơn giản để hiển thị phạm vi scope của biến.
- var là local variable.
- @var là instance variable.
- $var là global variable.
Việc đánh dấu như vậy cải thiện việc đọc code, cho phép lập trình viên dễ dàng xác định được vai trò của các biến. Và rõ ràng là việc sử dụng các
self., hoặc
this. cũng trở thành không cần thiết nữa.
Xa hơn những điều cơ bản trên
Ngoài những điều cơ bản trên, Ruby còn rất giàu có các tính năng khác như dưới đây:
- Ruby cũng có các tính năng để bắt các exception như là Java hoặc Python, giúp ta dễ dàng xử lý lỗi.
- Ruby có cơ chế tự thu dọn rác với tất cả các objects. Như Matz nói, "Điều này tốt hơn cho sức khoẻ của bạn."
- Viết các phần mở rộng bằng C trong Ruby thì dễ hơn là Perl hoặc Python, và cũng rất dễ dàng cho gọi các Ruby API từ C. Bao gồm cả việc gọi Ruby nhúng trong một phần mềm, để sử dụng như là một ngôn ngữ kịch bản. Một giao diện SWIG cũng được cung cấp sẵn.
- Ruby có thể tải các thư viện mở rộng một cách động, nếu OS cho phép.
- Ruby độc lập với OS theading. Vì thế, với mọi nền tảng mà Ruby có thể chạy, bạn sẽ có khả năng đa luồng multithreading, không cần biết là OS có hỗ trợ hay không, ngay cả MS-DOS!
- Ruby cơ động cao: Nó có thể được develop trên hầu hết GNU/Linux, và có thể hoạt động trên nhiều máy UNIX, Mac OS X, Windows, DOS, BeOS, OS/2, ...
Các biến thể của Ruby
Ruby, là một ngôn, nó có một vài biến thể khác. Mặc định Ruby thường được hiểu là
MRI ("Matz's Ruby Interpreter") hoặc CRuby (vì nó được viết bằng C). Nhưng có một số biến thể khác nhằm những mục đích riêng, ví dụ như là cung cấp các tính năng kết nối mở rộng đến các ngôn ngữ khác, hoặc các môi trường khác, hoặc các tính năng đặc biệt khác mà MRI không có.
Danh sách một số biến thể thông dụng:
- JRuby là đỉnh của JVM, lợi dụng được các tối ưu hoá của trình biên dịch JIT, bộ dọn rác, concurrent threads, các thư viện,...
Rubinius là ‘Ruby được viết bằng Ruby’. Sử dụng bộ LLVM, Rubinius cũng có một VM tốt như là các ngôn ngữ top khác.
- MacRuby là Ruby được viết để kết hợp với bộ thư viện Cocoa trên các nền tảng của Apple như là Mac OS X, cho phép bạn viết các ứng dụng desktop một các dễ dàng.
- mruby là một bản gọn nhẹ của Ruby, có thể được nhúng vào trong một ứng dụng khác. Nó được phát triển, và dẫn dắt bởi "cha đẻ" của Ruby Yukihiro “Matz” Matsumoto.
- IronRuby là một bản Ruby có thể kết hợp với .NET Framework.