Introduction to Ruby for Programmers

This section is intended as a brief, lightweight overview of the Ruby language; following sections will cover all these topics in much more detail. Students are encouraged to ask questions, but instructors are encouraged to answer, "We'll cover that later."

Ruby vs. Rails

Ruby is a Language

Rails is a Framework

Rails is written in Ruby

Ruby Philosophy

Matz (Yukihiro Matsumoto), Ruby creator, says:

"I believe people want to express themselves when they program. They don't want to fight with the language."

"Programming languages must feel natural to programmers."

"I tried to make people enjoy programming and concentrate on the fun and creative part of programming when they use Ruby."

"For me the purpose of life is partly to have joy. Programmers often feel joy when they can concentrate on the creative side of programming, So Ruby is designed to make programmers happy."

"I wanted a scripting language that was more powerful than Perl, and more object-oriented than Python."

Ruby Philosophy: Humane Interface

Many Rubies

too many rubies

Versions common today

Ruby Language Overview

Ruby is...

IRB: Interactive RuBy

$ irb
>> 4
=> 4
>> 4+4
=> 8

Please fire up irb on your computer and try this out right now!

Everything's an Object

>> 2.class
=> Fixnum

>> 2.to_s
=> "2"

>> 2.to_s.class
=> String

Everything Has a Value

>> 2 + 2
=> 4

>> (2+2).zero?
=> false

>> if true then "yes" end
=> "yes"

>> if false then "yes" end
=> nil

Output vs Value

>> puts "foo"
foo
=> nil

The output is foo\n but the value is nil.

Variables are Names for Objects

fruit = "apple"

Printing

Advanced Printing

Functions

def add a, b
  a + b
end

add 2, 2
#=> 4

Optional Punctuation

def increment(x)
  return x + 1;
end

def increment x
  x + 1
end
def increment x; x + 1; end

def increment(x) x + 1; end

Blocks are like mini-functions

>> ["hello", "world"].map {|string| string.upcase}
=> ["HELLO", "WORLD"]

Method Chaining

Method Chaining Example

s = "my dog has fleas"

Without chaining:

words = s.split
words = words.map{|word| word.capitalize}
s = words.join(" ")

With chaining:

s = "my dog has fleas"
s.split.map{|word| word.capitalize}.join(" ")

Poetry vs Prose

Other languages are prose:

public String titleize(s) {
  String words = s.split(" ");
  String titleized = "";
  for(int i =0; i < words.length ; i++) {
    char capLetter = Character.toUpperCase(words[i].charAt(0));
    String capWord =  capLetter + words[i].substring(1, words[i].length());
    titleized += capWord + " ";
  }
  return titleized.trim();
}

Ruby is poetry:

def titleize s
  s.split.map(&:capitalize).join(" ")
end

Cf. declarative vs. algorithmic

Ruby has hash comments, like perl

is a comment

2 + 2 # is a comment ```

Ruby has a syntax for multiline comments too, but it's silly and nobody uses it.

Line Break Gotcha

x = 1 + 2
x #=> 3

x = 1
  + 2
x #=> 1

Solution: always put operators on top line

x = 1 +
    2
x #=> 3

Use parens when you need them

>> "Hello".gsub "H", "h"
=> "hello"

>> "Hello".gsub "H", "h".reverse
=> "hello"

>> "Hello".gsub("H", "h").reverse
=> "olleh"

Variables are declared implicitly

first_name = "Santa"
last_name = "Claus"
full_name = first_name + last_name
#=> "SantaClaus"

Built-in Types

Built-in Types (cont.)

String interpolation

"boyz #{1 + 1} men"
=> "boyz 2 men"

equal, double-equal, and threequal

Ruby syntax cheatsheets

Ruby Cheat Sheets from Ruby Inside

see also The Well-Grounded Rubyist, p. 5, section 1.1.2

Interlude

Are you sick of hearing me speak?

If so, do a lab: 01_temperature is right up your alley.

Iterators

my_array = ["cat", "dog", "world"]
my_array.each do |item|
  puts "hello " + item
end

Classes and methods

class Calculator
  def add(a,b)
    a + b
  end
end

calc = Calculator.new
calc.add(2, 2)
#=> 4

Classes

Messages and Methods

bang and question mark methods

Ruby Naming Conventions

methods and variables are in snake_case

classes and modules are in CamelCase

constants are in ALL_CAPS

Standard is better than better.

-- Anon.

Ruby Identifiers

Variable Scopes

var   # local variable (or method call)
@var  # instance variable
@@var # class variable
$var  # global variable
VAR   # constant

load and require

Next steps

Credits

 Previous Lesson Next Lesson 

Outline

[menu]

/