Ruby in 20 minutes John Pinney j.pinney@imperial.ac.uk.

Post on 01-Apr-2015

216 views 0 download

Transcript of Ruby in 20 minutes John Pinney j.pinney@imperial.ac.uk.

Ruby in 20 minutes

John Pinneyj.pinney@imperial.ac.uk

What is Ruby?

A true object-oriented languagewith easily understandable syntaxand 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 classhas an interface for method invocation

"hello".reverse=> "olleh”

44.even?=> true

nil.class=> NilClass

nil.class.class=> Class

Parts of speech

VariablesNumbersStringsSymbolsConstants

RangesRegular Expressions

Methods + argumentsBlocks + arguments

ArraysHashes

Operators

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.openfront_door.open.closefront_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 behave as you would expect:1 + 23

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.

Operators

BlocksAny code surrounded by curly braces is a closure, known as a block:

20.times{ print 'CAG'}CAGCAGCAGCAGCAGCAGCAGCAGCAGCAGCAGCAGCAGCAGCAGCAGCAGCAGCAGCAG

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}Hello

Braces can be replaced by the keywords do and end.

"Hello".each_char do |ch| puts chendHello

Effective use of blocks can allow highly transparent code:

a = [ "a", "b", "c", "d" ]a.collect { |x| x + "!" } ["a!", "b!", "c!", "d!"]

Regular expressionsRegex 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"endI 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." endend

g = Greeter.new("Pat")g.say_hiHi Pat!g.say_byeBye Pat, come back soon.

g.nameNoMethodError: undefined method 'name' for #<Greeter:0x007f91b18708f8 @name="Pat">

class Greeter attr_accessor :nameendg.name=> "Pat"

g.name = "John"g.say_hiHi John!

Sources:

https://www.ruby-lang.org/en/documentation/quickstart/

http://docs.ruby-doc.com/docs/ProgrammingRuby/

http://mislav.uniqpath.com/poignant-guide/

http://tryruby.org/