• Share
  • Email
  • Embed
  • Like
  • Save
  • Private Content
An introduction to Ruby
 

An introduction to Ruby

on

  • 2,886 views

My slides from the presentation I gave at the Devnology Community Day on 7 November 2009.

My slides from the presentation I gave at the Devnology Community Day on 7 November 2009.

Statistics

Views

Total Views
2,886
Views on SlideShare
2,836
Embed Views
50

Actions

Likes
9
Downloads
122
Comments
2

4 Embeds 50

http://www.techgig.com 41
http://devnology.nl 4
http://www.slideshare.net 3
https://www.linkedin.com 2

Accessibility

Categories

Upload Details

Uploaded via as Apple Keynote

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel

12 of 2 previous next

  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
  • Thanks.
    Are you sure you want to
    Your message goes here
    Processing…
  • Uma introdução leve ao Ruby.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment
  • Overview: <br /> * Top-level: what is it? <br /> * Low-level: how does it look? <br /> * Purpose: What can you use it for? <br /> * Practice: what is it used for?
  • Overview: <br /> * Top-level: what is it? <br /> * Low-level: how does it look? <br /> * Purpose: What can you use it for? <br /> * Practice: what is it used for?
  • * Simple strings <br /> * Puts -> global scope <br /> * Interpolation <br /> * Methods, parameters <br /> * Single quotes vs double quotes
  • * Simple strings <br /> * Puts -> global scope <br /> * Interpolation <br /> * Methods, parameters <br /> * Single quotes vs double quotes

