ruby presentation - beamer

51
The Language Tools Ruby: Why We Love It https://github.com/Kelsin/ruby-presentation Christopher Giroir November 8th, 2011 Christopher Giroir Ruby: Why We Love It

Upload: christopher-giroir

Post on 10-May-2015

261 views

Category:

Technology


1 download

TRANSCRIPT

Page 1: Ruby Presentation - Beamer

The Language Tools

Ruby: Why We Love Ithttps://github.com/Kelsin/ruby-presentation

Christopher Giroir

November 8th, 2011

Christopher Giroir Ruby: Why We Love It

Page 2: Ruby Presentation - Beamer

The Language Tools

1 The LanguageBasicsWhy We Love ItGems

2 ToolsBundlerRVM

Christopher Giroir Ruby: Why We Love It

Page 3: Ruby Presentation - Beamer

The Language Tools

Basics

Overview

Inspired by Smalltalk (which I love)

Also draws from Perl, Eiffel, Ada and LISP

Includes a REPL

Built for developers as a language they would love to use

Dynamic, strict, reflective, object oriented

Everything is an expression (even statements)

Everything is executed imperatively (even declarations)

Christopher Giroir Ruby: Why We Love It

Page 4: Ruby Presentation - Beamer

The Language Tools

Basics

Overview

Inspired by Smalltalk (which I love)

Also draws from Perl, Eiffel, Ada and LISP

Includes a REPL

Built for developers as a language they would love to use

Dynamic, strict, reflective, object oriented

Everything is an expression (even statements)

Everything is executed imperatively (even declarations)

Christopher Giroir Ruby: Why We Love It

Page 5: Ruby Presentation - Beamer

The Language Tools

Basics

Overview

Inspired by Smalltalk (which I love)

Also draws from Perl, Eiffel, Ada and LISP

Includes a REPL

Built for developers as a language they would love to use

Dynamic, strict, reflective, object oriented

Everything is an expression (even statements)

Everything is executed imperatively (even declarations)

Christopher Giroir Ruby: Why We Love It

Page 6: Ruby Presentation - Beamer

The Language Tools

Basics

Overview

Inspired by Smalltalk (which I love)

Also draws from Perl, Eiffel, Ada and LISP

Includes a REPL

Built for developers as a language they would love to use

Dynamic, strict, reflective, object oriented

Everything is an expression (even statements)

Everything is executed imperatively (even declarations)

Christopher Giroir Ruby: Why We Love It

Page 7: Ruby Presentation - Beamer

The Language Tools

Basics

Overview

Inspired by Smalltalk (which I love)

Also draws from Perl, Eiffel, Ada and LISP

Includes a REPL

Built for developers as a language they would love to use

Dynamic, strict, reflective, object oriented

Everything is an expression (even statements)

Everything is executed imperatively (even declarations)

Christopher Giroir Ruby: Why We Love It

Page 8: Ruby Presentation - Beamer

The Language Tools

Basics

Overview

Inspired by Smalltalk (which I love)

Also draws from Perl, Eiffel, Ada and LISP

Includes a REPL

Built for developers as a language they would love to use

Dynamic, strict, reflective, object oriented

Everything is an expression (even statements)

Everything is executed imperatively (even declarations)

Christopher Giroir Ruby: Why We Love It

Page 9: Ruby Presentation - Beamer

The Language Tools

Basics

Overview

Inspired by Smalltalk (which I love)

Also draws from Perl, Eiffel, Ada and LISP

Includes a REPL

Built for developers as a language they would love to use

Dynamic, strict, reflective, object oriented

Everything is an expression (even statements)

Everything is executed imperatively (even declarations)

Christopher Giroir Ruby: Why We Love It

Page 10: Ruby Presentation - Beamer

The Language Tools

Basics

Object Oriented

Everything is an object

Single Inheritance

Modules can be mixed in

Dynamic Dispatch

Christopher Giroir Ruby: Why We Love It

Page 11: Ruby Presentation - Beamer

The Language Tools

Basics

Object Oriented

Everything is an object

Single Inheritance

Modules can be mixed in

Dynamic Dispatch

Christopher Giroir Ruby: Why We Love It

Page 12: Ruby Presentation - Beamer

The Language Tools

Basics

Object Oriented

Everything is an object

Single Inheritance

Modules can be mixed in

Dynamic Dispatch

Christopher Giroir Ruby: Why We Love It

Page 13: Ruby Presentation - Beamer

The Language Tools

Basics

Object Oriented

Everything is an object

Single Inheritance

