Ruby basics
Learn some basics of Ruby
# The Greeter class
class Greeter
def initialize(name)
@name = name.capitalize
end
def salute
puts "Hello #{@name}!"
end
end
# Create a new object
g = Greeter.new("world")
# Output "Hello World!"
g.salute
Iteration
some_list.each do |this_item|
# We're inside the block.
# deal with this_item.
end
some_list.each {|item| puts "I got #{item}" }
some_hash.each {|key, value|
# deal with key or value
}
Variable naming convention
Starts with | Variable type
----------------|---------------
Lower letter | Local
_ | Local
Capital letter | Constant
$ | Global
@ | Instance
@@ | Class
Embed variable inside a string
greeting = "Hello #{name}" # must be double quotes, if single quotes, it's ignored
Get user input
gets.chomp => Get user input from command line using keyboard
=> in = $stdin.gets.chomp
=> gets.chomp.to_i
ARGV => Get user input from command line via script argument
=> filename = ARGV.first
=> first, second, third = ARGV
Heredoc - multi-line string
<<WORD
This is line 1
This is line 2
...
This is line N
WORD
=> Can use any all caps word
Regular expression
/pattern/ =~ target_string
/pattern/i =~ target_string #=> case insensitive
Conditionals
if condition then
statement
end
if condition1 then
statement1
elsif condition2 then
statement2
else
statement3
end
unless condition then
statement
end
unless condition then
statement1
else
statement2
end
case VAR
when value1 then
statement1
when value2 then
statement2
when value3, valueX then
statement3
else
statement4
end
#=> when can be: value, type or regexp
Loop
N.times do
#repeatable operations
end
N.times {
#repeatable operations
}
N.times { |i|
#repeatable operations
#the i-th time
}
for VAR in startX..endX do
#repeatable operations
end
for VAR in object do
#repeatable operations
end
while condition do
#repeatable operations
end
until condition do
#repeatable operations
end
some_object.each do |VAR|
#repeatable operations
end
some_object.each {|VAR|
#repeatable operations
}
loop {
#repeatable operations
}
break #=> stop loop
next #=> jump to next
redo #=> repeat current
Equality comparison
== #=> equal value
equal? #=> same object
eql? #=> same value
=== #=> based on what to compare on the left side:
#=> 1) numeric or string, same as ==
#=> 2) regexp, same as =~
#=> 3) class, whether is instance
Class
class HelloWorld
attr_accessor :name
..
end #=> define a getter and setter methods to instance variable "name"
class HelloWorld
def HelloWorld.hello(name)
print "Hello, ", name
end
end #=> way 1 to define class method
class HelloWorld
..
end
class << HelloWorld
def hello(name)
print "Hello, ", name
end
end #=> way 2 to define class method
class HelloWorld
def self.hello(name)
print "Hello, ", name
end
end #=> way 3 to define class method
HelloWorld.hello #=> way 1 to access class method
HelloWorld::hello #=> way 2 to access class method
HelloWorld::XXX #=> access class constant
Module
module HelloModule
Version = "1.0" # module constant
def hello(name)
print "Hello, ", name
end
module_function :hello # make hello a public module function
end
HelloModule::Version # access module constant
HelloModule::hello("Ruby") # call module public function
Exception handling
begin
# code block that may have exceptions
rescue
# code block that handle exceptions
end
begin
# code block that may have exceptions
rescue => VAR
# code block that handle exceptions
end
begin
# code block that may have exceptions
rescue Exception1 => ex1
# code block that handle Exception1
rescue Exception2, Exception3 => ex2
# code block that handle Exception2 and Exception3
rescue => ex
# code block that handle StandardError and its sub exceptions
end
special VAR
$! => most recent exception
$@ => trace of most recent exception (=>$!.backtrace)
begin
# code block that may have exceptions
rescue => ex
# code block that handle exceptions
ensure
# code block that always run regardless exceptions
end
raise "message" #=> raise RuntimeError with specified message
raise CustomException #=> raise custom exception
raise CustomException, "message" #=> raise custom exception with specified message
raise #=> 1) within rescue, raise $! (most recent exception again)
#=> 2) outside rescue, raise RuntimeError