An introduction to Ruby
Upcoming SlideShare
Loading in...5
×

Like this? Share it with your network

Share

An introduction to Ruby

  • 3,107 views
Uploaded on

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.

More in: Technology , Education
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
  • Thanks.
    Are you sure you want to
    Your message goes here
  • Uma introdução leve ao Ruby.
    Are you sure you want to
    Your message goes here
No Downloads

Views

Total Views
3,107
On Slideshare
3,057
From Embeds
50
Number of Embeds
4

Actions

Shares
Downloads
122
Comments
2
Likes
9

Embeds 50

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

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide
  • Overview:
    * Top-level: what is it?
    * Low-level: how does it look?
    * Purpose: What can you use it for?
    * Practice: what is it used for?
  • Overview:
    * Top-level: what is it?
    * Low-level: how does it look?
    * Purpose: What can you use it for?
    * Practice: what is it used for?
  • * Simple strings
    * Puts -> global scope
    * Interpolation
    * Methods, parameters
    * Single quotes vs double quotes
  • * Simple strings
    * Puts -> global scope
    * Interpolation
    * Methods, parameters
    * Single quotes vs double quotes

Transcript

  • 1. An Introduction to Ruby
  • 2. Speaker.new({ :name => "Wes Oldenbeuving", :twitter => "@Narnach", :rubyist_since => "Early 2006", :works_as => "Freelance Rubyist", :code_at => "github.com/Narnach", :email => "wes@narnach.com" })
  • 3. 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
  • 4. What is Ruby?
  • 5. Object oriented
  • 6. Everything is an object 1.class # => Fixnum 'a'.class # => String :z.class # => Symbol class Foo end Foo.class # => Class Foo.new.class # => Foo
  • 7. Dynamically typed def foo(bar) bar * 2 end foo(1) # => 2 foo("a") # => "aa"
  • 8. Duck Typing "a".respond_to? :size # => true 1.respond_to? :+ # => true 1.respond_to? :inject # => false
  • 9. Scripting language
  • 10. Everything is an expression
  • 11. Ruby: the history
  • 12. Japan
  • 13. Idea 1993
  • 14. Productivity and fun
  • 15. Focus on the programmer, not the computer
  • 16. Inspired by Perl, Smalltalk, Lisp
  • 17. v0.95 1995
  • 18. English-language 1999 v1.3
  • 19. Programming Ruby 2000
  • 20. Current versions of Ruby
  • 21. Matz Ruby Interpreter Stable Ruby 1.8
  • 22. Yet Another Ruby VM Development Ruby 1.9
  • 23. JRuby (1.4) Ruby 1.8 (1.9) on the JVM
  • 24. Rubinius Ruby 1.8 in Ruby (and a bit of C++)
  • 25. IronRuby (0.9.2) Ruby 1.8 without continuations
  • 26. MacRuby (0.5) Ruby 1.9 in Objective-C
  • 27. Maglev Ruby in Gemstone Smalltalk VM
  • 28. Ruby: the language
  • 29. What does Ruby look like?
  • 30. Strings and Variables 'Hello, Devnology!' name = 'Devnology' # => "Devnology" "Hello, #{name}!" # => "Hello, Devnology!"
  • 31. 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!
  • 32. 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
  • 33. 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]
  • 34. 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
  • 35. Iterators for n in 0..2 puts n end (0..2).each do |n| puts n end [0,1,2].each {|n| puts n}
  • 36. 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
  • 37. Control structures if some_condition # ... elsif other_condition # ... else # ... end while condition # ... end puts "lol" if funny?
  • 38. 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"
  • 39. 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
  • 40. 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')
  • 41. 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
  • 42. 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"
  • 43. Mixins & Open Classes module Even def even? self % 2 == 0 end end class Fixnum include Even end 1.even? # => false 2.even? # => true
  • 44. Class methods class Foo def self.bar "BAR!" end def bar "bar" end end Foo.bar # => "BAR!" Foo.new.bar # => "bar"
  • 45. Basic tools of a Rubyist
  • 46. Rubygems
  • 47. Rdoc
  • 48. Interactive Ruby
  • 49. Practical uses of Ruby
  • 50. 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!")
  • 51. Rspec it "should be awesome" do foobar = FooBar.new foobar.should be_awesome end
  • 52. 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
  • 53. Scripting / automation
  • 54. 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
  • 55. 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
  • 56. The Ruby Community
  • 57. Rubyists
  • 58. Amsterdam.rb Monthly beer night Presentation nights
  • 59. Utrecht.rb Monthly beer night
  • 60. rubyists.eu
  • 61. ruby-groups.org dev-groups.org