Modules can be mixed in

Dynamic Dispatch

Christopher Giroir Ruby: Why We Love It

Page 14: Ruby Presentation - Beamer

The Language Tools

Basics

Simple Code

1 5.times { print "Hello" }

This outputs:

1 Hello

2 Hello

3 Hello

4 Hello

5 Hello

6 => 5

Christopher Giroir Ruby: Why We Love It

Page 15: Ruby Presentation - Beamer

The Language Tools

Basics

Simple Code

1 5.times { print "Hello" }

This outputs:

1 Hello

2 Hello

3 Hello

4 Hello

5 Hello

6 => 5

Christopher Giroir Ruby: Why We Love It

Page 16: Ruby Presentation - Beamer

The Language Tools

Basics

Types

1 # Strings

2 s = ’Testing’

3

4 # Interpreted Strings

5 t = "Double #{str}"

6

7 # Symbols

8 sym = :chris

9

10 # Arrays

11 a = [1,2,3]

12

13 # Hashes

14 h = { :key => ’value’, :chris => ’awesome’ }

Christopher Giroir Ruby: Why We Love It

Page 17: Ruby Presentation - Beamer

The Language Tools

Basics

Classes

1 class Box

2 def initialize(w,h,d)

3 @width = w

4 @height = h

5 @depth = d

6 end

7

8 def volume

9 @width * @height * @depth

10 end

11 end

12

13 box = Box.new(2,2,2)

14 box.volume # => 8

Christopher Giroir Ruby: Why We Love It

Page 18: Ruby Presentation - Beamer

The Language Tools

Basics

Simple Inheritance

1 class JackInTheBox < Box

2 def initialize(msg)

3 @msg = msg

4 super(3,3,3)

5 end

6

7 def open

8 puts @msg

9 end

10 end

11

12 jbox = JackInTheBox.new(’Surprise!’)

13 jbox.volume # => 27

14 jbox.open # prints ’Surprise!’

Christopher Giroir Ruby: Why We Love It

Page 19: Ruby Presentation - Beamer

The Language Tools

Basics

Control

1 while true == false

2 if var == 5

3 break

4 end

5

6 begin

7 var - 1

8 end while var < 4

9

10 next if var == 6

11 end

Christopher Giroir Ruby: Why We Love It

Page 20: Ruby Presentation - Beamer

The Language Tools

Basics

Blocks

1 [1,2,3].each { |n| puts n }

This outputs:

1 1

2 2

3 3

4 => [1,2,3]

Christopher Giroir Ruby: Why We Love It

Page 21: Ruby Presentation - Beamer

The Language Tools

Basics

Blocks

1 [1,2,3].each { |n| puts n }

This outputs:

1 1

2 2

3 3

4 => [1,2,3]

Christopher Giroir Ruby: Why We Love It

Page 22: Ruby Presentation - Beamer

The Language Tools

Basics

Block Syntax

1 5.upto(10) { |n| puts n }

This is exactly the same as the following:

1 5.upto(10) do |n|

2 puts n

3 end

Christopher Giroir Ruby: Why We Love It

Page 23: Ruby Presentation - Beamer

The Language Tools

Why We Love It

Attribute Methods

1 class Person

2 def name

3 @name

4 end

5 def social=(s)

6 @social = s

7 end

8 def age

9 @age

10 end

11 def age=(a)

12 @age = a

13 end

14 end

Christopher Giroir Ruby: Why We Love It

Page 24: Ruby Presentation - Beamer

The Language Tools

Why We Love It

The Easy Way

1 class Person

2 attr_reader :name

3 attr_writer :social

4 attr_accessor :age

5 end

Christopher Giroir Ruby: Why We Love It

Page 25: Ruby Presentation - Beamer

The Language Tools

Why We Love It

The Easy Way Explained

1 class Person

2 attr_reader :name

3 attr_writer :social

4 attr_accessor :age

5 end

Ruby syntax allows method calls without ()

Result is clean and looks like a language feature

Christopher Giroir Ruby: Why We Love It

Page 26: Ruby Presentation - Beamer

The Language Tools

Why We Love It

The Easy Way Explained

1 class Person

2 attr_reader :name

3 attr_writer :social

4 attr_accessor :age

5 end

Ruby syntax allows method calls without ()

Result is clean and looks like a language feature

Christopher Giroir Ruby: Why We Love It

Page 27: Ruby Presentation - Beamer

The Language Tools

Why We Love It

We can implement this ourselves

Untested code, please do not copy:

1 class Object

2 def self.attr_reader(var)

