Cheat sheet Ruby
Cập nhật lần cuối
Hello World và chạy code
Ruby không cần code khung: một dòng là chạy được.
| Thao tác | Cú pháp |
|---|---|
| In kèm xuống dòng | puts "Hello, World!" |
| In không xuống dòng | print "Hello" |
| Xem chi tiết một giá trị | p [1, 2, 3] |
| Nội suy chuỗi | puts "Hi #{name}" |
| Chú thích | # this is a comment |
| Chú thích nhiều dòng | =begin ... =end |
| Chạy một tệp | ruby app.rb |
| Shell tương tác | irb |
Biến và kiểu dữ liệu
Ruby có kiểu động; mọi thứ đều là đối tượng.
| Thao tác | Cú pháp |
|---|---|
| Biến cục bộ | age = 30 |
| Hằng số | PI = 3.14 |
| Biến instance | @name = "Ada" |
| Biến toàn cục | $count = 0 |
| Symbol | :status |
| Nil / boolean | nil, true, false |
| Kiểm tra kiểu | 42.class trả về Integer |
| Chuyển kiểu | "42".to_i, 42.to_s, "3.5".to_f |
Chuỗi
Chuỗi là đối tượng thay đổi được, với rất nhiều phương thức.
| Thao tác | Cú pháp |
|---|---|
| Độ dài | "hello".length |
| Chữ hoa / chữ thường | s.upcase, s.downcase |
| Cắt khoảng trắng | s.strip |
| Thay thế | s.gsub("a", "b") |
| Tách thành mảng | "a,b,c".split(",") |
| Chứa chuỗi con | s.include?("ell") |
| Cắt ký tự | s[0..2] |
| Nối chuỗi | "foo" + "bar", s << "!" |
| Lặp lại | "ab" * 3 |
| Định dạng | format("%05d", 42) |
Mảng
Tập hợp có thứ tự, đánh chỉ số bằng số nguyên.
| Thao tác | Cú pháp |
|---|---|
| Tạo | nums = [1, 2, 3] |
| Truy cập theo chỉ số | nums[0], nums[-1] |
| Thêm vào cuối | nums.push(4), nums << 4 |
| Xóa ở cuối | nums.pop |
| Độ dài | nums.length |
| Map | nums.map { |n| n * 2 } |
| Lọc | nums.select { |n| n.even? } |
| Reduce | nums.reduce(0) { |sum, n| sum + n } |
| Sắp xếp | nums.sort |
| Nối thành chuỗi | nums.join(", ") |
Hash
Tập hợp các cặp khóa và giá trị, thường dùng symbol làm khóa.
| Thao tác | Cú pháp |
|---|---|
| Tạo | user = { name: "Ada", age: 30 } |
| Lấy giá trị | user[:name] |
| Gán giá trị | user[:email] = "a@x.com" |
| Kiểm tra khóa | user.key?(:name) |
| Xóa khóa | user.delete(:age) |
| Khóa / giá trị | user.keys, user.values |
| Lặp qua hash | user.each { |k, v| puts "#{k}: #{v}" } |
| Giá trị mặc định | Hash.new(0) |
| Gộp hash | h1.merge(h2) |
Luồng điều khiển
Câu lệnh điều kiện và vòng lặp; lưu ý cách viết modifier đặt ở cuối của Ruby.
| Thao tác | Cú pháp |
|---|---|
| If / elsif / else | if x > 0 ... elsif x < 0 ... else ... end |
| if trên một dòng (modifier) | puts "hi" if ready |
| Unless | unless done ... end |
| Ternary | x > 0 ? "pos" : "neg" |
| Case / when | case n; when 1 then ...; else ...; end |
| While loop | while i < 10 ... end |
| Until loop | until done ... end |
| Times | 5.times { |i| puts i } |
| Lặp qua range | (1..5).each { |i| puts i } |
| Break / next | break, next |
Phương thức
Biểu thức cuối cùng được trả về ngầm định.
| Thao tác | Cú pháp |
|---|---|
| Định nghĩa phương thức | def add(a, b) ... end |
| Trả về ngầm định | def square(x) x * x end |
| Đối số mặc định | def greet(name = "World") ... end |
| Đối số từ khóa | def box(w:, h:) ... end |
| Splat (variadic) | def sum(*nums) ... end |
| Phương thức kết thúc bằng ? | def valid? ... end |
| Phương thức kết thúc bằng ! | def normalize! ... end |
| Gọi không cần ngoặc | greet "Ada" |
Block, proc và lambda
Block là đoạn code được truyền vào phương thức; proc và lambda lưu block lại.
| Thao tác | Cú pháp |
|---|---|
| Block (ngoặc nhọn) | [1, 2].each { |n| puts n } |
| Block (do/end) | [1, 2].each do |n| puts n end |
| Yield cho block | def run; yield; end |
| Kiểm tra có block không | block_given? |
| Nhận block thành tham số | def run(&blk); blk.call; end |
| Tạo proc | square = proc { |x| x * x } |
| Tạo lambda | square = ->(x) { x * x } |
| Gọi proc / lambda | square.call(3), square.(3) |
Lớp và module
Lớp giữ trạng thái và hành vi; module trộn thêm các phương thức dùng chung.
| Thao tác | Cú pháp |
|---|---|
| Định nghĩa lớp | class Point ... end |
| Constructor | def initialize(x, y) @x = x; @y = y; end |
| Phương thức instance | def dist ... end |
| Viết tắt accessor | attr_accessor :x, :y |
| Tạo instance | p = Point.new(1, 2) |
| Kế thừa | class Circle < Shape ... end |
| Phương thức của lớp | def self.origin ... end |
| Định nghĩa module | module Drawable ... end |
| Trộn module vào lớp | include Drawable |
| Gọi super | super(args) |
Những cú pháp Ruby bạn dùng nhiều nhất, gói gọn trong một trang. Cheat sheet Ruby này là bảng tra cứu nhanh cho phần cốt lõi của ngôn ngữ: biến và kiểu dữ liệu, chuỗi, mảng và hash, luồng điều khiển, phương thức, cùng block, proc và lambda, những thứ làm Ruby giàu sức biểu đạt.
Mọi thứ ở đây là Ruby thuần, chạy được trên mọi trình thông dịch chuẩn. Sao chép phần bạn cần, hoặc chạy thử từng đoạn code trong Ruby playground, không cần cài đặt.
Câu hỏi thường gặp về cheat sheet Ruby
Cheat sheet Ruby này có miễn phí không?
Có. Cheat sheet Ruby này hoàn toàn miễn phí, không cần đăng ký. Hãy lưu dấu trang và quay lại bất cứ khi nào bạn cần tra một phương thức chuỗi, thao tác với hash hay cú pháp block.
Block, proc và lambda khác nhau thế nào?
{ ... } hoặc do ... end, và tự nó không phải là đối tượng. Một proc bọc block thành đối tượng gọi được, mà bạn có thể lưu lại và truyền đi. Một lambda là proc đặc biệt, kiểm tra số lượng đối số nghiêm ngặt và coi return là thoát khỏi chính lambda, trong khi proc thường sẽ thoát khỏi phương thức bao quanh.Symbol trong Ruby là gì?
:name là một định danh bất biến, dùng lại được. Vì cùng một symbol luôn trỏ tới cùng một đối tượng trong bộ nhớ, symbol nhanh hơn và tốn ít bộ nhớ hơn chuỗi khi dùng làm khóa hash hay tên phương thức, đó là lý do bạn hay thấy hash viết dạng { name: "Ada" }.Có thể luyện tập Ruby online không?
Có. Mở Ruby playground để chạy bất kỳ đoạn code nào trong cheat sheet này ngay trên trình duyệt, không cần cài Ruby. Khi muốn học có lộ trình, khóa học Ruby tương tác miễn phí của Coddy đưa bạn từng bước từ biến và chuỗi đến block và lớp.
Cheat sheet này có phù hợp cho người mới bắt đầu không?
Có. Trang được sắp xếp từ các chủ đề phổ biến nhất (biến, chuỗi, luồng điều khiển) đến các chủ đề nâng cao (block, proc, lớp), nên bạn dùng được các phần đầu ngay từ ngày đầu tiên và dần làm quen với phần còn lại.