Ruby in 20 minutes John Pinney j pinneyimperial
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 => Nil. Class nil. 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 (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. close front_door. is_open? 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 "Hellon" Hello Kernel. print("Hellon") Hello (print is really a class method of Kernel)
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' } CAGCAGCAGCAGCAGCA 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
g = Greeter. new("Pat") g. say_hi Hi Pat! g. say_bye Bye Pat, come back soon. g. name No. Method. Error: undefined method 'name' for #<Greeter: 0 x 007 f 91 b 18708 f 8 @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/Programming. Ruby/ http: //mislav. uniqpath. com/poignant-guide/ http: //tryruby. org/
- Slides: 21