3 class_eval <<-METHODS

4 def #{var}

5 @#{var}

6 end

7 METHODS

8 end

9 end

Christopher Giroir Ruby: Why We Love It

Page 28: Ruby Presentation - Beamer

The Language Tools

Why We Love It

We can implement this ourselves

Untested code, please do not copy:

1 class Object

2 def self.attr_reader(var)

3 class_eval <<-METHODS

4 def #{var}

5 @#{var}

6 end

7 METHODS

8 end

9 end

Christopher Giroir Ruby: Why We Love It

Page 29: Ruby Presentation - Beamer

The Language Tools

Why We Love It

Why Blocks

1 (map (lambda (n)

2 (+ n 5))

3 ’(1 2 3))

Becomes:

1 [1,2,3].map do |n|

2 n + 5

3 end

Results in:

1 => [6,7,8]

Christopher Giroir Ruby: Why We Love It

Page 30: Ruby Presentation - Beamer

The Language Tools

Gems

Modules

1 module Voice

2 def say(msg)

3 puts msg

4 end

5 end

6

7 class Person

8 include Voice

9 end

10

11 p = Person.new

12 p.say(’Hello’) # prints ’Hello’

Christopher Giroir Ruby: Why We Love It

Page 31: Ruby Presentation - Beamer

The Language Tools

Gems

Using Gems

Require loads in files

1 require ’saver’ # pulls in ’saver.rb’

Gems allow us to not deal with paths

1 require ’rubygems’

2 require ’saver’

3

4 class Item

5 include Saver

6 end

Christopher Giroir Ruby: Why We Love It

Page 32: Ruby Presentation - Beamer

The Language Tools

Gems

Writing Gems

1 Gem::Specification.new do |s|

2 s.name = "saver"

3 s.version = Saver::VERSION

4 s.authors = ["Christopher Giroir"]

5 s.email = ["[email protected]"]

6 s.homepage = "http://kelsin.github.com/saver/"

7

8 s.files = ‘git ls-files‘.split("\n")

9 s.require_paths = ["lib"]

10

11 s.add_dependency ’activesupport’, ’~> 3.0.0’

12 s.add_dependency ’mongo_mapper’

13 end

Christopher Giroir Ruby: Why We Love It

Page 33: Ruby Presentation - Beamer

The Language Tools

Bundler

Why Bundler?

Many projects (i.e. rails apps) are not gems themselves

They do have gem dependencies

Easy way to install and keep track of these dependencies

Making sure ONLY the proper gems are used

Christopher Giroir Ruby: Why We Love It

Page 34: Ruby Presentation - Beamer

The Language Tools

Bundler

Why Bundler?

Many projects (i.e. rails apps) are not gems themselves

They do have gem dependencies

Easy way to install and keep track of these dependencies

Making sure ONLY the proper gems are used

Christopher Giroir Ruby: Why We Love It

Page 35: Ruby Presentation - Beamer

The Language Tools

Bundler

Why Bundler?

Many projects (i.e. rails apps) are not gems themselves

They do have gem dependencies

Easy way to install and keep track of these dependencies

Making sure ONLY the proper gems are used

Christopher Giroir Ruby: Why We Love It

Page 36: Ruby Presentation - Beamer

The Language Tools

Bundler

The Gemfile

1 source ’http://tools1.savewave.com/rubygems’

2 source ’http://rubygems.org’

3

4 gem ’rails’, ’3.0.7’

5

6 gem ’sw-model’, ’0.13.0’

7

8 group :development, :test do

9 gem "rspec"

10 end

Christopher Giroir Ruby: Why We Love It

Page 37: Ruby Presentation - Beamer

The Language Tools

Bundler

Using Bundler

1 # Install the gems from the Gemfile

2 bundle install

3

4 # Update gems to new versions

5 bundle update

6

7 # Execute command with proper gems

8 bundle exec rake spec

In your ruby code

1 require "rubygems"

2 require "bundler/setup"

3 require "saver"

Christopher Giroir Ruby: Why We Love It

Page 38: Ruby Presentation - Beamer

The Language Tools

Bundler

Gemfile.lock

When you initially install versions are saved to Gemfile.lock

After they are only updated on bundle update

SHOULD be checked into version control

Protects from version updates

Christopher Giroir Ruby: Why We Love It

Page 39: Ruby Presentation - Beamer

The Language Tools

Bundler

Gemfile.lock

When you initially install versions are saved to Gemfile.lock

After they are only updated on bundle update

SHOULD be checked into version control

