Menu
CoddyTech

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ácCú pháp
In kèm xuống dòngputs "Hello, World!"
In không xuống dòngprint "Hello"
Xem chi tiết một giá trịp [1, 2, 3]
Nội suy chuỗiputs "Hi #{name}"
Chú thích# this is a comment
Chú thích nhiều dòng=begin ... =end
Chạy một tệpruby app.rb
Shell tương tácirb

Biến và kiểu dữ liệu

Ruby có kiểu động; mọi thứ đều là đối tượng.

Thao tácCú 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 / booleannil, true, false
Kiểm tra kiểu42.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ácCú pháp
Độ dài"hello".length
Chữ hoa / chữ thườngs.upcase, s.downcase
Cắt khoảng trắngs.strip
Thay thếs.gsub("a", "b")
Tách thành mảng"a,b,c".split(",")
Chứa chuỗi cons.include?("ell")
Cắt ký tựs[0..2]
Nối chuỗi"foo" + "bar", s << "!"
Lặp lại"ab" * 3
Định dạngformat("%05d", 42)

Mảng

Tập hợp có thứ tự, đánh chỉ số bằng số nguyên.

Thao tácCú pháp
Tạonums = [1, 2, 3]
Truy cập theo chỉ sốnums[0], nums[-1]
Thêm vào cuốinums.push(4), nums << 4
Xóa ở cuốinums.pop
Độ dàinums.length
Mapnums.map { |n| n * 2 }
Lọcnums.select { |n| n.even? }
Reducenums.reduce(0) { |sum, n| sum + n }
Sắp xếpnums.sort
Nối thành chuỗinums.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ácCú pháp
Tạouser = { name: "Ada", age: 30 }
Lấy giá trịuser[:name]
Gán giá trịuser[:email] = "a@x.com"
Kiểm tra khóauser.key?(:name)
Xóa khóauser.delete(:age)
Khóa / giá trịuser.keys, user.values
Lặp qua hashuser.each { |k, v| puts "#{k}: #{v}" }
Giá trị mặc địnhHash.new(0)
Gộp hashh1.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ácCú pháp
If / elsif / elseif x > 0 ... elsif x < 0 ... else ... end
if trên một dòng (modifier)puts "hi" if ready
Unlessunless done ... end
Ternaryx > 0 ? "pos" : "neg"
Case / whencase n; when 1 then ...; else ...; end
While loopwhile i < 10 ... end
Until loopuntil done ... end
Times5.times { |i| puts i }
Lặp qua range(1..5).each { |i| puts i }
Break / nextbreak, next

Phương thức

Biểu thức cuối cùng được trả về ngầm định.

Thao tácCú pháp
Định nghĩa phương thứcdef add(a, b) ... end
Trả về ngầm địnhdef square(x) x * x end
Đối số mặc địnhdef greet(name = "World") ... end
Đối số từ khóadef 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ặcgreet "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ácCú 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 blockdef run; yield; end
Kiểm tra có block khôngblock_given?
Nhận block thành tham sốdef run(&blk); blk.call; end
Tạo procsquare = proc { |x| x * x }
Tạo lambdasquare = ->(x) { x * x }
Gọi proc / lambdasquare.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ácCú pháp
Định nghĩa lớpclass Point ... end
Constructordef initialize(x, y) @x = x; @y = y; end
Phương thức instancedef dist ... end
Viết tắt accessorattr_accessor :x, :y
Tạo instancep = Point.new(1, 2)
Kế thừaclass Circle < Shape ... end
Phương thức của lớpdef self.origin ... end
Định nghĩa modulemodule Drawable ... end
Trộn module vào lớpinclude Drawable
Gọi supersuper(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?
Block là một đoạn code ẩn danh được truyền vào phương thức bằng { ... } 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ì?
Symbol như :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.

Hình minh họa các ngôn ngữ lập trình của Coddy

Học Ruby cùng Coddy

Bắt đầu