Ruby in 20 minutes

advertisement
Ruby in 20 minutes
John Pinney
j.pinney@imperial.ac.uk
What is Ruby?
A true object-oriented language
with easily understandable syntax
and convenient notations.
=> pure / elegant / powerful
“I wanted a scripting language that was more powerful
than Perl, and more object-oriented than Python.”
Yukihiro Matsumoto (“Matz”)
The Ruby interpreter
> irb
puts "Hello World"
Hello World
(Almost) everything is an object
There are no primitives in Ruby.
Nearly everything can be considered as an object, i.e.
is an instance of a class
has an interface for method invocation
"hello".reverse
=> "olleh”
44.even?
=> true
nil.class
=> NilClass
nil.class.class
=> Class
Parts of speech
Variables
Numbers
Strings
Symbols
Constants
Methods + arguments
Blocks + arguments
Ranges
Regular Expressions
Operators
Arrays
Hashes
Keywords
Variables
local_variable = 3.0
@instance_variable = 4.6
@@class_variable = 8.9
(@ = “attribute”)
$global_variable = 2.5
Numbers
1.class
=> Fixnum
1.0.class
=> Float
Symbols
Symbols (starting with a colon ) are like lightweight
strings.
They always point to the same object, wherever used in
the code.
x = :my_symbol
Methods
front_door.open
front_door.open.close
front_door.is_open?
front_door.paint(3,:red)
front_door.paint(3,:red).dry(30).close
Kernel methods are invoked by their names alone.
This is just a bit of syntactic sugar.
print "Hello\n"
Hello
Kernel.print("Hello\n")
Hello
(print is really a class method of Kernel)
Operators
Operators behave as you would expect:
1+2
3
But in Ruby they are actually methods!
1.+(2)
3
Since all operators are methods, they can be defined as
you like for your own classes, or even re-defined for
existing classes.
Blocks
Any code surrounded by curly braces is a closure,
known as a block:
20.times{
print 'CAG'
}
CAGCAGCAGCAGCAGCAGCAGCAGCAGC
AGCAGCAGCAGCAGCAGCAGCAGCAGCA
GCAG
Blocks are sets of instructions that can be passed
around the program.
Blocks can also take arguments, delimited by pipe
characters:
"Hello".each_char{|ch| puts ch}
H
e
l
l
o
Braces can be replaced by the keywords do and end.
"Hello".each_char do |ch|
puts ch
end
H
e
l
l
o
Effective use of blocks can allow highly transparent
code:
a = [ "a", "b", "c", "d" ]
a.collect { |x| x + "!" }
["a!", "b!", "c!", "d!"]
Regular expressions
Regex is very simple to use in Ruby (much nicer than
Python!)
text = "Cats are smarter than dogs”;
if ( text =~ /(C|c)at(.*)/ ) then
puts "I found a cat"
end
I found a cat
Example
class Greeter
def initialize(name = "World")
@name = name
end
def say_hi
puts "Hi #{@name}!"
end
def say_bye
puts "Bye #{@name}, come back soon."
end
end
g = Greeter.new("Pat")
g.say_hi
Hi Pat!
g.say_bye
Bye Pat, come back soon.
g.name
NoMethodError: undefined method 'name' for
#<Greeter:0x007f91b18708f8 @name="Pat">
class Greeter
attr_accessor :name
end
g.name
=> "Pat"
g.name = "John"
g.say_hi
Hi John!
Sources:
https://www.rubylang.org/en/documentation/quickstart/
http://docs.ruby-doc.com/docs/ProgrammingRuby/
http://mislav.uniqpath.com/poignant-guide/
http://tryruby.org/
Download