An introduction to Ruby An introduction to Ruby Presentation Transcript

  • An Introduction to Ruby
  • Speaker.new({ :name => "Wes Oldenbeuving", :twitter => "@Narnach", :rubyist_since => "Early 2006", :works_as => "Freelance Rubyist", :code_at => "github.com/Narnach", :email => "wes@narnach.com" })
  • Overview What is Ruby? History and current versions What does Ruby look like? Basic tools of the Rubyist Practical uses of Ruby The Ruby Community
  • What is Ruby?
  • Object oriented
  • Everything is an object 1.class # => Fixnum 'a'.class # => String :z.class # => Symbol class Foo end Foo.class # => Class Foo.new.class # => Foo
  • Dynamically typed def foo(bar) bar * 2 end foo(1) # => 2 foo("a") # => "aa"
  • Duck Typing "a".respond_to? :size # => true 1.respond_to? :+ # => true 1.respond_to? :inject # => false
  • Scripting language
  • Everything is an expression
  • Ruby: the history
  • Japan
  • Idea 1993
  • Productivity and fun
  • Focus on the programmer, not the computer
  • Inspired by Perl, Smalltalk, Lisp
  • v0.95 1995
  • English-language 1999 v1.3
  • Programming Ruby 2000
  • Current versions of Ruby
  • Matz Ruby Interpreter Stable Ruby 1.8
  • Yet Another Ruby VM Development Ruby 1.9
  • JRuby (1.4) Ruby 1.8 (1.9) on the JVM
  • Rubinius Ruby 1.8 in Ruby (and a bit of C++)
  • IronRuby (0.9.2) Ruby 1.8 without continuations
  • MacRuby (0.5) Ruby 1.9 in Objective-C
  • Maglev Ruby in Gemstone Smalltalk VM
  • Ruby: the language
  • What does Ruby look like?
  • Strings and Variables 'Hello, Devnology!' name = 'Devnology' # => "Devnology" "Hello, #{name}!" # => "Hello, Devnology!"
  • Methods str = "Hello, Devnology!" str.size # => 17 str.sub("Devnology", "World") # => "Hello, World!" def greet(name="Wes") "Greetings, #{name}!" end puts greet puts greet('Devnology') # >> Greetings, Wes! # >> Greetings, Devnology!
  • Numbers 1 + 2 # => 3 1 + 2.1 # => 3.1 2**10 # => 1024 9 / 2 # => 4 5 % 3 # => 2 -3.abs # => 3 1.class # => Fixnum (2**50).class # => Bignum 1.3.class # => Float
  • Arrays Array.new # => [] [1,2,3] # => [1, 2, 3] [1] + [2] << 3 # => [1, 2, 3] [1,2,3] - [2,3] # => [1] %w[one two] # => ["one", "two"] [1,2,3].pop # => 3 [1,2].push(3) # => [1, 2, 3] [1,2,3].shift # => 1 [2,3].unshift(1) # => [1, 2, 3] [1,3].insert(1,2) # => [1, 2, 3]
  • Hashes options = {:name => "Devnology"} h = Hash.new # => {} h['string'] = 1 h[:symbol] = 1 h # => {:symbol=>1, "string"=>1} h.keys # => [:symbol, "string"] h[:symbol] # => 1
  • Iterators for n in 0..2 puts n end (0..2).each do |n| puts n end [0,1,2].each {|n| puts n}
  • Enumerable ary = [1,2,3] ary.map {|n| n * 2} # => [2, 4, 6] ary.select {|n| n % 2 == 0} # => [2] ary.inject(0) {|sum, n| sum + n} # => 6
  • Control structures if some_condition # ... elsif other_condition # ... else # ... end while condition # ... end puts "lol" if funny?
  • Regular Expressions str = "Hello, world!" str.gsub(/[aeiou]/,"*") # => "H*ll*, w*rld!" str =~ /w(or)ld/ # => 7 $1 # => "or" match = str.match(/w(or)ld/) # => #<MatchData: 0x532cbc> match[0] # => "world" match[1] # => "or"
  • Error handling begin raise "Standard error" rescue => e p e end # >> #<RuntimeError: Standard error> begin raise StandardError.new("Oh, oh") rescue RuntimeError puts "runtime" rescue StandardError puts "standard" end # >> standard
  • System interaction system "ls" output = `ls` ARGV File.open('test.txt','w') do |file| file.write("linen") file.puts("line") end File.read('test.txt')
  • Classes class Calc attr_accessor :factor def initialize(factor=2) @factor = factor end def multiply(value) @factor * value end end calc = Calc.new calc.multiply 5 # => 10 calc.factor = 3 calc.multiply 5 # => 15
  • Inheritance class Foo def greet "Hi, #{value}" end def value "foo" end end class Bar < Foo def value "bar" end end Foo.new.greet # => "Hi, foo" Bar.new.greet # => "Hi, bar"
  • Mixins & Open Classes module Even def even? self % 2 == 0 end end class Fixnum include Even end 1.even? # => false 2.even? # => true
  • Class methods class Foo def self.bar "BAR!" end def bar "bar" end end Foo.bar # => "BAR!" Foo.new.bar # => "bar"
  • Basic tools of a Rubyist
  • Rubygems
  • Rdoc
  • Interactive Ruby
  • Practical uses of Ruby
  • Ruby on Rails class BlogPost < ActiveRecord::Base belongs_to :user has_many :comments validates_presence_of :user_id validates_associated :user validates_length_of :title, :within => 10..100 validates_length_of :body, :within => 100..5000 end BlogPost.new(:title => "Hello", :body => "foo!")
  • Rspec it "should be awesome" do foobar = FooBar.new foobar.should be_awesome end
  • Cucumber Feature: Write blog post As a blogger I want to create a new blog post So that I can share my knowledge Scenario: Click the Add group button Given I am on the homepage When I follow "New post" Then I should be on the new blog post page Given /^I am on (.+)$/ do |page_name| visit path_to(page_name) end
  • Scripting / automation
  • DSL: Rake desc "Clean everything up" task :cleanup do Cleaner.cleanup! end desc "Make sure everything is shiny" task :shiny => :cleanup do Shiner.polish! end
  • DSL: Capistrano set :application, "blog" set :repository, "git@github.com:Narnach/#{application}.git" set :deploy_to, "/var/www/www.#{application}.com" set :scm, :git role :web, "server" role :app, "server" role :db, "server", :primary => true namespace :deploy do desc "Restart Passenger" task :restart, :roles => :app, :except => { :no_release => true } do run "touch #{File.join(current_path,'tmp','restart.txt')}" end end
  • The Ruby Community
  • Rubyists
  • Amsterdam.rb Monthly beer night Presentation nights
  • Utrecht.rb Monthly beer night
  • rubyists.eu
  • ruby-groups.org dev-groups.org