Palais des congrès Paris 7, 8 et 9 février 2012. Mardi 7 février Nicolas Ledez Architecte...

Preview:

Citation preview

palais des congrès Paris

7, 8 et 9 février 2012

Mardi 7 févrierNicolas LedezArchitecte systèmeOrange Business ServicesIt&L@bs

Introduction à Ruby

Nicolas Ledez

Nicolas Ledez

Nicolas Ledez

Nicolas Ledez

Nicolas Ledez

IT & L@bs

Nicolas Ledez

Nicolas Ledez

Simon Courtois

Simon Courtois

CTO chez Selectra

Et maintenant Ruby

Crée en 1995 Inspiré de Smalltalk, Lisp, Eiffel, Ada, etcJaponais Yukihiro Matsumoto « matz »Index TIOBE12 201210 2011

Ruby : l’histoire

Toyota Production SystemGestion sans gaspillage

Japon / Lean

Oh! Une lucioleje voulais crier :

« Regarde! »mais j'étais seul

Taïg

Japon / Haïku

InterprétéObjetMultiparadigmeMultiplateformeLibre, gratuit, etc

Ruby 1/3

Ramasse-miettesGestion d'exceptionsModification du code en « live »Expressions rationnelles (Regexp)Blocs

Ruby 2/3

Héritage simpleMixin -> « héritage multiple »Extensions en CLes threads indépendants de l’OSRéflexion

Ruby 3/3

Matz's Ruby Interpreter – CrubyJRubyIronRubyRubiniusMacRuby

Virtual Machine 1/2

YARV (Yet another Ruby VM)XRuby - rb -> Java bytecodeRubyJS - rb -> JavascriptHotRuby

Virtual Machine 2/2

On commence ?

Les variables

var -> variable locale@var -> variable d'instance@@var -> variable de classe$var -> variable globaleVar -> constanteetc.

def une_fonction puts "Salut tout le monde !"end

une_fonction

Le langage / Procédural 1

Salut tout le monde !

def une_fonction(message) puts messageend

une_fonction "It's alive !"

Le langage / Procédural 2

It's alive !

class UneClasse attr_accessor :message

def initialize(message) @message = message end

def afficher_message puts @message endend

Le langage / Objet

Salut tout le monde !Au revoir

mess1 = UneClasse.new "Salut tout le monde !"mess1.afficher_messagemess1.message = "Au revoir"puts mess1.message

Array.new(5, "A")a[0]['cat'] = 'feline'a[1, 2]a[1..3]a[-3, 3]

Le langage / Tableau - bases

[ 1, 2, 3 ] + [ 4, 5 ]#=> [ 1, 2, 3, 4, 5 ][ 1, 1, 3, 5 ] & [ 1, 2, 3 ]#=> [ 1, 3 ][ 1, 2, 3 ] * 3#=> [ 1, 2, 3, 1, 2, 3, 1, 2, 3 ][ 1, 1, 2, 2, 3, 3, 4, 5 ] - [ 1, 2, 4 ]#=> [ 3, 3, 5 ]

Le langage / Tableau - cool

h = Hash.new("Go Fish")h["a"] = 100h["b"] = 200h["a"] #=> 100h["c"] #=> "Go Fish"

Le langage / Dictionnaires

Et on pourrait y passer des heures

class MyArray < Array def clean! self.each do |e| self.delete(e) if e % 2 end endend

list = MyArray.new([ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 ])

Classe / héritage

1 2 3 4 5 6 7 8 9 102 4 6 8 102 4 6 8 10

puts list.join " "puts list.clean!.join " "puts list.join " "

Class Array def clean! self.each do |e| self.delete(e) if e % 2 end endend

list = [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 ]

Classe / Monkey 1

1 2 3 4 5 6 7 8 9 102 4 6 8 102 4 6 8 10

puts list.join " "puts list.clean!.join " "puts list.join " "

Class Array def double self.map { |e| e * 2 } endend

list = [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 ]

Classe / Monkey 2 - map

2 4 6 8 10 12 14 16 18 201 2 3 4 5 6 7 8 9 10

puts list.double.join " "puts list.join " "

Class Array def clean self.reduce([]) do |a, e| a << e unless ((e % 2) == 1) a end endend

list = [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 ]

Classe / Monkey 3 - reduce

2 4 6 8 101 2 3 4 5 6 7 8 9 10

puts list. clean.join " "puts list.join " "

Classe / Mixin

Module MyClean def clean! self.each do |e| self.delete(e) if e % 2 end end def double self.map { |e| e * 2 } endEnd

class Array include MyCleanend

class Hash include MyCleanend

Array.new.doubleHash.new.double

Autour du langage

Rspec, Cucumber, Minitest, ...Spork, Guard, ...Bundler, RVM, Rbenv, Pik, ...

http://www.bonjourgem.com/

+33,500 RubyGems.org

Autour de Ruby / Dev

Rails, Sinatra, ...Spork, Guard, ...HAML, SASS, Compass, ...Capistrano, Pupetts, Cheff, ...

15% Ruby Github (2eme place)

Autour de Ruby / Prod

ORM

class CreateTickets < ActiveRecord::Migration def change create_table :tickets do |t| t.string :name t.text :description

t.timestamps end endend

ORM / Active record 1

class Ticket < ActiveRecord::Base validates_presence_of :name validates_presence_of :status belongs_to :statusend

ORM / Active record 2

class LineItem include DataMapper::Resource

property :order_id, Integer, :key => true property :item_number, Integer, :key => trueend

ORM / DataMapper

Framework Web

Rails

Uglifier

ActiveRecordERB

i18n

Rack

json

Demo Rails Par Simon Courtois

Sinatra

require 'sinatra'

get '/hi' do "Hello World!"end

Templates

ERB

<p id="notice"><%= notice %></p>

<p> <b>Name:</b> <%= @region.name %></p>

<%= link_to 'Edit', edit_region_path(@region) %> |<%= link_to 'Back', regions_path %>

Templates / ERB

%p#notice= notice%p %b Name: = @region.name= link_to 'Edit', edit_region_path(@region)|\#{link_to 'Back', regions_path}

Templates / HAML

J’ai Windows, je fais comment

Rails Installer

Rails Installer / DevKit

JRuby

IronRuby

IronRuby

RubySteel

RubySteel

RubySteel

RubySteel

Les ressources

http://ironruby.net/try/http://tryruby.org/http://rubymonk.com/

http://railsforzombies.org/

Essayer maintenant

http://ruby.railstutorial.org/http://railscasts.com/

Pour apprendre

http://nicolas.ledez.net/ @nledezGithub : simonc @happynoff

http://www.camilleroux.com/ @CamilleRouxhttp://matthieusegret.com/ @MatthieuSegret

A suivre

http://rubylive.fr/ @RubyLiveFRhttp://www.rubyfrance.org/http://www.railsfrance.org/Google groups:Rennes on RailsApéros RubyRailsfranceRuby on Rails: Core@RubyJobsFR

La communautée

Conclusion

Recommended