seven languages in seven days: ruby

32
Seven Languages in Seven Days: Ruby prepared by @zachleat

Upload: zach-leatherman

Post on 18-Dec-2014

558 views

Category:

Technology


2 download

DESCRIPTION

Some coworkers and I are going through the 7 languages book, I presented on the Ruby chapter. Source code available here: https://github.com/swicklund/polyglot

TRANSCRIPT

Page 1: Seven Languages in Seven Days: Ruby

Seven Languages in Seven Days: Rubyprepared by @zachleat

Page 2: Seven Languages in Seven Days: Ruby
Page 3: Seven Languages in Seven Days: Ruby

CreatorYukihiro Matsumoto“Matz”

Page 4: Seven Languages in Seven Days: Ruby

InfluencesLisp, Smalltalk, Perl

Page 5: Seven Languages in Seven Days: Ruby

Trade-offsSimplicity for Safety

Productivity for Performance

Page 6: Seven Languages in Seven Days: Ruby

irbRuby’s Interactive Console

Page 7: Seven Languages in Seven Days: Ruby

Syntax

Page 8: Seven Languages in Seven Days: Ruby

WHEN U DECLARE VARS

U DECLARE WEAKNESSCourage Wolf

Page 9: Seven Languages in Seven Days: Ruby

RUBY CODE ROI

ALWAYS RETURN SOMETHING

Business Cat

Page 10: Seven Languages in Seven Days: Ruby

Y U NO EVALUTE STRING?

SINGLE QUOTES!!puts “hello, #{language}”

Y U NO?

Page 11: Seven Languages in Seven Days: Ruby

>> puts ‘literal string’literal string

>> subject = ‘world’=> “world”

>> puts “hello, #{subject}”hello, world

Y U NO?

Page 12: Seven Languages in Seven Days: Ruby

HUMANS ARE CARBON

RUBY IS OBJECTSPhilosoraptor

Page 13: Seven Languages in Seven Days: Ruby

>> 4.class=> FixNum

>> 4.methods=> [“inspect”, “%”, “<<“, ...

>> false.class=> FalseClass

Philosoraptor

Page 14: Seven Languages in Seven Days: Ruby

Success Kid

MY CONDITIONALS

ALWAYS SUCCESSFUL

Page 15: Seven Languages in Seven Days: Ruby

Success Kid

>> x = 4=> 4

>> puts ‘True!!’ if x == 4True!!=> nil

>> puts ‘True!!’ unless x == 4=> nil

>> puts ‘True!!’ if not true=> nil

>> puts ‘True!!’ if !true=> nil

Page 16: Seven Languages in Seven Days: Ruby

Success Kid

# Everything but nil and false# evaluate to true. 0 is true!>> puts “This is true” if 0This is true=> nil

# and, &&# or, ||

# &, | are the non-short circuit# equivalents

Page 17: Seven Languages in Seven Days: Ruby

THE BEST LOOPS

ITERATE OVER THIRSTThe Most Interesting Man in the World

Page 18: Seven Languages in Seven Days: Ruby

The Most Interesting Man in the World

>> x = x + 1 while x < 10=> nil>> x=> 10

>> x = x - 1 until x == 1=> nil>> x=> 1

Page 19: Seven Languages in Seven Days: Ruby

KEYBOARD CATHAS NOTHING ON

DUCK TYPINGTechnologically Impaired Duck

Page 20: Seven Languages in Seven Days: Ruby

>> 4 + ‘four’TypeError: String can’t be coerced into Fixnum

# Strongly typed# Dynamic: Checked at run time

>> a = [‘100’, 100.0]=> [‘100’, 100.0]>> while i < 2>> puts a[i].to_i>> i += 1>> end100100

Technologically Impaired Duck

Page 21: Seven Languages in Seven Days: Ruby

FFFUUUUUU

FFFFFUUUUUUUUUU

UUUUUUUNCTIONS

Page 22: Seven Languages in Seven Days: Ruby

>> def tell_the_truth>> true>> end

# Last expression is return value

Technologically Impaired Duck

Page 23: Seven Languages in Seven Days: Ruby

ARRRRRRRAYS

AND HASHES

Page 24: Seven Languages in Seven Days: Ruby

>> animals = [‘lions’, ‘tigers’]=> [‘lions’, ‘tigers’]

>> numbers = {1 => ‘one’, 2 => ‘two’}=> {1=>”one”, 2=>”two”}

# Symbols>> ‘string’.object_id=> 3092010>> ‘string’.object_id=> 3089690>> :string.object_id=> 69618>> :string.object_id=> 69618

Page 25: Seven Languages in Seven Days: Ruby

>> def winning(options = {})>> if(options[:profession] == :gambler)>> true>> else>> false>> end>> end=> nil

>> winning=> false

# {} optional for last parameter>> winning(:profession => :lawyer)=> true

Page 26: Seven Languages in Seven Days: Ruby

YO DAWG I HEARD YOULIKED CODE BLOCKS

SO YOU COULD RUN CODEIN YOUR CODE

Page 27: Seven Languages in Seven Days: Ruby

>> 3.times { puts ‘hi’ }hihihi

>> animals = [‘lions’, ‘tigers’]>> animals.each {|a| puts a}lionstigers

# Blocks can be passed as parameters>> def pass_block(&block)>> end>> pass_block { puts ‘hi’ }

Page 28: Seven Languages in Seven Days: Ruby

Classesclass MyClass def initialize(name) @name = name # instance var @@other = ‘’ # class var end

def name return @name end

# methods that check end in ?end

my_class = MyClass.new(‘Name’)my_class.name # returns ‘Name’

Page 29: Seven Languages in Seven Days: Ruby

Modulesmodule MyModule def name return @name endend

class MyClass include MyModule

def initialize(name) @name = name endend

my_class = MyClass.new(‘Name’)my_class.name # returns ‘Name’

Page 30: Seven Languages in Seven Days: Ruby

Enumerable# Implements each method

Comparable# Implements <=> (spaceship) method

Page 31: Seven Languages in Seven Days: Ruby

Open Classes# First invocation defines# Second invocation modifies

class NilClass def blank? true endend

class String def blank? self.size == 0 endend

[‘’, ‘person’, nil].each {|a| puts a unless a.blank?}# outputs person

Page 32: Seven Languages in Seven Days: Ruby

method_missing