Protects from version updates

Christopher Giroir Ruby: Why We Love It

Page 40: Ruby Presentation - Beamer

The Language Tools

Bundler

Gemfile.lock

When you initially install versions are saved to Gemfile.lock

After they are only updated on bundle update

SHOULD be checked into version control

Protects from version updates

Christopher Giroir Ruby: Why We Love It

Page 41: Ruby Presentation - Beamer

The Language Tools

RVM

Why RVM?

Different projects might use different versions of rails

Different projects might use different ruby interpreters

RubyJRubyRubinus

While bundler helps, complete gem isolation is better!

It’s nice to keep your system ruby separate and not update it

Christopher Giroir Ruby: Why We Love It

Page 42: Ruby Presentation - Beamer

The Language Tools

RVM

Why RVM?

Different projects might use different versions of rails

Different projects might use different ruby interpreters

RubyJRubyRubinus

While bundler helps, complete gem isolation is better!

It’s nice to keep your system ruby separate and not update it

Christopher Giroir Ruby: Why We Love It

Page 43: Ruby Presentation - Beamer

The Language Tools

RVM

Why RVM?

Different projects might use different versions of rails

Different projects might use different ruby interpreters

RubyJRubyRubinus

While bundler helps, complete gem isolation is better!

It’s nice to keep your system ruby separate and not update it

Christopher Giroir Ruby: Why We Love It

Page 44: Ruby Presentation - Beamer

The Language Tools

RVM

Why RVM?

Different projects might use different versions of rails

Different projects might use different ruby interpreters

RubyJRubyRubinus

While bundler helps, complete gem isolation is better!

It’s nice to keep your system ruby separate and not update it

Christopher Giroir Ruby: Why We Love It

Page 45: Ruby Presentation - Beamer

The Language Tools

RVM

Using RVM

1 # Install the default 1.9.2 ruby interpretor

2 rvm install 1.9.2

3

4 # Switch to using 1.9.2

5 rvm use 1.9.2

6

7 # List installed rubies

8 rvm list

Christopher Giroir Ruby: Why We Love It

Page 46: Ruby Presentation - Beamer

The Language Tools

RVM

RVM Gemsets

1 # Create a new gemset

2 rvm gemset create savingstar-web

3

4 # List gemsets

5 rvm gemset list

6

7 # Switch to a ruby and gemset together

8 rvm use 1.9.2@savingstar-web

Christopher Giroir Ruby: Why We Love It

Page 47: Ruby Presentation - Beamer

The Language Tools

RVM

.rvmrc

A .rvmrc file per project allows you to say which ruby andgemset to use

Should be in source control. Helps RVM users out, ignored forothers

It’s a shell script that’s executed everytime you cd (veryunsafe)

Makes life very easy however!

1 rvm use 1.9.2@saveingstar-web --create

Christopher Giroir Ruby: Why We Love It

Page 48: Ruby Presentation - Beamer

The Language Tools

RVM

.rvmrc

A .rvmrc file per project allows you to say which ruby andgemset to use

Should be in source control. Helps RVM users out, ignored forothers

It’s a shell script that’s executed everytime you cd (veryunsafe)

Makes life very easy however!

1 rvm use 1.9.2@saveingstar-web --create

Christopher Giroir Ruby: Why We Love It

Page 49: Ruby Presentation - Beamer

The Language Tools

RVM

.rvmrc

A .rvmrc file per project allows you to say which ruby andgemset to use

Should be in source control. Helps RVM users out, ignored forothers

It’s a shell script that’s executed everytime you cd (veryunsafe)

Makes life very easy however!

1 rvm use 1.9.2@saveingstar-web --create

Christopher Giroir Ruby: Why We Love It

Page 50: Ruby Presentation - Beamer

The Language Tools

RVM

.rvmrc

A .rvmrc file per project allows you to say which ruby andgemset to use

Should be in source control. Helps RVM users out, ignored forothers

It’s a shell script that’s executed everytime you cd (veryunsafe)

Makes life very easy however!

1 rvm use 1.9.2@saveingstar-web --create

Christopher Giroir Ruby: Why We Love It

Page 51: Ruby Presentation - Beamer

The Language Tools

RVM

.rvmrc

A .rvmrc file per project allows you to say which ruby andgemset to use

Should be in source control. Helps RVM users out, ignored forothers

It’s a shell script that’s executed everytime you cd (veryunsafe)

Makes life very easy however!

1 rvm use 1.9.2@saveingstar-web --create

Christopher Giroir Ruby: Why We Love It