RbRuby · Lesson 11 of 11

Ruby Cheatsheet

Syntax, blocks, collections, and classes on one page.

Ruby
# ── Basics ──────────────────────────────
x = 42
pi = 3.14
name = "Ada"
ok = true
nothing = nil
puts "#{name} is #{x}"        # interpolation
:symbol                       # lightweight identifier

# ── Control flow ────────────────────────
if x > 10
  "big"
elsif x > 5
  "medium"
else
  "small"
end
puts "yes" if ok              # trailing modifier
puts "no" unless ok
label = x > 10 ? "big" : "small"

case x
when 1..5 then "low"
when Integer then "number"
else "other"
end

5.times { |i| puts i }
(1..5).each { |i| puts i }
while x > 0 do x -= 1 end

# ── Methods ─────────────────────────────
def greet(name, punct: "!")   # keyword arg with default
  "Hi #{name}#{punct}"        # last expression returned
end
def total(*nums) = nums.sum   # endless method (3.0+)
Ruby
# ── Collections & blocks ────────────────
nums = [3, 1, 4]
nums << 1                     # append
nums.first; nums.last; nums[1..2]; nums.length

nums.map { |n| n * 2 }        # [6, 2, 8, 2]
nums.select { |n| n > 1 }     # filter
nums.reject { |n| n > 1 }
nums.sum; nums.sort; nums.uniq; nums.include?(4)
nums.each_with_index { |n, i| }
nums.reduce(0) { |acc, n| acc + n }
%w[apple banana cherry]       # word array

ages = { "Ada" => 17, bob: 15 }   # hash (symbol keys common)
ages[:bob]; ages.fetch(:eve, 0)
ages.each { |k, v| puts "#{k}: #{v}" }

# ── Strings ─────────────────────────────
s.upcase.strip.split(",").join("-")
s.start_with?("ru"); s.include?("x"); s.gsub("a", "b")

# ── Classes ─────────────────────────────
class Dog
  attr_reader :name           # getter
  attr_accessor :age          # getter + setter

  def initialize(name, age = 0)
    @name = name              # instance variable
    @age = age
  end

  def bark = "#{@name} says woof"
  def to_s = "Dog(#{@name})"
end

dog = Dog.new("Rex", 3)
dog.bark

# ── Errors & files ──────────────────────
begin
  risky
rescue ArgumentError => e
  handle(e)
ensure
  cleanup
end
File.read("f.txt"); File.write("f.txt", data)
File.readlines("f.txt").each { |line| }

# gem install pry | bundle init | bundle add rails