53
Présentation de Ruby Rencontres Mondiales du Logiciel Libre Mont - de - Marsan , mercredi 2 juillet 2008 Guillaume Zifro Desrat < guillaume.desrat@rubyfrance.org >

Présentation de Ruby - 2008.rmll.info2008.rmll.info/IMG/pdf/Presentation_de_Ruby.pdf · Pr sentation de Ruby Rencontres Mondiales du Logiciel Libre Mont -de -Marsan , mercredi 2

Embed Size (px)

Citation preview

Preacutesentation de RubyRencontres Mondiales du Logiciel LibreMont-de-Marsan mercredi 2 juillet 2008

Guillaume ldquoZifrordquo Desrat ltguillaumedesratrubyfranceorggt

page 2 sur 33RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

Preacutesentation de Ruby

en 45 minutes

page 2 sur 33RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

Preacutesentation de Ruby

en 45 minutesla syntaxelrsquoaspect orienteacute objetquelques speacutecificiteacutesun mot la meacuteta-programmation

outils liens et ouvrages pour srsquoy mettre

page 2 sur 33RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

Preacutesentation de Ruby

en 45 minutes

page 3 sur 33

Un petit mot agrave mon propos

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

Guillaume ldquoZifrordquo Desratltguillaumedesratrubyfranceorggt ampamp httpzlabfr

Rubyiste depuis 2002Railer depuis 2005

Preacutesident de lrsquoassociation

participe aux listes Ruby et Railspasse sur rubyfr ircfreenodenet

consultant informatique au Luxembourgen mission chez un grand nom de la finance

page 3 sur 33

Un petit mot agrave mon propos

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

Guillaume ldquoZifrordquo Desratltguillaumedesratrubyfranceorggt ampamp httpzlabfr

Rubyiste depuis 2002Railer depuis 2005

Preacutesident de lrsquoassociation

participe aux listes Ruby et Railspasse sur rubyfr ircfreenodenet

consultant informatique au Luxembourgen mission chez un grand nom de la finance

Qui est ce type qui nous parle

page 3 sur 33

Un petit mot agrave mon propos

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

Guillaume ldquoZifrordquo Desratltguillaumedesratrubyfranceorggt ampamp httpzlabfr

Rubyiste depuis 2002Railer depuis 2005

Preacutesident de lrsquoassociation

participe aux listes Ruby et Railspasse sur rubyfr ircfreenodenet

consultant informatique au Luxembourgen mission chez un grand nom de la finance

page 4 sur 33

Le langage Ruby

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

Un langage interpreacuteteacute orienteacute objet dynamique et agreacuteable qui se veut ldquonaturelrdquo pas ldquosimplerdquo

Creacuteeacute par Yukihiro Matsumoto alias ldquomatzrdquo

Inspireacute de Perl Smalltalk Eiffel Ada LISP

Deacuteveloppeacute agrave partir de 1993 diffuseacute depuis 1995

Aujourdrsquohui en versions 186 187 et 190

Disponible sous licences libres (Ruby MIT GPL)

JRuby (httpjrubycodehausorg)eacutecrit en JAVA soutenu par Sun

rubinius (httprubinius)un deacuteveloppement orienteacute speacutecifications

IronRuby (httpwwwironrubynet)eacutecrit pour NET deacuteveloppement soutenu par Microsoft

Maglev (httprubygemstonecom)baseacute sur Smalltalk

Cardinal (httpcardinal2rubyforgeorg)une VM permettant de tourner sous Parrot

Plusieurs impleacutementations du langage

page 5 sur 33RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

JRuby (httpjrubycodehausorg)eacutecrit en JAVA soutenu par Sun

rubinius (httprubinius)un deacuteveloppement orienteacute speacutecifications

IronRuby (httpwwwironrubynet)eacutecrit pour NET deacuteveloppement soutenu par Microsoft

Maglev (httprubygemstonecom)baseacute sur Smalltalk

Cardinal (httpcardinal2rubyforgeorg)une VM permettant de tourner sous Parrot

Plusieurs impleacutementations du langage

page 5 sur 33RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

JRubyrubiniusIronRubyMaglevCardinal

JRuby (httpjrubycodehausorg)eacutecrit en JAVA soutenu par Sun

rubinius (httprubinius)un deacuteveloppement orienteacute speacutecifications

IronRuby (httpwwwironrubynet)eacutecrit pour NET deacuteveloppement soutenu par Microsoft

Maglev (httprubygemstonecom)baseacute sur Smalltalk

Cardinal (httpcardinal2rubyforgeorg)une VM permettant de tourner sous Parrot

Plusieurs impleacutementations du langage

page 5 sur 33RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

page 6 sur 33

Syntaxe de base

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

ruby variable locale

def ruby_method identificateur de meacutethodeend

$ruby variable globale$RUBY

RubyVersion constanteRUBY_VERSION

ruby_version symbole

page 6 sur 33

Syntaxe de base

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

ruby variable locale

def ruby_method identificateur de meacutethodeend

$ruby variable globale$RUBY

RubyVersion constanteRUBY_VERSION

ruby_version symbole

identificateursconditionsexceptions

quelques idiomes

page 6 sur 33

Syntaxe de base

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

ruby variable locale

def ruby_method identificateur de meacutethodeend

$ruby variable globale$RUBY

RubyVersion constanteRUBY_VERSION

ruby_version symbole

page 7 sur 33

Syntaxe de base conditions

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

if version == 186 puts vous utilisez la derniegravereelse puts passez agrave la versionend

puts Mauvais format unless objis_a Hash

case version when 186 puts when ^18d puts il y a plus reacutecent when ^19d puts oh oh -) else puts il est temps de se mettre agrave jourend

page 8 sur 33

Syntaxe de base les exceptions

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

begin f = Fileopen(fichiertxt) texte = freadline puts Lrsquoen-tecircte du fichier est texterescue ErrnoENOENT =gt e puts Il ny a pas de tel fichier rescue NoMethodError =gt e puts Lrsquoouverture srsquoest probablement mal passeacutee rescue SyntaxError =gt e puts Une erreur du deacuteveloppeur (emessage) raise eensure fclose if frespond_to closeend

page 9 sur 33

Syntaxe de base quelques idiomes

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

method( param1 =gt valeur1 param2 =gt valeur2 )method( param1 =gt valeur1 param2 =gt valeur2 )method param1 =gt valeur1 param2 =gt valeur2

def method(params) options = param1 =gt valeur par deacutefaut optionsmerge params end

objrespond_to methode

objdelete_at(1)gsub(e r)upcase

page 10 sur 33

Orienteacute objet

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

-123abs renvoie 123-123class renvoie Fixnum

chaine = rmllchaineupcase renvoie RMLLputs chaine affiche rmllchaineupcase renvoie RMLLputs chaine affiche RMLL

nilclass renvoie NilClasstrueclass renvoie TrueClassfalseclass renvoie FalseClassnilnil renvoie true

page 10 sur 33

Orienteacute objet

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

-123abs renvoie 123-123class renvoie Fixnum

chaine = rmllchaineupcase renvoie RMLLputs chaine affiche rmllchaineupcase renvoie RMLLputs chaine affiche RMLL

nilclass renvoie NilClasstrueclass renvoie TrueClassfalseclass renvoie FalseClassnilnil renvoie true

appel de meacutethodesdeacuteclaration de classeutilisationpolymorphisme

page 10 sur 33

Orienteacute objet

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

-123abs renvoie 123-123class renvoie Fixnum

chaine = rmllchaineupcase renvoie RMLLputs chaine affiche rmllchaineupcase renvoie RMLLputs chaine affiche RMLL

nilclass renvoie NilClasstrueclass renvoie TrueClassfalseclass renvoie FalseClassnilnil renvoie true

page 11 sur 33

Orienteacute objet deacuteclaration de classe

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

class Presentation lt Intervention deacuteclaration de la classe nombre = 0 variable de classe def initialize(intitule duree=45) post-constructeur intitule = intitule duree = duree nombre += 1 super appel de la meacutethode end dans la classe megravere def to_s titre + + dureeto_s + minutes end def selfnombre meacutethode de classe nombre end end

page 12 sur 33

Orienteacute objet utilisation

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

Presentationnombre renvoie 0p = Presentationnew(Preacutesentation de Ruby)

Presentationnombre renvoie 1

puts p affiche Preacutesentation de Ruby 45 minutes

pfinNoMethodError undefined method `fin for ltPresentation0x49214gt

def pfin puts Suffisamment de Ruby aujourdhui end

pfin affiche Suffisamment de Ruby aujourdrsquohui

page 13 sur 33

Orienteacute objet polymorphisme

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

module RMLL creacutee un nouveau module

EDITION = 2008

renvoie IUT IUFM ou CCI def lieu end

end

puts RMLLEDITION affiche 2008

class Presentation on rouvre la deacutefinition include RMLL pour inclure ce qui est deacutefiniend dans le module RMLL

pextends(RMLL) on eacutetend lobjet p

page 14 sur 33

Un peu plus loin

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

puts salut do puts salutend

lambda puts salut proc do puts salutend

p = Procnew puts salut pcall affiche salut

p = Procnew |i| puts i + 1 pcall 1 affiche 2pcall 41 affiche 42

page 14 sur 33

Un peu plus loin

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

puts salut do puts salutend

lambda puts salut proc do puts salutend

p = Procnew puts salut pcall affiche salut

p = Procnew |i| puts i + 1 pcall 1 affiche 2pcall 41 affiche 42

blocsiteacuterateursyield

page 14 sur 33

Un peu plus loin

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

puts salut do puts salutend

lambda puts salut proc do puts salutend

p = Procnew puts salut pcall affiche salut

p = Procnew |i| puts i + 1 pcall 1 affiche 2pcall 41 affiche 42

page 15 sur 33

Un peu plus loin les iteacuterateurs

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

lyonnais = [Freacutedeacuteric Alexis Jeacuterocircme] lyonnaiseach do |l| puts Dommage l nest pas venu cette anneacuteeend

rmll = 2008 =gt Mont-de-Marsan 2007 =gt Amiens 2006 =gt Vandoeuvre-les-Nancy 2002 =gt Talence

rmlleach_pair do |annee lieu| puts En annee je suis alleacute aux RMLL agrave lieuend

rmllkeyssorteach do |annee| puts En annee je suis alleacute aux RMLL agrave rmll[annee]end

page 16 sur 33

Un peu plus loin les iteacuterateurs

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

lecture dun fichier faccedilon blocs

avertissements = erreurs = 0 initialisation

Fileopen(logtxt) do |fichier| ouverture fichierreadlineseach do |ligne| lecture des lignes case ligne when ^WARN avertissements += 1 when ^ERR erreurs += 1 end endend fermeture automatique

puts Il y a avertissements avertissementsputs et erreurs erreurs dans ce fichier

page 17 sur 33

Un peu plus loin yield

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

class Personne

def initialize(nom) nom = nom end

def salue la meacutethode salue se contente drsquoexeacutecuteryield nom le bloc qui lui est passeacute

end lrsquoargument nom

end

celine = Personnenew(Ceacuteline)celinesalue |n| puts salut n affiche salut Ceacuteline

page 17 sur 33

Un peu plus loin yield

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

class Personne

def initialize(nom) nom = nom end

def salue la meacutethode salue se contente drsquoexeacutecuteryield nom le bloc qui lui est passeacute

end lrsquoargument nom

end

celine = Personnenew(Ceacuteline)celinesalue |n| puts salut n affiche salut Ceacuteline

mais comment ccedila marche

page 17 sur 33

Un peu plus loin yield

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

class Personne

def initialize(nom) nom = nom end

def salue la meacutethode salue se contente drsquoexeacutecuteryield nom le bloc qui lui est passeacute

end lrsquoargument nom

end

celine = Personnenew(Ceacuteline)celinesalue |n| puts salut n affiche salut Ceacuteline

page 18 sur 33

Dynamisme eacutevaluation de code

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

eval puts salut

def operation(operateur operande1 operande2) eval operande1 operateur operande2end

operation + 1 2 renvoie 3operation 9 0 renvoie

Presentationclass_eval do end

page 18 sur 33

Dynamisme eacutevaluation de code

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

eval puts salut

def operation(operateur operande1 operande2) eval operande1 operateur operande2end

operation + 1 2 renvoie 3operation 9 0 renvoie

Presentationclass_eval do end

eacutevaluation de codeinterception drsquoappels de meacutethodes inexistantesexeacutecution des deacutefinitions

reacuteflexiviteacute introspection

page 18 sur 33

Dynamisme eacutevaluation de code

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

eval puts salut

def operation(operateur operande1 operande2) eval operande1 operateur operande2end

operation + 1 2 renvoie 3operation 9 0 renvoie

Presentationclass_eval do end

page 19 sur 33

Dynamisme meacutethodes inexistantes

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

Presentationnombre renvoie 0p = Presentationnew(Preacutesentation de Ruby)

Presentationnombre renvoie 1

puts p affiche Preacutesentation de Ruby 45 minutes

pfinNoMethodError undefined method `fin for ltPresentation0x49214gt

def pfin puts Suffisamment de Ruby aujourdhui end

pfin affiche Suffisamment de Ruby aujourdrsquohui

page 20 sur 33

Dynamisme meacutethodes inexistantes

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

class Presentation def method_missing(nom args) method_missing puts Il ny a pas de meacutethode nom est appeleacutee end avant la leveacuteeend de lexception

p = Presentationnew(Preacutesentation de Ruby)

pfin affiche Il ny a pas de meacutethode fin pas drsquoexception

method_missing est lrsquoun des nombreux ldquohooksrdquo disponibles dans Ruby

page 21 sur 33

Dynamisme deacutefinitions exeacutecuteacutees

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

class Configuration case RUBY_PLATFORM deacutefinition dune meacutethode when linux en fonction du systegraveme def initialize(params) hocircte end when win32 def initialize(params) end when darwin include YAIBExtensionsSpecificOSX else unless include YAIBStandard raise Votre OS nest pas supporteacute end end end

page 22 sur 33

Dynamisme reacuteflexiviteacute introspection

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

On peut interroger tous les composants du langage agrave lrsquoexeacutecution

obj = Arraynewobjclass

objclassinstance_methodsobjmethods eacutequivalent agrave la ligne du dessusobjprivate_methods

objclassinstance_methodsgrep(delete)objclassinstance_methodsgrep(delete)sort

objmethodsgrep(^on_connect_do)each do |method| objsend methodend

page 23 sur 33

Dynamisme reacuteflexiviteacute introspection

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

On peut rouvrir une deacutefinition y compris celle du langage

class Array la classe Array existe on la rouvre def longueur ajout drsquoune meacutethode en franccedilais length proxy vers la meacutethode en anglais end end

arr = Arraynewarr ltlt 1arr ltlt element

arrlongueur renvoie 2

page 24 sur 33

Dynamisme reacuteflexiviteacute introspection

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

class Counterparty def has_all_mandatory_fields_filled quelques veacuterifications end def can_be_in_completed_or_approved_status return false unless selfhas_all_mandatory_fields_filled return false unless selflgdhas_all_mandatory_fields_filled unless selfratingshave_all_mandatory_fields_filled

return false end return true end

end

page 25 sur 33

Dynamisme reacuteflexiviteacute introspection

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

modification de la classe Arrayclass Array

def have_all_mandatory_fields_filled selfeach do |item| unless itemrespond_to has_all_mandatory_fields_filled return false end unless itemhas_all_mandatory_fields_filled return false end end return true end

end

page 26 sur 33

Se mettre agrave Ruby

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

(g)vi(m)(X)emacsSciTE

FreeRIDE (eacutecrit en Ruby)

e-TextEditorTextMate (seulement OSX)

Eclipse avec les Ruby Development ToolsNetBeans 61 (support Ruby et JRuby)

page 26 sur 33

Se mettre agrave Ruby

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

(g)vi(m)(X)emacsSciTE

FreeRIDE (eacutecrit en Ruby)

e-TextEditorTextMate (seulement OSX)

Eclipse avec les Ruby Development ToolsNetBeans 61 (support Ruby et JRuby)

Editeurs et environnements compatiblesLrsquooutil indispensable irbRessources en ligneLivres

page 26 sur 33

Se mettre agrave Ruby

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

(g)vi(m)(X)emacsSciTE

FreeRIDE (eacutecrit en Ruby)

e-TextEditorTextMate (seulement OSX)

Eclipse avec les Ruby Development ToolsNetBeans 61 (support Ruby et JRuby)

page 27 sur 33

Se mettre agrave Ruby irb

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

page 28 sur 33

Se mettre agrave Ruby ressources en ligne

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

Le site officiel (httpwwwruby-langorg)Sa traduction (httpwwwruby-langorgfr)

Le portail Ruby France (httpwwwrubyfranceorg)

Les listes de diffusion sur Google Groups(ruby-talk ruby-core rubyfr-public)

Les groupes de discussion sur Usenet(complangruby frcomplangruby)

Les salons IRC sur FreeNode (ircfreenodenet)(ruby-lang rubyfr)

page 29 sur 33

Se mettre agrave Ruby livres

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

Ruby in a NutshellProgramming RubyThe Ruby WayDesign Patterns for Ruby

Ruby par lrsquoexemple

Passez sur le stand Ruby France

page 30 sur 33

Fin de la preacutesentation

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

page 30 sur 33

Fin de la preacutesentation

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

Des questions

page 30 sur 33

Fin de la preacutesentation

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

page 32 sur 33

Fin de la preacutesentation

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

Merci

page 32 sur 33

Ougrave reacutecupeacuterer ce document

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

Le support de cette preacutesentation sera disponible sur httpzlabfr

page 33 sur 33

Licence de ce document

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

bullVous ecirctes libres bullde reproduire distribuer et communiquer cette creacuteation au public

bullSelon les conditions suivantes bullPaterniteacutebull Vous devez citer le nom de lauteur original de la maniegravere indiqueacutee par lauteur de loeuvre ou le titulaire des droits qui vous confegravere cette autorisation (mais pas dune maniegravere qui suggeacutererait quils vous soutiennent ou approuvent votre utilisation de loeuvre)

bullPas drsquoutilisation commercialebull Vous navez pas le droit dutiliser cette creacuteation agrave des fins commerciales

bullPas de modificationbull Vous navez pas le droit de modifier de transformer ou dadapter cette creacuteation

bullreacutesumeacute explicatif disponible sur httpcreativecommonsorglicensesby-nc-nd20fr

bullvous ecirctes autoriseacute agrave reacuteutiliser le logo Ruby France utiliseacute dans cette preacutesentation pour faire reacutefeacuterence agrave lrsquoassociation

page 2 sur 33RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

Preacutesentation de Ruby

en 45 minutes

page 2 sur 33RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

Preacutesentation de Ruby

en 45 minutesla syntaxelrsquoaspect orienteacute objetquelques speacutecificiteacutesun mot la meacuteta-programmation

outils liens et ouvrages pour srsquoy mettre

page 2 sur 33RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

Preacutesentation de Ruby

en 45 minutes

page 3 sur 33

Un petit mot agrave mon propos

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

Guillaume ldquoZifrordquo Desratltguillaumedesratrubyfranceorggt ampamp httpzlabfr

Rubyiste depuis 2002Railer depuis 2005

Preacutesident de lrsquoassociation

participe aux listes Ruby et Railspasse sur rubyfr ircfreenodenet

consultant informatique au Luxembourgen mission chez un grand nom de la finance

page 3 sur 33

Un petit mot agrave mon propos

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

Guillaume ldquoZifrordquo Desratltguillaumedesratrubyfranceorggt ampamp httpzlabfr

Rubyiste depuis 2002Railer depuis 2005

Preacutesident de lrsquoassociation

participe aux listes Ruby et Railspasse sur rubyfr ircfreenodenet

consultant informatique au Luxembourgen mission chez un grand nom de la finance

Qui est ce type qui nous parle

page 3 sur 33

Un petit mot agrave mon propos

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

Guillaume ldquoZifrordquo Desratltguillaumedesratrubyfranceorggt ampamp httpzlabfr

Rubyiste depuis 2002Railer depuis 2005

Preacutesident de lrsquoassociation

participe aux listes Ruby et Railspasse sur rubyfr ircfreenodenet

consultant informatique au Luxembourgen mission chez un grand nom de la finance

page 4 sur 33

Le langage Ruby

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

Un langage interpreacuteteacute orienteacute objet dynamique et agreacuteable qui se veut ldquonaturelrdquo pas ldquosimplerdquo

Creacuteeacute par Yukihiro Matsumoto alias ldquomatzrdquo

Inspireacute de Perl Smalltalk Eiffel Ada LISP

Deacuteveloppeacute agrave partir de 1993 diffuseacute depuis 1995

Aujourdrsquohui en versions 186 187 et 190

Disponible sous licences libres (Ruby MIT GPL)

JRuby (httpjrubycodehausorg)eacutecrit en JAVA soutenu par Sun

rubinius (httprubinius)un deacuteveloppement orienteacute speacutecifications

IronRuby (httpwwwironrubynet)eacutecrit pour NET deacuteveloppement soutenu par Microsoft

Maglev (httprubygemstonecom)baseacute sur Smalltalk

Cardinal (httpcardinal2rubyforgeorg)une VM permettant de tourner sous Parrot

Plusieurs impleacutementations du langage

page 5 sur 33RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

JRuby (httpjrubycodehausorg)eacutecrit en JAVA soutenu par Sun

rubinius (httprubinius)un deacuteveloppement orienteacute speacutecifications

IronRuby (httpwwwironrubynet)eacutecrit pour NET deacuteveloppement soutenu par Microsoft

Maglev (httprubygemstonecom)baseacute sur Smalltalk

Cardinal (httpcardinal2rubyforgeorg)une VM permettant de tourner sous Parrot

Plusieurs impleacutementations du langage

page 5 sur 33RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

JRubyrubiniusIronRubyMaglevCardinal

JRuby (httpjrubycodehausorg)eacutecrit en JAVA soutenu par Sun

rubinius (httprubinius)un deacuteveloppement orienteacute speacutecifications

IronRuby (httpwwwironrubynet)eacutecrit pour NET deacuteveloppement soutenu par Microsoft

Maglev (httprubygemstonecom)baseacute sur Smalltalk

Cardinal (httpcardinal2rubyforgeorg)une VM permettant de tourner sous Parrot

Plusieurs impleacutementations du langage

page 5 sur 33RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

page 6 sur 33

Syntaxe de base

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

ruby variable locale

def ruby_method identificateur de meacutethodeend

$ruby variable globale$RUBY

RubyVersion constanteRUBY_VERSION

ruby_version symbole

page 6 sur 33

Syntaxe de base

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

ruby variable locale

def ruby_method identificateur de meacutethodeend

$ruby variable globale$RUBY

RubyVersion constanteRUBY_VERSION

ruby_version symbole

identificateursconditionsexceptions

quelques idiomes

page 6 sur 33

Syntaxe de base

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

ruby variable locale

def ruby_method identificateur de meacutethodeend

$ruby variable globale$RUBY

RubyVersion constanteRUBY_VERSION

ruby_version symbole

page 7 sur 33

Syntaxe de base conditions

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

if version == 186 puts vous utilisez la derniegravereelse puts passez agrave la versionend

puts Mauvais format unless objis_a Hash

case version when 186 puts when ^18d puts il y a plus reacutecent when ^19d puts oh oh -) else puts il est temps de se mettre agrave jourend

page 8 sur 33

Syntaxe de base les exceptions

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

begin f = Fileopen(fichiertxt) texte = freadline puts Lrsquoen-tecircte du fichier est texterescue ErrnoENOENT =gt e puts Il ny a pas de tel fichier rescue NoMethodError =gt e puts Lrsquoouverture srsquoest probablement mal passeacutee rescue SyntaxError =gt e puts Une erreur du deacuteveloppeur (emessage) raise eensure fclose if frespond_to closeend

page 9 sur 33

Syntaxe de base quelques idiomes

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

method( param1 =gt valeur1 param2 =gt valeur2 )method( param1 =gt valeur1 param2 =gt valeur2 )method param1 =gt valeur1 param2 =gt valeur2

def method(params) options = param1 =gt valeur par deacutefaut optionsmerge params end

objrespond_to methode

objdelete_at(1)gsub(e r)upcase

page 10 sur 33

Orienteacute objet

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

-123abs renvoie 123-123class renvoie Fixnum

chaine = rmllchaineupcase renvoie RMLLputs chaine affiche rmllchaineupcase renvoie RMLLputs chaine affiche RMLL

nilclass renvoie NilClasstrueclass renvoie TrueClassfalseclass renvoie FalseClassnilnil renvoie true

page 10 sur 33

Orienteacute objet

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

-123abs renvoie 123-123class renvoie Fixnum

chaine = rmllchaineupcase renvoie RMLLputs chaine affiche rmllchaineupcase renvoie RMLLputs chaine affiche RMLL

nilclass renvoie NilClasstrueclass renvoie TrueClassfalseclass renvoie FalseClassnilnil renvoie true

appel de meacutethodesdeacuteclaration de classeutilisationpolymorphisme

page 10 sur 33

Orienteacute objet

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

-123abs renvoie 123-123class renvoie Fixnum

chaine = rmllchaineupcase renvoie RMLLputs chaine affiche rmllchaineupcase renvoie RMLLputs chaine affiche RMLL

nilclass renvoie NilClasstrueclass renvoie TrueClassfalseclass renvoie FalseClassnilnil renvoie true

page 11 sur 33

Orienteacute objet deacuteclaration de classe

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

class Presentation lt Intervention deacuteclaration de la classe nombre = 0 variable de classe def initialize(intitule duree=45) post-constructeur intitule = intitule duree = duree nombre += 1 super appel de la meacutethode end dans la classe megravere def to_s titre + + dureeto_s + minutes end def selfnombre meacutethode de classe nombre end end

page 12 sur 33

Orienteacute objet utilisation

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

Presentationnombre renvoie 0p = Presentationnew(Preacutesentation de Ruby)

Presentationnombre renvoie 1

puts p affiche Preacutesentation de Ruby 45 minutes

pfinNoMethodError undefined method `fin for ltPresentation0x49214gt

def pfin puts Suffisamment de Ruby aujourdhui end

pfin affiche Suffisamment de Ruby aujourdrsquohui

page 13 sur 33

Orienteacute objet polymorphisme

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

module RMLL creacutee un nouveau module

EDITION = 2008

renvoie IUT IUFM ou CCI def lieu end

end

puts RMLLEDITION affiche 2008

class Presentation on rouvre la deacutefinition include RMLL pour inclure ce qui est deacutefiniend dans le module RMLL

pextends(RMLL) on eacutetend lobjet p

page 14 sur 33

Un peu plus loin

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

puts salut do puts salutend

lambda puts salut proc do puts salutend

p = Procnew puts salut pcall affiche salut

p = Procnew |i| puts i + 1 pcall 1 affiche 2pcall 41 affiche 42

page 14 sur 33

Un peu plus loin

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

puts salut do puts salutend

lambda puts salut proc do puts salutend

p = Procnew puts salut pcall affiche salut

p = Procnew |i| puts i + 1 pcall 1 affiche 2pcall 41 affiche 42

blocsiteacuterateursyield

page 14 sur 33

Un peu plus loin

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

puts salut do puts salutend

lambda puts salut proc do puts salutend

p = Procnew puts salut pcall affiche salut

p = Procnew |i| puts i + 1 pcall 1 affiche 2pcall 41 affiche 42

page 15 sur 33

Un peu plus loin les iteacuterateurs

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

lyonnais = [Freacutedeacuteric Alexis Jeacuterocircme] lyonnaiseach do |l| puts Dommage l nest pas venu cette anneacuteeend

rmll = 2008 =gt Mont-de-Marsan 2007 =gt Amiens 2006 =gt Vandoeuvre-les-Nancy 2002 =gt Talence

rmlleach_pair do |annee lieu| puts En annee je suis alleacute aux RMLL agrave lieuend

rmllkeyssorteach do |annee| puts En annee je suis alleacute aux RMLL agrave rmll[annee]end

page 16 sur 33

Un peu plus loin les iteacuterateurs

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

lecture dun fichier faccedilon blocs

avertissements = erreurs = 0 initialisation

Fileopen(logtxt) do |fichier| ouverture fichierreadlineseach do |ligne| lecture des lignes case ligne when ^WARN avertissements += 1 when ^ERR erreurs += 1 end endend fermeture automatique

puts Il y a avertissements avertissementsputs et erreurs erreurs dans ce fichier

page 17 sur 33

Un peu plus loin yield

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

class Personne

def initialize(nom) nom = nom end

def salue la meacutethode salue se contente drsquoexeacutecuteryield nom le bloc qui lui est passeacute

end lrsquoargument nom

end

celine = Personnenew(Ceacuteline)celinesalue |n| puts salut n affiche salut Ceacuteline

page 17 sur 33

Un peu plus loin yield

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

class Personne

def initialize(nom) nom = nom end

def salue la meacutethode salue se contente drsquoexeacutecuteryield nom le bloc qui lui est passeacute

end lrsquoargument nom

end

celine = Personnenew(Ceacuteline)celinesalue |n| puts salut n affiche salut Ceacuteline

mais comment ccedila marche

page 17 sur 33

Un peu plus loin yield

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

class Personne

def initialize(nom) nom = nom end

def salue la meacutethode salue se contente drsquoexeacutecuteryield nom le bloc qui lui est passeacute

end lrsquoargument nom

end

celine = Personnenew(Ceacuteline)celinesalue |n| puts salut n affiche salut Ceacuteline

page 18 sur 33

Dynamisme eacutevaluation de code

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

eval puts salut

def operation(operateur operande1 operande2) eval operande1 operateur operande2end

operation + 1 2 renvoie 3operation 9 0 renvoie

Presentationclass_eval do end

page 18 sur 33

Dynamisme eacutevaluation de code

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

eval puts salut

def operation(operateur operande1 operande2) eval operande1 operateur operande2end

operation + 1 2 renvoie 3operation 9 0 renvoie

Presentationclass_eval do end

eacutevaluation de codeinterception drsquoappels de meacutethodes inexistantesexeacutecution des deacutefinitions

reacuteflexiviteacute introspection

page 18 sur 33

Dynamisme eacutevaluation de code

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

eval puts salut

def operation(operateur operande1 operande2) eval operande1 operateur operande2end

operation + 1 2 renvoie 3operation 9 0 renvoie

Presentationclass_eval do end

page 19 sur 33

Dynamisme meacutethodes inexistantes

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

Presentationnombre renvoie 0p = Presentationnew(Preacutesentation de Ruby)

Presentationnombre renvoie 1

puts p affiche Preacutesentation de Ruby 45 minutes

pfinNoMethodError undefined method `fin for ltPresentation0x49214gt

def pfin puts Suffisamment de Ruby aujourdhui end

pfin affiche Suffisamment de Ruby aujourdrsquohui

page 20 sur 33

Dynamisme meacutethodes inexistantes

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

class Presentation def method_missing(nom args) method_missing puts Il ny a pas de meacutethode nom est appeleacutee end avant la leveacuteeend de lexception

p = Presentationnew(Preacutesentation de Ruby)

pfin affiche Il ny a pas de meacutethode fin pas drsquoexception

method_missing est lrsquoun des nombreux ldquohooksrdquo disponibles dans Ruby

page 21 sur 33

Dynamisme deacutefinitions exeacutecuteacutees

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

class Configuration case RUBY_PLATFORM deacutefinition dune meacutethode when linux en fonction du systegraveme def initialize(params) hocircte end when win32 def initialize(params) end when darwin include YAIBExtensionsSpecificOSX else unless include YAIBStandard raise Votre OS nest pas supporteacute end end end

page 22 sur 33

Dynamisme reacuteflexiviteacute introspection

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

On peut interroger tous les composants du langage agrave lrsquoexeacutecution

obj = Arraynewobjclass

objclassinstance_methodsobjmethods eacutequivalent agrave la ligne du dessusobjprivate_methods

objclassinstance_methodsgrep(delete)objclassinstance_methodsgrep(delete)sort

objmethodsgrep(^on_connect_do)each do |method| objsend methodend

page 23 sur 33

Dynamisme reacuteflexiviteacute introspection

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

On peut rouvrir une deacutefinition y compris celle du langage

class Array la classe Array existe on la rouvre def longueur ajout drsquoune meacutethode en franccedilais length proxy vers la meacutethode en anglais end end

arr = Arraynewarr ltlt 1arr ltlt element

arrlongueur renvoie 2

page 24 sur 33

Dynamisme reacuteflexiviteacute introspection

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

class Counterparty def has_all_mandatory_fields_filled quelques veacuterifications end def can_be_in_completed_or_approved_status return false unless selfhas_all_mandatory_fields_filled return false unless selflgdhas_all_mandatory_fields_filled unless selfratingshave_all_mandatory_fields_filled

return false end return true end

end

page 25 sur 33

Dynamisme reacuteflexiviteacute introspection

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

modification de la classe Arrayclass Array

def have_all_mandatory_fields_filled selfeach do |item| unless itemrespond_to has_all_mandatory_fields_filled return false end unless itemhas_all_mandatory_fields_filled return false end end return true end

end

page 26 sur 33

Se mettre agrave Ruby

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

(g)vi(m)(X)emacsSciTE

FreeRIDE (eacutecrit en Ruby)

e-TextEditorTextMate (seulement OSX)

Eclipse avec les Ruby Development ToolsNetBeans 61 (support Ruby et JRuby)

page 26 sur 33

Se mettre agrave Ruby

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

(g)vi(m)(X)emacsSciTE

FreeRIDE (eacutecrit en Ruby)

e-TextEditorTextMate (seulement OSX)

Eclipse avec les Ruby Development ToolsNetBeans 61 (support Ruby et JRuby)

Editeurs et environnements compatiblesLrsquooutil indispensable irbRessources en ligneLivres

page 26 sur 33

Se mettre agrave Ruby

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

(g)vi(m)(X)emacsSciTE

FreeRIDE (eacutecrit en Ruby)

e-TextEditorTextMate (seulement OSX)

Eclipse avec les Ruby Development ToolsNetBeans 61 (support Ruby et JRuby)

page 27 sur 33

Se mettre agrave Ruby irb

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

page 28 sur 33

Se mettre agrave Ruby ressources en ligne

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

Le site officiel (httpwwwruby-langorg)Sa traduction (httpwwwruby-langorgfr)

Le portail Ruby France (httpwwwrubyfranceorg)

Les listes de diffusion sur Google Groups(ruby-talk ruby-core rubyfr-public)

Les groupes de discussion sur Usenet(complangruby frcomplangruby)

Les salons IRC sur FreeNode (ircfreenodenet)(ruby-lang rubyfr)

page 29 sur 33

Se mettre agrave Ruby livres

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

Ruby in a NutshellProgramming RubyThe Ruby WayDesign Patterns for Ruby

Ruby par lrsquoexemple

Passez sur le stand Ruby France

page 30 sur 33

Fin de la preacutesentation

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

page 30 sur 33

Fin de la preacutesentation

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

Des questions

page 30 sur 33

Fin de la preacutesentation

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

page 32 sur 33

Fin de la preacutesentation

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

Merci

page 32 sur 33

Ougrave reacutecupeacuterer ce document

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

Le support de cette preacutesentation sera disponible sur httpzlabfr

page 33 sur 33

Licence de ce document

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

bullVous ecirctes libres bullde reproduire distribuer et communiquer cette creacuteation au public

bullSelon les conditions suivantes bullPaterniteacutebull Vous devez citer le nom de lauteur original de la maniegravere indiqueacutee par lauteur de loeuvre ou le titulaire des droits qui vous confegravere cette autorisation (mais pas dune maniegravere qui suggeacutererait quils vous soutiennent ou approuvent votre utilisation de loeuvre)

bullPas drsquoutilisation commercialebull Vous navez pas le droit dutiliser cette creacuteation agrave des fins commerciales

bullPas de modificationbull Vous navez pas le droit de modifier de transformer ou dadapter cette creacuteation

bullreacutesumeacute explicatif disponible sur httpcreativecommonsorglicensesby-nc-nd20fr

bullvous ecirctes autoriseacute agrave reacuteutiliser le logo Ruby France utiliseacute dans cette preacutesentation pour faire reacutefeacuterence agrave lrsquoassociation

page 2 sur 33RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

Preacutesentation de Ruby

en 45 minutesla syntaxelrsquoaspect orienteacute objetquelques speacutecificiteacutesun mot la meacuteta-programmation

outils liens et ouvrages pour srsquoy mettre

page 2 sur 33RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

Preacutesentation de Ruby

en 45 minutes

page 3 sur 33

Un petit mot agrave mon propos

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

Guillaume ldquoZifrordquo Desratltguillaumedesratrubyfranceorggt ampamp httpzlabfr

Rubyiste depuis 2002Railer depuis 2005

Preacutesident de lrsquoassociation

participe aux listes Ruby et Railspasse sur rubyfr ircfreenodenet

consultant informatique au Luxembourgen mission chez un grand nom de la finance

page 3 sur 33

Un petit mot agrave mon propos

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

Guillaume ldquoZifrordquo Desratltguillaumedesratrubyfranceorggt ampamp httpzlabfr

Rubyiste depuis 2002Railer depuis 2005

Preacutesident de lrsquoassociation

participe aux listes Ruby et Railspasse sur rubyfr ircfreenodenet

consultant informatique au Luxembourgen mission chez un grand nom de la finance

Qui est ce type qui nous parle

page 3 sur 33

Un petit mot agrave mon propos

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

Guillaume ldquoZifrordquo Desratltguillaumedesratrubyfranceorggt ampamp httpzlabfr

Rubyiste depuis 2002Railer depuis 2005

Preacutesident de lrsquoassociation

participe aux listes Ruby et Railspasse sur rubyfr ircfreenodenet

consultant informatique au Luxembourgen mission chez un grand nom de la finance

page 4 sur 33

Le langage Ruby

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

Un langage interpreacuteteacute orienteacute objet dynamique et agreacuteable qui se veut ldquonaturelrdquo pas ldquosimplerdquo

Creacuteeacute par Yukihiro Matsumoto alias ldquomatzrdquo

Inspireacute de Perl Smalltalk Eiffel Ada LISP

Deacuteveloppeacute agrave partir de 1993 diffuseacute depuis 1995

Aujourdrsquohui en versions 186 187 et 190

Disponible sous licences libres (Ruby MIT GPL)

JRuby (httpjrubycodehausorg)eacutecrit en JAVA soutenu par Sun

rubinius (httprubinius)un deacuteveloppement orienteacute speacutecifications

IronRuby (httpwwwironrubynet)eacutecrit pour NET deacuteveloppement soutenu par Microsoft

Maglev (httprubygemstonecom)baseacute sur Smalltalk

Cardinal (httpcardinal2rubyforgeorg)une VM permettant de tourner sous Parrot

Plusieurs impleacutementations du langage

page 5 sur 33RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

JRuby (httpjrubycodehausorg)eacutecrit en JAVA soutenu par Sun

rubinius (httprubinius)un deacuteveloppement orienteacute speacutecifications

IronRuby (httpwwwironrubynet)eacutecrit pour NET deacuteveloppement soutenu par Microsoft

Maglev (httprubygemstonecom)baseacute sur Smalltalk

Cardinal (httpcardinal2rubyforgeorg)une VM permettant de tourner sous Parrot

Plusieurs impleacutementations du langage

page 5 sur 33RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

JRubyrubiniusIronRubyMaglevCardinal

JRuby (httpjrubycodehausorg)eacutecrit en JAVA soutenu par Sun

rubinius (httprubinius)un deacuteveloppement orienteacute speacutecifications

IronRuby (httpwwwironrubynet)eacutecrit pour NET deacuteveloppement soutenu par Microsoft

Maglev (httprubygemstonecom)baseacute sur Smalltalk

Cardinal (httpcardinal2rubyforgeorg)une VM permettant de tourner sous Parrot

Plusieurs impleacutementations du langage

page 5 sur 33RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

page 6 sur 33

Syntaxe de base

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

ruby variable locale

def ruby_method identificateur de meacutethodeend

$ruby variable globale$RUBY

RubyVersion constanteRUBY_VERSION

ruby_version symbole

page 6 sur 33

Syntaxe de base

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

ruby variable locale

def ruby_method identificateur de meacutethodeend

$ruby variable globale$RUBY

RubyVersion constanteRUBY_VERSION

ruby_version symbole

identificateursconditionsexceptions

quelques idiomes

page 6 sur 33

Syntaxe de base

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

ruby variable locale

def ruby_method identificateur de meacutethodeend

$ruby variable globale$RUBY

RubyVersion constanteRUBY_VERSION

ruby_version symbole

page 7 sur 33

Syntaxe de base conditions

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

if version == 186 puts vous utilisez la derniegravereelse puts passez agrave la versionend

puts Mauvais format unless objis_a Hash

case version when 186 puts when ^18d puts il y a plus reacutecent when ^19d puts oh oh -) else puts il est temps de se mettre agrave jourend

page 8 sur 33

Syntaxe de base les exceptions

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

begin f = Fileopen(fichiertxt) texte = freadline puts Lrsquoen-tecircte du fichier est texterescue ErrnoENOENT =gt e puts Il ny a pas de tel fichier rescue NoMethodError =gt e puts Lrsquoouverture srsquoest probablement mal passeacutee rescue SyntaxError =gt e puts Une erreur du deacuteveloppeur (emessage) raise eensure fclose if frespond_to closeend

page 9 sur 33

Syntaxe de base quelques idiomes

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

method( param1 =gt valeur1 param2 =gt valeur2 )method( param1 =gt valeur1 param2 =gt valeur2 )method param1 =gt valeur1 param2 =gt valeur2

def method(params) options = param1 =gt valeur par deacutefaut optionsmerge params end

objrespond_to methode

objdelete_at(1)gsub(e r)upcase

page 10 sur 33

Orienteacute objet

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

-123abs renvoie 123-123class renvoie Fixnum

chaine = rmllchaineupcase renvoie RMLLputs chaine affiche rmllchaineupcase renvoie RMLLputs chaine affiche RMLL

nilclass renvoie NilClasstrueclass renvoie TrueClassfalseclass renvoie FalseClassnilnil renvoie true

page 10 sur 33

Orienteacute objet

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

-123abs renvoie 123-123class renvoie Fixnum

chaine = rmllchaineupcase renvoie RMLLputs chaine affiche rmllchaineupcase renvoie RMLLputs chaine affiche RMLL

nilclass renvoie NilClasstrueclass renvoie TrueClassfalseclass renvoie FalseClassnilnil renvoie true

appel de meacutethodesdeacuteclaration de classeutilisationpolymorphisme

page 10 sur 33

Orienteacute objet

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

-123abs renvoie 123-123class renvoie Fixnum

chaine = rmllchaineupcase renvoie RMLLputs chaine affiche rmllchaineupcase renvoie RMLLputs chaine affiche RMLL

nilclass renvoie NilClasstrueclass renvoie TrueClassfalseclass renvoie FalseClassnilnil renvoie true

page 11 sur 33

Orienteacute objet deacuteclaration de classe

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

class Presentation lt Intervention deacuteclaration de la classe nombre = 0 variable de classe def initialize(intitule duree=45) post-constructeur intitule = intitule duree = duree nombre += 1 super appel de la meacutethode end dans la classe megravere def to_s titre + + dureeto_s + minutes end def selfnombre meacutethode de classe nombre end end

page 12 sur 33

Orienteacute objet utilisation

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

Presentationnombre renvoie 0p = Presentationnew(Preacutesentation de Ruby)

Presentationnombre renvoie 1

puts p affiche Preacutesentation de Ruby 45 minutes

pfinNoMethodError undefined method `fin for ltPresentation0x49214gt

def pfin puts Suffisamment de Ruby aujourdhui end

pfin affiche Suffisamment de Ruby aujourdrsquohui

page 13 sur 33

Orienteacute objet polymorphisme

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

module RMLL creacutee un nouveau module

EDITION = 2008

renvoie IUT IUFM ou CCI def lieu end

end

puts RMLLEDITION affiche 2008

class Presentation on rouvre la deacutefinition include RMLL pour inclure ce qui est deacutefiniend dans le module RMLL

pextends(RMLL) on eacutetend lobjet p

page 14 sur 33

Un peu plus loin

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

puts salut do puts salutend

lambda puts salut proc do puts salutend

p = Procnew puts salut pcall affiche salut

p = Procnew |i| puts i + 1 pcall 1 affiche 2pcall 41 affiche 42

page 14 sur 33

Un peu plus loin

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

puts salut do puts salutend

lambda puts salut proc do puts salutend

p = Procnew puts salut pcall affiche salut

p = Procnew |i| puts i + 1 pcall 1 affiche 2pcall 41 affiche 42

blocsiteacuterateursyield

page 14 sur 33

Un peu plus loin

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

puts salut do puts salutend

lambda puts salut proc do puts salutend

p = Procnew puts salut pcall affiche salut

p = Procnew |i| puts i + 1 pcall 1 affiche 2pcall 41 affiche 42

page 15 sur 33

Un peu plus loin les iteacuterateurs

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

lyonnais = [Freacutedeacuteric Alexis Jeacuterocircme] lyonnaiseach do |l| puts Dommage l nest pas venu cette anneacuteeend

rmll = 2008 =gt Mont-de-Marsan 2007 =gt Amiens 2006 =gt Vandoeuvre-les-Nancy 2002 =gt Talence

rmlleach_pair do |annee lieu| puts En annee je suis alleacute aux RMLL agrave lieuend

rmllkeyssorteach do |annee| puts En annee je suis alleacute aux RMLL agrave rmll[annee]end

page 16 sur 33

Un peu plus loin les iteacuterateurs

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

lecture dun fichier faccedilon blocs

avertissements = erreurs = 0 initialisation

Fileopen(logtxt) do |fichier| ouverture fichierreadlineseach do |ligne| lecture des lignes case ligne when ^WARN avertissements += 1 when ^ERR erreurs += 1 end endend fermeture automatique

puts Il y a avertissements avertissementsputs et erreurs erreurs dans ce fichier

page 17 sur 33

Un peu plus loin yield

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

class Personne

def initialize(nom) nom = nom end

def salue la meacutethode salue se contente drsquoexeacutecuteryield nom le bloc qui lui est passeacute

end lrsquoargument nom

end

celine = Personnenew(Ceacuteline)celinesalue |n| puts salut n affiche salut Ceacuteline

page 17 sur 33

Un peu plus loin yield

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

class Personne

def initialize(nom) nom = nom end

def salue la meacutethode salue se contente drsquoexeacutecuteryield nom le bloc qui lui est passeacute

end lrsquoargument nom

end

celine = Personnenew(Ceacuteline)celinesalue |n| puts salut n affiche salut Ceacuteline

mais comment ccedila marche

page 17 sur 33

Un peu plus loin yield

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

class Personne

def initialize(nom) nom = nom end

def salue la meacutethode salue se contente drsquoexeacutecuteryield nom le bloc qui lui est passeacute

end lrsquoargument nom

end

celine = Personnenew(Ceacuteline)celinesalue |n| puts salut n affiche salut Ceacuteline

page 18 sur 33

Dynamisme eacutevaluation de code

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

eval puts salut

def operation(operateur operande1 operande2) eval operande1 operateur operande2end

operation + 1 2 renvoie 3operation 9 0 renvoie

Presentationclass_eval do end

page 18 sur 33

Dynamisme eacutevaluation de code

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

eval puts salut

def operation(operateur operande1 operande2) eval operande1 operateur operande2end

operation + 1 2 renvoie 3operation 9 0 renvoie

Presentationclass_eval do end

eacutevaluation de codeinterception drsquoappels de meacutethodes inexistantesexeacutecution des deacutefinitions

reacuteflexiviteacute introspection

page 18 sur 33

Dynamisme eacutevaluation de code

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

eval puts salut

def operation(operateur operande1 operande2) eval operande1 operateur operande2end

operation + 1 2 renvoie 3operation 9 0 renvoie

Presentationclass_eval do end

page 19 sur 33

Dynamisme meacutethodes inexistantes

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

Presentationnombre renvoie 0p = Presentationnew(Preacutesentation de Ruby)

Presentationnombre renvoie 1

puts p affiche Preacutesentation de Ruby 45 minutes

pfinNoMethodError undefined method `fin for ltPresentation0x49214gt

def pfin puts Suffisamment de Ruby aujourdhui end

pfin affiche Suffisamment de Ruby aujourdrsquohui

page 20 sur 33

Dynamisme meacutethodes inexistantes

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

class Presentation def method_missing(nom args) method_missing puts Il ny a pas de meacutethode nom est appeleacutee end avant la leveacuteeend de lexception

p = Presentationnew(Preacutesentation de Ruby)

pfin affiche Il ny a pas de meacutethode fin pas drsquoexception

method_missing est lrsquoun des nombreux ldquohooksrdquo disponibles dans Ruby

page 21 sur 33

Dynamisme deacutefinitions exeacutecuteacutees

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

class Configuration case RUBY_PLATFORM deacutefinition dune meacutethode when linux en fonction du systegraveme def initialize(params) hocircte end when win32 def initialize(params) end when darwin include YAIBExtensionsSpecificOSX else unless include YAIBStandard raise Votre OS nest pas supporteacute end end end

page 22 sur 33

Dynamisme reacuteflexiviteacute introspection

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

On peut interroger tous les composants du langage agrave lrsquoexeacutecution

obj = Arraynewobjclass

objclassinstance_methodsobjmethods eacutequivalent agrave la ligne du dessusobjprivate_methods

objclassinstance_methodsgrep(delete)objclassinstance_methodsgrep(delete)sort

objmethodsgrep(^on_connect_do)each do |method| objsend methodend

page 23 sur 33

Dynamisme reacuteflexiviteacute introspection

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

On peut rouvrir une deacutefinition y compris celle du langage

class Array la classe Array existe on la rouvre def longueur ajout drsquoune meacutethode en franccedilais length proxy vers la meacutethode en anglais end end

arr = Arraynewarr ltlt 1arr ltlt element

arrlongueur renvoie 2

page 24 sur 33

Dynamisme reacuteflexiviteacute introspection

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

class Counterparty def has_all_mandatory_fields_filled quelques veacuterifications end def can_be_in_completed_or_approved_status return false unless selfhas_all_mandatory_fields_filled return false unless selflgdhas_all_mandatory_fields_filled unless selfratingshave_all_mandatory_fields_filled

return false end return true end

end

page 25 sur 33

Dynamisme reacuteflexiviteacute introspection

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

modification de la classe Arrayclass Array

def have_all_mandatory_fields_filled selfeach do |item| unless itemrespond_to has_all_mandatory_fields_filled return false end unless itemhas_all_mandatory_fields_filled return false end end return true end

end

page 26 sur 33

Se mettre agrave Ruby

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

(g)vi(m)(X)emacsSciTE

FreeRIDE (eacutecrit en Ruby)

e-TextEditorTextMate (seulement OSX)

Eclipse avec les Ruby Development ToolsNetBeans 61 (support Ruby et JRuby)

page 26 sur 33

Se mettre agrave Ruby

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

(g)vi(m)(X)emacsSciTE

FreeRIDE (eacutecrit en Ruby)

e-TextEditorTextMate (seulement OSX)

Eclipse avec les Ruby Development ToolsNetBeans 61 (support Ruby et JRuby)

Editeurs et environnements compatiblesLrsquooutil indispensable irbRessources en ligneLivres

page 26 sur 33

Se mettre agrave Ruby

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

(g)vi(m)(X)emacsSciTE

FreeRIDE (eacutecrit en Ruby)

e-TextEditorTextMate (seulement OSX)

Eclipse avec les Ruby Development ToolsNetBeans 61 (support Ruby et JRuby)

page 27 sur 33

Se mettre agrave Ruby irb

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

page 28 sur 33

Se mettre agrave Ruby ressources en ligne

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

Le site officiel (httpwwwruby-langorg)Sa traduction (httpwwwruby-langorgfr)

Le portail Ruby France (httpwwwrubyfranceorg)

Les listes de diffusion sur Google Groups(ruby-talk ruby-core rubyfr-public)

Les groupes de discussion sur Usenet(complangruby frcomplangruby)

Les salons IRC sur FreeNode (ircfreenodenet)(ruby-lang rubyfr)

page 29 sur 33

Se mettre agrave Ruby livres

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

Ruby in a NutshellProgramming RubyThe Ruby WayDesign Patterns for Ruby

Ruby par lrsquoexemple

Passez sur le stand Ruby France

page 30 sur 33

Fin de la preacutesentation

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

page 30 sur 33

Fin de la preacutesentation

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

Des questions

page 30 sur 33

Fin de la preacutesentation

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

page 32 sur 33

Fin de la preacutesentation

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

Merci

page 32 sur 33

Ougrave reacutecupeacuterer ce document

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

Le support de cette preacutesentation sera disponible sur httpzlabfr

page 33 sur 33

Licence de ce document

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

bullVous ecirctes libres bullde reproduire distribuer et communiquer cette creacuteation au public

bullSelon les conditions suivantes bullPaterniteacutebull Vous devez citer le nom de lauteur original de la maniegravere indiqueacutee par lauteur de loeuvre ou le titulaire des droits qui vous confegravere cette autorisation (mais pas dune maniegravere qui suggeacutererait quils vous soutiennent ou approuvent votre utilisation de loeuvre)

bullPas drsquoutilisation commercialebull Vous navez pas le droit dutiliser cette creacuteation agrave des fins commerciales

bullPas de modificationbull Vous navez pas le droit de modifier de transformer ou dadapter cette creacuteation

bullreacutesumeacute explicatif disponible sur httpcreativecommonsorglicensesby-nc-nd20fr

bullvous ecirctes autoriseacute agrave reacuteutiliser le logo Ruby France utiliseacute dans cette preacutesentation pour faire reacutefeacuterence agrave lrsquoassociation

page 2 sur 33RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

Preacutesentation de Ruby

en 45 minutes

page 3 sur 33

Un petit mot agrave mon propos

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

Guillaume ldquoZifrordquo Desratltguillaumedesratrubyfranceorggt ampamp httpzlabfr

Rubyiste depuis 2002Railer depuis 2005

Preacutesident de lrsquoassociation

participe aux listes Ruby et Railspasse sur rubyfr ircfreenodenet

consultant informatique au Luxembourgen mission chez un grand nom de la finance

page 3 sur 33

Un petit mot agrave mon propos

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

Guillaume ldquoZifrordquo Desratltguillaumedesratrubyfranceorggt ampamp httpzlabfr

Rubyiste depuis 2002Railer depuis 2005

Preacutesident de lrsquoassociation

participe aux listes Ruby et Railspasse sur rubyfr ircfreenodenet

consultant informatique au Luxembourgen mission chez un grand nom de la finance

Qui est ce type qui nous parle

page 3 sur 33

Un petit mot agrave mon propos

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

Guillaume ldquoZifrordquo Desratltguillaumedesratrubyfranceorggt ampamp httpzlabfr

Rubyiste depuis 2002Railer depuis 2005

Preacutesident de lrsquoassociation

participe aux listes Ruby et Railspasse sur rubyfr ircfreenodenet

consultant informatique au Luxembourgen mission chez un grand nom de la finance

page 4 sur 33

Le langage Ruby

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

Un langage interpreacuteteacute orienteacute objet dynamique et agreacuteable qui se veut ldquonaturelrdquo pas ldquosimplerdquo

Creacuteeacute par Yukihiro Matsumoto alias ldquomatzrdquo

Inspireacute de Perl Smalltalk Eiffel Ada LISP

Deacuteveloppeacute agrave partir de 1993 diffuseacute depuis 1995

Aujourdrsquohui en versions 186 187 et 190

Disponible sous licences libres (Ruby MIT GPL)

JRuby (httpjrubycodehausorg)eacutecrit en JAVA soutenu par Sun

rubinius (httprubinius)un deacuteveloppement orienteacute speacutecifications

IronRuby (httpwwwironrubynet)eacutecrit pour NET deacuteveloppement soutenu par Microsoft

Maglev (httprubygemstonecom)baseacute sur Smalltalk

Cardinal (httpcardinal2rubyforgeorg)une VM permettant de tourner sous Parrot

Plusieurs impleacutementations du langage

page 5 sur 33RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

JRuby (httpjrubycodehausorg)eacutecrit en JAVA soutenu par Sun

rubinius (httprubinius)un deacuteveloppement orienteacute speacutecifications

IronRuby (httpwwwironrubynet)eacutecrit pour NET deacuteveloppement soutenu par Microsoft

Maglev (httprubygemstonecom)baseacute sur Smalltalk

Cardinal (httpcardinal2rubyforgeorg)une VM permettant de tourner sous Parrot

Plusieurs impleacutementations du langage

page 5 sur 33RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

JRubyrubiniusIronRubyMaglevCardinal

JRuby (httpjrubycodehausorg)eacutecrit en JAVA soutenu par Sun

rubinius (httprubinius)un deacuteveloppement orienteacute speacutecifications

IronRuby (httpwwwironrubynet)eacutecrit pour NET deacuteveloppement soutenu par Microsoft

Maglev (httprubygemstonecom)baseacute sur Smalltalk

Cardinal (httpcardinal2rubyforgeorg)une VM permettant de tourner sous Parrot

Plusieurs impleacutementations du langage

page 5 sur 33RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

page 6 sur 33

Syntaxe de base

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

ruby variable locale

def ruby_method identificateur de meacutethodeend

$ruby variable globale$RUBY

RubyVersion constanteRUBY_VERSION

ruby_version symbole

page 6 sur 33

Syntaxe de base

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

ruby variable locale

def ruby_method identificateur de meacutethodeend

$ruby variable globale$RUBY

RubyVersion constanteRUBY_VERSION

ruby_version symbole

identificateursconditionsexceptions

quelques idiomes

page 6 sur 33

Syntaxe de base

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

ruby variable locale

def ruby_method identificateur de meacutethodeend

$ruby variable globale$RUBY

RubyVersion constanteRUBY_VERSION

ruby_version symbole

page 7 sur 33

Syntaxe de base conditions

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

if version == 186 puts vous utilisez la derniegravereelse puts passez agrave la versionend

puts Mauvais format unless objis_a Hash

case version when 186 puts when ^18d puts il y a plus reacutecent when ^19d puts oh oh -) else puts il est temps de se mettre agrave jourend

page 8 sur 33

Syntaxe de base les exceptions

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

begin f = Fileopen(fichiertxt) texte = freadline puts Lrsquoen-tecircte du fichier est texterescue ErrnoENOENT =gt e puts Il ny a pas de tel fichier rescue NoMethodError =gt e puts Lrsquoouverture srsquoest probablement mal passeacutee rescue SyntaxError =gt e puts Une erreur du deacuteveloppeur (emessage) raise eensure fclose if frespond_to closeend

page 9 sur 33

Syntaxe de base quelques idiomes

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

method( param1 =gt valeur1 param2 =gt valeur2 )method( param1 =gt valeur1 param2 =gt valeur2 )method param1 =gt valeur1 param2 =gt valeur2

def method(params) options = param1 =gt valeur par deacutefaut optionsmerge params end

objrespond_to methode

objdelete_at(1)gsub(e r)upcase

page 10 sur 33

Orienteacute objet

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

-123abs renvoie 123-123class renvoie Fixnum

chaine = rmllchaineupcase renvoie RMLLputs chaine affiche rmllchaineupcase renvoie RMLLputs chaine affiche RMLL

nilclass renvoie NilClasstrueclass renvoie TrueClassfalseclass renvoie FalseClassnilnil renvoie true

page 10 sur 33

Orienteacute objet

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

-123abs renvoie 123-123class renvoie Fixnum

chaine = rmllchaineupcase renvoie RMLLputs chaine affiche rmllchaineupcase renvoie RMLLputs chaine affiche RMLL

nilclass renvoie NilClasstrueclass renvoie TrueClassfalseclass renvoie FalseClassnilnil renvoie true

appel de meacutethodesdeacuteclaration de classeutilisationpolymorphisme

page 10 sur 33

Orienteacute objet

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

-123abs renvoie 123-123class renvoie Fixnum

chaine = rmllchaineupcase renvoie RMLLputs chaine affiche rmllchaineupcase renvoie RMLLputs chaine affiche RMLL

nilclass renvoie NilClasstrueclass renvoie TrueClassfalseclass renvoie FalseClassnilnil renvoie true

page 11 sur 33

Orienteacute objet deacuteclaration de classe

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

class Presentation lt Intervention deacuteclaration de la classe nombre = 0 variable de classe def initialize(intitule duree=45) post-constructeur intitule = intitule duree = duree nombre += 1 super appel de la meacutethode end dans la classe megravere def to_s titre + + dureeto_s + minutes end def selfnombre meacutethode de classe nombre end end

page 12 sur 33

Orienteacute objet utilisation

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

Presentationnombre renvoie 0p = Presentationnew(Preacutesentation de Ruby)

Presentationnombre renvoie 1

puts p affiche Preacutesentation de Ruby 45 minutes

pfinNoMethodError undefined method `fin for ltPresentation0x49214gt

def pfin puts Suffisamment de Ruby aujourdhui end

pfin affiche Suffisamment de Ruby aujourdrsquohui

page 13 sur 33

Orienteacute objet polymorphisme

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

module RMLL creacutee un nouveau module

EDITION = 2008

renvoie IUT IUFM ou CCI def lieu end

end

puts RMLLEDITION affiche 2008

class Presentation on rouvre la deacutefinition include RMLL pour inclure ce qui est deacutefiniend dans le module RMLL

pextends(RMLL) on eacutetend lobjet p

page 14 sur 33

Un peu plus loin

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

puts salut do puts salutend

lambda puts salut proc do puts salutend

p = Procnew puts salut pcall affiche salut

p = Procnew |i| puts i + 1 pcall 1 affiche 2pcall 41 affiche 42

page 14 sur 33

Un peu plus loin

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

puts salut do puts salutend

lambda puts salut proc do puts salutend

p = Procnew puts salut pcall affiche salut

p = Procnew |i| puts i + 1 pcall 1 affiche 2pcall 41 affiche 42

blocsiteacuterateursyield

page 14 sur 33

Un peu plus loin

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

puts salut do puts salutend

lambda puts salut proc do puts salutend

p = Procnew puts salut pcall affiche salut

p = Procnew |i| puts i + 1 pcall 1 affiche 2pcall 41 affiche 42

page 15 sur 33

Un peu plus loin les iteacuterateurs

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

lyonnais = [Freacutedeacuteric Alexis Jeacuterocircme] lyonnaiseach do |l| puts Dommage l nest pas venu cette anneacuteeend

rmll = 2008 =gt Mont-de-Marsan 2007 =gt Amiens 2006 =gt Vandoeuvre-les-Nancy 2002 =gt Talence

rmlleach_pair do |annee lieu| puts En annee je suis alleacute aux RMLL agrave lieuend

rmllkeyssorteach do |annee| puts En annee je suis alleacute aux RMLL agrave rmll[annee]end

page 16 sur 33

Un peu plus loin les iteacuterateurs

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

lecture dun fichier faccedilon blocs

avertissements = erreurs = 0 initialisation

Fileopen(logtxt) do |fichier| ouverture fichierreadlineseach do |ligne| lecture des lignes case ligne when ^WARN avertissements += 1 when ^ERR erreurs += 1 end endend fermeture automatique

puts Il y a avertissements avertissementsputs et erreurs erreurs dans ce fichier

page 17 sur 33

Un peu plus loin yield

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

class Personne

def initialize(nom) nom = nom end

def salue la meacutethode salue se contente drsquoexeacutecuteryield nom le bloc qui lui est passeacute

end lrsquoargument nom

end

celine = Personnenew(Ceacuteline)celinesalue |n| puts salut n affiche salut Ceacuteline

page 17 sur 33

Un peu plus loin yield

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

class Personne

def initialize(nom) nom = nom end

def salue la meacutethode salue se contente drsquoexeacutecuteryield nom le bloc qui lui est passeacute

end lrsquoargument nom

end

celine = Personnenew(Ceacuteline)celinesalue |n| puts salut n affiche salut Ceacuteline

mais comment ccedila marche

page 17 sur 33

Un peu plus loin yield

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

class Personne

def initialize(nom) nom = nom end

def salue la meacutethode salue se contente drsquoexeacutecuteryield nom le bloc qui lui est passeacute

end lrsquoargument nom

end

celine = Personnenew(Ceacuteline)celinesalue |n| puts salut n affiche salut Ceacuteline

page 18 sur 33

Dynamisme eacutevaluation de code

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

eval puts salut

def operation(operateur operande1 operande2) eval operande1 operateur operande2end

operation + 1 2 renvoie 3operation 9 0 renvoie

Presentationclass_eval do end

page 18 sur 33

Dynamisme eacutevaluation de code

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

eval puts salut

def operation(operateur operande1 operande2) eval operande1 operateur operande2end

operation + 1 2 renvoie 3operation 9 0 renvoie

Presentationclass_eval do end

eacutevaluation de codeinterception drsquoappels de meacutethodes inexistantesexeacutecution des deacutefinitions

reacuteflexiviteacute introspection

page 18 sur 33

Dynamisme eacutevaluation de code

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

eval puts salut

def operation(operateur operande1 operande2) eval operande1 operateur operande2end

operation + 1 2 renvoie 3operation 9 0 renvoie

Presentationclass_eval do end

page 19 sur 33

Dynamisme meacutethodes inexistantes

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

Presentationnombre renvoie 0p = Presentationnew(Preacutesentation de Ruby)

Presentationnombre renvoie 1

puts p affiche Preacutesentation de Ruby 45 minutes

pfinNoMethodError undefined method `fin for ltPresentation0x49214gt

def pfin puts Suffisamment de Ruby aujourdhui end

pfin affiche Suffisamment de Ruby aujourdrsquohui

page 20 sur 33

Dynamisme meacutethodes inexistantes

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

class Presentation def method_missing(nom args) method_missing puts Il ny a pas de meacutethode nom est appeleacutee end avant la leveacuteeend de lexception

p = Presentationnew(Preacutesentation de Ruby)

pfin affiche Il ny a pas de meacutethode fin pas drsquoexception

method_missing est lrsquoun des nombreux ldquohooksrdquo disponibles dans Ruby

page 21 sur 33

Dynamisme deacutefinitions exeacutecuteacutees

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

class Configuration case RUBY_PLATFORM deacutefinition dune meacutethode when linux en fonction du systegraveme def initialize(params) hocircte end when win32 def initialize(params) end when darwin include YAIBExtensionsSpecificOSX else unless include YAIBStandard raise Votre OS nest pas supporteacute end end end

page 22 sur 33

Dynamisme reacuteflexiviteacute introspection

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

On peut interroger tous les composants du langage agrave lrsquoexeacutecution

obj = Arraynewobjclass

objclassinstance_methodsobjmethods eacutequivalent agrave la ligne du dessusobjprivate_methods

objclassinstance_methodsgrep(delete)objclassinstance_methodsgrep(delete)sort

objmethodsgrep(^on_connect_do)each do |method| objsend methodend

page 23 sur 33

Dynamisme reacuteflexiviteacute introspection

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

On peut rouvrir une deacutefinition y compris celle du langage

class Array la classe Array existe on la rouvre def longueur ajout drsquoune meacutethode en franccedilais length proxy vers la meacutethode en anglais end end

arr = Arraynewarr ltlt 1arr ltlt element

arrlongueur renvoie 2

page 24 sur 33

Dynamisme reacuteflexiviteacute introspection

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

class Counterparty def has_all_mandatory_fields_filled quelques veacuterifications end def can_be_in_completed_or_approved_status return false unless selfhas_all_mandatory_fields_filled return false unless selflgdhas_all_mandatory_fields_filled unless selfratingshave_all_mandatory_fields_filled

return false end return true end

end

page 25 sur 33

Dynamisme reacuteflexiviteacute introspection

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

modification de la classe Arrayclass Array

def have_all_mandatory_fields_filled selfeach do |item| unless itemrespond_to has_all_mandatory_fields_filled return false end unless itemhas_all_mandatory_fields_filled return false end end return true end

end

page 26 sur 33

Se mettre agrave Ruby

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

(g)vi(m)(X)emacsSciTE

FreeRIDE (eacutecrit en Ruby)

e-TextEditorTextMate (seulement OSX)

Eclipse avec les Ruby Development ToolsNetBeans 61 (support Ruby et JRuby)

page 26 sur 33

Se mettre agrave Ruby

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

(g)vi(m)(X)emacsSciTE

FreeRIDE (eacutecrit en Ruby)

e-TextEditorTextMate (seulement OSX)

Eclipse avec les Ruby Development ToolsNetBeans 61 (support Ruby et JRuby)

Editeurs et environnements compatiblesLrsquooutil indispensable irbRessources en ligneLivres

page 26 sur 33

Se mettre agrave Ruby

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

(g)vi(m)(X)emacsSciTE

FreeRIDE (eacutecrit en Ruby)

e-TextEditorTextMate (seulement OSX)

Eclipse avec les Ruby Development ToolsNetBeans 61 (support Ruby et JRuby)

page 27 sur 33

Se mettre agrave Ruby irb

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

page 28 sur 33

Se mettre agrave Ruby ressources en ligne

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

Le site officiel (httpwwwruby-langorg)Sa traduction (httpwwwruby-langorgfr)

Le portail Ruby France (httpwwwrubyfranceorg)

Les listes de diffusion sur Google Groups(ruby-talk ruby-core rubyfr-public)

Les groupes de discussion sur Usenet(complangruby frcomplangruby)

Les salons IRC sur FreeNode (ircfreenodenet)(ruby-lang rubyfr)

page 29 sur 33

Se mettre agrave Ruby livres

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

Ruby in a NutshellProgramming RubyThe Ruby WayDesign Patterns for Ruby

Ruby par lrsquoexemple

Passez sur le stand Ruby France

page 30 sur 33

Fin de la preacutesentation

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

page 30 sur 33

Fin de la preacutesentation

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

Des questions

page 30 sur 33

Fin de la preacutesentation

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

page 32 sur 33

Fin de la preacutesentation

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

Merci

page 32 sur 33

Ougrave reacutecupeacuterer ce document

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

Le support de cette preacutesentation sera disponible sur httpzlabfr

page 33 sur 33

Licence de ce document

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

bullVous ecirctes libres bullde reproduire distribuer et communiquer cette creacuteation au public

bullSelon les conditions suivantes bullPaterniteacutebull Vous devez citer le nom de lauteur original de la maniegravere indiqueacutee par lauteur de loeuvre ou le titulaire des droits qui vous confegravere cette autorisation (mais pas dune maniegravere qui suggeacutererait quils vous soutiennent ou approuvent votre utilisation de loeuvre)

bullPas drsquoutilisation commercialebull Vous navez pas le droit dutiliser cette creacuteation agrave des fins commerciales

bullPas de modificationbull Vous navez pas le droit de modifier de transformer ou dadapter cette creacuteation

bullreacutesumeacute explicatif disponible sur httpcreativecommonsorglicensesby-nc-nd20fr

bullvous ecirctes autoriseacute agrave reacuteutiliser le logo Ruby France utiliseacute dans cette preacutesentation pour faire reacutefeacuterence agrave lrsquoassociation

page 3 sur 33

Un petit mot agrave mon propos

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

Guillaume ldquoZifrordquo Desratltguillaumedesratrubyfranceorggt ampamp httpzlabfr

Rubyiste depuis 2002Railer depuis 2005

Preacutesident de lrsquoassociation

participe aux listes Ruby et Railspasse sur rubyfr ircfreenodenet

consultant informatique au Luxembourgen mission chez un grand nom de la finance

page 3 sur 33

Un petit mot agrave mon propos

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

Guillaume ldquoZifrordquo Desratltguillaumedesratrubyfranceorggt ampamp httpzlabfr

Rubyiste depuis 2002Railer depuis 2005

Preacutesident de lrsquoassociation

participe aux listes Ruby et Railspasse sur rubyfr ircfreenodenet

consultant informatique au Luxembourgen mission chez un grand nom de la finance

Qui est ce type qui nous parle

page 3 sur 33

Un petit mot agrave mon propos

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

Guillaume ldquoZifrordquo Desratltguillaumedesratrubyfranceorggt ampamp httpzlabfr

Rubyiste depuis 2002Railer depuis 2005

Preacutesident de lrsquoassociation

participe aux listes Ruby et Railspasse sur rubyfr ircfreenodenet

consultant informatique au Luxembourgen mission chez un grand nom de la finance

page 4 sur 33

Le langage Ruby

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

Un langage interpreacuteteacute orienteacute objet dynamique et agreacuteable qui se veut ldquonaturelrdquo pas ldquosimplerdquo

Creacuteeacute par Yukihiro Matsumoto alias ldquomatzrdquo

Inspireacute de Perl Smalltalk Eiffel Ada LISP

Deacuteveloppeacute agrave partir de 1993 diffuseacute depuis 1995

Aujourdrsquohui en versions 186 187 et 190

Disponible sous licences libres (Ruby MIT GPL)

JRuby (httpjrubycodehausorg)eacutecrit en JAVA soutenu par Sun

rubinius (httprubinius)un deacuteveloppement orienteacute speacutecifications

IronRuby (httpwwwironrubynet)eacutecrit pour NET deacuteveloppement soutenu par Microsoft

Maglev (httprubygemstonecom)baseacute sur Smalltalk

Cardinal (httpcardinal2rubyforgeorg)une VM permettant de tourner sous Parrot

Plusieurs impleacutementations du langage

page 5 sur 33RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

JRuby (httpjrubycodehausorg)eacutecrit en JAVA soutenu par Sun

rubinius (httprubinius)un deacuteveloppement orienteacute speacutecifications

IronRuby (httpwwwironrubynet)eacutecrit pour NET deacuteveloppement soutenu par Microsoft

Maglev (httprubygemstonecom)baseacute sur Smalltalk

Cardinal (httpcardinal2rubyforgeorg)une VM permettant de tourner sous Parrot

Plusieurs impleacutementations du langage

page 5 sur 33RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

JRubyrubiniusIronRubyMaglevCardinal

JRuby (httpjrubycodehausorg)eacutecrit en JAVA soutenu par Sun

rubinius (httprubinius)un deacuteveloppement orienteacute speacutecifications

IronRuby (httpwwwironrubynet)eacutecrit pour NET deacuteveloppement soutenu par Microsoft

Maglev (httprubygemstonecom)baseacute sur Smalltalk

Cardinal (httpcardinal2rubyforgeorg)une VM permettant de tourner sous Parrot

Plusieurs impleacutementations du langage

page 5 sur 33RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

page 6 sur 33

Syntaxe de base

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

ruby variable locale

def ruby_method identificateur de meacutethodeend

$ruby variable globale$RUBY

RubyVersion constanteRUBY_VERSION

ruby_version symbole

page 6 sur 33

Syntaxe de base

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

ruby variable locale

def ruby_method identificateur de meacutethodeend

$ruby variable globale$RUBY

RubyVersion constanteRUBY_VERSION

ruby_version symbole

identificateursconditionsexceptions

quelques idiomes

page 6 sur 33

Syntaxe de base

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

ruby variable locale

def ruby_method identificateur de meacutethodeend

$ruby variable globale$RUBY

RubyVersion constanteRUBY_VERSION

ruby_version symbole

page 7 sur 33

Syntaxe de base conditions

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

if version == 186 puts vous utilisez la derniegravereelse puts passez agrave la versionend

puts Mauvais format unless objis_a Hash

case version when 186 puts when ^18d puts il y a plus reacutecent when ^19d puts oh oh -) else puts il est temps de se mettre agrave jourend

page 8 sur 33

Syntaxe de base les exceptions

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

begin f = Fileopen(fichiertxt) texte = freadline puts Lrsquoen-tecircte du fichier est texterescue ErrnoENOENT =gt e puts Il ny a pas de tel fichier rescue NoMethodError =gt e puts Lrsquoouverture srsquoest probablement mal passeacutee rescue SyntaxError =gt e puts Une erreur du deacuteveloppeur (emessage) raise eensure fclose if frespond_to closeend

page 9 sur 33

Syntaxe de base quelques idiomes

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

method( param1 =gt valeur1 param2 =gt valeur2 )method( param1 =gt valeur1 param2 =gt valeur2 )method param1 =gt valeur1 param2 =gt valeur2

def method(params) options = param1 =gt valeur par deacutefaut optionsmerge params end

objrespond_to methode

objdelete_at(1)gsub(e r)upcase

page 10 sur 33

Orienteacute objet

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

-123abs renvoie 123-123class renvoie Fixnum

chaine = rmllchaineupcase renvoie RMLLputs chaine affiche rmllchaineupcase renvoie RMLLputs chaine affiche RMLL

nilclass renvoie NilClasstrueclass renvoie TrueClassfalseclass renvoie FalseClassnilnil renvoie true

page 10 sur 33

Orienteacute objet

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

-123abs renvoie 123-123class renvoie Fixnum

chaine = rmllchaineupcase renvoie RMLLputs chaine affiche rmllchaineupcase renvoie RMLLputs chaine affiche RMLL

nilclass renvoie NilClasstrueclass renvoie TrueClassfalseclass renvoie FalseClassnilnil renvoie true

appel de meacutethodesdeacuteclaration de classeutilisationpolymorphisme

page 10 sur 33

Orienteacute objet

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

-123abs renvoie 123-123class renvoie Fixnum

chaine = rmllchaineupcase renvoie RMLLputs chaine affiche rmllchaineupcase renvoie RMLLputs chaine affiche RMLL

nilclass renvoie NilClasstrueclass renvoie TrueClassfalseclass renvoie FalseClassnilnil renvoie true

page 11 sur 33

Orienteacute objet deacuteclaration de classe

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

class Presentation lt Intervention deacuteclaration de la classe nombre = 0 variable de classe def initialize(intitule duree=45) post-constructeur intitule = intitule duree = duree nombre += 1 super appel de la meacutethode end dans la classe megravere def to_s titre + + dureeto_s + minutes end def selfnombre meacutethode de classe nombre end end

page 12 sur 33

Orienteacute objet utilisation

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

Presentationnombre renvoie 0p = Presentationnew(Preacutesentation de Ruby)

Presentationnombre renvoie 1

puts p affiche Preacutesentation de Ruby 45 minutes

pfinNoMethodError undefined method `fin for ltPresentation0x49214gt

def pfin puts Suffisamment de Ruby aujourdhui end

pfin affiche Suffisamment de Ruby aujourdrsquohui

page 13 sur 33

Orienteacute objet polymorphisme

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

module RMLL creacutee un nouveau module

EDITION = 2008

renvoie IUT IUFM ou CCI def lieu end

end

puts RMLLEDITION affiche 2008

class Presentation on rouvre la deacutefinition include RMLL pour inclure ce qui est deacutefiniend dans le module RMLL

pextends(RMLL) on eacutetend lobjet p

page 14 sur 33

Un peu plus loin

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

puts salut do puts salutend

lambda puts salut proc do puts salutend

p = Procnew puts salut pcall affiche salut

p = Procnew |i| puts i + 1 pcall 1 affiche 2pcall 41 affiche 42

page 14 sur 33

Un peu plus loin

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

puts salut do puts salutend

lambda puts salut proc do puts salutend

p = Procnew puts salut pcall affiche salut

p = Procnew |i| puts i + 1 pcall 1 affiche 2pcall 41 affiche 42

blocsiteacuterateursyield

page 14 sur 33

Un peu plus loin

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

puts salut do puts salutend

lambda puts salut proc do puts salutend

p = Procnew puts salut pcall affiche salut

p = Procnew |i| puts i + 1 pcall 1 affiche 2pcall 41 affiche 42

page 15 sur 33

Un peu plus loin les iteacuterateurs

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

lyonnais = [Freacutedeacuteric Alexis Jeacuterocircme] lyonnaiseach do |l| puts Dommage l nest pas venu cette anneacuteeend

rmll = 2008 =gt Mont-de-Marsan 2007 =gt Amiens 2006 =gt Vandoeuvre-les-Nancy 2002 =gt Talence

rmlleach_pair do |annee lieu| puts En annee je suis alleacute aux RMLL agrave lieuend

rmllkeyssorteach do |annee| puts En annee je suis alleacute aux RMLL agrave rmll[annee]end

page 16 sur 33

Un peu plus loin les iteacuterateurs

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

lecture dun fichier faccedilon blocs

avertissements = erreurs = 0 initialisation

Fileopen(logtxt) do |fichier| ouverture fichierreadlineseach do |ligne| lecture des lignes case ligne when ^WARN avertissements += 1 when ^ERR erreurs += 1 end endend fermeture automatique

puts Il y a avertissements avertissementsputs et erreurs erreurs dans ce fichier

page 17 sur 33

Un peu plus loin yield

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

class Personne

def initialize(nom) nom = nom end

def salue la meacutethode salue se contente drsquoexeacutecuteryield nom le bloc qui lui est passeacute

end lrsquoargument nom

end

celine = Personnenew(Ceacuteline)celinesalue |n| puts salut n affiche salut Ceacuteline

page 17 sur 33

Un peu plus loin yield

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

class Personne

def initialize(nom) nom = nom end

def salue la meacutethode salue se contente drsquoexeacutecuteryield nom le bloc qui lui est passeacute

end lrsquoargument nom

end

celine = Personnenew(Ceacuteline)celinesalue |n| puts salut n affiche salut Ceacuteline

mais comment ccedila marche

page 17 sur 33

Un peu plus loin yield

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

class Personne

def initialize(nom) nom = nom end

def salue la meacutethode salue se contente drsquoexeacutecuteryield nom le bloc qui lui est passeacute

end lrsquoargument nom

end

celine = Personnenew(Ceacuteline)celinesalue |n| puts salut n affiche salut Ceacuteline

page 18 sur 33

Dynamisme eacutevaluation de code

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

eval puts salut

def operation(operateur operande1 operande2) eval operande1 operateur operande2end

operation + 1 2 renvoie 3operation 9 0 renvoie

Presentationclass_eval do end

page 18 sur 33

Dynamisme eacutevaluation de code

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

eval puts salut

def operation(operateur operande1 operande2) eval operande1 operateur operande2end

operation + 1 2 renvoie 3operation 9 0 renvoie

Presentationclass_eval do end

eacutevaluation de codeinterception drsquoappels de meacutethodes inexistantesexeacutecution des deacutefinitions

reacuteflexiviteacute introspection

page 18 sur 33

Dynamisme eacutevaluation de code

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

eval puts salut

def operation(operateur operande1 operande2) eval operande1 operateur operande2end

operation + 1 2 renvoie 3operation 9 0 renvoie

Presentationclass_eval do end

page 19 sur 33

Dynamisme meacutethodes inexistantes

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

Presentationnombre renvoie 0p = Presentationnew(Preacutesentation de Ruby)

Presentationnombre renvoie 1

puts p affiche Preacutesentation de Ruby 45 minutes

pfinNoMethodError undefined method `fin for ltPresentation0x49214gt

def pfin puts Suffisamment de Ruby aujourdhui end

pfin affiche Suffisamment de Ruby aujourdrsquohui

page 20 sur 33

Dynamisme meacutethodes inexistantes

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

class Presentation def method_missing(nom args) method_missing puts Il ny a pas de meacutethode nom est appeleacutee end avant la leveacuteeend de lexception

p = Presentationnew(Preacutesentation de Ruby)

pfin affiche Il ny a pas de meacutethode fin pas drsquoexception

method_missing est lrsquoun des nombreux ldquohooksrdquo disponibles dans Ruby

page 21 sur 33

Dynamisme deacutefinitions exeacutecuteacutees

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

class Configuration case RUBY_PLATFORM deacutefinition dune meacutethode when linux en fonction du systegraveme def initialize(params) hocircte end when win32 def initialize(params) end when darwin include YAIBExtensionsSpecificOSX else unless include YAIBStandard raise Votre OS nest pas supporteacute end end end

page 22 sur 33

Dynamisme reacuteflexiviteacute introspection

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

On peut interroger tous les composants du langage agrave lrsquoexeacutecution

obj = Arraynewobjclass

objclassinstance_methodsobjmethods eacutequivalent agrave la ligne du dessusobjprivate_methods

objclassinstance_methodsgrep(delete)objclassinstance_methodsgrep(delete)sort

objmethodsgrep(^on_connect_do)each do |method| objsend methodend

page 23 sur 33

Dynamisme reacuteflexiviteacute introspection

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

On peut rouvrir une deacutefinition y compris celle du langage

class Array la classe Array existe on la rouvre def longueur ajout drsquoune meacutethode en franccedilais length proxy vers la meacutethode en anglais end end

arr = Arraynewarr ltlt 1arr ltlt element

arrlongueur renvoie 2

page 24 sur 33

Dynamisme reacuteflexiviteacute introspection

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

class Counterparty def has_all_mandatory_fields_filled quelques veacuterifications end def can_be_in_completed_or_approved_status return false unless selfhas_all_mandatory_fields_filled return false unless selflgdhas_all_mandatory_fields_filled unless selfratingshave_all_mandatory_fields_filled

return false end return true end

end

page 25 sur 33

Dynamisme reacuteflexiviteacute introspection

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

modification de la classe Arrayclass Array

def have_all_mandatory_fields_filled selfeach do |item| unless itemrespond_to has_all_mandatory_fields_filled return false end unless itemhas_all_mandatory_fields_filled return false end end return true end

end

page 26 sur 33

Se mettre agrave Ruby

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

(g)vi(m)(X)emacsSciTE

FreeRIDE (eacutecrit en Ruby)

e-TextEditorTextMate (seulement OSX)

Eclipse avec les Ruby Development ToolsNetBeans 61 (support Ruby et JRuby)

page 26 sur 33

Se mettre agrave Ruby

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

(g)vi(m)(X)emacsSciTE

FreeRIDE (eacutecrit en Ruby)

e-TextEditorTextMate (seulement OSX)

Eclipse avec les Ruby Development ToolsNetBeans 61 (support Ruby et JRuby)

Editeurs et environnements compatiblesLrsquooutil indispensable irbRessources en ligneLivres

page 26 sur 33

Se mettre agrave Ruby

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

(g)vi(m)(X)emacsSciTE

FreeRIDE (eacutecrit en Ruby)

e-TextEditorTextMate (seulement OSX)

Eclipse avec les Ruby Development ToolsNetBeans 61 (support Ruby et JRuby)

page 27 sur 33

Se mettre agrave Ruby irb

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

page 28 sur 33

Se mettre agrave Ruby ressources en ligne

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

Le site officiel (httpwwwruby-langorg)Sa traduction (httpwwwruby-langorgfr)

Le portail Ruby France (httpwwwrubyfranceorg)

Les listes de diffusion sur Google Groups(ruby-talk ruby-core rubyfr-public)

Les groupes de discussion sur Usenet(complangruby frcomplangruby)

Les salons IRC sur FreeNode (ircfreenodenet)(ruby-lang rubyfr)

page 29 sur 33

Se mettre agrave Ruby livres

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

Ruby in a NutshellProgramming RubyThe Ruby WayDesign Patterns for Ruby

Ruby par lrsquoexemple

Passez sur le stand Ruby France

page 30 sur 33

Fin de la preacutesentation

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

page 30 sur 33

Fin de la preacutesentation

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

Des questions

page 30 sur 33

Fin de la preacutesentation

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

page 32 sur 33

Fin de la preacutesentation

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

Merci

page 32 sur 33

Ougrave reacutecupeacuterer ce document

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

Le support de cette preacutesentation sera disponible sur httpzlabfr

page 33 sur 33

Licence de ce document

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

bullVous ecirctes libres bullde reproduire distribuer et communiquer cette creacuteation au public

bullSelon les conditions suivantes bullPaterniteacutebull Vous devez citer le nom de lauteur original de la maniegravere indiqueacutee par lauteur de loeuvre ou le titulaire des droits qui vous confegravere cette autorisation (mais pas dune maniegravere qui suggeacutererait quils vous soutiennent ou approuvent votre utilisation de loeuvre)

bullPas drsquoutilisation commercialebull Vous navez pas le droit dutiliser cette creacuteation agrave des fins commerciales

bullPas de modificationbull Vous navez pas le droit de modifier de transformer ou dadapter cette creacuteation

bullreacutesumeacute explicatif disponible sur httpcreativecommonsorglicensesby-nc-nd20fr

bullvous ecirctes autoriseacute agrave reacuteutiliser le logo Ruby France utiliseacute dans cette preacutesentation pour faire reacutefeacuterence agrave lrsquoassociation

page 3 sur 33

Un petit mot agrave mon propos

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

Guillaume ldquoZifrordquo Desratltguillaumedesratrubyfranceorggt ampamp httpzlabfr

Rubyiste depuis 2002Railer depuis 2005

Preacutesident de lrsquoassociation

participe aux listes Ruby et Railspasse sur rubyfr ircfreenodenet

consultant informatique au Luxembourgen mission chez un grand nom de la finance

Qui est ce type qui nous parle

page 3 sur 33

Un petit mot agrave mon propos

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

Guillaume ldquoZifrordquo Desratltguillaumedesratrubyfranceorggt ampamp httpzlabfr

Rubyiste depuis 2002Railer depuis 2005

Preacutesident de lrsquoassociation

participe aux listes Ruby et Railspasse sur rubyfr ircfreenodenet

consultant informatique au Luxembourgen mission chez un grand nom de la finance

page 4 sur 33

Le langage Ruby

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

Un langage interpreacuteteacute orienteacute objet dynamique et agreacuteable qui se veut ldquonaturelrdquo pas ldquosimplerdquo

Creacuteeacute par Yukihiro Matsumoto alias ldquomatzrdquo

Inspireacute de Perl Smalltalk Eiffel Ada LISP

Deacuteveloppeacute agrave partir de 1993 diffuseacute depuis 1995

Aujourdrsquohui en versions 186 187 et 190

Disponible sous licences libres (Ruby MIT GPL)

JRuby (httpjrubycodehausorg)eacutecrit en JAVA soutenu par Sun

rubinius (httprubinius)un deacuteveloppement orienteacute speacutecifications

IronRuby (httpwwwironrubynet)eacutecrit pour NET deacuteveloppement soutenu par Microsoft

Maglev (httprubygemstonecom)baseacute sur Smalltalk

Cardinal (httpcardinal2rubyforgeorg)une VM permettant de tourner sous Parrot

Plusieurs impleacutementations du langage

page 5 sur 33RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

JRuby (httpjrubycodehausorg)eacutecrit en JAVA soutenu par Sun

rubinius (httprubinius)un deacuteveloppement orienteacute speacutecifications

IronRuby (httpwwwironrubynet)eacutecrit pour NET deacuteveloppement soutenu par Microsoft

Maglev (httprubygemstonecom)baseacute sur Smalltalk

Cardinal (httpcardinal2rubyforgeorg)une VM permettant de tourner sous Parrot

Plusieurs impleacutementations du langage

page 5 sur 33RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

JRubyrubiniusIronRubyMaglevCardinal

JRuby (httpjrubycodehausorg)eacutecrit en JAVA soutenu par Sun

rubinius (httprubinius)un deacuteveloppement orienteacute speacutecifications

IronRuby (httpwwwironrubynet)eacutecrit pour NET deacuteveloppement soutenu par Microsoft

Maglev (httprubygemstonecom)baseacute sur Smalltalk

Cardinal (httpcardinal2rubyforgeorg)une VM permettant de tourner sous Parrot

Plusieurs impleacutementations du langage

page 5 sur 33RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

page 6 sur 33

Syntaxe de base

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

ruby variable locale

def ruby_method identificateur de meacutethodeend

$ruby variable globale$RUBY

RubyVersion constanteRUBY_VERSION

ruby_version symbole

page 6 sur 33

Syntaxe de base

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

ruby variable locale

def ruby_method identificateur de meacutethodeend

$ruby variable globale$RUBY

RubyVersion constanteRUBY_VERSION

ruby_version symbole

identificateursconditionsexceptions

quelques idiomes

page 6 sur 33

Syntaxe de base

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

ruby variable locale

def ruby_method identificateur de meacutethodeend

$ruby variable globale$RUBY

RubyVersion constanteRUBY_VERSION

ruby_version symbole

page 7 sur 33

Syntaxe de base conditions

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

if version == 186 puts vous utilisez la derniegravereelse puts passez agrave la versionend

puts Mauvais format unless objis_a Hash

case version when 186 puts when ^18d puts il y a plus reacutecent when ^19d puts oh oh -) else puts il est temps de se mettre agrave jourend

page 8 sur 33

Syntaxe de base les exceptions

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

begin f = Fileopen(fichiertxt) texte = freadline puts Lrsquoen-tecircte du fichier est texterescue ErrnoENOENT =gt e puts Il ny a pas de tel fichier rescue NoMethodError =gt e puts Lrsquoouverture srsquoest probablement mal passeacutee rescue SyntaxError =gt e puts Une erreur du deacuteveloppeur (emessage) raise eensure fclose if frespond_to closeend

page 9 sur 33

Syntaxe de base quelques idiomes

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

method( param1 =gt valeur1 param2 =gt valeur2 )method( param1 =gt valeur1 param2 =gt valeur2 )method param1 =gt valeur1 param2 =gt valeur2

def method(params) options = param1 =gt valeur par deacutefaut optionsmerge params end

objrespond_to methode

objdelete_at(1)gsub(e r)upcase

page 10 sur 33

Orienteacute objet

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

-123abs renvoie 123-123class renvoie Fixnum

chaine = rmllchaineupcase renvoie RMLLputs chaine affiche rmllchaineupcase renvoie RMLLputs chaine affiche RMLL

nilclass renvoie NilClasstrueclass renvoie TrueClassfalseclass renvoie FalseClassnilnil renvoie true

page 10 sur 33

Orienteacute objet

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

-123abs renvoie 123-123class renvoie Fixnum

chaine = rmllchaineupcase renvoie RMLLputs chaine affiche rmllchaineupcase renvoie RMLLputs chaine affiche RMLL

nilclass renvoie NilClasstrueclass renvoie TrueClassfalseclass renvoie FalseClassnilnil renvoie true

appel de meacutethodesdeacuteclaration de classeutilisationpolymorphisme

page 10 sur 33

Orienteacute objet

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

-123abs renvoie 123-123class renvoie Fixnum

chaine = rmllchaineupcase renvoie RMLLputs chaine affiche rmllchaineupcase renvoie RMLLputs chaine affiche RMLL

nilclass renvoie NilClasstrueclass renvoie TrueClassfalseclass renvoie FalseClassnilnil renvoie true

page 11 sur 33

Orienteacute objet deacuteclaration de classe

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

class Presentation lt Intervention deacuteclaration de la classe nombre = 0 variable de classe def initialize(intitule duree=45) post-constructeur intitule = intitule duree = duree nombre += 1 super appel de la meacutethode end dans la classe megravere def to_s titre + + dureeto_s + minutes end def selfnombre meacutethode de classe nombre end end

page 12 sur 33

Orienteacute objet utilisation

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

Presentationnombre renvoie 0p = Presentationnew(Preacutesentation de Ruby)

Presentationnombre renvoie 1

puts p affiche Preacutesentation de Ruby 45 minutes

pfinNoMethodError undefined method `fin for ltPresentation0x49214gt

def pfin puts Suffisamment de Ruby aujourdhui end

pfin affiche Suffisamment de Ruby aujourdrsquohui

page 13 sur 33

Orienteacute objet polymorphisme

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

module RMLL creacutee un nouveau module

EDITION = 2008

renvoie IUT IUFM ou CCI def lieu end

end

puts RMLLEDITION affiche 2008

class Presentation on rouvre la deacutefinition include RMLL pour inclure ce qui est deacutefiniend dans le module RMLL

pextends(RMLL) on eacutetend lobjet p

page 14 sur 33

Un peu plus loin

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

puts salut do puts salutend

lambda puts salut proc do puts salutend

p = Procnew puts salut pcall affiche salut

p = Procnew |i| puts i + 1 pcall 1 affiche 2pcall 41 affiche 42

page 14 sur 33

Un peu plus loin

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

puts salut do puts salutend

lambda puts salut proc do puts salutend

p = Procnew puts salut pcall affiche salut

p = Procnew |i| puts i + 1 pcall 1 affiche 2pcall 41 affiche 42

blocsiteacuterateursyield

page 14 sur 33

Un peu plus loin

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

puts salut do puts salutend

lambda puts salut proc do puts salutend

p = Procnew puts salut pcall affiche salut

p = Procnew |i| puts i + 1 pcall 1 affiche 2pcall 41 affiche 42

page 15 sur 33

Un peu plus loin les iteacuterateurs

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

lyonnais = [Freacutedeacuteric Alexis Jeacuterocircme] lyonnaiseach do |l| puts Dommage l nest pas venu cette anneacuteeend

rmll = 2008 =gt Mont-de-Marsan 2007 =gt Amiens 2006 =gt Vandoeuvre-les-Nancy 2002 =gt Talence

rmlleach_pair do |annee lieu| puts En annee je suis alleacute aux RMLL agrave lieuend

rmllkeyssorteach do |annee| puts En annee je suis alleacute aux RMLL agrave rmll[annee]end

page 16 sur 33

Un peu plus loin les iteacuterateurs

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

lecture dun fichier faccedilon blocs

avertissements = erreurs = 0 initialisation

Fileopen(logtxt) do |fichier| ouverture fichierreadlineseach do |ligne| lecture des lignes case ligne when ^WARN avertissements += 1 when ^ERR erreurs += 1 end endend fermeture automatique

puts Il y a avertissements avertissementsputs et erreurs erreurs dans ce fichier

page 17 sur 33

Un peu plus loin yield

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

class Personne

def initialize(nom) nom = nom end

def salue la meacutethode salue se contente drsquoexeacutecuteryield nom le bloc qui lui est passeacute

end lrsquoargument nom

end

celine = Personnenew(Ceacuteline)celinesalue |n| puts salut n affiche salut Ceacuteline

page 17 sur 33

Un peu plus loin yield

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

class Personne

def initialize(nom) nom = nom end

def salue la meacutethode salue se contente drsquoexeacutecuteryield nom le bloc qui lui est passeacute

end lrsquoargument nom

end

celine = Personnenew(Ceacuteline)celinesalue |n| puts salut n affiche salut Ceacuteline

mais comment ccedila marche

page 17 sur 33

Un peu plus loin yield

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

class Personne

def initialize(nom) nom = nom end

def salue la meacutethode salue se contente drsquoexeacutecuteryield nom le bloc qui lui est passeacute

end lrsquoargument nom

end

celine = Personnenew(Ceacuteline)celinesalue |n| puts salut n affiche salut Ceacuteline

page 18 sur 33

Dynamisme eacutevaluation de code

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

eval puts salut

def operation(operateur operande1 operande2) eval operande1 operateur operande2end

operation + 1 2 renvoie 3operation 9 0 renvoie

Presentationclass_eval do end

page 18 sur 33

Dynamisme eacutevaluation de code

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

eval puts salut

def operation(operateur operande1 operande2) eval operande1 operateur operande2end

operation + 1 2 renvoie 3operation 9 0 renvoie

Presentationclass_eval do end

eacutevaluation de codeinterception drsquoappels de meacutethodes inexistantesexeacutecution des deacutefinitions

reacuteflexiviteacute introspection

page 18 sur 33

Dynamisme eacutevaluation de code

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

eval puts salut

def operation(operateur operande1 operande2) eval operande1 operateur operande2end

operation + 1 2 renvoie 3operation 9 0 renvoie

Presentationclass_eval do end

page 19 sur 33

Dynamisme meacutethodes inexistantes

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

Presentationnombre renvoie 0p = Presentationnew(Preacutesentation de Ruby)

Presentationnombre renvoie 1

puts p affiche Preacutesentation de Ruby 45 minutes

pfinNoMethodError undefined method `fin for ltPresentation0x49214gt

def pfin puts Suffisamment de Ruby aujourdhui end

pfin affiche Suffisamment de Ruby aujourdrsquohui

page 20 sur 33

Dynamisme meacutethodes inexistantes

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

class Presentation def method_missing(nom args) method_missing puts Il ny a pas de meacutethode nom est appeleacutee end avant la leveacuteeend de lexception

p = Presentationnew(Preacutesentation de Ruby)

pfin affiche Il ny a pas de meacutethode fin pas drsquoexception

method_missing est lrsquoun des nombreux ldquohooksrdquo disponibles dans Ruby

page 21 sur 33

Dynamisme deacutefinitions exeacutecuteacutees

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

class Configuration case RUBY_PLATFORM deacutefinition dune meacutethode when linux en fonction du systegraveme def initialize(params) hocircte end when win32 def initialize(params) end when darwin include YAIBExtensionsSpecificOSX else unless include YAIBStandard raise Votre OS nest pas supporteacute end end end

page 22 sur 33

Dynamisme reacuteflexiviteacute introspection

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

On peut interroger tous les composants du langage agrave lrsquoexeacutecution

obj = Arraynewobjclass

objclassinstance_methodsobjmethods eacutequivalent agrave la ligne du dessusobjprivate_methods

objclassinstance_methodsgrep(delete)objclassinstance_methodsgrep(delete)sort

objmethodsgrep(^on_connect_do)each do |method| objsend methodend

page 23 sur 33

Dynamisme reacuteflexiviteacute introspection

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

On peut rouvrir une deacutefinition y compris celle du langage

class Array la classe Array existe on la rouvre def longueur ajout drsquoune meacutethode en franccedilais length proxy vers la meacutethode en anglais end end

arr = Arraynewarr ltlt 1arr ltlt element

arrlongueur renvoie 2

page 24 sur 33

Dynamisme reacuteflexiviteacute introspection

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

class Counterparty def has_all_mandatory_fields_filled quelques veacuterifications end def can_be_in_completed_or_approved_status return false unless selfhas_all_mandatory_fields_filled return false unless selflgdhas_all_mandatory_fields_filled unless selfratingshave_all_mandatory_fields_filled

return false end return true end

end

page 25 sur 33

Dynamisme reacuteflexiviteacute introspection

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

modification de la classe Arrayclass Array

def have_all_mandatory_fields_filled selfeach do |item| unless itemrespond_to has_all_mandatory_fields_filled return false end unless itemhas_all_mandatory_fields_filled return false end end return true end

end

page 26 sur 33

Se mettre agrave Ruby

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

(g)vi(m)(X)emacsSciTE

FreeRIDE (eacutecrit en Ruby)

e-TextEditorTextMate (seulement OSX)

Eclipse avec les Ruby Development ToolsNetBeans 61 (support Ruby et JRuby)

page 26 sur 33

Se mettre agrave Ruby

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

(g)vi(m)(X)emacsSciTE

FreeRIDE (eacutecrit en Ruby)

e-TextEditorTextMate (seulement OSX)

Eclipse avec les Ruby Development ToolsNetBeans 61 (support Ruby et JRuby)

Editeurs et environnements compatiblesLrsquooutil indispensable irbRessources en ligneLivres

page 26 sur 33

Se mettre agrave Ruby

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

(g)vi(m)(X)emacsSciTE

FreeRIDE (eacutecrit en Ruby)

e-TextEditorTextMate (seulement OSX)

Eclipse avec les Ruby Development ToolsNetBeans 61 (support Ruby et JRuby)

page 27 sur 33

Se mettre agrave Ruby irb

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

page 28 sur 33

Se mettre agrave Ruby ressources en ligne

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

Le site officiel (httpwwwruby-langorg)Sa traduction (httpwwwruby-langorgfr)

Le portail Ruby France (httpwwwrubyfranceorg)

Les listes de diffusion sur Google Groups(ruby-talk ruby-core rubyfr-public)

Les groupes de discussion sur Usenet(complangruby frcomplangruby)

Les salons IRC sur FreeNode (ircfreenodenet)(ruby-lang rubyfr)

page 29 sur 33

Se mettre agrave Ruby livres

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

Ruby in a NutshellProgramming RubyThe Ruby WayDesign Patterns for Ruby

Ruby par lrsquoexemple

Passez sur le stand Ruby France

page 30 sur 33

Fin de la preacutesentation

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

page 30 sur 33

Fin de la preacutesentation

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

Des questions

page 30 sur 33

Fin de la preacutesentation

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

page 32 sur 33

Fin de la preacutesentation

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

Merci

page 32 sur 33

Ougrave reacutecupeacuterer ce document

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

Le support de cette preacutesentation sera disponible sur httpzlabfr

page 33 sur 33

Licence de ce document

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

bullVous ecirctes libres bullde reproduire distribuer et communiquer cette creacuteation au public

bullSelon les conditions suivantes bullPaterniteacutebull Vous devez citer le nom de lauteur original de la maniegravere indiqueacutee par lauteur de loeuvre ou le titulaire des droits qui vous confegravere cette autorisation (mais pas dune maniegravere qui suggeacutererait quils vous soutiennent ou approuvent votre utilisation de loeuvre)

bullPas drsquoutilisation commercialebull Vous navez pas le droit dutiliser cette creacuteation agrave des fins commerciales

bullPas de modificationbull Vous navez pas le droit de modifier de transformer ou dadapter cette creacuteation

bullreacutesumeacute explicatif disponible sur httpcreativecommonsorglicensesby-nc-nd20fr

bullvous ecirctes autoriseacute agrave reacuteutiliser le logo Ruby France utiliseacute dans cette preacutesentation pour faire reacutefeacuterence agrave lrsquoassociation

page 3 sur 33

Un petit mot agrave mon propos

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

Guillaume ldquoZifrordquo Desratltguillaumedesratrubyfranceorggt ampamp httpzlabfr

Rubyiste depuis 2002Railer depuis 2005

Preacutesident de lrsquoassociation

participe aux listes Ruby et Railspasse sur rubyfr ircfreenodenet

consultant informatique au Luxembourgen mission chez un grand nom de la finance

page 4 sur 33

Le langage Ruby

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

Un langage interpreacuteteacute orienteacute objet dynamique et agreacuteable qui se veut ldquonaturelrdquo pas ldquosimplerdquo

Creacuteeacute par Yukihiro Matsumoto alias ldquomatzrdquo

Inspireacute de Perl Smalltalk Eiffel Ada LISP

Deacuteveloppeacute agrave partir de 1993 diffuseacute depuis 1995

Aujourdrsquohui en versions 186 187 et 190

Disponible sous licences libres (Ruby MIT GPL)

JRuby (httpjrubycodehausorg)eacutecrit en JAVA soutenu par Sun

rubinius (httprubinius)un deacuteveloppement orienteacute speacutecifications

IronRuby (httpwwwironrubynet)eacutecrit pour NET deacuteveloppement soutenu par Microsoft

Maglev (httprubygemstonecom)baseacute sur Smalltalk

Cardinal (httpcardinal2rubyforgeorg)une VM permettant de tourner sous Parrot

Plusieurs impleacutementations du langage

page 5 sur 33RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

JRuby (httpjrubycodehausorg)eacutecrit en JAVA soutenu par Sun

rubinius (httprubinius)un deacuteveloppement orienteacute speacutecifications

IronRuby (httpwwwironrubynet)eacutecrit pour NET deacuteveloppement soutenu par Microsoft

Maglev (httprubygemstonecom)baseacute sur Smalltalk

Cardinal (httpcardinal2rubyforgeorg)une VM permettant de tourner sous Parrot

Plusieurs impleacutementations du langage

page 5 sur 33RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

JRubyrubiniusIronRubyMaglevCardinal

JRuby (httpjrubycodehausorg)eacutecrit en JAVA soutenu par Sun

rubinius (httprubinius)un deacuteveloppement orienteacute speacutecifications

IronRuby (httpwwwironrubynet)eacutecrit pour NET deacuteveloppement soutenu par Microsoft

Maglev (httprubygemstonecom)baseacute sur Smalltalk

Cardinal (httpcardinal2rubyforgeorg)une VM permettant de tourner sous Parrot

Plusieurs impleacutementations du langage

page 5 sur 33RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

page 6 sur 33

Syntaxe de base

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

ruby variable locale

def ruby_method identificateur de meacutethodeend

$ruby variable globale$RUBY

RubyVersion constanteRUBY_VERSION

ruby_version symbole

page 6 sur 33

Syntaxe de base

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

ruby variable locale

def ruby_method identificateur de meacutethodeend

$ruby variable globale$RUBY

RubyVersion constanteRUBY_VERSION

ruby_version symbole

identificateursconditionsexceptions

quelques idiomes

page 6 sur 33

Syntaxe de base

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

ruby variable locale

def ruby_method identificateur de meacutethodeend

$ruby variable globale$RUBY

RubyVersion constanteRUBY_VERSION

ruby_version symbole

page 7 sur 33

Syntaxe de base conditions

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

if version == 186 puts vous utilisez la derniegravereelse puts passez agrave la versionend

puts Mauvais format unless objis_a Hash

case version when 186 puts when ^18d puts il y a plus reacutecent when ^19d puts oh oh -) else puts il est temps de se mettre agrave jourend

page 8 sur 33

Syntaxe de base les exceptions

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

begin f = Fileopen(fichiertxt) texte = freadline puts Lrsquoen-tecircte du fichier est texterescue ErrnoENOENT =gt e puts Il ny a pas de tel fichier rescue NoMethodError =gt e puts Lrsquoouverture srsquoest probablement mal passeacutee rescue SyntaxError =gt e puts Une erreur du deacuteveloppeur (emessage) raise eensure fclose if frespond_to closeend

page 9 sur 33

Syntaxe de base quelques idiomes

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

method( param1 =gt valeur1 param2 =gt valeur2 )method( param1 =gt valeur1 param2 =gt valeur2 )method param1 =gt valeur1 param2 =gt valeur2

def method(params) options = param1 =gt valeur par deacutefaut optionsmerge params end

objrespond_to methode

objdelete_at(1)gsub(e r)upcase

page 10 sur 33

Orienteacute objet

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

-123abs renvoie 123-123class renvoie Fixnum

chaine = rmllchaineupcase renvoie RMLLputs chaine affiche rmllchaineupcase renvoie RMLLputs chaine affiche RMLL

nilclass renvoie NilClasstrueclass renvoie TrueClassfalseclass renvoie FalseClassnilnil renvoie true

page 10 sur 33

Orienteacute objet

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

-123abs renvoie 123-123class renvoie Fixnum

chaine = rmllchaineupcase renvoie RMLLputs chaine affiche rmllchaineupcase renvoie RMLLputs chaine affiche RMLL

nilclass renvoie NilClasstrueclass renvoie TrueClassfalseclass renvoie FalseClassnilnil renvoie true

appel de meacutethodesdeacuteclaration de classeutilisationpolymorphisme

page 10 sur 33

Orienteacute objet

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

-123abs renvoie 123-123class renvoie Fixnum

chaine = rmllchaineupcase renvoie RMLLputs chaine affiche rmllchaineupcase renvoie RMLLputs chaine affiche RMLL

nilclass renvoie NilClasstrueclass renvoie TrueClassfalseclass renvoie FalseClassnilnil renvoie true

page 11 sur 33

Orienteacute objet deacuteclaration de classe

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

class Presentation lt Intervention deacuteclaration de la classe nombre = 0 variable de classe def initialize(intitule duree=45) post-constructeur intitule = intitule duree = duree nombre += 1 super appel de la meacutethode end dans la classe megravere def to_s titre + + dureeto_s + minutes end def selfnombre meacutethode de classe nombre end end

page 12 sur 33

Orienteacute objet utilisation

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

Presentationnombre renvoie 0p = Presentationnew(Preacutesentation de Ruby)

Presentationnombre renvoie 1

puts p affiche Preacutesentation de Ruby 45 minutes

pfinNoMethodError undefined method `fin for ltPresentation0x49214gt

def pfin puts Suffisamment de Ruby aujourdhui end

pfin affiche Suffisamment de Ruby aujourdrsquohui

page 13 sur 33

Orienteacute objet polymorphisme

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

module RMLL creacutee un nouveau module

EDITION = 2008

renvoie IUT IUFM ou CCI def lieu end

end

puts RMLLEDITION affiche 2008

class Presentation on rouvre la deacutefinition include RMLL pour inclure ce qui est deacutefiniend dans le module RMLL

pextends(RMLL) on eacutetend lobjet p

page 14 sur 33

Un peu plus loin

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

puts salut do puts salutend

lambda puts salut proc do puts salutend

p = Procnew puts salut pcall affiche salut

p = Procnew |i| puts i + 1 pcall 1 affiche 2pcall 41 affiche 42

page 14 sur 33

Un peu plus loin

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

puts salut do puts salutend

lambda puts salut proc do puts salutend

p = Procnew puts salut pcall affiche salut

p = Procnew |i| puts i + 1 pcall 1 affiche 2pcall 41 affiche 42

blocsiteacuterateursyield

page 14 sur 33

Un peu plus loin

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

puts salut do puts salutend

lambda puts salut proc do puts salutend

p = Procnew puts salut pcall affiche salut

p = Procnew |i| puts i + 1 pcall 1 affiche 2pcall 41 affiche 42

page 15 sur 33

Un peu plus loin les iteacuterateurs

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

lyonnais = [Freacutedeacuteric Alexis Jeacuterocircme] lyonnaiseach do |l| puts Dommage l nest pas venu cette anneacuteeend

rmll = 2008 =gt Mont-de-Marsan 2007 =gt Amiens 2006 =gt Vandoeuvre-les-Nancy 2002 =gt Talence

rmlleach_pair do |annee lieu| puts En annee je suis alleacute aux RMLL agrave lieuend

rmllkeyssorteach do |annee| puts En annee je suis alleacute aux RMLL agrave rmll[annee]end

page 16 sur 33

Un peu plus loin les iteacuterateurs

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

lecture dun fichier faccedilon blocs

avertissements = erreurs = 0 initialisation

Fileopen(logtxt) do |fichier| ouverture fichierreadlineseach do |ligne| lecture des lignes case ligne when ^WARN avertissements += 1 when ^ERR erreurs += 1 end endend fermeture automatique

puts Il y a avertissements avertissementsputs et erreurs erreurs dans ce fichier

page 17 sur 33

Un peu plus loin yield

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

class Personne

def initialize(nom) nom = nom end

def salue la meacutethode salue se contente drsquoexeacutecuteryield nom le bloc qui lui est passeacute

end lrsquoargument nom

end

celine = Personnenew(Ceacuteline)celinesalue |n| puts salut n affiche salut Ceacuteline

page 17 sur 33

Un peu plus loin yield

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

class Personne

def initialize(nom) nom = nom end

def salue la meacutethode salue se contente drsquoexeacutecuteryield nom le bloc qui lui est passeacute

end lrsquoargument nom

end

celine = Personnenew(Ceacuteline)celinesalue |n| puts salut n affiche salut Ceacuteline

mais comment ccedila marche

page 17 sur 33

Un peu plus loin yield

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

class Personne

def initialize(nom) nom = nom end

def salue la meacutethode salue se contente drsquoexeacutecuteryield nom le bloc qui lui est passeacute

end lrsquoargument nom

end

celine = Personnenew(Ceacuteline)celinesalue |n| puts salut n affiche salut Ceacuteline

page 18 sur 33

Dynamisme eacutevaluation de code

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

eval puts salut

def operation(operateur operande1 operande2) eval operande1 operateur operande2end

operation + 1 2 renvoie 3operation 9 0 renvoie

Presentationclass_eval do end

page 18 sur 33

Dynamisme eacutevaluation de code

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

eval puts salut

def operation(operateur operande1 operande2) eval operande1 operateur operande2end

operation + 1 2 renvoie 3operation 9 0 renvoie

Presentationclass_eval do end

eacutevaluation de codeinterception drsquoappels de meacutethodes inexistantesexeacutecution des deacutefinitions

reacuteflexiviteacute introspection

page 18 sur 33

Dynamisme eacutevaluation de code

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

eval puts salut

def operation(operateur operande1 operande2) eval operande1 operateur operande2end

operation + 1 2 renvoie 3operation 9 0 renvoie

Presentationclass_eval do end

page 19 sur 33

Dynamisme meacutethodes inexistantes

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

Presentationnombre renvoie 0p = Presentationnew(Preacutesentation de Ruby)

Presentationnombre renvoie 1

puts p affiche Preacutesentation de Ruby 45 minutes

pfinNoMethodError undefined method `fin for ltPresentation0x49214gt

def pfin puts Suffisamment de Ruby aujourdhui end

pfin affiche Suffisamment de Ruby aujourdrsquohui

page 20 sur 33

Dynamisme meacutethodes inexistantes

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

class Presentation def method_missing(nom args) method_missing puts Il ny a pas de meacutethode nom est appeleacutee end avant la leveacuteeend de lexception

p = Presentationnew(Preacutesentation de Ruby)

pfin affiche Il ny a pas de meacutethode fin pas drsquoexception

method_missing est lrsquoun des nombreux ldquohooksrdquo disponibles dans Ruby

page 21 sur 33

Dynamisme deacutefinitions exeacutecuteacutees

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

class Configuration case RUBY_PLATFORM deacutefinition dune meacutethode when linux en fonction du systegraveme def initialize(params) hocircte end when win32 def initialize(params) end when darwin include YAIBExtensionsSpecificOSX else unless include YAIBStandard raise Votre OS nest pas supporteacute end end end

page 22 sur 33

Dynamisme reacuteflexiviteacute introspection

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

On peut interroger tous les composants du langage agrave lrsquoexeacutecution

obj = Arraynewobjclass

objclassinstance_methodsobjmethods eacutequivalent agrave la ligne du dessusobjprivate_methods

objclassinstance_methodsgrep(delete)objclassinstance_methodsgrep(delete)sort

objmethodsgrep(^on_connect_do)each do |method| objsend methodend

page 23 sur 33

Dynamisme reacuteflexiviteacute introspection

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

On peut rouvrir une deacutefinition y compris celle du langage

class Array la classe Array existe on la rouvre def longueur ajout drsquoune meacutethode en franccedilais length proxy vers la meacutethode en anglais end end

arr = Arraynewarr ltlt 1arr ltlt element

arrlongueur renvoie 2

page 24 sur 33

Dynamisme reacuteflexiviteacute introspection

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

class Counterparty def has_all_mandatory_fields_filled quelques veacuterifications end def can_be_in_completed_or_approved_status return false unless selfhas_all_mandatory_fields_filled return false unless selflgdhas_all_mandatory_fields_filled unless selfratingshave_all_mandatory_fields_filled

return false end return true end

end

page 25 sur 33

Dynamisme reacuteflexiviteacute introspection

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

modification de la classe Arrayclass Array

def have_all_mandatory_fields_filled selfeach do |item| unless itemrespond_to has_all_mandatory_fields_filled return false end unless itemhas_all_mandatory_fields_filled return false end end return true end

end

page 26 sur 33

Se mettre agrave Ruby

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

(g)vi(m)(X)emacsSciTE

FreeRIDE (eacutecrit en Ruby)

e-TextEditorTextMate (seulement OSX)

Eclipse avec les Ruby Development ToolsNetBeans 61 (support Ruby et JRuby)

page 26 sur 33

Se mettre agrave Ruby

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

(g)vi(m)(X)emacsSciTE

FreeRIDE (eacutecrit en Ruby)

e-TextEditorTextMate (seulement OSX)

Eclipse avec les Ruby Development ToolsNetBeans 61 (support Ruby et JRuby)

Editeurs et environnements compatiblesLrsquooutil indispensable irbRessources en ligneLivres

page 26 sur 33

Se mettre agrave Ruby

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

(g)vi(m)(X)emacsSciTE

FreeRIDE (eacutecrit en Ruby)

e-TextEditorTextMate (seulement OSX)

Eclipse avec les Ruby Development ToolsNetBeans 61 (support Ruby et JRuby)

page 27 sur 33

Se mettre agrave Ruby irb

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

page 28 sur 33

Se mettre agrave Ruby ressources en ligne

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

Le site officiel (httpwwwruby-langorg)Sa traduction (httpwwwruby-langorgfr)

Le portail Ruby France (httpwwwrubyfranceorg)

Les listes de diffusion sur Google Groups(ruby-talk ruby-core rubyfr-public)

Les groupes de discussion sur Usenet(complangruby frcomplangruby)

Les salons IRC sur FreeNode (ircfreenodenet)(ruby-lang rubyfr)

page 29 sur 33

Se mettre agrave Ruby livres

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

Ruby in a NutshellProgramming RubyThe Ruby WayDesign Patterns for Ruby

Ruby par lrsquoexemple

Passez sur le stand Ruby France

page 30 sur 33

Fin de la preacutesentation

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

page 30 sur 33

Fin de la preacutesentation

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

Des questions

page 30 sur 33

Fin de la preacutesentation

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

page 32 sur 33

Fin de la preacutesentation

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

Merci

page 32 sur 33

Ougrave reacutecupeacuterer ce document

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

Le support de cette preacutesentation sera disponible sur httpzlabfr

page 33 sur 33

Licence de ce document

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

bullVous ecirctes libres bullde reproduire distribuer et communiquer cette creacuteation au public

bullSelon les conditions suivantes bullPaterniteacutebull Vous devez citer le nom de lauteur original de la maniegravere indiqueacutee par lauteur de loeuvre ou le titulaire des droits qui vous confegravere cette autorisation (mais pas dune maniegravere qui suggeacutererait quils vous soutiennent ou approuvent votre utilisation de loeuvre)

bullPas drsquoutilisation commercialebull Vous navez pas le droit dutiliser cette creacuteation agrave des fins commerciales

bullPas de modificationbull Vous navez pas le droit de modifier de transformer ou dadapter cette creacuteation

bullreacutesumeacute explicatif disponible sur httpcreativecommonsorglicensesby-nc-nd20fr

bullvous ecirctes autoriseacute agrave reacuteutiliser le logo Ruby France utiliseacute dans cette preacutesentation pour faire reacutefeacuterence agrave lrsquoassociation

page 4 sur 33

Le langage Ruby

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

Un langage interpreacuteteacute orienteacute objet dynamique et agreacuteable qui se veut ldquonaturelrdquo pas ldquosimplerdquo

Creacuteeacute par Yukihiro Matsumoto alias ldquomatzrdquo

Inspireacute de Perl Smalltalk Eiffel Ada LISP

Deacuteveloppeacute agrave partir de 1993 diffuseacute depuis 1995

Aujourdrsquohui en versions 186 187 et 190

Disponible sous licences libres (Ruby MIT GPL)

JRuby (httpjrubycodehausorg)eacutecrit en JAVA soutenu par Sun

rubinius (httprubinius)un deacuteveloppement orienteacute speacutecifications

IronRuby (httpwwwironrubynet)eacutecrit pour NET deacuteveloppement soutenu par Microsoft

Maglev (httprubygemstonecom)baseacute sur Smalltalk

Cardinal (httpcardinal2rubyforgeorg)une VM permettant de tourner sous Parrot

Plusieurs impleacutementations du langage

page 5 sur 33RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

JRuby (httpjrubycodehausorg)eacutecrit en JAVA soutenu par Sun

rubinius (httprubinius)un deacuteveloppement orienteacute speacutecifications

IronRuby (httpwwwironrubynet)eacutecrit pour NET deacuteveloppement soutenu par Microsoft

Maglev (httprubygemstonecom)baseacute sur Smalltalk

Cardinal (httpcardinal2rubyforgeorg)une VM permettant de tourner sous Parrot

Plusieurs impleacutementations du langage

page 5 sur 33RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

JRubyrubiniusIronRubyMaglevCardinal

JRuby (httpjrubycodehausorg)eacutecrit en JAVA soutenu par Sun

rubinius (httprubinius)un deacuteveloppement orienteacute speacutecifications

IronRuby (httpwwwironrubynet)eacutecrit pour NET deacuteveloppement soutenu par Microsoft

Maglev (httprubygemstonecom)baseacute sur Smalltalk

Cardinal (httpcardinal2rubyforgeorg)une VM permettant de tourner sous Parrot

Plusieurs impleacutementations du langage

page 5 sur 33RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

page 6 sur 33

Syntaxe de base

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

ruby variable locale

def ruby_method identificateur de meacutethodeend

$ruby variable globale$RUBY

RubyVersion constanteRUBY_VERSION

ruby_version symbole

page 6 sur 33

Syntaxe de base

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

ruby variable locale

def ruby_method identificateur de meacutethodeend

$ruby variable globale$RUBY

RubyVersion constanteRUBY_VERSION

ruby_version symbole

identificateursconditionsexceptions

quelques idiomes

page 6 sur 33

Syntaxe de base

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

ruby variable locale

def ruby_method identificateur de meacutethodeend

$ruby variable globale$RUBY

RubyVersion constanteRUBY_VERSION

ruby_version symbole

page 7 sur 33

Syntaxe de base conditions

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

if version == 186 puts vous utilisez la derniegravereelse puts passez agrave la versionend

puts Mauvais format unless objis_a Hash

case version when 186 puts when ^18d puts il y a plus reacutecent when ^19d puts oh oh -) else puts il est temps de se mettre agrave jourend

page 8 sur 33

Syntaxe de base les exceptions

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

begin f = Fileopen(fichiertxt) texte = freadline puts Lrsquoen-tecircte du fichier est texterescue ErrnoENOENT =gt e puts Il ny a pas de tel fichier rescue NoMethodError =gt e puts Lrsquoouverture srsquoest probablement mal passeacutee rescue SyntaxError =gt e puts Une erreur du deacuteveloppeur (emessage) raise eensure fclose if frespond_to closeend

page 9 sur 33

Syntaxe de base quelques idiomes

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

method( param1 =gt valeur1 param2 =gt valeur2 )method( param1 =gt valeur1 param2 =gt valeur2 )method param1 =gt valeur1 param2 =gt valeur2

def method(params) options = param1 =gt valeur par deacutefaut optionsmerge params end

objrespond_to methode

objdelete_at(1)gsub(e r)upcase

page 10 sur 33

Orienteacute objet

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

-123abs renvoie 123-123class renvoie Fixnum

chaine = rmllchaineupcase renvoie RMLLputs chaine affiche rmllchaineupcase renvoie RMLLputs chaine affiche RMLL

nilclass renvoie NilClasstrueclass renvoie TrueClassfalseclass renvoie FalseClassnilnil renvoie true

page 10 sur 33

Orienteacute objet

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

-123abs renvoie 123-123class renvoie Fixnum

chaine = rmllchaineupcase renvoie RMLLputs chaine affiche rmllchaineupcase renvoie RMLLputs chaine affiche RMLL

nilclass renvoie NilClasstrueclass renvoie TrueClassfalseclass renvoie FalseClassnilnil renvoie true

appel de meacutethodesdeacuteclaration de classeutilisationpolymorphisme

page 10 sur 33

Orienteacute objet

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

-123abs renvoie 123-123class renvoie Fixnum

chaine = rmllchaineupcase renvoie RMLLputs chaine affiche rmllchaineupcase renvoie RMLLputs chaine affiche RMLL

nilclass renvoie NilClasstrueclass renvoie TrueClassfalseclass renvoie FalseClassnilnil renvoie true

page 11 sur 33

Orienteacute objet deacuteclaration de classe

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

class Presentation lt Intervention deacuteclaration de la classe nombre = 0 variable de classe def initialize(intitule duree=45) post-constructeur intitule = intitule duree = duree nombre += 1 super appel de la meacutethode end dans la classe megravere def to_s titre + + dureeto_s + minutes end def selfnombre meacutethode de classe nombre end end

page 12 sur 33

Orienteacute objet utilisation

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

Presentationnombre renvoie 0p = Presentationnew(Preacutesentation de Ruby)

Presentationnombre renvoie 1

puts p affiche Preacutesentation de Ruby 45 minutes

pfinNoMethodError undefined method `fin for ltPresentation0x49214gt

def pfin puts Suffisamment de Ruby aujourdhui end

pfin affiche Suffisamment de Ruby aujourdrsquohui

page 13 sur 33

Orienteacute objet polymorphisme

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

module RMLL creacutee un nouveau module

EDITION = 2008

renvoie IUT IUFM ou CCI def lieu end

end

puts RMLLEDITION affiche 2008

class Presentation on rouvre la deacutefinition include RMLL pour inclure ce qui est deacutefiniend dans le module RMLL

pextends(RMLL) on eacutetend lobjet p

page 14 sur 33

Un peu plus loin

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

puts salut do puts salutend

lambda puts salut proc do puts salutend

p = Procnew puts salut pcall affiche salut

p = Procnew |i| puts i + 1 pcall 1 affiche 2pcall 41 affiche 42

page 14 sur 33

Un peu plus loin

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

puts salut do puts salutend

lambda puts salut proc do puts salutend

p = Procnew puts salut pcall affiche salut

p = Procnew |i| puts i + 1 pcall 1 affiche 2pcall 41 affiche 42

blocsiteacuterateursyield

page 14 sur 33

Un peu plus loin

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

puts salut do puts salutend

lambda puts salut proc do puts salutend

p = Procnew puts salut pcall affiche salut

p = Procnew |i| puts i + 1 pcall 1 affiche 2pcall 41 affiche 42

page 15 sur 33

Un peu plus loin les iteacuterateurs

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

lyonnais = [Freacutedeacuteric Alexis Jeacuterocircme] lyonnaiseach do |l| puts Dommage l nest pas venu cette anneacuteeend

rmll = 2008 =gt Mont-de-Marsan 2007 =gt Amiens 2006 =gt Vandoeuvre-les-Nancy 2002 =gt Talence

rmlleach_pair do |annee lieu| puts En annee je suis alleacute aux RMLL agrave lieuend

rmllkeyssorteach do |annee| puts En annee je suis alleacute aux RMLL agrave rmll[annee]end

page 16 sur 33

Un peu plus loin les iteacuterateurs

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

lecture dun fichier faccedilon blocs

avertissements = erreurs = 0 initialisation

Fileopen(logtxt) do |fichier| ouverture fichierreadlineseach do |ligne| lecture des lignes case ligne when ^WARN avertissements += 1 when ^ERR erreurs += 1 end endend fermeture automatique

puts Il y a avertissements avertissementsputs et erreurs erreurs dans ce fichier

page 17 sur 33

Un peu plus loin yield

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

class Personne

def initialize(nom) nom = nom end

def salue la meacutethode salue se contente drsquoexeacutecuteryield nom le bloc qui lui est passeacute

end lrsquoargument nom

end

celine = Personnenew(Ceacuteline)celinesalue |n| puts salut n affiche salut Ceacuteline

page 17 sur 33

Un peu plus loin yield

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

class Personne

def initialize(nom) nom = nom end

def salue la meacutethode salue se contente drsquoexeacutecuteryield nom le bloc qui lui est passeacute

end lrsquoargument nom

end

celine = Personnenew(Ceacuteline)celinesalue |n| puts salut n affiche salut Ceacuteline

mais comment ccedila marche

page 17 sur 33

Un peu plus loin yield

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

class Personne

def initialize(nom) nom = nom end

def salue la meacutethode salue se contente drsquoexeacutecuteryield nom le bloc qui lui est passeacute

end lrsquoargument nom

end

celine = Personnenew(Ceacuteline)celinesalue |n| puts salut n affiche salut Ceacuteline

page 18 sur 33

Dynamisme eacutevaluation de code

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

eval puts salut

def operation(operateur operande1 operande2) eval operande1 operateur operande2end

operation + 1 2 renvoie 3operation 9 0 renvoie

Presentationclass_eval do end

page 18 sur 33

Dynamisme eacutevaluation de code

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

eval puts salut

def operation(operateur operande1 operande2) eval operande1 operateur operande2end

operation + 1 2 renvoie 3operation 9 0 renvoie

Presentationclass_eval do end

eacutevaluation de codeinterception drsquoappels de meacutethodes inexistantesexeacutecution des deacutefinitions

reacuteflexiviteacute introspection

page 18 sur 33

Dynamisme eacutevaluation de code

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

eval puts salut

def operation(operateur operande1 operande2) eval operande1 operateur operande2end

operation + 1 2 renvoie 3operation 9 0 renvoie

Presentationclass_eval do end

page 19 sur 33

Dynamisme meacutethodes inexistantes

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

Presentationnombre renvoie 0p = Presentationnew(Preacutesentation de Ruby)

Presentationnombre renvoie 1

puts p affiche Preacutesentation de Ruby 45 minutes

pfinNoMethodError undefined method `fin for ltPresentation0x49214gt

def pfin puts Suffisamment de Ruby aujourdhui end

pfin affiche Suffisamment de Ruby aujourdrsquohui

page 20 sur 33

Dynamisme meacutethodes inexistantes

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

class Presentation def method_missing(nom args) method_missing puts Il ny a pas de meacutethode nom est appeleacutee end avant la leveacuteeend de lexception

p = Presentationnew(Preacutesentation de Ruby)

pfin affiche Il ny a pas de meacutethode fin pas drsquoexception

method_missing est lrsquoun des nombreux ldquohooksrdquo disponibles dans Ruby

page 21 sur 33

Dynamisme deacutefinitions exeacutecuteacutees

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

class Configuration case RUBY_PLATFORM deacutefinition dune meacutethode when linux en fonction du systegraveme def initialize(params) hocircte end when win32 def initialize(params) end when darwin include YAIBExtensionsSpecificOSX else unless include YAIBStandard raise Votre OS nest pas supporteacute end end end

page 22 sur 33

Dynamisme reacuteflexiviteacute introspection

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

On peut interroger tous les composants du langage agrave lrsquoexeacutecution

obj = Arraynewobjclass

objclassinstance_methodsobjmethods eacutequivalent agrave la ligne du dessusobjprivate_methods

objclassinstance_methodsgrep(delete)objclassinstance_methodsgrep(delete)sort

objmethodsgrep(^on_connect_do)each do |method| objsend methodend

page 23 sur 33

Dynamisme reacuteflexiviteacute introspection

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

On peut rouvrir une deacutefinition y compris celle du langage

class Array la classe Array existe on la rouvre def longueur ajout drsquoune meacutethode en franccedilais length proxy vers la meacutethode en anglais end end

arr = Arraynewarr ltlt 1arr ltlt element

arrlongueur renvoie 2

page 24 sur 33

Dynamisme reacuteflexiviteacute introspection

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

class Counterparty def has_all_mandatory_fields_filled quelques veacuterifications end def can_be_in_completed_or_approved_status return false unless selfhas_all_mandatory_fields_filled return false unless selflgdhas_all_mandatory_fields_filled unless selfratingshave_all_mandatory_fields_filled

return false end return true end

end

page 25 sur 33

Dynamisme reacuteflexiviteacute introspection

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

modification de la classe Arrayclass Array

def have_all_mandatory_fields_filled selfeach do |item| unless itemrespond_to has_all_mandatory_fields_filled return false end unless itemhas_all_mandatory_fields_filled return false end end return true end

end

page 26 sur 33

Se mettre agrave Ruby

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

(g)vi(m)(X)emacsSciTE

FreeRIDE (eacutecrit en Ruby)

e-TextEditorTextMate (seulement OSX)

Eclipse avec les Ruby Development ToolsNetBeans 61 (support Ruby et JRuby)

page 26 sur 33

Se mettre agrave Ruby

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

(g)vi(m)(X)emacsSciTE

FreeRIDE (eacutecrit en Ruby)

e-TextEditorTextMate (seulement OSX)

Eclipse avec les Ruby Development ToolsNetBeans 61 (support Ruby et JRuby)

Editeurs et environnements compatiblesLrsquooutil indispensable irbRessources en ligneLivres

page 26 sur 33

Se mettre agrave Ruby

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

(g)vi(m)(X)emacsSciTE

FreeRIDE (eacutecrit en Ruby)

e-TextEditorTextMate (seulement OSX)

Eclipse avec les Ruby Development ToolsNetBeans 61 (support Ruby et JRuby)

page 27 sur 33

Se mettre agrave Ruby irb

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

page 28 sur 33

Se mettre agrave Ruby ressources en ligne

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

Le site officiel (httpwwwruby-langorg)Sa traduction (httpwwwruby-langorgfr)

Le portail Ruby France (httpwwwrubyfranceorg)

Les listes de diffusion sur Google Groups(ruby-talk ruby-core rubyfr-public)

Les groupes de discussion sur Usenet(complangruby frcomplangruby)

Les salons IRC sur FreeNode (ircfreenodenet)(ruby-lang rubyfr)

page 29 sur 33

Se mettre agrave Ruby livres

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

Ruby in a NutshellProgramming RubyThe Ruby WayDesign Patterns for Ruby

Ruby par lrsquoexemple

Passez sur le stand Ruby France

page 30 sur 33

Fin de la preacutesentation

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

page 30 sur 33

Fin de la preacutesentation

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

Des questions

page 30 sur 33

Fin de la preacutesentation

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

page 32 sur 33

Fin de la preacutesentation

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

Merci

page 32 sur 33

Ougrave reacutecupeacuterer ce document

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

Le support de cette preacutesentation sera disponible sur httpzlabfr

page 33 sur 33

Licence de ce document

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

bullVous ecirctes libres bullde reproduire distribuer et communiquer cette creacuteation au public

bullSelon les conditions suivantes bullPaterniteacutebull Vous devez citer le nom de lauteur original de la maniegravere indiqueacutee par lauteur de loeuvre ou le titulaire des droits qui vous confegravere cette autorisation (mais pas dune maniegravere qui suggeacutererait quils vous soutiennent ou approuvent votre utilisation de loeuvre)

bullPas drsquoutilisation commercialebull Vous navez pas le droit dutiliser cette creacuteation agrave des fins commerciales

bullPas de modificationbull Vous navez pas le droit de modifier de transformer ou dadapter cette creacuteation

bullreacutesumeacute explicatif disponible sur httpcreativecommonsorglicensesby-nc-nd20fr

bullvous ecirctes autoriseacute agrave reacuteutiliser le logo Ruby France utiliseacute dans cette preacutesentation pour faire reacutefeacuterence agrave lrsquoassociation

JRuby (httpjrubycodehausorg)eacutecrit en JAVA soutenu par Sun

rubinius (httprubinius)un deacuteveloppement orienteacute speacutecifications

IronRuby (httpwwwironrubynet)eacutecrit pour NET deacuteveloppement soutenu par Microsoft

Maglev (httprubygemstonecom)baseacute sur Smalltalk

Cardinal (httpcardinal2rubyforgeorg)une VM permettant de tourner sous Parrot

Plusieurs impleacutementations du langage

page 5 sur 33RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

JRuby (httpjrubycodehausorg)eacutecrit en JAVA soutenu par Sun

rubinius (httprubinius)un deacuteveloppement orienteacute speacutecifications

IronRuby (httpwwwironrubynet)eacutecrit pour NET deacuteveloppement soutenu par Microsoft

Maglev (httprubygemstonecom)baseacute sur Smalltalk

Cardinal (httpcardinal2rubyforgeorg)une VM permettant de tourner sous Parrot

Plusieurs impleacutementations du langage

page 5 sur 33RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

JRubyrubiniusIronRubyMaglevCardinal

JRuby (httpjrubycodehausorg)eacutecrit en JAVA soutenu par Sun

rubinius (httprubinius)un deacuteveloppement orienteacute speacutecifications

IronRuby (httpwwwironrubynet)eacutecrit pour NET deacuteveloppement soutenu par Microsoft

Maglev (httprubygemstonecom)baseacute sur Smalltalk

Cardinal (httpcardinal2rubyforgeorg)une VM permettant de tourner sous Parrot

Plusieurs impleacutementations du langage

page 5 sur 33RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

page 6 sur 33

Syntaxe de base

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

ruby variable locale

def ruby_method identificateur de meacutethodeend

$ruby variable globale$RUBY

RubyVersion constanteRUBY_VERSION

ruby_version symbole

page 6 sur 33

Syntaxe de base

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

ruby variable locale

def ruby_method identificateur de meacutethodeend

$ruby variable globale$RUBY

RubyVersion constanteRUBY_VERSION

ruby_version symbole

identificateursconditionsexceptions

quelques idiomes

page 6 sur 33

Syntaxe de base

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

ruby variable locale

def ruby_method identificateur de meacutethodeend

$ruby variable globale$RUBY

RubyVersion constanteRUBY_VERSION

ruby_version symbole

page 7 sur 33

Syntaxe de base conditions

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

if version == 186 puts vous utilisez la derniegravereelse puts passez agrave la versionend

puts Mauvais format unless objis_a Hash

case version when 186 puts when ^18d puts il y a plus reacutecent when ^19d puts oh oh -) else puts il est temps de se mettre agrave jourend

page 8 sur 33

Syntaxe de base les exceptions

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

begin f = Fileopen(fichiertxt) texte = freadline puts Lrsquoen-tecircte du fichier est texterescue ErrnoENOENT =gt e puts Il ny a pas de tel fichier rescue NoMethodError =gt e puts Lrsquoouverture srsquoest probablement mal passeacutee rescue SyntaxError =gt e puts Une erreur du deacuteveloppeur (emessage) raise eensure fclose if frespond_to closeend

page 9 sur 33

Syntaxe de base quelques idiomes

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

method( param1 =gt valeur1 param2 =gt valeur2 )method( param1 =gt valeur1 param2 =gt valeur2 )method param1 =gt valeur1 param2 =gt valeur2

def method(params) options = param1 =gt valeur par deacutefaut optionsmerge params end

objrespond_to methode

objdelete_at(1)gsub(e r)upcase

page 10 sur 33

Orienteacute objet

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

-123abs renvoie 123-123class renvoie Fixnum

chaine = rmllchaineupcase renvoie RMLLputs chaine affiche rmllchaineupcase renvoie RMLLputs chaine affiche RMLL

nilclass renvoie NilClasstrueclass renvoie TrueClassfalseclass renvoie FalseClassnilnil renvoie true

page 10 sur 33

Orienteacute objet

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

-123abs renvoie 123-123class renvoie Fixnum

chaine = rmllchaineupcase renvoie RMLLputs chaine affiche rmllchaineupcase renvoie RMLLputs chaine affiche RMLL

nilclass renvoie NilClasstrueclass renvoie TrueClassfalseclass renvoie FalseClassnilnil renvoie true

appel de meacutethodesdeacuteclaration de classeutilisationpolymorphisme

page 10 sur 33

Orienteacute objet

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

-123abs renvoie 123-123class renvoie Fixnum

chaine = rmllchaineupcase renvoie RMLLputs chaine affiche rmllchaineupcase renvoie RMLLputs chaine affiche RMLL

nilclass renvoie NilClasstrueclass renvoie TrueClassfalseclass renvoie FalseClassnilnil renvoie true

page 11 sur 33

Orienteacute objet deacuteclaration de classe

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

class Presentation lt Intervention deacuteclaration de la classe nombre = 0 variable de classe def initialize(intitule duree=45) post-constructeur intitule = intitule duree = duree nombre += 1 super appel de la meacutethode end dans la classe megravere def to_s titre + + dureeto_s + minutes end def selfnombre meacutethode de classe nombre end end

page 12 sur 33

Orienteacute objet utilisation

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

Presentationnombre renvoie 0p = Presentationnew(Preacutesentation de Ruby)

Presentationnombre renvoie 1

puts p affiche Preacutesentation de Ruby 45 minutes

pfinNoMethodError undefined method `fin for ltPresentation0x49214gt

def pfin puts Suffisamment de Ruby aujourdhui end

pfin affiche Suffisamment de Ruby aujourdrsquohui

page 13 sur 33

Orienteacute objet polymorphisme

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

module RMLL creacutee un nouveau module

EDITION = 2008

renvoie IUT IUFM ou CCI def lieu end

end

puts RMLLEDITION affiche 2008

class Presentation on rouvre la deacutefinition include RMLL pour inclure ce qui est deacutefiniend dans le module RMLL

pextends(RMLL) on eacutetend lobjet p

page 14 sur 33

Un peu plus loin

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

puts salut do puts salutend

lambda puts salut proc do puts salutend

p = Procnew puts salut pcall affiche salut

p = Procnew |i| puts i + 1 pcall 1 affiche 2pcall 41 affiche 42

page 14 sur 33

Un peu plus loin

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

puts salut do puts salutend

lambda puts salut proc do puts salutend

p = Procnew puts salut pcall affiche salut

p = Procnew |i| puts i + 1 pcall 1 affiche 2pcall 41 affiche 42

blocsiteacuterateursyield

page 14 sur 33

Un peu plus loin

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

puts salut do puts salutend

lambda puts salut proc do puts salutend

p = Procnew puts salut pcall affiche salut

p = Procnew |i| puts i + 1 pcall 1 affiche 2pcall 41 affiche 42

page 15 sur 33

Un peu plus loin les iteacuterateurs

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

lyonnais = [Freacutedeacuteric Alexis Jeacuterocircme] lyonnaiseach do |l| puts Dommage l nest pas venu cette anneacuteeend

rmll = 2008 =gt Mont-de-Marsan 2007 =gt Amiens 2006 =gt Vandoeuvre-les-Nancy 2002 =gt Talence

rmlleach_pair do |annee lieu| puts En annee je suis alleacute aux RMLL agrave lieuend

rmllkeyssorteach do |annee| puts En annee je suis alleacute aux RMLL agrave rmll[annee]end

page 16 sur 33

Un peu plus loin les iteacuterateurs

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

lecture dun fichier faccedilon blocs

avertissements = erreurs = 0 initialisation

Fileopen(logtxt) do |fichier| ouverture fichierreadlineseach do |ligne| lecture des lignes case ligne when ^WARN avertissements += 1 when ^ERR erreurs += 1 end endend fermeture automatique

puts Il y a avertissements avertissementsputs et erreurs erreurs dans ce fichier

page 17 sur 33

Un peu plus loin yield

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

class Personne

def initialize(nom) nom = nom end

def salue la meacutethode salue se contente drsquoexeacutecuteryield nom le bloc qui lui est passeacute

end lrsquoargument nom

end

celine = Personnenew(Ceacuteline)celinesalue |n| puts salut n affiche salut Ceacuteline

page 17 sur 33

Un peu plus loin yield

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

class Personne

def initialize(nom) nom = nom end

def salue la meacutethode salue se contente drsquoexeacutecuteryield nom le bloc qui lui est passeacute

end lrsquoargument nom

end

celine = Personnenew(Ceacuteline)celinesalue |n| puts salut n affiche salut Ceacuteline

mais comment ccedila marche

page 17 sur 33

Un peu plus loin yield

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

class Personne

def initialize(nom) nom = nom end

def salue la meacutethode salue se contente drsquoexeacutecuteryield nom le bloc qui lui est passeacute

end lrsquoargument nom

end

celine = Personnenew(Ceacuteline)celinesalue |n| puts salut n affiche salut Ceacuteline

page 18 sur 33

Dynamisme eacutevaluation de code

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

eval puts salut

def operation(operateur operande1 operande2) eval operande1 operateur operande2end

operation + 1 2 renvoie 3operation 9 0 renvoie

Presentationclass_eval do end

page 18 sur 33

Dynamisme eacutevaluation de code

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

eval puts salut

def operation(operateur operande1 operande2) eval operande1 operateur operande2end

operation + 1 2 renvoie 3operation 9 0 renvoie

Presentationclass_eval do end

eacutevaluation de codeinterception drsquoappels de meacutethodes inexistantesexeacutecution des deacutefinitions

reacuteflexiviteacute introspection

page 18 sur 33

Dynamisme eacutevaluation de code

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

eval puts salut

def operation(operateur operande1 operande2) eval operande1 operateur operande2end

operation + 1 2 renvoie 3operation 9 0 renvoie

Presentationclass_eval do end

page 19 sur 33

Dynamisme meacutethodes inexistantes

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

Presentationnombre renvoie 0p = Presentationnew(Preacutesentation de Ruby)

Presentationnombre renvoie 1

puts p affiche Preacutesentation de Ruby 45 minutes

pfinNoMethodError undefined method `fin for ltPresentation0x49214gt

def pfin puts Suffisamment de Ruby aujourdhui end

pfin affiche Suffisamment de Ruby aujourdrsquohui

page 20 sur 33

Dynamisme meacutethodes inexistantes

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

class Presentation def method_missing(nom args) method_missing puts Il ny a pas de meacutethode nom est appeleacutee end avant la leveacuteeend de lexception

p = Presentationnew(Preacutesentation de Ruby)

pfin affiche Il ny a pas de meacutethode fin pas drsquoexception

method_missing est lrsquoun des nombreux ldquohooksrdquo disponibles dans Ruby

page 21 sur 33

Dynamisme deacutefinitions exeacutecuteacutees

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

class Configuration case RUBY_PLATFORM deacutefinition dune meacutethode when linux en fonction du systegraveme def initialize(params) hocircte end when win32 def initialize(params) end when darwin include YAIBExtensionsSpecificOSX else unless include YAIBStandard raise Votre OS nest pas supporteacute end end end

page 22 sur 33

Dynamisme reacuteflexiviteacute introspection

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

On peut interroger tous les composants du langage agrave lrsquoexeacutecution

obj = Arraynewobjclass

objclassinstance_methodsobjmethods eacutequivalent agrave la ligne du dessusobjprivate_methods

objclassinstance_methodsgrep(delete)objclassinstance_methodsgrep(delete)sort

objmethodsgrep(^on_connect_do)each do |method| objsend methodend

page 23 sur 33

Dynamisme reacuteflexiviteacute introspection

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

On peut rouvrir une deacutefinition y compris celle du langage

class Array la classe Array existe on la rouvre def longueur ajout drsquoune meacutethode en franccedilais length proxy vers la meacutethode en anglais end end

arr = Arraynewarr ltlt 1arr ltlt element

arrlongueur renvoie 2

page 24 sur 33

Dynamisme reacuteflexiviteacute introspection

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

class Counterparty def has_all_mandatory_fields_filled quelques veacuterifications end def can_be_in_completed_or_approved_status return false unless selfhas_all_mandatory_fields_filled return false unless selflgdhas_all_mandatory_fields_filled unless selfratingshave_all_mandatory_fields_filled

return false end return true end

end

page 25 sur 33

Dynamisme reacuteflexiviteacute introspection

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

modification de la classe Arrayclass Array

def have_all_mandatory_fields_filled selfeach do |item| unless itemrespond_to has_all_mandatory_fields_filled return false end unless itemhas_all_mandatory_fields_filled return false end end return true end

end

page 26 sur 33

Se mettre agrave Ruby

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

(g)vi(m)(X)emacsSciTE

FreeRIDE (eacutecrit en Ruby)

e-TextEditorTextMate (seulement OSX)

Eclipse avec les Ruby Development ToolsNetBeans 61 (support Ruby et JRuby)

page 26 sur 33

Se mettre agrave Ruby

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

(g)vi(m)(X)emacsSciTE

FreeRIDE (eacutecrit en Ruby)

e-TextEditorTextMate (seulement OSX)

Eclipse avec les Ruby Development ToolsNetBeans 61 (support Ruby et JRuby)

Editeurs et environnements compatiblesLrsquooutil indispensable irbRessources en ligneLivres

page 26 sur 33

Se mettre agrave Ruby

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

(g)vi(m)(X)emacsSciTE

FreeRIDE (eacutecrit en Ruby)

e-TextEditorTextMate (seulement OSX)

Eclipse avec les Ruby Development ToolsNetBeans 61 (support Ruby et JRuby)

page 27 sur 33

Se mettre agrave Ruby irb

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

page 28 sur 33

Se mettre agrave Ruby ressources en ligne

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

Le site officiel (httpwwwruby-langorg)Sa traduction (httpwwwruby-langorgfr)

Le portail Ruby France (httpwwwrubyfranceorg)

Les listes de diffusion sur Google Groups(ruby-talk ruby-core rubyfr-public)

Les groupes de discussion sur Usenet(complangruby frcomplangruby)

Les salons IRC sur FreeNode (ircfreenodenet)(ruby-lang rubyfr)

page 29 sur 33

Se mettre agrave Ruby livres

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

Ruby in a NutshellProgramming RubyThe Ruby WayDesign Patterns for Ruby

Ruby par lrsquoexemple

Passez sur le stand Ruby France

page 30 sur 33

Fin de la preacutesentation

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

page 30 sur 33

Fin de la preacutesentation

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

Des questions

page 30 sur 33

Fin de la preacutesentation

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

page 32 sur 33

Fin de la preacutesentation

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

Merci

page 32 sur 33

Ougrave reacutecupeacuterer ce document

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

Le support de cette preacutesentation sera disponible sur httpzlabfr

page 33 sur 33

Licence de ce document

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

bullVous ecirctes libres bullde reproduire distribuer et communiquer cette creacuteation au public

bullSelon les conditions suivantes bullPaterniteacutebull Vous devez citer le nom de lauteur original de la maniegravere indiqueacutee par lauteur de loeuvre ou le titulaire des droits qui vous confegravere cette autorisation (mais pas dune maniegravere qui suggeacutererait quils vous soutiennent ou approuvent votre utilisation de loeuvre)

bullPas drsquoutilisation commercialebull Vous navez pas le droit dutiliser cette creacuteation agrave des fins commerciales

bullPas de modificationbull Vous navez pas le droit de modifier de transformer ou dadapter cette creacuteation

bullreacutesumeacute explicatif disponible sur httpcreativecommonsorglicensesby-nc-nd20fr

bullvous ecirctes autoriseacute agrave reacuteutiliser le logo Ruby France utiliseacute dans cette preacutesentation pour faire reacutefeacuterence agrave lrsquoassociation

JRuby (httpjrubycodehausorg)eacutecrit en JAVA soutenu par Sun

rubinius (httprubinius)un deacuteveloppement orienteacute speacutecifications

IronRuby (httpwwwironrubynet)eacutecrit pour NET deacuteveloppement soutenu par Microsoft

Maglev (httprubygemstonecom)baseacute sur Smalltalk

Cardinal (httpcardinal2rubyforgeorg)une VM permettant de tourner sous Parrot

Plusieurs impleacutementations du langage

page 5 sur 33RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

JRubyrubiniusIronRubyMaglevCardinal

JRuby (httpjrubycodehausorg)eacutecrit en JAVA soutenu par Sun

rubinius (httprubinius)un deacuteveloppement orienteacute speacutecifications

IronRuby (httpwwwironrubynet)eacutecrit pour NET deacuteveloppement soutenu par Microsoft

Maglev (httprubygemstonecom)baseacute sur Smalltalk

Cardinal (httpcardinal2rubyforgeorg)une VM permettant de tourner sous Parrot

Plusieurs impleacutementations du langage

page 5 sur 33RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

page 6 sur 33

Syntaxe de base

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

ruby variable locale

def ruby_method identificateur de meacutethodeend

$ruby variable globale$RUBY

RubyVersion constanteRUBY_VERSION

ruby_version symbole

page 6 sur 33

Syntaxe de base

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

ruby variable locale

def ruby_method identificateur de meacutethodeend

$ruby variable globale$RUBY

RubyVersion constanteRUBY_VERSION

ruby_version symbole

identificateursconditionsexceptions

quelques idiomes

page 6 sur 33

Syntaxe de base

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

ruby variable locale

def ruby_method identificateur de meacutethodeend

$ruby variable globale$RUBY

RubyVersion constanteRUBY_VERSION

ruby_version symbole

page 7 sur 33

Syntaxe de base conditions

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

if version == 186 puts vous utilisez la derniegravereelse puts passez agrave la versionend

puts Mauvais format unless objis_a Hash

case version when 186 puts when ^18d puts il y a plus reacutecent when ^19d puts oh oh -) else puts il est temps de se mettre agrave jourend

page 8 sur 33

Syntaxe de base les exceptions

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

begin f = Fileopen(fichiertxt) texte = freadline puts Lrsquoen-tecircte du fichier est texterescue ErrnoENOENT =gt e puts Il ny a pas de tel fichier rescue NoMethodError =gt e puts Lrsquoouverture srsquoest probablement mal passeacutee rescue SyntaxError =gt e puts Une erreur du deacuteveloppeur (emessage) raise eensure fclose if frespond_to closeend

page 9 sur 33

Syntaxe de base quelques idiomes

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

method( param1 =gt valeur1 param2 =gt valeur2 )method( param1 =gt valeur1 param2 =gt valeur2 )method param1 =gt valeur1 param2 =gt valeur2

def method(params) options = param1 =gt valeur par deacutefaut optionsmerge params end

objrespond_to methode

objdelete_at(1)gsub(e r)upcase

page 10 sur 33

Orienteacute objet

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

-123abs renvoie 123-123class renvoie Fixnum

chaine = rmllchaineupcase renvoie RMLLputs chaine affiche rmllchaineupcase renvoie RMLLputs chaine affiche RMLL

nilclass renvoie NilClasstrueclass renvoie TrueClassfalseclass renvoie FalseClassnilnil renvoie true

page 10 sur 33

Orienteacute objet

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

-123abs renvoie 123-123class renvoie Fixnum

chaine = rmllchaineupcase renvoie RMLLputs chaine affiche rmllchaineupcase renvoie RMLLputs chaine affiche RMLL

nilclass renvoie NilClasstrueclass renvoie TrueClassfalseclass renvoie FalseClassnilnil renvoie true

appel de meacutethodesdeacuteclaration de classeutilisationpolymorphisme

page 10 sur 33

Orienteacute objet

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

-123abs renvoie 123-123class renvoie Fixnum

chaine = rmllchaineupcase renvoie RMLLputs chaine affiche rmllchaineupcase renvoie RMLLputs chaine affiche RMLL

nilclass renvoie NilClasstrueclass renvoie TrueClassfalseclass renvoie FalseClassnilnil renvoie true

page 11 sur 33

Orienteacute objet deacuteclaration de classe

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

class Presentation lt Intervention deacuteclaration de la classe nombre = 0 variable de classe def initialize(intitule duree=45) post-constructeur intitule = intitule duree = duree nombre += 1 super appel de la meacutethode end dans la classe megravere def to_s titre + + dureeto_s + minutes end def selfnombre meacutethode de classe nombre end end

page 12 sur 33

Orienteacute objet utilisation

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

Presentationnombre renvoie 0p = Presentationnew(Preacutesentation de Ruby)

Presentationnombre renvoie 1

puts p affiche Preacutesentation de Ruby 45 minutes

pfinNoMethodError undefined method `fin for ltPresentation0x49214gt

def pfin puts Suffisamment de Ruby aujourdhui end

pfin affiche Suffisamment de Ruby aujourdrsquohui

page 13 sur 33

Orienteacute objet polymorphisme

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

module RMLL creacutee un nouveau module

EDITION = 2008

renvoie IUT IUFM ou CCI def lieu end

end

puts RMLLEDITION affiche 2008

class Presentation on rouvre la deacutefinition include RMLL pour inclure ce qui est deacutefiniend dans le module RMLL

pextends(RMLL) on eacutetend lobjet p

page 14 sur 33

Un peu plus loin

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

puts salut do puts salutend

lambda puts salut proc do puts salutend

p = Procnew puts salut pcall affiche salut

p = Procnew |i| puts i + 1 pcall 1 affiche 2pcall 41 affiche 42

page 14 sur 33

Un peu plus loin

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

puts salut do puts salutend

lambda puts salut proc do puts salutend

p = Procnew puts salut pcall affiche salut

p = Procnew |i| puts i + 1 pcall 1 affiche 2pcall 41 affiche 42

blocsiteacuterateursyield

page 14 sur 33

Un peu plus loin

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

puts salut do puts salutend

lambda puts salut proc do puts salutend

p = Procnew puts salut pcall affiche salut

p = Procnew |i| puts i + 1 pcall 1 affiche 2pcall 41 affiche 42

page 15 sur 33

Un peu plus loin les iteacuterateurs

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

lyonnais = [Freacutedeacuteric Alexis Jeacuterocircme] lyonnaiseach do |l| puts Dommage l nest pas venu cette anneacuteeend

rmll = 2008 =gt Mont-de-Marsan 2007 =gt Amiens 2006 =gt Vandoeuvre-les-Nancy 2002 =gt Talence

rmlleach_pair do |annee lieu| puts En annee je suis alleacute aux RMLL agrave lieuend

rmllkeyssorteach do |annee| puts En annee je suis alleacute aux RMLL agrave rmll[annee]end

page 16 sur 33

Un peu plus loin les iteacuterateurs

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

lecture dun fichier faccedilon blocs

avertissements = erreurs = 0 initialisation

Fileopen(logtxt) do |fichier| ouverture fichierreadlineseach do |ligne| lecture des lignes case ligne when ^WARN avertissements += 1 when ^ERR erreurs += 1 end endend fermeture automatique

puts Il y a avertissements avertissementsputs et erreurs erreurs dans ce fichier

page 17 sur 33

Un peu plus loin yield

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

class Personne

def initialize(nom) nom = nom end

def salue la meacutethode salue se contente drsquoexeacutecuteryield nom le bloc qui lui est passeacute

end lrsquoargument nom

end

celine = Personnenew(Ceacuteline)celinesalue |n| puts salut n affiche salut Ceacuteline

page 17 sur 33

Un peu plus loin yield

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

class Personne

def initialize(nom) nom = nom end

def salue la meacutethode salue se contente drsquoexeacutecuteryield nom le bloc qui lui est passeacute

end lrsquoargument nom

end

celine = Personnenew(Ceacuteline)celinesalue |n| puts salut n affiche salut Ceacuteline

mais comment ccedila marche

page 17 sur 33

Un peu plus loin yield

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

class Personne

def initialize(nom) nom = nom end

def salue la meacutethode salue se contente drsquoexeacutecuteryield nom le bloc qui lui est passeacute

end lrsquoargument nom

end

celine = Personnenew(Ceacuteline)celinesalue |n| puts salut n affiche salut Ceacuteline

page 18 sur 33

Dynamisme eacutevaluation de code

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

eval puts salut

def operation(operateur operande1 operande2) eval operande1 operateur operande2end

operation + 1 2 renvoie 3operation 9 0 renvoie

Presentationclass_eval do end

page 18 sur 33

Dynamisme eacutevaluation de code

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

eval puts salut

def operation(operateur operande1 operande2) eval operande1 operateur operande2end

operation + 1 2 renvoie 3operation 9 0 renvoie

Presentationclass_eval do end

eacutevaluation de codeinterception drsquoappels de meacutethodes inexistantesexeacutecution des deacutefinitions

reacuteflexiviteacute introspection

page 18 sur 33

Dynamisme eacutevaluation de code

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

eval puts salut

def operation(operateur operande1 operande2) eval operande1 operateur operande2end

operation + 1 2 renvoie 3operation 9 0 renvoie

Presentationclass_eval do end

page 19 sur 33

Dynamisme meacutethodes inexistantes

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

Presentationnombre renvoie 0p = Presentationnew(Preacutesentation de Ruby)

Presentationnombre renvoie 1

puts p affiche Preacutesentation de Ruby 45 minutes

pfinNoMethodError undefined method `fin for ltPresentation0x49214gt

def pfin puts Suffisamment de Ruby aujourdhui end

pfin affiche Suffisamment de Ruby aujourdrsquohui

page 20 sur 33

Dynamisme meacutethodes inexistantes

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

class Presentation def method_missing(nom args) method_missing puts Il ny a pas de meacutethode nom est appeleacutee end avant la leveacuteeend de lexception

p = Presentationnew(Preacutesentation de Ruby)

pfin affiche Il ny a pas de meacutethode fin pas drsquoexception

method_missing est lrsquoun des nombreux ldquohooksrdquo disponibles dans Ruby

page 21 sur 33

Dynamisme deacutefinitions exeacutecuteacutees

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

class Configuration case RUBY_PLATFORM deacutefinition dune meacutethode when linux en fonction du systegraveme def initialize(params) hocircte end when win32 def initialize(params) end when darwin include YAIBExtensionsSpecificOSX else unless include YAIBStandard raise Votre OS nest pas supporteacute end end end

page 22 sur 33

Dynamisme reacuteflexiviteacute introspection

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

On peut interroger tous les composants du langage agrave lrsquoexeacutecution

obj = Arraynewobjclass

objclassinstance_methodsobjmethods eacutequivalent agrave la ligne du dessusobjprivate_methods

objclassinstance_methodsgrep(delete)objclassinstance_methodsgrep(delete)sort

objmethodsgrep(^on_connect_do)each do |method| objsend methodend

page 23 sur 33

Dynamisme reacuteflexiviteacute introspection

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

On peut rouvrir une deacutefinition y compris celle du langage

class Array la classe Array existe on la rouvre def longueur ajout drsquoune meacutethode en franccedilais length proxy vers la meacutethode en anglais end end

arr = Arraynewarr ltlt 1arr ltlt element

arrlongueur renvoie 2

page 24 sur 33

Dynamisme reacuteflexiviteacute introspection

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

class Counterparty def has_all_mandatory_fields_filled quelques veacuterifications end def can_be_in_completed_or_approved_status return false unless selfhas_all_mandatory_fields_filled return false unless selflgdhas_all_mandatory_fields_filled unless selfratingshave_all_mandatory_fields_filled

return false end return true end

end

page 25 sur 33

Dynamisme reacuteflexiviteacute introspection

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

modification de la classe Arrayclass Array

def have_all_mandatory_fields_filled selfeach do |item| unless itemrespond_to has_all_mandatory_fields_filled return false end unless itemhas_all_mandatory_fields_filled return false end end return true end

end

page 26 sur 33

Se mettre agrave Ruby

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

(g)vi(m)(X)emacsSciTE

FreeRIDE (eacutecrit en Ruby)

e-TextEditorTextMate (seulement OSX)

Eclipse avec les Ruby Development ToolsNetBeans 61 (support Ruby et JRuby)

page 26 sur 33

Se mettre agrave Ruby

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

(g)vi(m)(X)emacsSciTE

FreeRIDE (eacutecrit en Ruby)

e-TextEditorTextMate (seulement OSX)

Eclipse avec les Ruby Development ToolsNetBeans 61 (support Ruby et JRuby)

Editeurs et environnements compatiblesLrsquooutil indispensable irbRessources en ligneLivres

page 26 sur 33

Se mettre agrave Ruby

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

(g)vi(m)(X)emacsSciTE

FreeRIDE (eacutecrit en Ruby)

e-TextEditorTextMate (seulement OSX)

Eclipse avec les Ruby Development ToolsNetBeans 61 (support Ruby et JRuby)

page 27 sur 33

Se mettre agrave Ruby irb

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

page 28 sur 33

Se mettre agrave Ruby ressources en ligne

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

Le site officiel (httpwwwruby-langorg)Sa traduction (httpwwwruby-langorgfr)

Le portail Ruby France (httpwwwrubyfranceorg)

Les listes de diffusion sur Google Groups(ruby-talk ruby-core rubyfr-public)

Les groupes de discussion sur Usenet(complangruby frcomplangruby)

Les salons IRC sur FreeNode (ircfreenodenet)(ruby-lang rubyfr)

page 29 sur 33

Se mettre agrave Ruby livres

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

Ruby in a NutshellProgramming RubyThe Ruby WayDesign Patterns for Ruby

Ruby par lrsquoexemple

Passez sur le stand Ruby France

page 30 sur 33

Fin de la preacutesentation

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

page 30 sur 33

Fin de la preacutesentation

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

Des questions

page 30 sur 33

Fin de la preacutesentation

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

page 32 sur 33

Fin de la preacutesentation

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

Merci

page 32 sur 33

Ougrave reacutecupeacuterer ce document

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

Le support de cette preacutesentation sera disponible sur httpzlabfr

page 33 sur 33

Licence de ce document

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

bullVous ecirctes libres bullde reproduire distribuer et communiquer cette creacuteation au public

bullSelon les conditions suivantes bullPaterniteacutebull Vous devez citer le nom de lauteur original de la maniegravere indiqueacutee par lauteur de loeuvre ou le titulaire des droits qui vous confegravere cette autorisation (mais pas dune maniegravere qui suggeacutererait quils vous soutiennent ou approuvent votre utilisation de loeuvre)

bullPas drsquoutilisation commercialebull Vous navez pas le droit dutiliser cette creacuteation agrave des fins commerciales

bullPas de modificationbull Vous navez pas le droit de modifier de transformer ou dadapter cette creacuteation

bullreacutesumeacute explicatif disponible sur httpcreativecommonsorglicensesby-nc-nd20fr

bullvous ecirctes autoriseacute agrave reacuteutiliser le logo Ruby France utiliseacute dans cette preacutesentation pour faire reacutefeacuterence agrave lrsquoassociation

JRuby (httpjrubycodehausorg)eacutecrit en JAVA soutenu par Sun

rubinius (httprubinius)un deacuteveloppement orienteacute speacutecifications

IronRuby (httpwwwironrubynet)eacutecrit pour NET deacuteveloppement soutenu par Microsoft

Maglev (httprubygemstonecom)baseacute sur Smalltalk

Cardinal (httpcardinal2rubyforgeorg)une VM permettant de tourner sous Parrot

Plusieurs impleacutementations du langage

page 5 sur 33RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

page 6 sur 33

Syntaxe de base

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

ruby variable locale

def ruby_method identificateur de meacutethodeend

$ruby variable globale$RUBY

RubyVersion constanteRUBY_VERSION

ruby_version symbole

page 6 sur 33

Syntaxe de base

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

ruby variable locale

def ruby_method identificateur de meacutethodeend

$ruby variable globale$RUBY

RubyVersion constanteRUBY_VERSION

ruby_version symbole

identificateursconditionsexceptions

quelques idiomes

page 6 sur 33

Syntaxe de base

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

ruby variable locale

def ruby_method identificateur de meacutethodeend

$ruby variable globale$RUBY

RubyVersion constanteRUBY_VERSION

ruby_version symbole

page 7 sur 33

Syntaxe de base conditions

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

if version == 186 puts vous utilisez la derniegravereelse puts passez agrave la versionend

puts Mauvais format unless objis_a Hash

case version when 186 puts when ^18d puts il y a plus reacutecent when ^19d puts oh oh -) else puts il est temps de se mettre agrave jourend

page 8 sur 33

Syntaxe de base les exceptions

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

begin f = Fileopen(fichiertxt) texte = freadline puts Lrsquoen-tecircte du fichier est texterescue ErrnoENOENT =gt e puts Il ny a pas de tel fichier rescue NoMethodError =gt e puts Lrsquoouverture srsquoest probablement mal passeacutee rescue SyntaxError =gt e puts Une erreur du deacuteveloppeur (emessage) raise eensure fclose if frespond_to closeend

page 9 sur 33

Syntaxe de base quelques idiomes

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

method( param1 =gt valeur1 param2 =gt valeur2 )method( param1 =gt valeur1 param2 =gt valeur2 )method param1 =gt valeur1 param2 =gt valeur2

def method(params) options = param1 =gt valeur par deacutefaut optionsmerge params end

objrespond_to methode

objdelete_at(1)gsub(e r)upcase

page 10 sur 33

Orienteacute objet

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

-123abs renvoie 123-123class renvoie Fixnum

chaine = rmllchaineupcase renvoie RMLLputs chaine affiche rmllchaineupcase renvoie RMLLputs chaine affiche RMLL

nilclass renvoie NilClasstrueclass renvoie TrueClassfalseclass renvoie FalseClassnilnil renvoie true

page 10 sur 33

Orienteacute objet

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

-123abs renvoie 123-123class renvoie Fixnum

chaine = rmllchaineupcase renvoie RMLLputs chaine affiche rmllchaineupcase renvoie RMLLputs chaine affiche RMLL

nilclass renvoie NilClasstrueclass renvoie TrueClassfalseclass renvoie FalseClassnilnil renvoie true

appel de meacutethodesdeacuteclaration de classeutilisationpolymorphisme

page 10 sur 33

Orienteacute objet

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

-123abs renvoie 123-123class renvoie Fixnum

chaine = rmllchaineupcase renvoie RMLLputs chaine affiche rmllchaineupcase renvoie RMLLputs chaine affiche RMLL

nilclass renvoie NilClasstrueclass renvoie TrueClassfalseclass renvoie FalseClassnilnil renvoie true

page 11 sur 33

Orienteacute objet deacuteclaration de classe

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

class Presentation lt Intervention deacuteclaration de la classe nombre = 0 variable de classe def initialize(intitule duree=45) post-constructeur intitule = intitule duree = duree nombre += 1 super appel de la meacutethode end dans la classe megravere def to_s titre + + dureeto_s + minutes end def selfnombre meacutethode de classe nombre end end

page 12 sur 33

Orienteacute objet utilisation

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

Presentationnombre renvoie 0p = Presentationnew(Preacutesentation de Ruby)

Presentationnombre renvoie 1

puts p affiche Preacutesentation de Ruby 45 minutes

pfinNoMethodError undefined method `fin for ltPresentation0x49214gt

def pfin puts Suffisamment de Ruby aujourdhui end

pfin affiche Suffisamment de Ruby aujourdrsquohui

page 13 sur 33

Orienteacute objet polymorphisme

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

module RMLL creacutee un nouveau module

EDITION = 2008

renvoie IUT IUFM ou CCI def lieu end

end

puts RMLLEDITION affiche 2008

class Presentation on rouvre la deacutefinition include RMLL pour inclure ce qui est deacutefiniend dans le module RMLL

pextends(RMLL) on eacutetend lobjet p

page 14 sur 33

Un peu plus loin

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

puts salut do puts salutend

lambda puts salut proc do puts salutend

p = Procnew puts salut pcall affiche salut

p = Procnew |i| puts i + 1 pcall 1 affiche 2pcall 41 affiche 42

page 14 sur 33

Un peu plus loin

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

puts salut do puts salutend

lambda puts salut proc do puts salutend

p = Procnew puts salut pcall affiche salut

p = Procnew |i| puts i + 1 pcall 1 affiche 2pcall 41 affiche 42

blocsiteacuterateursyield

page 14 sur 33

Un peu plus loin

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

puts salut do puts salutend

lambda puts salut proc do puts salutend

p = Procnew puts salut pcall affiche salut

p = Procnew |i| puts i + 1 pcall 1 affiche 2pcall 41 affiche 42

page 15 sur 33

Un peu plus loin les iteacuterateurs

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

lyonnais = [Freacutedeacuteric Alexis Jeacuterocircme] lyonnaiseach do |l| puts Dommage l nest pas venu cette anneacuteeend

rmll = 2008 =gt Mont-de-Marsan 2007 =gt Amiens 2006 =gt Vandoeuvre-les-Nancy 2002 =gt Talence

rmlleach_pair do |annee lieu| puts En annee je suis alleacute aux RMLL agrave lieuend

rmllkeyssorteach do |annee| puts En annee je suis alleacute aux RMLL agrave rmll[annee]end

page 16 sur 33

Un peu plus loin les iteacuterateurs

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

lecture dun fichier faccedilon blocs

avertissements = erreurs = 0 initialisation

Fileopen(logtxt) do |fichier| ouverture fichierreadlineseach do |ligne| lecture des lignes case ligne when ^WARN avertissements += 1 when ^ERR erreurs += 1 end endend fermeture automatique

puts Il y a avertissements avertissementsputs et erreurs erreurs dans ce fichier

page 17 sur 33

Un peu plus loin yield

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

class Personne

def initialize(nom) nom = nom end

def salue la meacutethode salue se contente drsquoexeacutecuteryield nom le bloc qui lui est passeacute

end lrsquoargument nom

end

celine = Personnenew(Ceacuteline)celinesalue |n| puts salut n affiche salut Ceacuteline

page 17 sur 33

Un peu plus loin yield

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

class Personne

def initialize(nom) nom = nom end

def salue la meacutethode salue se contente drsquoexeacutecuteryield nom le bloc qui lui est passeacute

end lrsquoargument nom

end

celine = Personnenew(Ceacuteline)celinesalue |n| puts salut n affiche salut Ceacuteline

mais comment ccedila marche

page 17 sur 33

Un peu plus loin yield

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

class Personne

def initialize(nom) nom = nom end

def salue la meacutethode salue se contente drsquoexeacutecuteryield nom le bloc qui lui est passeacute

end lrsquoargument nom

end

celine = Personnenew(Ceacuteline)celinesalue |n| puts salut n affiche salut Ceacuteline

page 18 sur 33

Dynamisme eacutevaluation de code

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

eval puts salut

def operation(operateur operande1 operande2) eval operande1 operateur operande2end

operation + 1 2 renvoie 3operation 9 0 renvoie

Presentationclass_eval do end

page 18 sur 33

Dynamisme eacutevaluation de code

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

eval puts salut

def operation(operateur operande1 operande2) eval operande1 operateur operande2end

operation + 1 2 renvoie 3operation 9 0 renvoie

Presentationclass_eval do end

eacutevaluation de codeinterception drsquoappels de meacutethodes inexistantesexeacutecution des deacutefinitions

reacuteflexiviteacute introspection

page 18 sur 33

Dynamisme eacutevaluation de code

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

eval puts salut

def operation(operateur operande1 operande2) eval operande1 operateur operande2end

operation + 1 2 renvoie 3operation 9 0 renvoie

Presentationclass_eval do end

page 19 sur 33

Dynamisme meacutethodes inexistantes

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

Presentationnombre renvoie 0p = Presentationnew(Preacutesentation de Ruby)

Presentationnombre renvoie 1

puts p affiche Preacutesentation de Ruby 45 minutes

pfinNoMethodError undefined method `fin for ltPresentation0x49214gt

def pfin puts Suffisamment de Ruby aujourdhui end

pfin affiche Suffisamment de Ruby aujourdrsquohui

page 20 sur 33

Dynamisme meacutethodes inexistantes

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

class Presentation def method_missing(nom args) method_missing puts Il ny a pas de meacutethode nom est appeleacutee end avant la leveacuteeend de lexception

p = Presentationnew(Preacutesentation de Ruby)

pfin affiche Il ny a pas de meacutethode fin pas drsquoexception

method_missing est lrsquoun des nombreux ldquohooksrdquo disponibles dans Ruby

page 21 sur 33

Dynamisme deacutefinitions exeacutecuteacutees

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

class Configuration case RUBY_PLATFORM deacutefinition dune meacutethode when linux en fonction du systegraveme def initialize(params) hocircte end when win32 def initialize(params) end when darwin include YAIBExtensionsSpecificOSX else unless include YAIBStandard raise Votre OS nest pas supporteacute end end end

page 22 sur 33

Dynamisme reacuteflexiviteacute introspection

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

On peut interroger tous les composants du langage agrave lrsquoexeacutecution

obj = Arraynewobjclass

objclassinstance_methodsobjmethods eacutequivalent agrave la ligne du dessusobjprivate_methods

objclassinstance_methodsgrep(delete)objclassinstance_methodsgrep(delete)sort

objmethodsgrep(^on_connect_do)each do |method| objsend methodend

page 23 sur 33

Dynamisme reacuteflexiviteacute introspection

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

On peut rouvrir une deacutefinition y compris celle du langage

class Array la classe Array existe on la rouvre def longueur ajout drsquoune meacutethode en franccedilais length proxy vers la meacutethode en anglais end end

arr = Arraynewarr ltlt 1arr ltlt element

arrlongueur renvoie 2

page 24 sur 33

Dynamisme reacuteflexiviteacute introspection

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

class Counterparty def has_all_mandatory_fields_filled quelques veacuterifications end def can_be_in_completed_or_approved_status return false unless selfhas_all_mandatory_fields_filled return false unless selflgdhas_all_mandatory_fields_filled unless selfratingshave_all_mandatory_fields_filled

return false end return true end

end

page 25 sur 33

Dynamisme reacuteflexiviteacute introspection

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

modification de la classe Arrayclass Array

def have_all_mandatory_fields_filled selfeach do |item| unless itemrespond_to has_all_mandatory_fields_filled return false end unless itemhas_all_mandatory_fields_filled return false end end return true end

end

page 26 sur 33

Se mettre agrave Ruby

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

(g)vi(m)(X)emacsSciTE

FreeRIDE (eacutecrit en Ruby)

e-TextEditorTextMate (seulement OSX)

Eclipse avec les Ruby Development ToolsNetBeans 61 (support Ruby et JRuby)

page 26 sur 33

Se mettre agrave Ruby

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

(g)vi(m)(X)emacsSciTE

FreeRIDE (eacutecrit en Ruby)

e-TextEditorTextMate (seulement OSX)

Eclipse avec les Ruby Development ToolsNetBeans 61 (support Ruby et JRuby)

Editeurs et environnements compatiblesLrsquooutil indispensable irbRessources en ligneLivres

page 26 sur 33

Se mettre agrave Ruby

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

(g)vi(m)(X)emacsSciTE

FreeRIDE (eacutecrit en Ruby)

e-TextEditorTextMate (seulement OSX)

Eclipse avec les Ruby Development ToolsNetBeans 61 (support Ruby et JRuby)

page 27 sur 33

Se mettre agrave Ruby irb

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

page 28 sur 33

Se mettre agrave Ruby ressources en ligne

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

Le site officiel (httpwwwruby-langorg)Sa traduction (httpwwwruby-langorgfr)

Le portail Ruby France (httpwwwrubyfranceorg)

Les listes de diffusion sur Google Groups(ruby-talk ruby-core rubyfr-public)

Les groupes de discussion sur Usenet(complangruby frcomplangruby)

Les salons IRC sur FreeNode (ircfreenodenet)(ruby-lang rubyfr)

page 29 sur 33

Se mettre agrave Ruby livres

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

Ruby in a NutshellProgramming RubyThe Ruby WayDesign Patterns for Ruby

Ruby par lrsquoexemple

Passez sur le stand Ruby France

page 30 sur 33

Fin de la preacutesentation

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

page 30 sur 33

Fin de la preacutesentation

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

Des questions

page 30 sur 33

Fin de la preacutesentation

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

page 32 sur 33

Fin de la preacutesentation

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

Merci

page 32 sur 33

Ougrave reacutecupeacuterer ce document

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

Le support de cette preacutesentation sera disponible sur httpzlabfr

page 33 sur 33

Licence de ce document

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

bullVous ecirctes libres bullde reproduire distribuer et communiquer cette creacuteation au public

bullSelon les conditions suivantes bullPaterniteacutebull Vous devez citer le nom de lauteur original de la maniegravere indiqueacutee par lauteur de loeuvre ou le titulaire des droits qui vous confegravere cette autorisation (mais pas dune maniegravere qui suggeacutererait quils vous soutiennent ou approuvent votre utilisation de loeuvre)

bullPas drsquoutilisation commercialebull Vous navez pas le droit dutiliser cette creacuteation agrave des fins commerciales

bullPas de modificationbull Vous navez pas le droit de modifier de transformer ou dadapter cette creacuteation

bullreacutesumeacute explicatif disponible sur httpcreativecommonsorglicensesby-nc-nd20fr

bullvous ecirctes autoriseacute agrave reacuteutiliser le logo Ruby France utiliseacute dans cette preacutesentation pour faire reacutefeacuterence agrave lrsquoassociation

page 6 sur 33

Syntaxe de base

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

ruby variable locale

def ruby_method identificateur de meacutethodeend

$ruby variable globale$RUBY

RubyVersion constanteRUBY_VERSION

ruby_version symbole

page 6 sur 33

Syntaxe de base

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

ruby variable locale

def ruby_method identificateur de meacutethodeend

$ruby variable globale$RUBY

RubyVersion constanteRUBY_VERSION

ruby_version symbole

identificateursconditionsexceptions

quelques idiomes

page 6 sur 33

Syntaxe de base

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

ruby variable locale

def ruby_method identificateur de meacutethodeend

$ruby variable globale$RUBY

RubyVersion constanteRUBY_VERSION

ruby_version symbole

page 7 sur 33

Syntaxe de base conditions

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

if version == 186 puts vous utilisez la derniegravereelse puts passez agrave la versionend

puts Mauvais format unless objis_a Hash

case version when 186 puts when ^18d puts il y a plus reacutecent when ^19d puts oh oh -) else puts il est temps de se mettre agrave jourend

page 8 sur 33

Syntaxe de base les exceptions

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

begin f = Fileopen(fichiertxt) texte = freadline puts Lrsquoen-tecircte du fichier est texterescue ErrnoENOENT =gt e puts Il ny a pas de tel fichier rescue NoMethodError =gt e puts Lrsquoouverture srsquoest probablement mal passeacutee rescue SyntaxError =gt e puts Une erreur du deacuteveloppeur (emessage) raise eensure fclose if frespond_to closeend

page 9 sur 33

Syntaxe de base quelques idiomes

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

method( param1 =gt valeur1 param2 =gt valeur2 )method( param1 =gt valeur1 param2 =gt valeur2 )method param1 =gt valeur1 param2 =gt valeur2

def method(params) options = param1 =gt valeur par deacutefaut optionsmerge params end

objrespond_to methode

objdelete_at(1)gsub(e r)upcase

page 10 sur 33

Orienteacute objet

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

-123abs renvoie 123-123class renvoie Fixnum

chaine = rmllchaineupcase renvoie RMLLputs chaine affiche rmllchaineupcase renvoie RMLLputs chaine affiche RMLL

nilclass renvoie NilClasstrueclass renvoie TrueClassfalseclass renvoie FalseClassnilnil renvoie true

page 10 sur 33

Orienteacute objet

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

-123abs renvoie 123-123class renvoie Fixnum

chaine = rmllchaineupcase renvoie RMLLputs chaine affiche rmllchaineupcase renvoie RMLLputs chaine affiche RMLL

nilclass renvoie NilClasstrueclass renvoie TrueClassfalseclass renvoie FalseClassnilnil renvoie true

appel de meacutethodesdeacuteclaration de classeutilisationpolymorphisme

page 10 sur 33

Orienteacute objet

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

-123abs renvoie 123-123class renvoie Fixnum

chaine = rmllchaineupcase renvoie RMLLputs chaine affiche rmllchaineupcase renvoie RMLLputs chaine affiche RMLL

nilclass renvoie NilClasstrueclass renvoie TrueClassfalseclass renvoie FalseClassnilnil renvoie true

page 11 sur 33

Orienteacute objet deacuteclaration de classe

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

class Presentation lt Intervention deacuteclaration de la classe nombre = 0 variable de classe def initialize(intitule duree=45) post-constructeur intitule = intitule duree = duree nombre += 1 super appel de la meacutethode end dans la classe megravere def to_s titre + + dureeto_s + minutes end def selfnombre meacutethode de classe nombre end end

page 12 sur 33

Orienteacute objet utilisation

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

Presentationnombre renvoie 0p = Presentationnew(Preacutesentation de Ruby)

Presentationnombre renvoie 1

puts p affiche Preacutesentation de Ruby 45 minutes

pfinNoMethodError undefined method `fin for ltPresentation0x49214gt

def pfin puts Suffisamment de Ruby aujourdhui end

pfin affiche Suffisamment de Ruby aujourdrsquohui

page 13 sur 33

Orienteacute objet polymorphisme

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

module RMLL creacutee un nouveau module

EDITION = 2008

renvoie IUT IUFM ou CCI def lieu end

end

puts RMLLEDITION affiche 2008

class Presentation on rouvre la deacutefinition include RMLL pour inclure ce qui est deacutefiniend dans le module RMLL

pextends(RMLL) on eacutetend lobjet p

page 14 sur 33

Un peu plus loin

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

puts salut do puts salutend

lambda puts salut proc do puts salutend

p = Procnew puts salut pcall affiche salut

p = Procnew |i| puts i + 1 pcall 1 affiche 2pcall 41 affiche 42

page 14 sur 33

Un peu plus loin

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

puts salut do puts salutend

lambda puts salut proc do puts salutend

p = Procnew puts salut pcall affiche salut

p = Procnew |i| puts i + 1 pcall 1 affiche 2pcall 41 affiche 42

blocsiteacuterateursyield

page 14 sur 33

Un peu plus loin

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

puts salut do puts salutend

lambda puts salut proc do puts salutend

p = Procnew puts salut pcall affiche salut

p = Procnew |i| puts i + 1 pcall 1 affiche 2pcall 41 affiche 42

page 15 sur 33

Un peu plus loin les iteacuterateurs

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

lyonnais = [Freacutedeacuteric Alexis Jeacuterocircme] lyonnaiseach do |l| puts Dommage l nest pas venu cette anneacuteeend

rmll = 2008 =gt Mont-de-Marsan 2007 =gt Amiens 2006 =gt Vandoeuvre-les-Nancy 2002 =gt Talence

rmlleach_pair do |annee lieu| puts En annee je suis alleacute aux RMLL agrave lieuend

rmllkeyssorteach do |annee| puts En annee je suis alleacute aux RMLL agrave rmll[annee]end

page 16 sur 33

Un peu plus loin les iteacuterateurs

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

lecture dun fichier faccedilon blocs

avertissements = erreurs = 0 initialisation

Fileopen(logtxt) do |fichier| ouverture fichierreadlineseach do |ligne| lecture des lignes case ligne when ^WARN avertissements += 1 when ^ERR erreurs += 1 end endend fermeture automatique

puts Il y a avertissements avertissementsputs et erreurs erreurs dans ce fichier

page 17 sur 33

Un peu plus loin yield

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

class Personne

def initialize(nom) nom = nom end

def salue la meacutethode salue se contente drsquoexeacutecuteryield nom le bloc qui lui est passeacute

end lrsquoargument nom

end

celine = Personnenew(Ceacuteline)celinesalue |n| puts salut n affiche salut Ceacuteline

page 17 sur 33

Un peu plus loin yield

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

class Personne

def initialize(nom) nom = nom end

def salue la meacutethode salue se contente drsquoexeacutecuteryield nom le bloc qui lui est passeacute

end lrsquoargument nom

end

celine = Personnenew(Ceacuteline)celinesalue |n| puts salut n affiche salut Ceacuteline

mais comment ccedila marche

page 17 sur 33

Un peu plus loin yield

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

class Personne

def initialize(nom) nom = nom end

def salue la meacutethode salue se contente drsquoexeacutecuteryield nom le bloc qui lui est passeacute

end lrsquoargument nom

end

celine = Personnenew(Ceacuteline)celinesalue |n| puts salut n affiche salut Ceacuteline

page 18 sur 33

Dynamisme eacutevaluation de code

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

eval puts salut

def operation(operateur operande1 operande2) eval operande1 operateur operande2end

operation + 1 2 renvoie 3operation 9 0 renvoie

Presentationclass_eval do end

page 18 sur 33

Dynamisme eacutevaluation de code

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

eval puts salut

def operation(operateur operande1 operande2) eval operande1 operateur operande2end

operation + 1 2 renvoie 3operation 9 0 renvoie

Presentationclass_eval do end

eacutevaluation de codeinterception drsquoappels de meacutethodes inexistantesexeacutecution des deacutefinitions

reacuteflexiviteacute introspection

page 18 sur 33

Dynamisme eacutevaluation de code

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

eval puts salut

def operation(operateur operande1 operande2) eval operande1 operateur operande2end

operation + 1 2 renvoie 3operation 9 0 renvoie

Presentationclass_eval do end

page 19 sur 33

Dynamisme meacutethodes inexistantes

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

Presentationnombre renvoie 0p = Presentationnew(Preacutesentation de Ruby)

Presentationnombre renvoie 1

puts p affiche Preacutesentation de Ruby 45 minutes

pfinNoMethodError undefined method `fin for ltPresentation0x49214gt

def pfin puts Suffisamment de Ruby aujourdhui end

pfin affiche Suffisamment de Ruby aujourdrsquohui

page 20 sur 33

Dynamisme meacutethodes inexistantes

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

class Presentation def method_missing(nom args) method_missing puts Il ny a pas de meacutethode nom est appeleacutee end avant la leveacuteeend de lexception

p = Presentationnew(Preacutesentation de Ruby)

pfin affiche Il ny a pas de meacutethode fin pas drsquoexception

method_missing est lrsquoun des nombreux ldquohooksrdquo disponibles dans Ruby

page 21 sur 33

Dynamisme deacutefinitions exeacutecuteacutees

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

class Configuration case RUBY_PLATFORM deacutefinition dune meacutethode when linux en fonction du systegraveme def initialize(params) hocircte end when win32 def initialize(params) end when darwin include YAIBExtensionsSpecificOSX else unless include YAIBStandard raise Votre OS nest pas supporteacute end end end

page 22 sur 33

Dynamisme reacuteflexiviteacute introspection

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

On peut interroger tous les composants du langage agrave lrsquoexeacutecution

obj = Arraynewobjclass

objclassinstance_methodsobjmethods eacutequivalent agrave la ligne du dessusobjprivate_methods

objclassinstance_methodsgrep(delete)objclassinstance_methodsgrep(delete)sort

objmethodsgrep(^on_connect_do)each do |method| objsend methodend

page 23 sur 33

Dynamisme reacuteflexiviteacute introspection

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

On peut rouvrir une deacutefinition y compris celle du langage

class Array la classe Array existe on la rouvre def longueur ajout drsquoune meacutethode en franccedilais length proxy vers la meacutethode en anglais end end

arr = Arraynewarr ltlt 1arr ltlt element

arrlongueur renvoie 2

page 24 sur 33

Dynamisme reacuteflexiviteacute introspection

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

class Counterparty def has_all_mandatory_fields_filled quelques veacuterifications end def can_be_in_completed_or_approved_status return false unless selfhas_all_mandatory_fields_filled return false unless selflgdhas_all_mandatory_fields_filled unless selfratingshave_all_mandatory_fields_filled

return false end return true end

end

page 25 sur 33

Dynamisme reacuteflexiviteacute introspection

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

modification de la classe Arrayclass Array

def have_all_mandatory_fields_filled selfeach do |item| unless itemrespond_to has_all_mandatory_fields_filled return false end unless itemhas_all_mandatory_fields_filled return false end end return true end

end

page 26 sur 33

Se mettre agrave Ruby

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

(g)vi(m)(X)emacsSciTE

FreeRIDE (eacutecrit en Ruby)

e-TextEditorTextMate (seulement OSX)

Eclipse avec les Ruby Development ToolsNetBeans 61 (support Ruby et JRuby)

page 26 sur 33

Se mettre agrave Ruby

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

(g)vi(m)(X)emacsSciTE

FreeRIDE (eacutecrit en Ruby)

e-TextEditorTextMate (seulement OSX)

Eclipse avec les Ruby Development ToolsNetBeans 61 (support Ruby et JRuby)

Editeurs et environnements compatiblesLrsquooutil indispensable irbRessources en ligneLivres

page 26 sur 33

Se mettre agrave Ruby

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

(g)vi(m)(X)emacsSciTE

FreeRIDE (eacutecrit en Ruby)

e-TextEditorTextMate (seulement OSX)

Eclipse avec les Ruby Development ToolsNetBeans 61 (support Ruby et JRuby)

page 27 sur 33

Se mettre agrave Ruby irb

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

page 28 sur 33

Se mettre agrave Ruby ressources en ligne

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

Le site officiel (httpwwwruby-langorg)Sa traduction (httpwwwruby-langorgfr)

Le portail Ruby France (httpwwwrubyfranceorg)

Les listes de diffusion sur Google Groups(ruby-talk ruby-core rubyfr-public)

Les groupes de discussion sur Usenet(complangruby frcomplangruby)

Les salons IRC sur FreeNode (ircfreenodenet)(ruby-lang rubyfr)

page 29 sur 33

Se mettre agrave Ruby livres

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

Ruby in a NutshellProgramming RubyThe Ruby WayDesign Patterns for Ruby

Ruby par lrsquoexemple

Passez sur le stand Ruby France

page 30 sur 33

Fin de la preacutesentation

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

page 30 sur 33

Fin de la preacutesentation

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

Des questions

page 30 sur 33

Fin de la preacutesentation

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

page 32 sur 33

Fin de la preacutesentation

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

Merci

page 32 sur 33

Ougrave reacutecupeacuterer ce document

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

Le support de cette preacutesentation sera disponible sur httpzlabfr

page 33 sur 33

Licence de ce document

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

bullVous ecirctes libres bullde reproduire distribuer et communiquer cette creacuteation au public

bullSelon les conditions suivantes bullPaterniteacutebull Vous devez citer le nom de lauteur original de la maniegravere indiqueacutee par lauteur de loeuvre ou le titulaire des droits qui vous confegravere cette autorisation (mais pas dune maniegravere qui suggeacutererait quils vous soutiennent ou approuvent votre utilisation de loeuvre)

bullPas drsquoutilisation commercialebull Vous navez pas le droit dutiliser cette creacuteation agrave des fins commerciales

bullPas de modificationbull Vous navez pas le droit de modifier de transformer ou dadapter cette creacuteation

bullreacutesumeacute explicatif disponible sur httpcreativecommonsorglicensesby-nc-nd20fr

bullvous ecirctes autoriseacute agrave reacuteutiliser le logo Ruby France utiliseacute dans cette preacutesentation pour faire reacutefeacuterence agrave lrsquoassociation

page 6 sur 33

Syntaxe de base

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

ruby variable locale

def ruby_method identificateur de meacutethodeend

$ruby variable globale$RUBY

RubyVersion constanteRUBY_VERSION

ruby_version symbole

identificateursconditionsexceptions

quelques idiomes

page 6 sur 33

Syntaxe de base

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

ruby variable locale

def ruby_method identificateur de meacutethodeend

$ruby variable globale$RUBY

RubyVersion constanteRUBY_VERSION

ruby_version symbole

page 7 sur 33

Syntaxe de base conditions

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

if version == 186 puts vous utilisez la derniegravereelse puts passez agrave la versionend

puts Mauvais format unless objis_a Hash

case version when 186 puts when ^18d puts il y a plus reacutecent when ^19d puts oh oh -) else puts il est temps de se mettre agrave jourend

page 8 sur 33

Syntaxe de base les exceptions

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

begin f = Fileopen(fichiertxt) texte = freadline puts Lrsquoen-tecircte du fichier est texterescue ErrnoENOENT =gt e puts Il ny a pas de tel fichier rescue NoMethodError =gt e puts Lrsquoouverture srsquoest probablement mal passeacutee rescue SyntaxError =gt e puts Une erreur du deacuteveloppeur (emessage) raise eensure fclose if frespond_to closeend

page 9 sur 33

Syntaxe de base quelques idiomes

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

method( param1 =gt valeur1 param2 =gt valeur2 )method( param1 =gt valeur1 param2 =gt valeur2 )method param1 =gt valeur1 param2 =gt valeur2

def method(params) options = param1 =gt valeur par deacutefaut optionsmerge params end

objrespond_to methode

objdelete_at(1)gsub(e r)upcase

page 10 sur 33

Orienteacute objet

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

-123abs renvoie 123-123class renvoie Fixnum

chaine = rmllchaineupcase renvoie RMLLputs chaine affiche rmllchaineupcase renvoie RMLLputs chaine affiche RMLL

nilclass renvoie NilClasstrueclass renvoie TrueClassfalseclass renvoie FalseClassnilnil renvoie true

page 10 sur 33

Orienteacute objet

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

-123abs renvoie 123-123class renvoie Fixnum

chaine = rmllchaineupcase renvoie RMLLputs chaine affiche rmllchaineupcase renvoie RMLLputs chaine affiche RMLL

nilclass renvoie NilClasstrueclass renvoie TrueClassfalseclass renvoie FalseClassnilnil renvoie true

appel de meacutethodesdeacuteclaration de classeutilisationpolymorphisme

page 10 sur 33

Orienteacute objet

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

-123abs renvoie 123-123class renvoie Fixnum

chaine = rmllchaineupcase renvoie RMLLputs chaine affiche rmllchaineupcase renvoie RMLLputs chaine affiche RMLL

nilclass renvoie NilClasstrueclass renvoie TrueClassfalseclass renvoie FalseClassnilnil renvoie true

page 11 sur 33

Orienteacute objet deacuteclaration de classe

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

class Presentation lt Intervention deacuteclaration de la classe nombre = 0 variable de classe def initialize(intitule duree=45) post-constructeur intitule = intitule duree = duree nombre += 1 super appel de la meacutethode end dans la classe megravere def to_s titre + + dureeto_s + minutes end def selfnombre meacutethode de classe nombre end end

page 12 sur 33

Orienteacute objet utilisation

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

Presentationnombre renvoie 0p = Presentationnew(Preacutesentation de Ruby)

Presentationnombre renvoie 1

puts p affiche Preacutesentation de Ruby 45 minutes

pfinNoMethodError undefined method `fin for ltPresentation0x49214gt

def pfin puts Suffisamment de Ruby aujourdhui end

pfin affiche Suffisamment de Ruby aujourdrsquohui

page 13 sur 33

Orienteacute objet polymorphisme

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

module RMLL creacutee un nouveau module

EDITION = 2008

renvoie IUT IUFM ou CCI def lieu end

end

puts RMLLEDITION affiche 2008

class Presentation on rouvre la deacutefinition include RMLL pour inclure ce qui est deacutefiniend dans le module RMLL

pextends(RMLL) on eacutetend lobjet p

page 14 sur 33

Un peu plus loin

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

puts salut do puts salutend

lambda puts salut proc do puts salutend

p = Procnew puts salut pcall affiche salut

p = Procnew |i| puts i + 1 pcall 1 affiche 2pcall 41 affiche 42

page 14 sur 33

Un peu plus loin

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

puts salut do puts salutend

lambda puts salut proc do puts salutend

p = Procnew puts salut pcall affiche salut

p = Procnew |i| puts i + 1 pcall 1 affiche 2pcall 41 affiche 42

blocsiteacuterateursyield

page 14 sur 33

Un peu plus loin

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

puts salut do puts salutend

lambda puts salut proc do puts salutend

p = Procnew puts salut pcall affiche salut

p = Procnew |i| puts i + 1 pcall 1 affiche 2pcall 41 affiche 42

page 15 sur 33

Un peu plus loin les iteacuterateurs

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

lyonnais = [Freacutedeacuteric Alexis Jeacuterocircme] lyonnaiseach do |l| puts Dommage l nest pas venu cette anneacuteeend

rmll = 2008 =gt Mont-de-Marsan 2007 =gt Amiens 2006 =gt Vandoeuvre-les-Nancy 2002 =gt Talence

rmlleach_pair do |annee lieu| puts En annee je suis alleacute aux RMLL agrave lieuend

rmllkeyssorteach do |annee| puts En annee je suis alleacute aux RMLL agrave rmll[annee]end

page 16 sur 33

Un peu plus loin les iteacuterateurs

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

lecture dun fichier faccedilon blocs

avertissements = erreurs = 0 initialisation

Fileopen(logtxt) do |fichier| ouverture fichierreadlineseach do |ligne| lecture des lignes case ligne when ^WARN avertissements += 1 when ^ERR erreurs += 1 end endend fermeture automatique

puts Il y a avertissements avertissementsputs et erreurs erreurs dans ce fichier

page 17 sur 33

Un peu plus loin yield

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

class Personne

def initialize(nom) nom = nom end

def salue la meacutethode salue se contente drsquoexeacutecuteryield nom le bloc qui lui est passeacute

end lrsquoargument nom

end

celine = Personnenew(Ceacuteline)celinesalue |n| puts salut n affiche salut Ceacuteline

page 17 sur 33

Un peu plus loin yield

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

class Personne

def initialize(nom) nom = nom end

def salue la meacutethode salue se contente drsquoexeacutecuteryield nom le bloc qui lui est passeacute

end lrsquoargument nom

end

celine = Personnenew(Ceacuteline)celinesalue |n| puts salut n affiche salut Ceacuteline

mais comment ccedila marche

page 17 sur 33

Un peu plus loin yield

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

class Personne

def initialize(nom) nom = nom end

def salue la meacutethode salue se contente drsquoexeacutecuteryield nom le bloc qui lui est passeacute

end lrsquoargument nom

end

celine = Personnenew(Ceacuteline)celinesalue |n| puts salut n affiche salut Ceacuteline

page 18 sur 33

Dynamisme eacutevaluation de code

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

eval puts salut

def operation(operateur operande1 operande2) eval operande1 operateur operande2end

operation + 1 2 renvoie 3operation 9 0 renvoie

Presentationclass_eval do end

page 18 sur 33

Dynamisme eacutevaluation de code

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

eval puts salut

def operation(operateur operande1 operande2) eval operande1 operateur operande2end

operation + 1 2 renvoie 3operation 9 0 renvoie

Presentationclass_eval do end

eacutevaluation de codeinterception drsquoappels de meacutethodes inexistantesexeacutecution des deacutefinitions

reacuteflexiviteacute introspection

page 18 sur 33

Dynamisme eacutevaluation de code

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

eval puts salut

def operation(operateur operande1 operande2) eval operande1 operateur operande2end

operation + 1 2 renvoie 3operation 9 0 renvoie

Presentationclass_eval do end

page 19 sur 33

Dynamisme meacutethodes inexistantes

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

Presentationnombre renvoie 0p = Presentationnew(Preacutesentation de Ruby)

Presentationnombre renvoie 1

puts p affiche Preacutesentation de Ruby 45 minutes

pfinNoMethodError undefined method `fin for ltPresentation0x49214gt

def pfin puts Suffisamment de Ruby aujourdhui end

pfin affiche Suffisamment de Ruby aujourdrsquohui

page 20 sur 33

Dynamisme meacutethodes inexistantes

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

class Presentation def method_missing(nom args) method_missing puts Il ny a pas de meacutethode nom est appeleacutee end avant la leveacuteeend de lexception

p = Presentationnew(Preacutesentation de Ruby)

pfin affiche Il ny a pas de meacutethode fin pas drsquoexception

method_missing est lrsquoun des nombreux ldquohooksrdquo disponibles dans Ruby

page 21 sur 33

Dynamisme deacutefinitions exeacutecuteacutees

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

class Configuration case RUBY_PLATFORM deacutefinition dune meacutethode when linux en fonction du systegraveme def initialize(params) hocircte end when win32 def initialize(params) end when darwin include YAIBExtensionsSpecificOSX else unless include YAIBStandard raise Votre OS nest pas supporteacute end end end

page 22 sur 33

Dynamisme reacuteflexiviteacute introspection

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

On peut interroger tous les composants du langage agrave lrsquoexeacutecution

obj = Arraynewobjclass

objclassinstance_methodsobjmethods eacutequivalent agrave la ligne du dessusobjprivate_methods

objclassinstance_methodsgrep(delete)objclassinstance_methodsgrep(delete)sort

objmethodsgrep(^on_connect_do)each do |method| objsend methodend

page 23 sur 33

Dynamisme reacuteflexiviteacute introspection

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

On peut rouvrir une deacutefinition y compris celle du langage

class Array la classe Array existe on la rouvre def longueur ajout drsquoune meacutethode en franccedilais length proxy vers la meacutethode en anglais end end

arr = Arraynewarr ltlt 1arr ltlt element

arrlongueur renvoie 2

page 24 sur 33

Dynamisme reacuteflexiviteacute introspection

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

class Counterparty def has_all_mandatory_fields_filled quelques veacuterifications end def can_be_in_completed_or_approved_status return false unless selfhas_all_mandatory_fields_filled return false unless selflgdhas_all_mandatory_fields_filled unless selfratingshave_all_mandatory_fields_filled

return false end return true end

end

page 25 sur 33

Dynamisme reacuteflexiviteacute introspection

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

modification de la classe Arrayclass Array

def have_all_mandatory_fields_filled selfeach do |item| unless itemrespond_to has_all_mandatory_fields_filled return false end unless itemhas_all_mandatory_fields_filled return false end end return true end

end

page 26 sur 33

Se mettre agrave Ruby

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

(g)vi(m)(X)emacsSciTE

FreeRIDE (eacutecrit en Ruby)

e-TextEditorTextMate (seulement OSX)

Eclipse avec les Ruby Development ToolsNetBeans 61 (support Ruby et JRuby)

page 26 sur 33

Se mettre agrave Ruby

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

(g)vi(m)(X)emacsSciTE

FreeRIDE (eacutecrit en Ruby)

e-TextEditorTextMate (seulement OSX)

Eclipse avec les Ruby Development ToolsNetBeans 61 (support Ruby et JRuby)

Editeurs et environnements compatiblesLrsquooutil indispensable irbRessources en ligneLivres

page 26 sur 33

Se mettre agrave Ruby

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

(g)vi(m)(X)emacsSciTE

FreeRIDE (eacutecrit en Ruby)

e-TextEditorTextMate (seulement OSX)

Eclipse avec les Ruby Development ToolsNetBeans 61 (support Ruby et JRuby)

page 27 sur 33

Se mettre agrave Ruby irb

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

page 28 sur 33

Se mettre agrave Ruby ressources en ligne

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

Le site officiel (httpwwwruby-langorg)Sa traduction (httpwwwruby-langorgfr)

Le portail Ruby France (httpwwwrubyfranceorg)

Les listes de diffusion sur Google Groups(ruby-talk ruby-core rubyfr-public)

Les groupes de discussion sur Usenet(complangruby frcomplangruby)

Les salons IRC sur FreeNode (ircfreenodenet)(ruby-lang rubyfr)

page 29 sur 33

Se mettre agrave Ruby livres

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

Ruby in a NutshellProgramming RubyThe Ruby WayDesign Patterns for Ruby

Ruby par lrsquoexemple

Passez sur le stand Ruby France

page 30 sur 33

Fin de la preacutesentation

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

page 30 sur 33

Fin de la preacutesentation

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

Des questions

page 30 sur 33

Fin de la preacutesentation

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

page 32 sur 33

Fin de la preacutesentation

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

Merci

page 32 sur 33

Ougrave reacutecupeacuterer ce document

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

Le support de cette preacutesentation sera disponible sur httpzlabfr

page 33 sur 33

Licence de ce document

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

bullVous ecirctes libres bullde reproduire distribuer et communiquer cette creacuteation au public

bullSelon les conditions suivantes bullPaterniteacutebull Vous devez citer le nom de lauteur original de la maniegravere indiqueacutee par lauteur de loeuvre ou le titulaire des droits qui vous confegravere cette autorisation (mais pas dune maniegravere qui suggeacutererait quils vous soutiennent ou approuvent votre utilisation de loeuvre)

bullPas drsquoutilisation commercialebull Vous navez pas le droit dutiliser cette creacuteation agrave des fins commerciales

bullPas de modificationbull Vous navez pas le droit de modifier de transformer ou dadapter cette creacuteation

bullreacutesumeacute explicatif disponible sur httpcreativecommonsorglicensesby-nc-nd20fr

bullvous ecirctes autoriseacute agrave reacuteutiliser le logo Ruby France utiliseacute dans cette preacutesentation pour faire reacutefeacuterence agrave lrsquoassociation

page 6 sur 33

Syntaxe de base

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

ruby variable locale

def ruby_method identificateur de meacutethodeend

$ruby variable globale$RUBY

RubyVersion constanteRUBY_VERSION

ruby_version symbole

page 7 sur 33

Syntaxe de base conditions

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

if version == 186 puts vous utilisez la derniegravereelse puts passez agrave la versionend

puts Mauvais format unless objis_a Hash

case version when 186 puts when ^18d puts il y a plus reacutecent when ^19d puts oh oh -) else puts il est temps de se mettre agrave jourend

page 8 sur 33

Syntaxe de base les exceptions

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

begin f = Fileopen(fichiertxt) texte = freadline puts Lrsquoen-tecircte du fichier est texterescue ErrnoENOENT =gt e puts Il ny a pas de tel fichier rescue NoMethodError =gt e puts Lrsquoouverture srsquoest probablement mal passeacutee rescue SyntaxError =gt e puts Une erreur du deacuteveloppeur (emessage) raise eensure fclose if frespond_to closeend

page 9 sur 33

Syntaxe de base quelques idiomes

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

method( param1 =gt valeur1 param2 =gt valeur2 )method( param1 =gt valeur1 param2 =gt valeur2 )method param1 =gt valeur1 param2 =gt valeur2

def method(params) options = param1 =gt valeur par deacutefaut optionsmerge params end

objrespond_to methode

objdelete_at(1)gsub(e r)upcase

page 10 sur 33

Orienteacute objet

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

-123abs renvoie 123-123class renvoie Fixnum

chaine = rmllchaineupcase renvoie RMLLputs chaine affiche rmllchaineupcase renvoie RMLLputs chaine affiche RMLL

nilclass renvoie NilClasstrueclass renvoie TrueClassfalseclass renvoie FalseClassnilnil renvoie true

page 10 sur 33

Orienteacute objet

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

-123abs renvoie 123-123class renvoie Fixnum

chaine = rmllchaineupcase renvoie RMLLputs chaine affiche rmllchaineupcase renvoie RMLLputs chaine affiche RMLL

nilclass renvoie NilClasstrueclass renvoie TrueClassfalseclass renvoie FalseClassnilnil renvoie true

appel de meacutethodesdeacuteclaration de classeutilisationpolymorphisme

page 10 sur 33

Orienteacute objet

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

-123abs renvoie 123-123class renvoie Fixnum

chaine = rmllchaineupcase renvoie RMLLputs chaine affiche rmllchaineupcase renvoie RMLLputs chaine affiche RMLL

nilclass renvoie NilClasstrueclass renvoie TrueClassfalseclass renvoie FalseClassnilnil renvoie true

page 11 sur 33

Orienteacute objet deacuteclaration de classe

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

class Presentation lt Intervention deacuteclaration de la classe nombre = 0 variable de classe def initialize(intitule duree=45) post-constructeur intitule = intitule duree = duree nombre += 1 super appel de la meacutethode end dans la classe megravere def to_s titre + + dureeto_s + minutes end def selfnombre meacutethode de classe nombre end end

page 12 sur 33

Orienteacute objet utilisation

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

Presentationnombre renvoie 0p = Presentationnew(Preacutesentation de Ruby)

Presentationnombre renvoie 1

puts p affiche Preacutesentation de Ruby 45 minutes

pfinNoMethodError undefined method `fin for ltPresentation0x49214gt

def pfin puts Suffisamment de Ruby aujourdhui end

pfin affiche Suffisamment de Ruby aujourdrsquohui

page 13 sur 33

Orienteacute objet polymorphisme

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

module RMLL creacutee un nouveau module

EDITION = 2008

renvoie IUT IUFM ou CCI def lieu end

end

puts RMLLEDITION affiche 2008

class Presentation on rouvre la deacutefinition include RMLL pour inclure ce qui est deacutefiniend dans le module RMLL

pextends(RMLL) on eacutetend lobjet p

page 14 sur 33

Un peu plus loin

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

puts salut do puts salutend

lambda puts salut proc do puts salutend

p = Procnew puts salut pcall affiche salut

p = Procnew |i| puts i + 1 pcall 1 affiche 2pcall 41 affiche 42

page 14 sur 33

Un peu plus loin

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

puts salut do puts salutend

lambda puts salut proc do puts salutend

p = Procnew puts salut pcall affiche salut

p = Procnew |i| puts i + 1 pcall 1 affiche 2pcall 41 affiche 42

blocsiteacuterateursyield

page 14 sur 33

Un peu plus loin

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

puts salut do puts salutend

lambda puts salut proc do puts salutend

p = Procnew puts salut pcall affiche salut

p = Procnew |i| puts i + 1 pcall 1 affiche 2pcall 41 affiche 42

page 15 sur 33

Un peu plus loin les iteacuterateurs

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

lyonnais = [Freacutedeacuteric Alexis Jeacuterocircme] lyonnaiseach do |l| puts Dommage l nest pas venu cette anneacuteeend

rmll = 2008 =gt Mont-de-Marsan 2007 =gt Amiens 2006 =gt Vandoeuvre-les-Nancy 2002 =gt Talence

rmlleach_pair do |annee lieu| puts En annee je suis alleacute aux RMLL agrave lieuend

rmllkeyssorteach do |annee| puts En annee je suis alleacute aux RMLL agrave rmll[annee]end

page 16 sur 33

Un peu plus loin les iteacuterateurs

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

lecture dun fichier faccedilon blocs

avertissements = erreurs = 0 initialisation

Fileopen(logtxt) do |fichier| ouverture fichierreadlineseach do |ligne| lecture des lignes case ligne when ^WARN avertissements += 1 when ^ERR erreurs += 1 end endend fermeture automatique

puts Il y a avertissements avertissementsputs et erreurs erreurs dans ce fichier

page 17 sur 33

Un peu plus loin yield

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

class Personne

def initialize(nom) nom = nom end

def salue la meacutethode salue se contente drsquoexeacutecuteryield nom le bloc qui lui est passeacute

end lrsquoargument nom

end

celine = Personnenew(Ceacuteline)celinesalue |n| puts salut n affiche salut Ceacuteline

page 17 sur 33

Un peu plus loin yield

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

class Personne

def initialize(nom) nom = nom end

def salue la meacutethode salue se contente drsquoexeacutecuteryield nom le bloc qui lui est passeacute

end lrsquoargument nom

end

celine = Personnenew(Ceacuteline)celinesalue |n| puts salut n affiche salut Ceacuteline

mais comment ccedila marche

page 17 sur 33

Un peu plus loin yield

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

class Personne

def initialize(nom) nom = nom end

def salue la meacutethode salue se contente drsquoexeacutecuteryield nom le bloc qui lui est passeacute

end lrsquoargument nom

end

celine = Personnenew(Ceacuteline)celinesalue |n| puts salut n affiche salut Ceacuteline

page 18 sur 33

Dynamisme eacutevaluation de code

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

eval puts salut

def operation(operateur operande1 operande2) eval operande1 operateur operande2end

operation + 1 2 renvoie 3operation 9 0 renvoie

Presentationclass_eval do end

page 18 sur 33

Dynamisme eacutevaluation de code

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

eval puts salut

def operation(operateur operande1 operande2) eval operande1 operateur operande2end

operation + 1 2 renvoie 3operation 9 0 renvoie

Presentationclass_eval do end

eacutevaluation de codeinterception drsquoappels de meacutethodes inexistantesexeacutecution des deacutefinitions

reacuteflexiviteacute introspection

page 18 sur 33

Dynamisme eacutevaluation de code

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

eval puts salut

def operation(operateur operande1 operande2) eval operande1 operateur operande2end

operation + 1 2 renvoie 3operation 9 0 renvoie

Presentationclass_eval do end

page 19 sur 33

Dynamisme meacutethodes inexistantes

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

Presentationnombre renvoie 0p = Presentationnew(Preacutesentation de Ruby)

Presentationnombre renvoie 1

puts p affiche Preacutesentation de Ruby 45 minutes

pfinNoMethodError undefined method `fin for ltPresentation0x49214gt

def pfin puts Suffisamment de Ruby aujourdhui end

pfin affiche Suffisamment de Ruby aujourdrsquohui

page 20 sur 33

Dynamisme meacutethodes inexistantes

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

class Presentation def method_missing(nom args) method_missing puts Il ny a pas de meacutethode nom est appeleacutee end avant la leveacuteeend de lexception

p = Presentationnew(Preacutesentation de Ruby)

pfin affiche Il ny a pas de meacutethode fin pas drsquoexception

method_missing est lrsquoun des nombreux ldquohooksrdquo disponibles dans Ruby

page 21 sur 33

Dynamisme deacutefinitions exeacutecuteacutees

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

class Configuration case RUBY_PLATFORM deacutefinition dune meacutethode when linux en fonction du systegraveme def initialize(params) hocircte end when win32 def initialize(params) end when darwin include YAIBExtensionsSpecificOSX else unless include YAIBStandard raise Votre OS nest pas supporteacute end end end

page 22 sur 33

Dynamisme reacuteflexiviteacute introspection

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

On peut interroger tous les composants du langage agrave lrsquoexeacutecution

obj = Arraynewobjclass

objclassinstance_methodsobjmethods eacutequivalent agrave la ligne du dessusobjprivate_methods

objclassinstance_methodsgrep(delete)objclassinstance_methodsgrep(delete)sort

objmethodsgrep(^on_connect_do)each do |method| objsend methodend

page 23 sur 33

Dynamisme reacuteflexiviteacute introspection

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

On peut rouvrir une deacutefinition y compris celle du langage

class Array la classe Array existe on la rouvre def longueur ajout drsquoune meacutethode en franccedilais length proxy vers la meacutethode en anglais end end

arr = Arraynewarr ltlt 1arr ltlt element

arrlongueur renvoie 2

page 24 sur 33

Dynamisme reacuteflexiviteacute introspection

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

class Counterparty def has_all_mandatory_fields_filled quelques veacuterifications end def can_be_in_completed_or_approved_status return false unless selfhas_all_mandatory_fields_filled return false unless selflgdhas_all_mandatory_fields_filled unless selfratingshave_all_mandatory_fields_filled

return false end return true end

end

page 25 sur 33

Dynamisme reacuteflexiviteacute introspection

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

modification de la classe Arrayclass Array

def have_all_mandatory_fields_filled selfeach do |item| unless itemrespond_to has_all_mandatory_fields_filled return false end unless itemhas_all_mandatory_fields_filled return false end end return true end

end

page 26 sur 33

Se mettre agrave Ruby

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

(g)vi(m)(X)emacsSciTE

FreeRIDE (eacutecrit en Ruby)

e-TextEditorTextMate (seulement OSX)

Eclipse avec les Ruby Development ToolsNetBeans 61 (support Ruby et JRuby)

page 26 sur 33

Se mettre agrave Ruby

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

(g)vi(m)(X)emacsSciTE

FreeRIDE (eacutecrit en Ruby)

e-TextEditorTextMate (seulement OSX)

Eclipse avec les Ruby Development ToolsNetBeans 61 (support Ruby et JRuby)

Editeurs et environnements compatiblesLrsquooutil indispensable irbRessources en ligneLivres

page 26 sur 33

Se mettre agrave Ruby

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

(g)vi(m)(X)emacsSciTE

FreeRIDE (eacutecrit en Ruby)

e-TextEditorTextMate (seulement OSX)

Eclipse avec les Ruby Development ToolsNetBeans 61 (support Ruby et JRuby)

page 27 sur 33

Se mettre agrave Ruby irb

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

page 28 sur 33

Se mettre agrave Ruby ressources en ligne

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

Le site officiel (httpwwwruby-langorg)Sa traduction (httpwwwruby-langorgfr)

Le portail Ruby France (httpwwwrubyfranceorg)

Les listes de diffusion sur Google Groups(ruby-talk ruby-core rubyfr-public)

Les groupes de discussion sur Usenet(complangruby frcomplangruby)

Les salons IRC sur FreeNode (ircfreenodenet)(ruby-lang rubyfr)

page 29 sur 33

Se mettre agrave Ruby livres

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

Ruby in a NutshellProgramming RubyThe Ruby WayDesign Patterns for Ruby

Ruby par lrsquoexemple

Passez sur le stand Ruby France

page 30 sur 33

Fin de la preacutesentation

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

page 30 sur 33

Fin de la preacutesentation

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

Des questions

page 30 sur 33

Fin de la preacutesentation

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

page 32 sur 33

Fin de la preacutesentation

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

Merci

page 32 sur 33

Ougrave reacutecupeacuterer ce document

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

Le support de cette preacutesentation sera disponible sur httpzlabfr

page 33 sur 33

Licence de ce document

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

bullVous ecirctes libres bullde reproduire distribuer et communiquer cette creacuteation au public

bullSelon les conditions suivantes bullPaterniteacutebull Vous devez citer le nom de lauteur original de la maniegravere indiqueacutee par lauteur de loeuvre ou le titulaire des droits qui vous confegravere cette autorisation (mais pas dune maniegravere qui suggeacutererait quils vous soutiennent ou approuvent votre utilisation de loeuvre)

bullPas drsquoutilisation commercialebull Vous navez pas le droit dutiliser cette creacuteation agrave des fins commerciales

bullPas de modificationbull Vous navez pas le droit de modifier de transformer ou dadapter cette creacuteation

bullreacutesumeacute explicatif disponible sur httpcreativecommonsorglicensesby-nc-nd20fr

bullvous ecirctes autoriseacute agrave reacuteutiliser le logo Ruby France utiliseacute dans cette preacutesentation pour faire reacutefeacuterence agrave lrsquoassociation

page 7 sur 33

Syntaxe de base conditions

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

if version == 186 puts vous utilisez la derniegravereelse puts passez agrave la versionend

puts Mauvais format unless objis_a Hash

case version when 186 puts when ^18d puts il y a plus reacutecent when ^19d puts oh oh -) else puts il est temps de se mettre agrave jourend

page 8 sur 33

Syntaxe de base les exceptions

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

begin f = Fileopen(fichiertxt) texte = freadline puts Lrsquoen-tecircte du fichier est texterescue ErrnoENOENT =gt e puts Il ny a pas de tel fichier rescue NoMethodError =gt e puts Lrsquoouverture srsquoest probablement mal passeacutee rescue SyntaxError =gt e puts Une erreur du deacuteveloppeur (emessage) raise eensure fclose if frespond_to closeend

page 9 sur 33

Syntaxe de base quelques idiomes

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

method( param1 =gt valeur1 param2 =gt valeur2 )method( param1 =gt valeur1 param2 =gt valeur2 )method param1 =gt valeur1 param2 =gt valeur2

def method(params) options = param1 =gt valeur par deacutefaut optionsmerge params end

objrespond_to methode

objdelete_at(1)gsub(e r)upcase

page 10 sur 33

Orienteacute objet

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

-123abs renvoie 123-123class renvoie Fixnum

chaine = rmllchaineupcase renvoie RMLLputs chaine affiche rmllchaineupcase renvoie RMLLputs chaine affiche RMLL

nilclass renvoie NilClasstrueclass renvoie TrueClassfalseclass renvoie FalseClassnilnil renvoie true

page 10 sur 33

Orienteacute objet

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

-123abs renvoie 123-123class renvoie Fixnum

chaine = rmllchaineupcase renvoie RMLLputs chaine affiche rmllchaineupcase renvoie RMLLputs chaine affiche RMLL

nilclass renvoie NilClasstrueclass renvoie TrueClassfalseclass renvoie FalseClassnilnil renvoie true

appel de meacutethodesdeacuteclaration de classeutilisationpolymorphisme

page 10 sur 33

Orienteacute objet

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

-123abs renvoie 123-123class renvoie Fixnum

chaine = rmllchaineupcase renvoie RMLLputs chaine affiche rmllchaineupcase renvoie RMLLputs chaine affiche RMLL

nilclass renvoie NilClasstrueclass renvoie TrueClassfalseclass renvoie FalseClassnilnil renvoie true

page 11 sur 33

Orienteacute objet deacuteclaration de classe

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

class Presentation lt Intervention deacuteclaration de la classe nombre = 0 variable de classe def initialize(intitule duree=45) post-constructeur intitule = intitule duree = duree nombre += 1 super appel de la meacutethode end dans la classe megravere def to_s titre + + dureeto_s + minutes end def selfnombre meacutethode de classe nombre end end

page 12 sur 33

Orienteacute objet utilisation

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

Presentationnombre renvoie 0p = Presentationnew(Preacutesentation de Ruby)

Presentationnombre renvoie 1

puts p affiche Preacutesentation de Ruby 45 minutes

pfinNoMethodError undefined method `fin for ltPresentation0x49214gt

def pfin puts Suffisamment de Ruby aujourdhui end

pfin affiche Suffisamment de Ruby aujourdrsquohui

page 13 sur 33

Orienteacute objet polymorphisme

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

module RMLL creacutee un nouveau module

EDITION = 2008

renvoie IUT IUFM ou CCI def lieu end

end

puts RMLLEDITION affiche 2008

class Presentation on rouvre la deacutefinition include RMLL pour inclure ce qui est deacutefiniend dans le module RMLL

pextends(RMLL) on eacutetend lobjet p

page 14 sur 33

Un peu plus loin

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

puts salut do puts salutend

lambda puts salut proc do puts salutend

p = Procnew puts salut pcall affiche salut

p = Procnew |i| puts i + 1 pcall 1 affiche 2pcall 41 affiche 42

page 14 sur 33

Un peu plus loin

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

puts salut do puts salutend

lambda puts salut proc do puts salutend

p = Procnew puts salut pcall affiche salut

p = Procnew |i| puts i + 1 pcall 1 affiche 2pcall 41 affiche 42

blocsiteacuterateursyield

page 14 sur 33

Un peu plus loin

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

puts salut do puts salutend

lambda puts salut proc do puts salutend

p = Procnew puts salut pcall affiche salut

p = Procnew |i| puts i + 1 pcall 1 affiche 2pcall 41 affiche 42

page 15 sur 33

Un peu plus loin les iteacuterateurs

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

lyonnais = [Freacutedeacuteric Alexis Jeacuterocircme] lyonnaiseach do |l| puts Dommage l nest pas venu cette anneacuteeend

rmll = 2008 =gt Mont-de-Marsan 2007 =gt Amiens 2006 =gt Vandoeuvre-les-Nancy 2002 =gt Talence

rmlleach_pair do |annee lieu| puts En annee je suis alleacute aux RMLL agrave lieuend

rmllkeyssorteach do |annee| puts En annee je suis alleacute aux RMLL agrave rmll[annee]end

page 16 sur 33

Un peu plus loin les iteacuterateurs

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

lecture dun fichier faccedilon blocs

avertissements = erreurs = 0 initialisation

Fileopen(logtxt) do |fichier| ouverture fichierreadlineseach do |ligne| lecture des lignes case ligne when ^WARN avertissements += 1 when ^ERR erreurs += 1 end endend fermeture automatique

puts Il y a avertissements avertissementsputs et erreurs erreurs dans ce fichier

page 17 sur 33

Un peu plus loin yield

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

class Personne

def initialize(nom) nom = nom end

def salue la meacutethode salue se contente drsquoexeacutecuteryield nom le bloc qui lui est passeacute

end lrsquoargument nom

end

celine = Personnenew(Ceacuteline)celinesalue |n| puts salut n affiche salut Ceacuteline

page 17 sur 33

Un peu plus loin yield

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

class Personne

def initialize(nom) nom = nom end

def salue la meacutethode salue se contente drsquoexeacutecuteryield nom le bloc qui lui est passeacute

end lrsquoargument nom

end

celine = Personnenew(Ceacuteline)celinesalue |n| puts salut n affiche salut Ceacuteline

mais comment ccedila marche

page 17 sur 33

Un peu plus loin yield

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

class Personne

def initialize(nom) nom = nom end

def salue la meacutethode salue se contente drsquoexeacutecuteryield nom le bloc qui lui est passeacute

end lrsquoargument nom

end

celine = Personnenew(Ceacuteline)celinesalue |n| puts salut n affiche salut Ceacuteline

page 18 sur 33

Dynamisme eacutevaluation de code

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

eval puts salut

def operation(operateur operande1 operande2) eval operande1 operateur operande2end

operation + 1 2 renvoie 3operation 9 0 renvoie

Presentationclass_eval do end

page 18 sur 33

Dynamisme eacutevaluation de code

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

eval puts salut

def operation(operateur operande1 operande2) eval operande1 operateur operande2end

operation + 1 2 renvoie 3operation 9 0 renvoie

Presentationclass_eval do end

eacutevaluation de codeinterception drsquoappels de meacutethodes inexistantesexeacutecution des deacutefinitions

reacuteflexiviteacute introspection

page 18 sur 33

Dynamisme eacutevaluation de code

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

eval puts salut

def operation(operateur operande1 operande2) eval operande1 operateur operande2end

operation + 1 2 renvoie 3operation 9 0 renvoie

Presentationclass_eval do end

page 19 sur 33

Dynamisme meacutethodes inexistantes

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

Presentationnombre renvoie 0p = Presentationnew(Preacutesentation de Ruby)

Presentationnombre renvoie 1

puts p affiche Preacutesentation de Ruby 45 minutes

pfinNoMethodError undefined method `fin for ltPresentation0x49214gt

def pfin puts Suffisamment de Ruby aujourdhui end

pfin affiche Suffisamment de Ruby aujourdrsquohui

page 20 sur 33

Dynamisme meacutethodes inexistantes

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

class Presentation def method_missing(nom args) method_missing puts Il ny a pas de meacutethode nom est appeleacutee end avant la leveacuteeend de lexception

p = Presentationnew(Preacutesentation de Ruby)

pfin affiche Il ny a pas de meacutethode fin pas drsquoexception

method_missing est lrsquoun des nombreux ldquohooksrdquo disponibles dans Ruby

page 21 sur 33

Dynamisme deacutefinitions exeacutecuteacutees

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

class Configuration case RUBY_PLATFORM deacutefinition dune meacutethode when linux en fonction du systegraveme def initialize(params) hocircte end when win32 def initialize(params) end when darwin include YAIBExtensionsSpecificOSX else unless include YAIBStandard raise Votre OS nest pas supporteacute end end end

page 22 sur 33

Dynamisme reacuteflexiviteacute introspection

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

On peut interroger tous les composants du langage agrave lrsquoexeacutecution

obj = Arraynewobjclass

objclassinstance_methodsobjmethods eacutequivalent agrave la ligne du dessusobjprivate_methods

objclassinstance_methodsgrep(delete)objclassinstance_methodsgrep(delete)sort

objmethodsgrep(^on_connect_do)each do |method| objsend methodend

page 23 sur 33

Dynamisme reacuteflexiviteacute introspection

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

On peut rouvrir une deacutefinition y compris celle du langage

class Array la classe Array existe on la rouvre def longueur ajout drsquoune meacutethode en franccedilais length proxy vers la meacutethode en anglais end end

arr = Arraynewarr ltlt 1arr ltlt element

arrlongueur renvoie 2

page 24 sur 33

Dynamisme reacuteflexiviteacute introspection

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

class Counterparty def has_all_mandatory_fields_filled quelques veacuterifications end def can_be_in_completed_or_approved_status return false unless selfhas_all_mandatory_fields_filled return false unless selflgdhas_all_mandatory_fields_filled unless selfratingshave_all_mandatory_fields_filled

return false end return true end

end

page 25 sur 33

Dynamisme reacuteflexiviteacute introspection

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

modification de la classe Arrayclass Array

def have_all_mandatory_fields_filled selfeach do |item| unless itemrespond_to has_all_mandatory_fields_filled return false end unless itemhas_all_mandatory_fields_filled return false end end return true end

end

page 26 sur 33

Se mettre agrave Ruby

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

(g)vi(m)(X)emacsSciTE

FreeRIDE (eacutecrit en Ruby)

e-TextEditorTextMate (seulement OSX)

Eclipse avec les Ruby Development ToolsNetBeans 61 (support Ruby et JRuby)

page 26 sur 33

Se mettre agrave Ruby

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

(g)vi(m)(X)emacsSciTE

FreeRIDE (eacutecrit en Ruby)

e-TextEditorTextMate (seulement OSX)

Eclipse avec les Ruby Development ToolsNetBeans 61 (support Ruby et JRuby)

Editeurs et environnements compatiblesLrsquooutil indispensable irbRessources en ligneLivres

page 26 sur 33

Se mettre agrave Ruby

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

(g)vi(m)(X)emacsSciTE

FreeRIDE (eacutecrit en Ruby)

e-TextEditorTextMate (seulement OSX)

Eclipse avec les Ruby Development ToolsNetBeans 61 (support Ruby et JRuby)

page 27 sur 33

Se mettre agrave Ruby irb

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

page 28 sur 33

Se mettre agrave Ruby ressources en ligne

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

Le site officiel (httpwwwruby-langorg)Sa traduction (httpwwwruby-langorgfr)

Le portail Ruby France (httpwwwrubyfranceorg)

Les listes de diffusion sur Google Groups(ruby-talk ruby-core rubyfr-public)

Les groupes de discussion sur Usenet(complangruby frcomplangruby)

Les salons IRC sur FreeNode (ircfreenodenet)(ruby-lang rubyfr)

page 29 sur 33

Se mettre agrave Ruby livres

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

Ruby in a NutshellProgramming RubyThe Ruby WayDesign Patterns for Ruby

Ruby par lrsquoexemple

Passez sur le stand Ruby France

page 30 sur 33

Fin de la preacutesentation

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

page 30 sur 33

Fin de la preacutesentation

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

Des questions

page 30 sur 33

Fin de la preacutesentation

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

page 32 sur 33

Fin de la preacutesentation

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

Merci

page 32 sur 33

Ougrave reacutecupeacuterer ce document

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

Le support de cette preacutesentation sera disponible sur httpzlabfr

page 33 sur 33

Licence de ce document

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

bullVous ecirctes libres bullde reproduire distribuer et communiquer cette creacuteation au public

bullSelon les conditions suivantes bullPaterniteacutebull Vous devez citer le nom de lauteur original de la maniegravere indiqueacutee par lauteur de loeuvre ou le titulaire des droits qui vous confegravere cette autorisation (mais pas dune maniegravere qui suggeacutererait quils vous soutiennent ou approuvent votre utilisation de loeuvre)

bullPas drsquoutilisation commercialebull Vous navez pas le droit dutiliser cette creacuteation agrave des fins commerciales

bullPas de modificationbull Vous navez pas le droit de modifier de transformer ou dadapter cette creacuteation

bullreacutesumeacute explicatif disponible sur httpcreativecommonsorglicensesby-nc-nd20fr

bullvous ecirctes autoriseacute agrave reacuteutiliser le logo Ruby France utiliseacute dans cette preacutesentation pour faire reacutefeacuterence agrave lrsquoassociation

page 8 sur 33

Syntaxe de base les exceptions

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

begin f = Fileopen(fichiertxt) texte = freadline puts Lrsquoen-tecircte du fichier est texterescue ErrnoENOENT =gt e puts Il ny a pas de tel fichier rescue NoMethodError =gt e puts Lrsquoouverture srsquoest probablement mal passeacutee rescue SyntaxError =gt e puts Une erreur du deacuteveloppeur (emessage) raise eensure fclose if frespond_to closeend

page 9 sur 33

Syntaxe de base quelques idiomes

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

method( param1 =gt valeur1 param2 =gt valeur2 )method( param1 =gt valeur1 param2 =gt valeur2 )method param1 =gt valeur1 param2 =gt valeur2

def method(params) options = param1 =gt valeur par deacutefaut optionsmerge params end

objrespond_to methode

objdelete_at(1)gsub(e r)upcase

page 10 sur 33

Orienteacute objet

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

-123abs renvoie 123-123class renvoie Fixnum

chaine = rmllchaineupcase renvoie RMLLputs chaine affiche rmllchaineupcase renvoie RMLLputs chaine affiche RMLL

nilclass renvoie NilClasstrueclass renvoie TrueClassfalseclass renvoie FalseClassnilnil renvoie true

page 10 sur 33

Orienteacute objet

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

-123abs renvoie 123-123class renvoie Fixnum

chaine = rmllchaineupcase renvoie RMLLputs chaine affiche rmllchaineupcase renvoie RMLLputs chaine affiche RMLL

nilclass renvoie NilClasstrueclass renvoie TrueClassfalseclass renvoie FalseClassnilnil renvoie true

appel de meacutethodesdeacuteclaration de classeutilisationpolymorphisme

page 10 sur 33

Orienteacute objet

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

-123abs renvoie 123-123class renvoie Fixnum

chaine = rmllchaineupcase renvoie RMLLputs chaine affiche rmllchaineupcase renvoie RMLLputs chaine affiche RMLL

nilclass renvoie NilClasstrueclass renvoie TrueClassfalseclass renvoie FalseClassnilnil renvoie true

page 11 sur 33

Orienteacute objet deacuteclaration de classe

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

class Presentation lt Intervention deacuteclaration de la classe nombre = 0 variable de classe def initialize(intitule duree=45) post-constructeur intitule = intitule duree = duree nombre += 1 super appel de la meacutethode end dans la classe megravere def to_s titre + + dureeto_s + minutes end def selfnombre meacutethode de classe nombre end end

page 12 sur 33

Orienteacute objet utilisation

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

Presentationnombre renvoie 0p = Presentationnew(Preacutesentation de Ruby)

Presentationnombre renvoie 1

puts p affiche Preacutesentation de Ruby 45 minutes

pfinNoMethodError undefined method `fin for ltPresentation0x49214gt

def pfin puts Suffisamment de Ruby aujourdhui end

pfin affiche Suffisamment de Ruby aujourdrsquohui

page 13 sur 33

Orienteacute objet polymorphisme

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

module RMLL creacutee un nouveau module

EDITION = 2008

renvoie IUT IUFM ou CCI def lieu end

end

puts RMLLEDITION affiche 2008

class Presentation on rouvre la deacutefinition include RMLL pour inclure ce qui est deacutefiniend dans le module RMLL

pextends(RMLL) on eacutetend lobjet p

page 14 sur 33

Un peu plus loin

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

puts salut do puts salutend

lambda puts salut proc do puts salutend

p = Procnew puts salut pcall affiche salut

p = Procnew |i| puts i + 1 pcall 1 affiche 2pcall 41 affiche 42

page 14 sur 33

Un peu plus loin

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

puts salut do puts salutend

lambda puts salut proc do puts salutend

p = Procnew puts salut pcall affiche salut

p = Procnew |i| puts i + 1 pcall 1 affiche 2pcall 41 affiche 42

blocsiteacuterateursyield

page 14 sur 33

Un peu plus loin

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

puts salut do puts salutend

lambda puts salut proc do puts salutend

p = Procnew puts salut pcall affiche salut

p = Procnew |i| puts i + 1 pcall 1 affiche 2pcall 41 affiche 42

page 15 sur 33

Un peu plus loin les iteacuterateurs

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

lyonnais = [Freacutedeacuteric Alexis Jeacuterocircme] lyonnaiseach do |l| puts Dommage l nest pas venu cette anneacuteeend

rmll = 2008 =gt Mont-de-Marsan 2007 =gt Amiens 2006 =gt Vandoeuvre-les-Nancy 2002 =gt Talence

rmlleach_pair do |annee lieu| puts En annee je suis alleacute aux RMLL agrave lieuend

rmllkeyssorteach do |annee| puts En annee je suis alleacute aux RMLL agrave rmll[annee]end

page 16 sur 33

Un peu plus loin les iteacuterateurs

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

lecture dun fichier faccedilon blocs

avertissements = erreurs = 0 initialisation

Fileopen(logtxt) do |fichier| ouverture fichierreadlineseach do |ligne| lecture des lignes case ligne when ^WARN avertissements += 1 when ^ERR erreurs += 1 end endend fermeture automatique

puts Il y a avertissements avertissementsputs et erreurs erreurs dans ce fichier

page 17 sur 33

Un peu plus loin yield

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

class Personne

def initialize(nom) nom = nom end

def salue la meacutethode salue se contente drsquoexeacutecuteryield nom le bloc qui lui est passeacute

end lrsquoargument nom

end

celine = Personnenew(Ceacuteline)celinesalue |n| puts salut n affiche salut Ceacuteline

page 17 sur 33

Un peu plus loin yield

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

class Personne

def initialize(nom) nom = nom end

def salue la meacutethode salue se contente drsquoexeacutecuteryield nom le bloc qui lui est passeacute

end lrsquoargument nom

end

celine = Personnenew(Ceacuteline)celinesalue |n| puts salut n affiche salut Ceacuteline

mais comment ccedila marche

page 17 sur 33

Un peu plus loin yield

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

class Personne

def initialize(nom) nom = nom end

def salue la meacutethode salue se contente drsquoexeacutecuteryield nom le bloc qui lui est passeacute

end lrsquoargument nom

end

celine = Personnenew(Ceacuteline)celinesalue |n| puts salut n affiche salut Ceacuteline

page 18 sur 33

Dynamisme eacutevaluation de code

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

eval puts salut

def operation(operateur operande1 operande2) eval operande1 operateur operande2end

operation + 1 2 renvoie 3operation 9 0 renvoie

Presentationclass_eval do end

page 18 sur 33

Dynamisme eacutevaluation de code

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

eval puts salut

def operation(operateur operande1 operande2) eval operande1 operateur operande2end

operation + 1 2 renvoie 3operation 9 0 renvoie

Presentationclass_eval do end

eacutevaluation de codeinterception drsquoappels de meacutethodes inexistantesexeacutecution des deacutefinitions

reacuteflexiviteacute introspection

page 18 sur 33

Dynamisme eacutevaluation de code

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

eval puts salut

def operation(operateur operande1 operande2) eval operande1 operateur operande2end

operation + 1 2 renvoie 3operation 9 0 renvoie

Presentationclass_eval do end

page 19 sur 33

Dynamisme meacutethodes inexistantes

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

Presentationnombre renvoie 0p = Presentationnew(Preacutesentation de Ruby)

Presentationnombre renvoie 1

puts p affiche Preacutesentation de Ruby 45 minutes

pfinNoMethodError undefined method `fin for ltPresentation0x49214gt

def pfin puts Suffisamment de Ruby aujourdhui end

pfin affiche Suffisamment de Ruby aujourdrsquohui

page 20 sur 33

Dynamisme meacutethodes inexistantes

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

class Presentation def method_missing(nom args) method_missing puts Il ny a pas de meacutethode nom est appeleacutee end avant la leveacuteeend de lexception

p = Presentationnew(Preacutesentation de Ruby)

pfin affiche Il ny a pas de meacutethode fin pas drsquoexception

method_missing est lrsquoun des nombreux ldquohooksrdquo disponibles dans Ruby

page 21 sur 33

Dynamisme deacutefinitions exeacutecuteacutees

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

class Configuration case RUBY_PLATFORM deacutefinition dune meacutethode when linux en fonction du systegraveme def initialize(params) hocircte end when win32 def initialize(params) end when darwin include YAIBExtensionsSpecificOSX else unless include YAIBStandard raise Votre OS nest pas supporteacute end end end

page 22 sur 33

Dynamisme reacuteflexiviteacute introspection

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

On peut interroger tous les composants du langage agrave lrsquoexeacutecution

obj = Arraynewobjclass

objclassinstance_methodsobjmethods eacutequivalent agrave la ligne du dessusobjprivate_methods

objclassinstance_methodsgrep(delete)objclassinstance_methodsgrep(delete)sort

objmethodsgrep(^on_connect_do)each do |method| objsend methodend

page 23 sur 33

Dynamisme reacuteflexiviteacute introspection

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

On peut rouvrir une deacutefinition y compris celle du langage

class Array la classe Array existe on la rouvre def longueur ajout drsquoune meacutethode en franccedilais length proxy vers la meacutethode en anglais end end

arr = Arraynewarr ltlt 1arr ltlt element

arrlongueur renvoie 2

page 24 sur 33

Dynamisme reacuteflexiviteacute introspection

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

class Counterparty def has_all_mandatory_fields_filled quelques veacuterifications end def can_be_in_completed_or_approved_status return false unless selfhas_all_mandatory_fields_filled return false unless selflgdhas_all_mandatory_fields_filled unless selfratingshave_all_mandatory_fields_filled

return false end return true end

end

page 25 sur 33

Dynamisme reacuteflexiviteacute introspection

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

modification de la classe Arrayclass Array

def have_all_mandatory_fields_filled selfeach do |item| unless itemrespond_to has_all_mandatory_fields_filled return false end unless itemhas_all_mandatory_fields_filled return false end end return true end

end

page 26 sur 33

Se mettre agrave Ruby

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

(g)vi(m)(X)emacsSciTE

FreeRIDE (eacutecrit en Ruby)

e-TextEditorTextMate (seulement OSX)

Eclipse avec les Ruby Development ToolsNetBeans 61 (support Ruby et JRuby)

page 26 sur 33

Se mettre agrave Ruby

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

(g)vi(m)(X)emacsSciTE

FreeRIDE (eacutecrit en Ruby)

e-TextEditorTextMate (seulement OSX)

Eclipse avec les Ruby Development ToolsNetBeans 61 (support Ruby et JRuby)

Editeurs et environnements compatiblesLrsquooutil indispensable irbRessources en ligneLivres

page 26 sur 33

Se mettre agrave Ruby

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

(g)vi(m)(X)emacsSciTE

FreeRIDE (eacutecrit en Ruby)

e-TextEditorTextMate (seulement OSX)

Eclipse avec les Ruby Development ToolsNetBeans 61 (support Ruby et JRuby)

page 27 sur 33

Se mettre agrave Ruby irb

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

page 28 sur 33

Se mettre agrave Ruby ressources en ligne

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

Le site officiel (httpwwwruby-langorg)Sa traduction (httpwwwruby-langorgfr)

Le portail Ruby France (httpwwwrubyfranceorg)

Les listes de diffusion sur Google Groups(ruby-talk ruby-core rubyfr-public)

Les groupes de discussion sur Usenet(complangruby frcomplangruby)

Les salons IRC sur FreeNode (ircfreenodenet)(ruby-lang rubyfr)

page 29 sur 33

Se mettre agrave Ruby livres

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

Ruby in a NutshellProgramming RubyThe Ruby WayDesign Patterns for Ruby

Ruby par lrsquoexemple

Passez sur le stand Ruby France

page 30 sur 33

Fin de la preacutesentation

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

page 30 sur 33

Fin de la preacutesentation

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

Des questions

page 30 sur 33

Fin de la preacutesentation

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

page 32 sur 33

Fin de la preacutesentation

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

Merci

page 32 sur 33

Ougrave reacutecupeacuterer ce document

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

Le support de cette preacutesentation sera disponible sur httpzlabfr

page 33 sur 33

Licence de ce document

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

bullVous ecirctes libres bullde reproduire distribuer et communiquer cette creacuteation au public

bullSelon les conditions suivantes bullPaterniteacutebull Vous devez citer le nom de lauteur original de la maniegravere indiqueacutee par lauteur de loeuvre ou le titulaire des droits qui vous confegravere cette autorisation (mais pas dune maniegravere qui suggeacutererait quils vous soutiennent ou approuvent votre utilisation de loeuvre)

bullPas drsquoutilisation commercialebull Vous navez pas le droit dutiliser cette creacuteation agrave des fins commerciales

bullPas de modificationbull Vous navez pas le droit de modifier de transformer ou dadapter cette creacuteation

bullreacutesumeacute explicatif disponible sur httpcreativecommonsorglicensesby-nc-nd20fr

bullvous ecirctes autoriseacute agrave reacuteutiliser le logo Ruby France utiliseacute dans cette preacutesentation pour faire reacutefeacuterence agrave lrsquoassociation

page 9 sur 33

Syntaxe de base quelques idiomes

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

method( param1 =gt valeur1 param2 =gt valeur2 )method( param1 =gt valeur1 param2 =gt valeur2 )method param1 =gt valeur1 param2 =gt valeur2

def method(params) options = param1 =gt valeur par deacutefaut optionsmerge params end

objrespond_to methode

objdelete_at(1)gsub(e r)upcase

page 10 sur 33

Orienteacute objet

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

-123abs renvoie 123-123class renvoie Fixnum

chaine = rmllchaineupcase renvoie RMLLputs chaine affiche rmllchaineupcase renvoie RMLLputs chaine affiche RMLL

nilclass renvoie NilClasstrueclass renvoie TrueClassfalseclass renvoie FalseClassnilnil renvoie true

page 10 sur 33

Orienteacute objet

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

-123abs renvoie 123-123class renvoie Fixnum

chaine = rmllchaineupcase renvoie RMLLputs chaine affiche rmllchaineupcase renvoie RMLLputs chaine affiche RMLL

nilclass renvoie NilClasstrueclass renvoie TrueClassfalseclass renvoie FalseClassnilnil renvoie true

appel de meacutethodesdeacuteclaration de classeutilisationpolymorphisme

page 10 sur 33

Orienteacute objet

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

-123abs renvoie 123-123class renvoie Fixnum

chaine = rmllchaineupcase renvoie RMLLputs chaine affiche rmllchaineupcase renvoie RMLLputs chaine affiche RMLL

nilclass renvoie NilClasstrueclass renvoie TrueClassfalseclass renvoie FalseClassnilnil renvoie true

page 11 sur 33

Orienteacute objet deacuteclaration de classe

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

class Presentation lt Intervention deacuteclaration de la classe nombre = 0 variable de classe def initialize(intitule duree=45) post-constructeur intitule = intitule duree = duree nombre += 1 super appel de la meacutethode end dans la classe megravere def to_s titre + + dureeto_s + minutes end def selfnombre meacutethode de classe nombre end end

page 12 sur 33

Orienteacute objet utilisation

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

Presentationnombre renvoie 0p = Presentationnew(Preacutesentation de Ruby)

Presentationnombre renvoie 1

puts p affiche Preacutesentation de Ruby 45 minutes

pfinNoMethodError undefined method `fin for ltPresentation0x49214gt

def pfin puts Suffisamment de Ruby aujourdhui end

pfin affiche Suffisamment de Ruby aujourdrsquohui

page 13 sur 33

Orienteacute objet polymorphisme

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

module RMLL creacutee un nouveau module

EDITION = 2008

renvoie IUT IUFM ou CCI def lieu end

end

puts RMLLEDITION affiche 2008

class Presentation on rouvre la deacutefinition include RMLL pour inclure ce qui est deacutefiniend dans le module RMLL

pextends(RMLL) on eacutetend lobjet p

page 14 sur 33

Un peu plus loin

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

puts salut do puts salutend

lambda puts salut proc do puts salutend

p = Procnew puts salut pcall affiche salut

p = Procnew |i| puts i + 1 pcall 1 affiche 2pcall 41 affiche 42

page 14 sur 33

Un peu plus loin

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

puts salut do puts salutend

lambda puts salut proc do puts salutend

p = Procnew puts salut pcall affiche salut

p = Procnew |i| puts i + 1 pcall 1 affiche 2pcall 41 affiche 42

blocsiteacuterateursyield

page 14 sur 33

Un peu plus loin

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

puts salut do puts salutend

lambda puts salut proc do puts salutend

p = Procnew puts salut pcall affiche salut

p = Procnew |i| puts i + 1 pcall 1 affiche 2pcall 41 affiche 42

page 15 sur 33

Un peu plus loin les iteacuterateurs

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

lyonnais = [Freacutedeacuteric Alexis Jeacuterocircme] lyonnaiseach do |l| puts Dommage l nest pas venu cette anneacuteeend

rmll = 2008 =gt Mont-de-Marsan 2007 =gt Amiens 2006 =gt Vandoeuvre-les-Nancy 2002 =gt Talence

rmlleach_pair do |annee lieu| puts En annee je suis alleacute aux RMLL agrave lieuend

rmllkeyssorteach do |annee| puts En annee je suis alleacute aux RMLL agrave rmll[annee]end

page 16 sur 33

Un peu plus loin les iteacuterateurs

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

lecture dun fichier faccedilon blocs

avertissements = erreurs = 0 initialisation

Fileopen(logtxt) do |fichier| ouverture fichierreadlineseach do |ligne| lecture des lignes case ligne when ^WARN avertissements += 1 when ^ERR erreurs += 1 end endend fermeture automatique

puts Il y a avertissements avertissementsputs et erreurs erreurs dans ce fichier

page 17 sur 33

Un peu plus loin yield

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

class Personne

def initialize(nom) nom = nom end

def salue la meacutethode salue se contente drsquoexeacutecuteryield nom le bloc qui lui est passeacute

end lrsquoargument nom

end

celine = Personnenew(Ceacuteline)celinesalue |n| puts salut n affiche salut Ceacuteline

page 17 sur 33

Un peu plus loin yield

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

class Personne

def initialize(nom) nom = nom end

def salue la meacutethode salue se contente drsquoexeacutecuteryield nom le bloc qui lui est passeacute

end lrsquoargument nom

end

celine = Personnenew(Ceacuteline)celinesalue |n| puts salut n affiche salut Ceacuteline

mais comment ccedila marche

page 17 sur 33

Un peu plus loin yield

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

class Personne

def initialize(nom) nom = nom end

def salue la meacutethode salue se contente drsquoexeacutecuteryield nom le bloc qui lui est passeacute

end lrsquoargument nom

end

celine = Personnenew(Ceacuteline)celinesalue |n| puts salut n affiche salut Ceacuteline

page 18 sur 33

Dynamisme eacutevaluation de code

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

eval puts salut

def operation(operateur operande1 operande2) eval operande1 operateur operande2end

operation + 1 2 renvoie 3operation 9 0 renvoie

Presentationclass_eval do end

page 18 sur 33

Dynamisme eacutevaluation de code

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

eval puts salut

def operation(operateur operande1 operande2) eval operande1 operateur operande2end

operation + 1 2 renvoie 3operation 9 0 renvoie

Presentationclass_eval do end

eacutevaluation de codeinterception drsquoappels de meacutethodes inexistantesexeacutecution des deacutefinitions

reacuteflexiviteacute introspection

page 18 sur 33

Dynamisme eacutevaluation de code

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

eval puts salut

def operation(operateur operande1 operande2) eval operande1 operateur operande2end

operation + 1 2 renvoie 3operation 9 0 renvoie

Presentationclass_eval do end

page 19 sur 33

Dynamisme meacutethodes inexistantes

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

Presentationnombre renvoie 0p = Presentationnew(Preacutesentation de Ruby)

Presentationnombre renvoie 1

puts p affiche Preacutesentation de Ruby 45 minutes

pfinNoMethodError undefined method `fin for ltPresentation0x49214gt

def pfin puts Suffisamment de Ruby aujourdhui end

pfin affiche Suffisamment de Ruby aujourdrsquohui

page 20 sur 33

Dynamisme meacutethodes inexistantes

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

class Presentation def method_missing(nom args) method_missing puts Il ny a pas de meacutethode nom est appeleacutee end avant la leveacuteeend de lexception

p = Presentationnew(Preacutesentation de Ruby)

pfin affiche Il ny a pas de meacutethode fin pas drsquoexception

method_missing est lrsquoun des nombreux ldquohooksrdquo disponibles dans Ruby

page 21 sur 33

Dynamisme deacutefinitions exeacutecuteacutees

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

class Configuration case RUBY_PLATFORM deacutefinition dune meacutethode when linux en fonction du systegraveme def initialize(params) hocircte end when win32 def initialize(params) end when darwin include YAIBExtensionsSpecificOSX else unless include YAIBStandard raise Votre OS nest pas supporteacute end end end

page 22 sur 33

Dynamisme reacuteflexiviteacute introspection

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

On peut interroger tous les composants du langage agrave lrsquoexeacutecution

obj = Arraynewobjclass

objclassinstance_methodsobjmethods eacutequivalent agrave la ligne du dessusobjprivate_methods

objclassinstance_methodsgrep(delete)objclassinstance_methodsgrep(delete)sort

objmethodsgrep(^on_connect_do)each do |method| objsend methodend

page 23 sur 33

Dynamisme reacuteflexiviteacute introspection

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

On peut rouvrir une deacutefinition y compris celle du langage

class Array la classe Array existe on la rouvre def longueur ajout drsquoune meacutethode en franccedilais length proxy vers la meacutethode en anglais end end

arr = Arraynewarr ltlt 1arr ltlt element

arrlongueur renvoie 2

page 24 sur 33

Dynamisme reacuteflexiviteacute introspection

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

class Counterparty def has_all_mandatory_fields_filled quelques veacuterifications end def can_be_in_completed_or_approved_status return false unless selfhas_all_mandatory_fields_filled return false unless selflgdhas_all_mandatory_fields_filled unless selfratingshave_all_mandatory_fields_filled

return false end return true end

end

page 25 sur 33

Dynamisme reacuteflexiviteacute introspection

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

modification de la classe Arrayclass Array

def have_all_mandatory_fields_filled selfeach do |item| unless itemrespond_to has_all_mandatory_fields_filled return false end unless itemhas_all_mandatory_fields_filled return false end end return true end

end

page 26 sur 33

Se mettre agrave Ruby

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

(g)vi(m)(X)emacsSciTE

FreeRIDE (eacutecrit en Ruby)

e-TextEditorTextMate (seulement OSX)

Eclipse avec les Ruby Development ToolsNetBeans 61 (support Ruby et JRuby)

page 26 sur 33

Se mettre agrave Ruby

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

(g)vi(m)(X)emacsSciTE

FreeRIDE (eacutecrit en Ruby)

e-TextEditorTextMate (seulement OSX)

Eclipse avec les Ruby Development ToolsNetBeans 61 (support Ruby et JRuby)

Editeurs et environnements compatiblesLrsquooutil indispensable irbRessources en ligneLivres

page 26 sur 33

Se mettre agrave Ruby

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

(g)vi(m)(X)emacsSciTE

FreeRIDE (eacutecrit en Ruby)

e-TextEditorTextMate (seulement OSX)

Eclipse avec les Ruby Development ToolsNetBeans 61 (support Ruby et JRuby)

page 27 sur 33

Se mettre agrave Ruby irb

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

page 28 sur 33

Se mettre agrave Ruby ressources en ligne

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

Le site officiel (httpwwwruby-langorg)Sa traduction (httpwwwruby-langorgfr)

Le portail Ruby France (httpwwwrubyfranceorg)

Les listes de diffusion sur Google Groups(ruby-talk ruby-core rubyfr-public)

Les groupes de discussion sur Usenet(complangruby frcomplangruby)

Les salons IRC sur FreeNode (ircfreenodenet)(ruby-lang rubyfr)

page 29 sur 33

Se mettre agrave Ruby livres

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

Ruby in a NutshellProgramming RubyThe Ruby WayDesign Patterns for Ruby

Ruby par lrsquoexemple

Passez sur le stand Ruby France

page 30 sur 33

Fin de la preacutesentation

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

page 30 sur 33

Fin de la preacutesentation

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

Des questions

page 30 sur 33

Fin de la preacutesentation

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

page 32 sur 33

Fin de la preacutesentation

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

Merci

page 32 sur 33

Ougrave reacutecupeacuterer ce document

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

Le support de cette preacutesentation sera disponible sur httpzlabfr

page 33 sur 33

Licence de ce document

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

bullVous ecirctes libres bullde reproduire distribuer et communiquer cette creacuteation au public

bullSelon les conditions suivantes bullPaterniteacutebull Vous devez citer le nom de lauteur original de la maniegravere indiqueacutee par lauteur de loeuvre ou le titulaire des droits qui vous confegravere cette autorisation (mais pas dune maniegravere qui suggeacutererait quils vous soutiennent ou approuvent votre utilisation de loeuvre)

bullPas drsquoutilisation commercialebull Vous navez pas le droit dutiliser cette creacuteation agrave des fins commerciales

bullPas de modificationbull Vous navez pas le droit de modifier de transformer ou dadapter cette creacuteation

bullreacutesumeacute explicatif disponible sur httpcreativecommonsorglicensesby-nc-nd20fr

bullvous ecirctes autoriseacute agrave reacuteutiliser le logo Ruby France utiliseacute dans cette preacutesentation pour faire reacutefeacuterence agrave lrsquoassociation

page 10 sur 33

Orienteacute objet

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

-123abs renvoie 123-123class renvoie Fixnum

chaine = rmllchaineupcase renvoie RMLLputs chaine affiche rmllchaineupcase renvoie RMLLputs chaine affiche RMLL

nilclass renvoie NilClasstrueclass renvoie TrueClassfalseclass renvoie FalseClassnilnil renvoie true

page 10 sur 33

Orienteacute objet

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

-123abs renvoie 123-123class renvoie Fixnum

chaine = rmllchaineupcase renvoie RMLLputs chaine affiche rmllchaineupcase renvoie RMLLputs chaine affiche RMLL

nilclass renvoie NilClasstrueclass renvoie TrueClassfalseclass renvoie FalseClassnilnil renvoie true

appel de meacutethodesdeacuteclaration de classeutilisationpolymorphisme

page 10 sur 33

Orienteacute objet

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

-123abs renvoie 123-123class renvoie Fixnum

chaine = rmllchaineupcase renvoie RMLLputs chaine affiche rmllchaineupcase renvoie RMLLputs chaine affiche RMLL

nilclass renvoie NilClasstrueclass renvoie TrueClassfalseclass renvoie FalseClassnilnil renvoie true

page 11 sur 33

Orienteacute objet deacuteclaration de classe

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

class Presentation lt Intervention deacuteclaration de la classe nombre = 0 variable de classe def initialize(intitule duree=45) post-constructeur intitule = intitule duree = duree nombre += 1 super appel de la meacutethode end dans la classe megravere def to_s titre + + dureeto_s + minutes end def selfnombre meacutethode de classe nombre end end

page 12 sur 33

Orienteacute objet utilisation

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

Presentationnombre renvoie 0p = Presentationnew(Preacutesentation de Ruby)

Presentationnombre renvoie 1

puts p affiche Preacutesentation de Ruby 45 minutes

pfinNoMethodError undefined method `fin for ltPresentation0x49214gt

def pfin puts Suffisamment de Ruby aujourdhui end

pfin affiche Suffisamment de Ruby aujourdrsquohui

page 13 sur 33

Orienteacute objet polymorphisme

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

module RMLL creacutee un nouveau module

EDITION = 2008

renvoie IUT IUFM ou CCI def lieu end

end

puts RMLLEDITION affiche 2008

class Presentation on rouvre la deacutefinition include RMLL pour inclure ce qui est deacutefiniend dans le module RMLL

pextends(RMLL) on eacutetend lobjet p

page 14 sur 33

Un peu plus loin

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

puts salut do puts salutend

lambda puts salut proc do puts salutend

p = Procnew puts salut pcall affiche salut

p = Procnew |i| puts i + 1 pcall 1 affiche 2pcall 41 affiche 42

page 14 sur 33

Un peu plus loin

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

puts salut do puts salutend

lambda puts salut proc do puts salutend

p = Procnew puts salut pcall affiche salut

p = Procnew |i| puts i + 1 pcall 1 affiche 2pcall 41 affiche 42

blocsiteacuterateursyield

page 14 sur 33

Un peu plus loin

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

puts salut do puts salutend

lambda puts salut proc do puts salutend

p = Procnew puts salut pcall affiche salut

p = Procnew |i| puts i + 1 pcall 1 affiche 2pcall 41 affiche 42

page 15 sur 33

Un peu plus loin les iteacuterateurs

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

lyonnais = [Freacutedeacuteric Alexis Jeacuterocircme] lyonnaiseach do |l| puts Dommage l nest pas venu cette anneacuteeend

rmll = 2008 =gt Mont-de-Marsan 2007 =gt Amiens 2006 =gt Vandoeuvre-les-Nancy 2002 =gt Talence

rmlleach_pair do |annee lieu| puts En annee je suis alleacute aux RMLL agrave lieuend

rmllkeyssorteach do |annee| puts En annee je suis alleacute aux RMLL agrave rmll[annee]end

page 16 sur 33

Un peu plus loin les iteacuterateurs

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

lecture dun fichier faccedilon blocs

avertissements = erreurs = 0 initialisation

Fileopen(logtxt) do |fichier| ouverture fichierreadlineseach do |ligne| lecture des lignes case ligne when ^WARN avertissements += 1 when ^ERR erreurs += 1 end endend fermeture automatique

puts Il y a avertissements avertissementsputs et erreurs erreurs dans ce fichier

page 17 sur 33

Un peu plus loin yield

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

class Personne

def initialize(nom) nom = nom end

def salue la meacutethode salue se contente drsquoexeacutecuteryield nom le bloc qui lui est passeacute

end lrsquoargument nom

end

celine = Personnenew(Ceacuteline)celinesalue |n| puts salut n affiche salut Ceacuteline

page 17 sur 33

Un peu plus loin yield

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

class Personne

def initialize(nom) nom = nom end

def salue la meacutethode salue se contente drsquoexeacutecuteryield nom le bloc qui lui est passeacute

end lrsquoargument nom

end

celine = Personnenew(Ceacuteline)celinesalue |n| puts salut n affiche salut Ceacuteline

mais comment ccedila marche

page 17 sur 33

Un peu plus loin yield

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

class Personne

def initialize(nom) nom = nom end

def salue la meacutethode salue se contente drsquoexeacutecuteryield nom le bloc qui lui est passeacute

end lrsquoargument nom

end

celine = Personnenew(Ceacuteline)celinesalue |n| puts salut n affiche salut Ceacuteline

page 18 sur 33

Dynamisme eacutevaluation de code

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

eval puts salut

def operation(operateur operande1 operande2) eval operande1 operateur operande2end

operation + 1 2 renvoie 3operation 9 0 renvoie

Presentationclass_eval do end

page 18 sur 33

Dynamisme eacutevaluation de code

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

eval puts salut

def operation(operateur operande1 operande2) eval operande1 operateur operande2end

operation + 1 2 renvoie 3operation 9 0 renvoie

Presentationclass_eval do end

eacutevaluation de codeinterception drsquoappels de meacutethodes inexistantesexeacutecution des deacutefinitions

reacuteflexiviteacute introspection

page 18 sur 33

Dynamisme eacutevaluation de code

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

eval puts salut

def operation(operateur operande1 operande2) eval operande1 operateur operande2end

operation + 1 2 renvoie 3operation 9 0 renvoie

Presentationclass_eval do end

page 19 sur 33

Dynamisme meacutethodes inexistantes

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

Presentationnombre renvoie 0p = Presentationnew(Preacutesentation de Ruby)

Presentationnombre renvoie 1

puts p affiche Preacutesentation de Ruby 45 minutes

pfinNoMethodError undefined method `fin for ltPresentation0x49214gt

def pfin puts Suffisamment de Ruby aujourdhui end

pfin affiche Suffisamment de Ruby aujourdrsquohui

page 20 sur 33

Dynamisme meacutethodes inexistantes

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

class Presentation def method_missing(nom args) method_missing puts Il ny a pas de meacutethode nom est appeleacutee end avant la leveacuteeend de lexception

p = Presentationnew(Preacutesentation de Ruby)

pfin affiche Il ny a pas de meacutethode fin pas drsquoexception

method_missing est lrsquoun des nombreux ldquohooksrdquo disponibles dans Ruby

page 21 sur 33

Dynamisme deacutefinitions exeacutecuteacutees

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

class Configuration case RUBY_PLATFORM deacutefinition dune meacutethode when linux en fonction du systegraveme def initialize(params) hocircte end when win32 def initialize(params) end when darwin include YAIBExtensionsSpecificOSX else unless include YAIBStandard raise Votre OS nest pas supporteacute end end end

page 22 sur 33

Dynamisme reacuteflexiviteacute introspection

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

On peut interroger tous les composants du langage agrave lrsquoexeacutecution

obj = Arraynewobjclass

objclassinstance_methodsobjmethods eacutequivalent agrave la ligne du dessusobjprivate_methods

objclassinstance_methodsgrep(delete)objclassinstance_methodsgrep(delete)sort

objmethodsgrep(^on_connect_do)each do |method| objsend methodend

page 23 sur 33

Dynamisme reacuteflexiviteacute introspection

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

On peut rouvrir une deacutefinition y compris celle du langage

class Array la classe Array existe on la rouvre def longueur ajout drsquoune meacutethode en franccedilais length proxy vers la meacutethode en anglais end end

arr = Arraynewarr ltlt 1arr ltlt element

arrlongueur renvoie 2

page 24 sur 33

Dynamisme reacuteflexiviteacute introspection

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

class Counterparty def has_all_mandatory_fields_filled quelques veacuterifications end def can_be_in_completed_or_approved_status return false unless selfhas_all_mandatory_fields_filled return false unless selflgdhas_all_mandatory_fields_filled unless selfratingshave_all_mandatory_fields_filled

return false end return true end

end

page 25 sur 33

Dynamisme reacuteflexiviteacute introspection

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

modification de la classe Arrayclass Array

def have_all_mandatory_fields_filled selfeach do |item| unless itemrespond_to has_all_mandatory_fields_filled return false end unless itemhas_all_mandatory_fields_filled return false end end return true end

end

page 26 sur 33

Se mettre agrave Ruby

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

(g)vi(m)(X)emacsSciTE

FreeRIDE (eacutecrit en Ruby)

e-TextEditorTextMate (seulement OSX)

Eclipse avec les Ruby Development ToolsNetBeans 61 (support Ruby et JRuby)

page 26 sur 33

Se mettre agrave Ruby

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

(g)vi(m)(X)emacsSciTE

FreeRIDE (eacutecrit en Ruby)

e-TextEditorTextMate (seulement OSX)

Eclipse avec les Ruby Development ToolsNetBeans 61 (support Ruby et JRuby)

Editeurs et environnements compatiblesLrsquooutil indispensable irbRessources en ligneLivres

page 26 sur 33

Se mettre agrave Ruby

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

(g)vi(m)(X)emacsSciTE

FreeRIDE (eacutecrit en Ruby)

e-TextEditorTextMate (seulement OSX)

Eclipse avec les Ruby Development ToolsNetBeans 61 (support Ruby et JRuby)

page 27 sur 33

Se mettre agrave Ruby irb

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

page 28 sur 33

Se mettre agrave Ruby ressources en ligne

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

Le site officiel (httpwwwruby-langorg)Sa traduction (httpwwwruby-langorgfr)

Le portail Ruby France (httpwwwrubyfranceorg)

Les listes de diffusion sur Google Groups(ruby-talk ruby-core rubyfr-public)

Les groupes de discussion sur Usenet(complangruby frcomplangruby)

Les salons IRC sur FreeNode (ircfreenodenet)(ruby-lang rubyfr)

page 29 sur 33

Se mettre agrave Ruby livres

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

Ruby in a NutshellProgramming RubyThe Ruby WayDesign Patterns for Ruby

Ruby par lrsquoexemple

Passez sur le stand Ruby France

page 30 sur 33

Fin de la preacutesentation

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

page 30 sur 33

Fin de la preacutesentation

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

Des questions

page 30 sur 33

Fin de la preacutesentation

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

page 32 sur 33

Fin de la preacutesentation

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

Merci

page 32 sur 33

Ougrave reacutecupeacuterer ce document

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

Le support de cette preacutesentation sera disponible sur httpzlabfr

page 33 sur 33

Licence de ce document

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

bullVous ecirctes libres bullde reproduire distribuer et communiquer cette creacuteation au public

bullSelon les conditions suivantes bullPaterniteacutebull Vous devez citer le nom de lauteur original de la maniegravere indiqueacutee par lauteur de loeuvre ou le titulaire des droits qui vous confegravere cette autorisation (mais pas dune maniegravere qui suggeacutererait quils vous soutiennent ou approuvent votre utilisation de loeuvre)

bullPas drsquoutilisation commercialebull Vous navez pas le droit dutiliser cette creacuteation agrave des fins commerciales

bullPas de modificationbull Vous navez pas le droit de modifier de transformer ou dadapter cette creacuteation

bullreacutesumeacute explicatif disponible sur httpcreativecommonsorglicensesby-nc-nd20fr

bullvous ecirctes autoriseacute agrave reacuteutiliser le logo Ruby France utiliseacute dans cette preacutesentation pour faire reacutefeacuterence agrave lrsquoassociation

page 10 sur 33

Orienteacute objet

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

-123abs renvoie 123-123class renvoie Fixnum

chaine = rmllchaineupcase renvoie RMLLputs chaine affiche rmllchaineupcase renvoie RMLLputs chaine affiche RMLL

nilclass renvoie NilClasstrueclass renvoie TrueClassfalseclass renvoie FalseClassnilnil renvoie true

appel de meacutethodesdeacuteclaration de classeutilisationpolymorphisme

page 10 sur 33

Orienteacute objet

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

-123abs renvoie 123-123class renvoie Fixnum

chaine = rmllchaineupcase renvoie RMLLputs chaine affiche rmllchaineupcase renvoie RMLLputs chaine affiche RMLL

nilclass renvoie NilClasstrueclass renvoie TrueClassfalseclass renvoie FalseClassnilnil renvoie true

page 11 sur 33

Orienteacute objet deacuteclaration de classe

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

class Presentation lt Intervention deacuteclaration de la classe nombre = 0 variable de classe def initialize(intitule duree=45) post-constructeur intitule = intitule duree = duree nombre += 1 super appel de la meacutethode end dans la classe megravere def to_s titre + + dureeto_s + minutes end def selfnombre meacutethode de classe nombre end end

page 12 sur 33

Orienteacute objet utilisation

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

Presentationnombre renvoie 0p = Presentationnew(Preacutesentation de Ruby)

Presentationnombre renvoie 1

puts p affiche Preacutesentation de Ruby 45 minutes

pfinNoMethodError undefined method `fin for ltPresentation0x49214gt

def pfin puts Suffisamment de Ruby aujourdhui end

pfin affiche Suffisamment de Ruby aujourdrsquohui

page 13 sur 33

Orienteacute objet polymorphisme

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

module RMLL creacutee un nouveau module

EDITION = 2008

renvoie IUT IUFM ou CCI def lieu end

end

puts RMLLEDITION affiche 2008

class Presentation on rouvre la deacutefinition include RMLL pour inclure ce qui est deacutefiniend dans le module RMLL

pextends(RMLL) on eacutetend lobjet p

page 14 sur 33

Un peu plus loin

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

puts salut do puts salutend

lambda puts salut proc do puts salutend

p = Procnew puts salut pcall affiche salut

p = Procnew |i| puts i + 1 pcall 1 affiche 2pcall 41 affiche 42

page 14 sur 33

Un peu plus loin

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

puts salut do puts salutend

lambda puts salut proc do puts salutend

p = Procnew puts salut pcall affiche salut

p = Procnew |i| puts i + 1 pcall 1 affiche 2pcall 41 affiche 42

blocsiteacuterateursyield

page 14 sur 33

Un peu plus loin

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

puts salut do puts salutend

lambda puts salut proc do puts salutend

p = Procnew puts salut pcall affiche salut

p = Procnew |i| puts i + 1 pcall 1 affiche 2pcall 41 affiche 42

page 15 sur 33

Un peu plus loin les iteacuterateurs

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

lyonnais = [Freacutedeacuteric Alexis Jeacuterocircme] lyonnaiseach do |l| puts Dommage l nest pas venu cette anneacuteeend

rmll = 2008 =gt Mont-de-Marsan 2007 =gt Amiens 2006 =gt Vandoeuvre-les-Nancy 2002 =gt Talence

rmlleach_pair do |annee lieu| puts En annee je suis alleacute aux RMLL agrave lieuend

rmllkeyssorteach do |annee| puts En annee je suis alleacute aux RMLL agrave rmll[annee]end

page 16 sur 33

Un peu plus loin les iteacuterateurs

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

lecture dun fichier faccedilon blocs

avertissements = erreurs = 0 initialisation

Fileopen(logtxt) do |fichier| ouverture fichierreadlineseach do |ligne| lecture des lignes case ligne when ^WARN avertissements += 1 when ^ERR erreurs += 1 end endend fermeture automatique

puts Il y a avertissements avertissementsputs et erreurs erreurs dans ce fichier

page 17 sur 33

Un peu plus loin yield

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

class Personne

def initialize(nom) nom = nom end

def salue la meacutethode salue se contente drsquoexeacutecuteryield nom le bloc qui lui est passeacute

end lrsquoargument nom

end

celine = Personnenew(Ceacuteline)celinesalue |n| puts salut n affiche salut Ceacuteline

page 17 sur 33

Un peu plus loin yield

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

class Personne

def initialize(nom) nom = nom end

def salue la meacutethode salue se contente drsquoexeacutecuteryield nom le bloc qui lui est passeacute

end lrsquoargument nom

end

celine = Personnenew(Ceacuteline)celinesalue |n| puts salut n affiche salut Ceacuteline

mais comment ccedila marche

page 17 sur 33

Un peu plus loin yield

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

class Personne

def initialize(nom) nom = nom end

def salue la meacutethode salue se contente drsquoexeacutecuteryield nom le bloc qui lui est passeacute

end lrsquoargument nom

end

celine = Personnenew(Ceacuteline)celinesalue |n| puts salut n affiche salut Ceacuteline

page 18 sur 33

Dynamisme eacutevaluation de code

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

eval puts salut

def operation(operateur operande1 operande2) eval operande1 operateur operande2end

operation + 1 2 renvoie 3operation 9 0 renvoie

Presentationclass_eval do end

page 18 sur 33

Dynamisme eacutevaluation de code

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

eval puts salut

def operation(operateur operande1 operande2) eval operande1 operateur operande2end

operation + 1 2 renvoie 3operation 9 0 renvoie

Presentationclass_eval do end

eacutevaluation de codeinterception drsquoappels de meacutethodes inexistantesexeacutecution des deacutefinitions

reacuteflexiviteacute introspection

page 18 sur 33

Dynamisme eacutevaluation de code

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

eval puts salut

def operation(operateur operande1 operande2) eval operande1 operateur operande2end

operation + 1 2 renvoie 3operation 9 0 renvoie

Presentationclass_eval do end

page 19 sur 33

Dynamisme meacutethodes inexistantes

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

Presentationnombre renvoie 0p = Presentationnew(Preacutesentation de Ruby)

Presentationnombre renvoie 1

puts p affiche Preacutesentation de Ruby 45 minutes

pfinNoMethodError undefined method `fin for ltPresentation0x49214gt

def pfin puts Suffisamment de Ruby aujourdhui end

pfin affiche Suffisamment de Ruby aujourdrsquohui

page 20 sur 33

Dynamisme meacutethodes inexistantes

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

class Presentation def method_missing(nom args) method_missing puts Il ny a pas de meacutethode nom est appeleacutee end avant la leveacuteeend de lexception

p = Presentationnew(Preacutesentation de Ruby)

pfin affiche Il ny a pas de meacutethode fin pas drsquoexception

method_missing est lrsquoun des nombreux ldquohooksrdquo disponibles dans Ruby

page 21 sur 33

Dynamisme deacutefinitions exeacutecuteacutees

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

class Configuration case RUBY_PLATFORM deacutefinition dune meacutethode when linux en fonction du systegraveme def initialize(params) hocircte end when win32 def initialize(params) end when darwin include YAIBExtensionsSpecificOSX else unless include YAIBStandard raise Votre OS nest pas supporteacute end end end

page 22 sur 33

Dynamisme reacuteflexiviteacute introspection

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

On peut interroger tous les composants du langage agrave lrsquoexeacutecution

obj = Arraynewobjclass

objclassinstance_methodsobjmethods eacutequivalent agrave la ligne du dessusobjprivate_methods

objclassinstance_methodsgrep(delete)objclassinstance_methodsgrep(delete)sort

objmethodsgrep(^on_connect_do)each do |method| objsend methodend

page 23 sur 33

Dynamisme reacuteflexiviteacute introspection

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

On peut rouvrir une deacutefinition y compris celle du langage

class Array la classe Array existe on la rouvre def longueur ajout drsquoune meacutethode en franccedilais length proxy vers la meacutethode en anglais end end

arr = Arraynewarr ltlt 1arr ltlt element

arrlongueur renvoie 2

page 24 sur 33

Dynamisme reacuteflexiviteacute introspection

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

class Counterparty def has_all_mandatory_fields_filled quelques veacuterifications end def can_be_in_completed_or_approved_status return false unless selfhas_all_mandatory_fields_filled return false unless selflgdhas_all_mandatory_fields_filled unless selfratingshave_all_mandatory_fields_filled

return false end return true end

end

page 25 sur 33

Dynamisme reacuteflexiviteacute introspection

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

modification de la classe Arrayclass Array

def have_all_mandatory_fields_filled selfeach do |item| unless itemrespond_to has_all_mandatory_fields_filled return false end unless itemhas_all_mandatory_fields_filled return false end end return true end

end

page 26 sur 33

Se mettre agrave Ruby

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

(g)vi(m)(X)emacsSciTE

FreeRIDE (eacutecrit en Ruby)

e-TextEditorTextMate (seulement OSX)

Eclipse avec les Ruby Development ToolsNetBeans 61 (support Ruby et JRuby)

page 26 sur 33

Se mettre agrave Ruby

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

(g)vi(m)(X)emacsSciTE

FreeRIDE (eacutecrit en Ruby)

e-TextEditorTextMate (seulement OSX)

Eclipse avec les Ruby Development ToolsNetBeans 61 (support Ruby et JRuby)

Editeurs et environnements compatiblesLrsquooutil indispensable irbRessources en ligneLivres

page 26 sur 33

Se mettre agrave Ruby

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

(g)vi(m)(X)emacsSciTE

FreeRIDE (eacutecrit en Ruby)

e-TextEditorTextMate (seulement OSX)

Eclipse avec les Ruby Development ToolsNetBeans 61 (support Ruby et JRuby)

page 27 sur 33

Se mettre agrave Ruby irb

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

page 28 sur 33

Se mettre agrave Ruby ressources en ligne

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

Le site officiel (httpwwwruby-langorg)Sa traduction (httpwwwruby-langorgfr)

Le portail Ruby France (httpwwwrubyfranceorg)

Les listes de diffusion sur Google Groups(ruby-talk ruby-core rubyfr-public)

Les groupes de discussion sur Usenet(complangruby frcomplangruby)

Les salons IRC sur FreeNode (ircfreenodenet)(ruby-lang rubyfr)

page 29 sur 33

Se mettre agrave Ruby livres

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

Ruby in a NutshellProgramming RubyThe Ruby WayDesign Patterns for Ruby

Ruby par lrsquoexemple

Passez sur le stand Ruby France

page 30 sur 33

Fin de la preacutesentation

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

page 30 sur 33

Fin de la preacutesentation

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

Des questions

page 30 sur 33

Fin de la preacutesentation

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

page 32 sur 33

Fin de la preacutesentation

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

Merci

page 32 sur 33

Ougrave reacutecupeacuterer ce document

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

Le support de cette preacutesentation sera disponible sur httpzlabfr

page 33 sur 33

Licence de ce document

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

bullVous ecirctes libres bullde reproduire distribuer et communiquer cette creacuteation au public

bullSelon les conditions suivantes bullPaterniteacutebull Vous devez citer le nom de lauteur original de la maniegravere indiqueacutee par lauteur de loeuvre ou le titulaire des droits qui vous confegravere cette autorisation (mais pas dune maniegravere qui suggeacutererait quils vous soutiennent ou approuvent votre utilisation de loeuvre)

bullPas drsquoutilisation commercialebull Vous navez pas le droit dutiliser cette creacuteation agrave des fins commerciales

bullPas de modificationbull Vous navez pas le droit de modifier de transformer ou dadapter cette creacuteation

bullreacutesumeacute explicatif disponible sur httpcreativecommonsorglicensesby-nc-nd20fr

bullvous ecirctes autoriseacute agrave reacuteutiliser le logo Ruby France utiliseacute dans cette preacutesentation pour faire reacutefeacuterence agrave lrsquoassociation

page 10 sur 33

Orienteacute objet

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

-123abs renvoie 123-123class renvoie Fixnum

chaine = rmllchaineupcase renvoie RMLLputs chaine affiche rmllchaineupcase renvoie RMLLputs chaine affiche RMLL

nilclass renvoie NilClasstrueclass renvoie TrueClassfalseclass renvoie FalseClassnilnil renvoie true

page 11 sur 33

Orienteacute objet deacuteclaration de classe

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

class Presentation lt Intervention deacuteclaration de la classe nombre = 0 variable de classe def initialize(intitule duree=45) post-constructeur intitule = intitule duree = duree nombre += 1 super appel de la meacutethode end dans la classe megravere def to_s titre + + dureeto_s + minutes end def selfnombre meacutethode de classe nombre end end

page 12 sur 33

Orienteacute objet utilisation

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

Presentationnombre renvoie 0p = Presentationnew(Preacutesentation de Ruby)

Presentationnombre renvoie 1

puts p affiche Preacutesentation de Ruby 45 minutes

pfinNoMethodError undefined method `fin for ltPresentation0x49214gt

def pfin puts Suffisamment de Ruby aujourdhui end

pfin affiche Suffisamment de Ruby aujourdrsquohui

page 13 sur 33

Orienteacute objet polymorphisme

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

module RMLL creacutee un nouveau module

EDITION = 2008

renvoie IUT IUFM ou CCI def lieu end

end

puts RMLLEDITION affiche 2008

class Presentation on rouvre la deacutefinition include RMLL pour inclure ce qui est deacutefiniend dans le module RMLL

pextends(RMLL) on eacutetend lobjet p

page 14 sur 33

Un peu plus loin

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

puts salut do puts salutend

lambda puts salut proc do puts salutend

p = Procnew puts salut pcall affiche salut

p = Procnew |i| puts i + 1 pcall 1 affiche 2pcall 41 affiche 42

page 14 sur 33

Un peu plus loin

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

puts salut do puts salutend

lambda puts salut proc do puts salutend

p = Procnew puts salut pcall affiche salut

p = Procnew |i| puts i + 1 pcall 1 affiche 2pcall 41 affiche 42

blocsiteacuterateursyield

page 14 sur 33

Un peu plus loin

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

puts salut do puts salutend

lambda puts salut proc do puts salutend

p = Procnew puts salut pcall affiche salut

p = Procnew |i| puts i + 1 pcall 1 affiche 2pcall 41 affiche 42

page 15 sur 33

Un peu plus loin les iteacuterateurs

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

lyonnais = [Freacutedeacuteric Alexis Jeacuterocircme] lyonnaiseach do |l| puts Dommage l nest pas venu cette anneacuteeend

rmll = 2008 =gt Mont-de-Marsan 2007 =gt Amiens 2006 =gt Vandoeuvre-les-Nancy 2002 =gt Talence

rmlleach_pair do |annee lieu| puts En annee je suis alleacute aux RMLL agrave lieuend

rmllkeyssorteach do |annee| puts En annee je suis alleacute aux RMLL agrave rmll[annee]end

page 16 sur 33

Un peu plus loin les iteacuterateurs

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

lecture dun fichier faccedilon blocs

avertissements = erreurs = 0 initialisation

Fileopen(logtxt) do |fichier| ouverture fichierreadlineseach do |ligne| lecture des lignes case ligne when ^WARN avertissements += 1 when ^ERR erreurs += 1 end endend fermeture automatique

puts Il y a avertissements avertissementsputs et erreurs erreurs dans ce fichier

page 17 sur 33

Un peu plus loin yield

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

class Personne

def initialize(nom) nom = nom end

def salue la meacutethode salue se contente drsquoexeacutecuteryield nom le bloc qui lui est passeacute

end lrsquoargument nom

end

celine = Personnenew(Ceacuteline)celinesalue |n| puts salut n affiche salut Ceacuteline

page 17 sur 33

Un peu plus loin yield

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

class Personne

def initialize(nom) nom = nom end

def salue la meacutethode salue se contente drsquoexeacutecuteryield nom le bloc qui lui est passeacute

end lrsquoargument nom

end

celine = Personnenew(Ceacuteline)celinesalue |n| puts salut n affiche salut Ceacuteline

mais comment ccedila marche

page 17 sur 33

Un peu plus loin yield

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

class Personne

def initialize(nom) nom = nom end

def salue la meacutethode salue se contente drsquoexeacutecuteryield nom le bloc qui lui est passeacute

end lrsquoargument nom

end

celine = Personnenew(Ceacuteline)celinesalue |n| puts salut n affiche salut Ceacuteline

page 18 sur 33

Dynamisme eacutevaluation de code

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

eval puts salut

def operation(operateur operande1 operande2) eval operande1 operateur operande2end

operation + 1 2 renvoie 3operation 9 0 renvoie

Presentationclass_eval do end

page 18 sur 33

Dynamisme eacutevaluation de code

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

eval puts salut

def operation(operateur operande1 operande2) eval operande1 operateur operande2end

operation + 1 2 renvoie 3operation 9 0 renvoie

Presentationclass_eval do end

eacutevaluation de codeinterception drsquoappels de meacutethodes inexistantesexeacutecution des deacutefinitions

reacuteflexiviteacute introspection

page 18 sur 33

Dynamisme eacutevaluation de code

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

eval puts salut

def operation(operateur operande1 operande2) eval operande1 operateur operande2end

operation + 1 2 renvoie 3operation 9 0 renvoie

Presentationclass_eval do end

page 19 sur 33

Dynamisme meacutethodes inexistantes

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

Presentationnombre renvoie 0p = Presentationnew(Preacutesentation de Ruby)

Presentationnombre renvoie 1

puts p affiche Preacutesentation de Ruby 45 minutes

pfinNoMethodError undefined method `fin for ltPresentation0x49214gt

def pfin puts Suffisamment de Ruby aujourdhui end

pfin affiche Suffisamment de Ruby aujourdrsquohui

page 20 sur 33

Dynamisme meacutethodes inexistantes

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

class Presentation def method_missing(nom args) method_missing puts Il ny a pas de meacutethode nom est appeleacutee end avant la leveacuteeend de lexception

p = Presentationnew(Preacutesentation de Ruby)

pfin affiche Il ny a pas de meacutethode fin pas drsquoexception

method_missing est lrsquoun des nombreux ldquohooksrdquo disponibles dans Ruby

page 21 sur 33

Dynamisme deacutefinitions exeacutecuteacutees

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

class Configuration case RUBY_PLATFORM deacutefinition dune meacutethode when linux en fonction du systegraveme def initialize(params) hocircte end when win32 def initialize(params) end when darwin include YAIBExtensionsSpecificOSX else unless include YAIBStandard raise Votre OS nest pas supporteacute end end end

page 22 sur 33

Dynamisme reacuteflexiviteacute introspection

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

On peut interroger tous les composants du langage agrave lrsquoexeacutecution

obj = Arraynewobjclass

objclassinstance_methodsobjmethods eacutequivalent agrave la ligne du dessusobjprivate_methods

objclassinstance_methodsgrep(delete)objclassinstance_methodsgrep(delete)sort

objmethodsgrep(^on_connect_do)each do |method| objsend methodend

page 23 sur 33

Dynamisme reacuteflexiviteacute introspection

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

On peut rouvrir une deacutefinition y compris celle du langage

class Array la classe Array existe on la rouvre def longueur ajout drsquoune meacutethode en franccedilais length proxy vers la meacutethode en anglais end end

arr = Arraynewarr ltlt 1arr ltlt element

arrlongueur renvoie 2

page 24 sur 33

Dynamisme reacuteflexiviteacute introspection

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

class Counterparty def has_all_mandatory_fields_filled quelques veacuterifications end def can_be_in_completed_or_approved_status return false unless selfhas_all_mandatory_fields_filled return false unless selflgdhas_all_mandatory_fields_filled unless selfratingshave_all_mandatory_fields_filled

return false end return true end

end

page 25 sur 33

Dynamisme reacuteflexiviteacute introspection

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

modification de la classe Arrayclass Array

def have_all_mandatory_fields_filled selfeach do |item| unless itemrespond_to has_all_mandatory_fields_filled return false end unless itemhas_all_mandatory_fields_filled return false end end return true end

end

page 26 sur 33

Se mettre agrave Ruby

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

(g)vi(m)(X)emacsSciTE

FreeRIDE (eacutecrit en Ruby)

e-TextEditorTextMate (seulement OSX)

Eclipse avec les Ruby Development ToolsNetBeans 61 (support Ruby et JRuby)

page 26 sur 33

Se mettre agrave Ruby

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

(g)vi(m)(X)emacsSciTE

FreeRIDE (eacutecrit en Ruby)

e-TextEditorTextMate (seulement OSX)

Eclipse avec les Ruby Development ToolsNetBeans 61 (support Ruby et JRuby)

Editeurs et environnements compatiblesLrsquooutil indispensable irbRessources en ligneLivres

page 26 sur 33

Se mettre agrave Ruby

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

(g)vi(m)(X)emacsSciTE

FreeRIDE (eacutecrit en Ruby)

e-TextEditorTextMate (seulement OSX)

Eclipse avec les Ruby Development ToolsNetBeans 61 (support Ruby et JRuby)

page 27 sur 33

Se mettre agrave Ruby irb

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

page 28 sur 33

Se mettre agrave Ruby ressources en ligne

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

Le site officiel (httpwwwruby-langorg)Sa traduction (httpwwwruby-langorgfr)

Le portail Ruby France (httpwwwrubyfranceorg)

Les listes de diffusion sur Google Groups(ruby-talk ruby-core rubyfr-public)

Les groupes de discussion sur Usenet(complangruby frcomplangruby)

Les salons IRC sur FreeNode (ircfreenodenet)(ruby-lang rubyfr)

page 29 sur 33

Se mettre agrave Ruby livres

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

Ruby in a NutshellProgramming RubyThe Ruby WayDesign Patterns for Ruby

Ruby par lrsquoexemple

Passez sur le stand Ruby France

page 30 sur 33

Fin de la preacutesentation

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

page 30 sur 33

Fin de la preacutesentation

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

Des questions

page 30 sur 33

Fin de la preacutesentation

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

page 32 sur 33

Fin de la preacutesentation

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

Merci

page 32 sur 33

Ougrave reacutecupeacuterer ce document

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

Le support de cette preacutesentation sera disponible sur httpzlabfr

page 33 sur 33

Licence de ce document

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

bullVous ecirctes libres bullde reproduire distribuer et communiquer cette creacuteation au public

bullSelon les conditions suivantes bullPaterniteacutebull Vous devez citer le nom de lauteur original de la maniegravere indiqueacutee par lauteur de loeuvre ou le titulaire des droits qui vous confegravere cette autorisation (mais pas dune maniegravere qui suggeacutererait quils vous soutiennent ou approuvent votre utilisation de loeuvre)

bullPas drsquoutilisation commercialebull Vous navez pas le droit dutiliser cette creacuteation agrave des fins commerciales

bullPas de modificationbull Vous navez pas le droit de modifier de transformer ou dadapter cette creacuteation

bullreacutesumeacute explicatif disponible sur httpcreativecommonsorglicensesby-nc-nd20fr

bullvous ecirctes autoriseacute agrave reacuteutiliser le logo Ruby France utiliseacute dans cette preacutesentation pour faire reacutefeacuterence agrave lrsquoassociation

page 11 sur 33

Orienteacute objet deacuteclaration de classe

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

class Presentation lt Intervention deacuteclaration de la classe nombre = 0 variable de classe def initialize(intitule duree=45) post-constructeur intitule = intitule duree = duree nombre += 1 super appel de la meacutethode end dans la classe megravere def to_s titre + + dureeto_s + minutes end def selfnombre meacutethode de classe nombre end end

page 12 sur 33

Orienteacute objet utilisation

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

Presentationnombre renvoie 0p = Presentationnew(Preacutesentation de Ruby)

Presentationnombre renvoie 1

puts p affiche Preacutesentation de Ruby 45 minutes

pfinNoMethodError undefined method `fin for ltPresentation0x49214gt

def pfin puts Suffisamment de Ruby aujourdhui end

pfin affiche Suffisamment de Ruby aujourdrsquohui

page 13 sur 33

Orienteacute objet polymorphisme

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

module RMLL creacutee un nouveau module

EDITION = 2008

renvoie IUT IUFM ou CCI def lieu end

end

puts RMLLEDITION affiche 2008

class Presentation on rouvre la deacutefinition include RMLL pour inclure ce qui est deacutefiniend dans le module RMLL

pextends(RMLL) on eacutetend lobjet p

page 14 sur 33

Un peu plus loin

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

puts salut do puts salutend

lambda puts salut proc do puts salutend

p = Procnew puts salut pcall affiche salut

p = Procnew |i| puts i + 1 pcall 1 affiche 2pcall 41 affiche 42

page 14 sur 33

Un peu plus loin

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

puts salut do puts salutend

lambda puts salut proc do puts salutend

p = Procnew puts salut pcall affiche salut

p = Procnew |i| puts i + 1 pcall 1 affiche 2pcall 41 affiche 42

blocsiteacuterateursyield

page 14 sur 33

Un peu plus loin

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

puts salut do puts salutend

lambda puts salut proc do puts salutend

p = Procnew puts salut pcall affiche salut

p = Procnew |i| puts i + 1 pcall 1 affiche 2pcall 41 affiche 42

page 15 sur 33

Un peu plus loin les iteacuterateurs

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

lyonnais = [Freacutedeacuteric Alexis Jeacuterocircme] lyonnaiseach do |l| puts Dommage l nest pas venu cette anneacuteeend

rmll = 2008 =gt Mont-de-Marsan 2007 =gt Amiens 2006 =gt Vandoeuvre-les-Nancy 2002 =gt Talence

rmlleach_pair do |annee lieu| puts En annee je suis alleacute aux RMLL agrave lieuend

rmllkeyssorteach do |annee| puts En annee je suis alleacute aux RMLL agrave rmll[annee]end

page 16 sur 33

Un peu plus loin les iteacuterateurs

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

lecture dun fichier faccedilon blocs

avertissements = erreurs = 0 initialisation

Fileopen(logtxt) do |fichier| ouverture fichierreadlineseach do |ligne| lecture des lignes case ligne when ^WARN avertissements += 1 when ^ERR erreurs += 1 end endend fermeture automatique

puts Il y a avertissements avertissementsputs et erreurs erreurs dans ce fichier

page 17 sur 33

Un peu plus loin yield

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

class Personne

def initialize(nom) nom = nom end

def salue la meacutethode salue se contente drsquoexeacutecuteryield nom le bloc qui lui est passeacute

end lrsquoargument nom

end

celine = Personnenew(Ceacuteline)celinesalue |n| puts salut n affiche salut Ceacuteline

page 17 sur 33

Un peu plus loin yield

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

class Personne

def initialize(nom) nom = nom end

def salue la meacutethode salue se contente drsquoexeacutecuteryield nom le bloc qui lui est passeacute

end lrsquoargument nom

end

celine = Personnenew(Ceacuteline)celinesalue |n| puts salut n affiche salut Ceacuteline

mais comment ccedila marche

page 17 sur 33

Un peu plus loin yield

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

class Personne

def initialize(nom) nom = nom end

def salue la meacutethode salue se contente drsquoexeacutecuteryield nom le bloc qui lui est passeacute

end lrsquoargument nom

end

celine = Personnenew(Ceacuteline)celinesalue |n| puts salut n affiche salut Ceacuteline

page 18 sur 33

Dynamisme eacutevaluation de code

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

eval puts salut

def operation(operateur operande1 operande2) eval operande1 operateur operande2end

operation + 1 2 renvoie 3operation 9 0 renvoie

Presentationclass_eval do end

page 18 sur 33

Dynamisme eacutevaluation de code

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

eval puts salut

def operation(operateur operande1 operande2) eval operande1 operateur operande2end

operation + 1 2 renvoie 3operation 9 0 renvoie

Presentationclass_eval do end

eacutevaluation de codeinterception drsquoappels de meacutethodes inexistantesexeacutecution des deacutefinitions

reacuteflexiviteacute introspection

page 18 sur 33

Dynamisme eacutevaluation de code

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

eval puts salut

def operation(operateur operande1 operande2) eval operande1 operateur operande2end

operation + 1 2 renvoie 3operation 9 0 renvoie

Presentationclass_eval do end

page 19 sur 33

Dynamisme meacutethodes inexistantes

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

Presentationnombre renvoie 0p = Presentationnew(Preacutesentation de Ruby)

Presentationnombre renvoie 1

puts p affiche Preacutesentation de Ruby 45 minutes

pfinNoMethodError undefined method `fin for ltPresentation0x49214gt

def pfin puts Suffisamment de Ruby aujourdhui end

pfin affiche Suffisamment de Ruby aujourdrsquohui

page 20 sur 33

Dynamisme meacutethodes inexistantes

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

class Presentation def method_missing(nom args) method_missing puts Il ny a pas de meacutethode nom est appeleacutee end avant la leveacuteeend de lexception

p = Presentationnew(Preacutesentation de Ruby)

pfin affiche Il ny a pas de meacutethode fin pas drsquoexception

method_missing est lrsquoun des nombreux ldquohooksrdquo disponibles dans Ruby

page 21 sur 33

Dynamisme deacutefinitions exeacutecuteacutees

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

class Configuration case RUBY_PLATFORM deacutefinition dune meacutethode when linux en fonction du systegraveme def initialize(params) hocircte end when win32 def initialize(params) end when darwin include YAIBExtensionsSpecificOSX else unless include YAIBStandard raise Votre OS nest pas supporteacute end end end

page 22 sur 33

Dynamisme reacuteflexiviteacute introspection

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

On peut interroger tous les composants du langage agrave lrsquoexeacutecution

obj = Arraynewobjclass

objclassinstance_methodsobjmethods eacutequivalent agrave la ligne du dessusobjprivate_methods

objclassinstance_methodsgrep(delete)objclassinstance_methodsgrep(delete)sort

objmethodsgrep(^on_connect_do)each do |method| objsend methodend

page 23 sur 33

Dynamisme reacuteflexiviteacute introspection

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

On peut rouvrir une deacutefinition y compris celle du langage

class Array la classe Array existe on la rouvre def longueur ajout drsquoune meacutethode en franccedilais length proxy vers la meacutethode en anglais end end

arr = Arraynewarr ltlt 1arr ltlt element

arrlongueur renvoie 2

page 24 sur 33

Dynamisme reacuteflexiviteacute introspection

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

class Counterparty def has_all_mandatory_fields_filled quelques veacuterifications end def can_be_in_completed_or_approved_status return false unless selfhas_all_mandatory_fields_filled return false unless selflgdhas_all_mandatory_fields_filled unless selfratingshave_all_mandatory_fields_filled

return false end return true end

end

page 25 sur 33

Dynamisme reacuteflexiviteacute introspection

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

modification de la classe Arrayclass Array

def have_all_mandatory_fields_filled selfeach do |item| unless itemrespond_to has_all_mandatory_fields_filled return false end unless itemhas_all_mandatory_fields_filled return false end end return true end

end

page 26 sur 33

Se mettre agrave Ruby

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

(g)vi(m)(X)emacsSciTE

FreeRIDE (eacutecrit en Ruby)

e-TextEditorTextMate (seulement OSX)

Eclipse avec les Ruby Development ToolsNetBeans 61 (support Ruby et JRuby)

page 26 sur 33

Se mettre agrave Ruby

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

(g)vi(m)(X)emacsSciTE

FreeRIDE (eacutecrit en Ruby)

e-TextEditorTextMate (seulement OSX)

Eclipse avec les Ruby Development ToolsNetBeans 61 (support Ruby et JRuby)

Editeurs et environnements compatiblesLrsquooutil indispensable irbRessources en ligneLivres

page 26 sur 33

Se mettre agrave Ruby

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

(g)vi(m)(X)emacsSciTE

FreeRIDE (eacutecrit en Ruby)

e-TextEditorTextMate (seulement OSX)

Eclipse avec les Ruby Development ToolsNetBeans 61 (support Ruby et JRuby)

page 27 sur 33

Se mettre agrave Ruby irb

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

page 28 sur 33

Se mettre agrave Ruby ressources en ligne

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

Le site officiel (httpwwwruby-langorg)Sa traduction (httpwwwruby-langorgfr)

Le portail Ruby France (httpwwwrubyfranceorg)

Les listes de diffusion sur Google Groups(ruby-talk ruby-core rubyfr-public)

Les groupes de discussion sur Usenet(complangruby frcomplangruby)

Les salons IRC sur FreeNode (ircfreenodenet)(ruby-lang rubyfr)

page 29 sur 33

Se mettre agrave Ruby livres

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

Ruby in a NutshellProgramming RubyThe Ruby WayDesign Patterns for Ruby

Ruby par lrsquoexemple

Passez sur le stand Ruby France

page 30 sur 33

Fin de la preacutesentation

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

page 30 sur 33

Fin de la preacutesentation

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

Des questions

page 30 sur 33

Fin de la preacutesentation

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

page 32 sur 33

Fin de la preacutesentation

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

Merci

page 32 sur 33

Ougrave reacutecupeacuterer ce document

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

Le support de cette preacutesentation sera disponible sur httpzlabfr

page 33 sur 33

Licence de ce document

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

bullVous ecirctes libres bullde reproduire distribuer et communiquer cette creacuteation au public

bullSelon les conditions suivantes bullPaterniteacutebull Vous devez citer le nom de lauteur original de la maniegravere indiqueacutee par lauteur de loeuvre ou le titulaire des droits qui vous confegravere cette autorisation (mais pas dune maniegravere qui suggeacutererait quils vous soutiennent ou approuvent votre utilisation de loeuvre)

bullPas drsquoutilisation commercialebull Vous navez pas le droit dutiliser cette creacuteation agrave des fins commerciales

bullPas de modificationbull Vous navez pas le droit de modifier de transformer ou dadapter cette creacuteation

bullreacutesumeacute explicatif disponible sur httpcreativecommonsorglicensesby-nc-nd20fr

bullvous ecirctes autoriseacute agrave reacuteutiliser le logo Ruby France utiliseacute dans cette preacutesentation pour faire reacutefeacuterence agrave lrsquoassociation

page 12 sur 33

Orienteacute objet utilisation

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

Presentationnombre renvoie 0p = Presentationnew(Preacutesentation de Ruby)

Presentationnombre renvoie 1

puts p affiche Preacutesentation de Ruby 45 minutes

pfinNoMethodError undefined method `fin for ltPresentation0x49214gt

def pfin puts Suffisamment de Ruby aujourdhui end

pfin affiche Suffisamment de Ruby aujourdrsquohui

page 13 sur 33

Orienteacute objet polymorphisme

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

module RMLL creacutee un nouveau module

EDITION = 2008

renvoie IUT IUFM ou CCI def lieu end

end

puts RMLLEDITION affiche 2008

class Presentation on rouvre la deacutefinition include RMLL pour inclure ce qui est deacutefiniend dans le module RMLL

pextends(RMLL) on eacutetend lobjet p

page 14 sur 33

Un peu plus loin

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

puts salut do puts salutend

lambda puts salut proc do puts salutend

p = Procnew puts salut pcall affiche salut

p = Procnew |i| puts i + 1 pcall 1 affiche 2pcall 41 affiche 42

page 14 sur 33

Un peu plus loin

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

puts salut do puts salutend

lambda puts salut proc do puts salutend

p = Procnew puts salut pcall affiche salut

p = Procnew |i| puts i + 1 pcall 1 affiche 2pcall 41 affiche 42

blocsiteacuterateursyield

page 14 sur 33

Un peu plus loin

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

puts salut do puts salutend

lambda puts salut proc do puts salutend

p = Procnew puts salut pcall affiche salut

p = Procnew |i| puts i + 1 pcall 1 affiche 2pcall 41 affiche 42

page 15 sur 33

Un peu plus loin les iteacuterateurs

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

lyonnais = [Freacutedeacuteric Alexis Jeacuterocircme] lyonnaiseach do |l| puts Dommage l nest pas venu cette anneacuteeend

rmll = 2008 =gt Mont-de-Marsan 2007 =gt Amiens 2006 =gt Vandoeuvre-les-Nancy 2002 =gt Talence

rmlleach_pair do |annee lieu| puts En annee je suis alleacute aux RMLL agrave lieuend

rmllkeyssorteach do |annee| puts En annee je suis alleacute aux RMLL agrave rmll[annee]end

page 16 sur 33

Un peu plus loin les iteacuterateurs

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

lecture dun fichier faccedilon blocs

avertissements = erreurs = 0 initialisation

Fileopen(logtxt) do |fichier| ouverture fichierreadlineseach do |ligne| lecture des lignes case ligne when ^WARN avertissements += 1 when ^ERR erreurs += 1 end endend fermeture automatique

puts Il y a avertissements avertissementsputs et erreurs erreurs dans ce fichier

page 17 sur 33

Un peu plus loin yield

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

class Personne

def initialize(nom) nom = nom end

def salue la meacutethode salue se contente drsquoexeacutecuteryield nom le bloc qui lui est passeacute

end lrsquoargument nom

end

celine = Personnenew(Ceacuteline)celinesalue |n| puts salut n affiche salut Ceacuteline

page 17 sur 33

Un peu plus loin yield

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

class Personne

def initialize(nom) nom = nom end

def salue la meacutethode salue se contente drsquoexeacutecuteryield nom le bloc qui lui est passeacute

end lrsquoargument nom

end

celine = Personnenew(Ceacuteline)celinesalue |n| puts salut n affiche salut Ceacuteline

mais comment ccedila marche

page 17 sur 33

Un peu plus loin yield

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

class Personne

def initialize(nom) nom = nom end

def salue la meacutethode salue se contente drsquoexeacutecuteryield nom le bloc qui lui est passeacute

end lrsquoargument nom

end

celine = Personnenew(Ceacuteline)celinesalue |n| puts salut n affiche salut Ceacuteline

page 18 sur 33

Dynamisme eacutevaluation de code

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

eval puts salut

def operation(operateur operande1 operande2) eval operande1 operateur operande2end

operation + 1 2 renvoie 3operation 9 0 renvoie

Presentationclass_eval do end

page 18 sur 33

Dynamisme eacutevaluation de code

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

eval puts salut

def operation(operateur operande1 operande2) eval operande1 operateur operande2end

operation + 1 2 renvoie 3operation 9 0 renvoie

Presentationclass_eval do end

eacutevaluation de codeinterception drsquoappels de meacutethodes inexistantesexeacutecution des deacutefinitions

reacuteflexiviteacute introspection

page 18 sur 33

Dynamisme eacutevaluation de code

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

eval puts salut

def operation(operateur operande1 operande2) eval operande1 operateur operande2end

operation + 1 2 renvoie 3operation 9 0 renvoie

Presentationclass_eval do end

page 19 sur 33

Dynamisme meacutethodes inexistantes

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

Presentationnombre renvoie 0p = Presentationnew(Preacutesentation de Ruby)

Presentationnombre renvoie 1

puts p affiche Preacutesentation de Ruby 45 minutes

pfinNoMethodError undefined method `fin for ltPresentation0x49214gt

def pfin puts Suffisamment de Ruby aujourdhui end

pfin affiche Suffisamment de Ruby aujourdrsquohui

page 20 sur 33

Dynamisme meacutethodes inexistantes

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

class Presentation def method_missing(nom args) method_missing puts Il ny a pas de meacutethode nom est appeleacutee end avant la leveacuteeend de lexception

p = Presentationnew(Preacutesentation de Ruby)

pfin affiche Il ny a pas de meacutethode fin pas drsquoexception

method_missing est lrsquoun des nombreux ldquohooksrdquo disponibles dans Ruby

page 21 sur 33

Dynamisme deacutefinitions exeacutecuteacutees

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

class Configuration case RUBY_PLATFORM deacutefinition dune meacutethode when linux en fonction du systegraveme def initialize(params) hocircte end when win32 def initialize(params) end when darwin include YAIBExtensionsSpecificOSX else unless include YAIBStandard raise Votre OS nest pas supporteacute end end end

page 22 sur 33

Dynamisme reacuteflexiviteacute introspection

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

On peut interroger tous les composants du langage agrave lrsquoexeacutecution

obj = Arraynewobjclass

objclassinstance_methodsobjmethods eacutequivalent agrave la ligne du dessusobjprivate_methods

objclassinstance_methodsgrep(delete)objclassinstance_methodsgrep(delete)sort

objmethodsgrep(^on_connect_do)each do |method| objsend methodend

page 23 sur 33

Dynamisme reacuteflexiviteacute introspection

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

On peut rouvrir une deacutefinition y compris celle du langage

class Array la classe Array existe on la rouvre def longueur ajout drsquoune meacutethode en franccedilais length proxy vers la meacutethode en anglais end end

arr = Arraynewarr ltlt 1arr ltlt element

arrlongueur renvoie 2

page 24 sur 33

Dynamisme reacuteflexiviteacute introspection

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

class Counterparty def has_all_mandatory_fields_filled quelques veacuterifications end def can_be_in_completed_or_approved_status return false unless selfhas_all_mandatory_fields_filled return false unless selflgdhas_all_mandatory_fields_filled unless selfratingshave_all_mandatory_fields_filled

return false end return true end

end

page 25 sur 33

Dynamisme reacuteflexiviteacute introspection

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

modification de la classe Arrayclass Array

def have_all_mandatory_fields_filled selfeach do |item| unless itemrespond_to has_all_mandatory_fields_filled return false end unless itemhas_all_mandatory_fields_filled return false end end return true end

end

page 26 sur 33

Se mettre agrave Ruby

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

(g)vi(m)(X)emacsSciTE

FreeRIDE (eacutecrit en Ruby)

e-TextEditorTextMate (seulement OSX)

Eclipse avec les Ruby Development ToolsNetBeans 61 (support Ruby et JRuby)

page 26 sur 33

Se mettre agrave Ruby

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

(g)vi(m)(X)emacsSciTE

FreeRIDE (eacutecrit en Ruby)

e-TextEditorTextMate (seulement OSX)

Eclipse avec les Ruby Development ToolsNetBeans 61 (support Ruby et JRuby)

Editeurs et environnements compatiblesLrsquooutil indispensable irbRessources en ligneLivres

page 26 sur 33

Se mettre agrave Ruby

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

(g)vi(m)(X)emacsSciTE

FreeRIDE (eacutecrit en Ruby)

e-TextEditorTextMate (seulement OSX)

Eclipse avec les Ruby Development ToolsNetBeans 61 (support Ruby et JRuby)

page 27 sur 33

Se mettre agrave Ruby irb

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

page 28 sur 33

Se mettre agrave Ruby ressources en ligne

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

Le site officiel (httpwwwruby-langorg)Sa traduction (httpwwwruby-langorgfr)

Le portail Ruby France (httpwwwrubyfranceorg)

Les listes de diffusion sur Google Groups(ruby-talk ruby-core rubyfr-public)

Les groupes de discussion sur Usenet(complangruby frcomplangruby)

Les salons IRC sur FreeNode (ircfreenodenet)(ruby-lang rubyfr)

page 29 sur 33

Se mettre agrave Ruby livres

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

Ruby in a NutshellProgramming RubyThe Ruby WayDesign Patterns for Ruby

Ruby par lrsquoexemple

Passez sur le stand Ruby France

page 30 sur 33

Fin de la preacutesentation

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

page 30 sur 33

Fin de la preacutesentation

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

Des questions

page 30 sur 33

Fin de la preacutesentation

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

page 32 sur 33

Fin de la preacutesentation

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

Merci

page 32 sur 33

Ougrave reacutecupeacuterer ce document

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

Le support de cette preacutesentation sera disponible sur httpzlabfr

page 33 sur 33

Licence de ce document

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

bullVous ecirctes libres bullde reproduire distribuer et communiquer cette creacuteation au public

bullSelon les conditions suivantes bullPaterniteacutebull Vous devez citer le nom de lauteur original de la maniegravere indiqueacutee par lauteur de loeuvre ou le titulaire des droits qui vous confegravere cette autorisation (mais pas dune maniegravere qui suggeacutererait quils vous soutiennent ou approuvent votre utilisation de loeuvre)

bullPas drsquoutilisation commercialebull Vous navez pas le droit dutiliser cette creacuteation agrave des fins commerciales

bullPas de modificationbull Vous navez pas le droit de modifier de transformer ou dadapter cette creacuteation

bullreacutesumeacute explicatif disponible sur httpcreativecommonsorglicensesby-nc-nd20fr

bullvous ecirctes autoriseacute agrave reacuteutiliser le logo Ruby France utiliseacute dans cette preacutesentation pour faire reacutefeacuterence agrave lrsquoassociation

page 13 sur 33

Orienteacute objet polymorphisme

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

module RMLL creacutee un nouveau module

EDITION = 2008

renvoie IUT IUFM ou CCI def lieu end

end

puts RMLLEDITION affiche 2008

class Presentation on rouvre la deacutefinition include RMLL pour inclure ce qui est deacutefiniend dans le module RMLL

pextends(RMLL) on eacutetend lobjet p

page 14 sur 33

Un peu plus loin

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

puts salut do puts salutend

lambda puts salut proc do puts salutend

p = Procnew puts salut pcall affiche salut

p = Procnew |i| puts i + 1 pcall 1 affiche 2pcall 41 affiche 42

page 14 sur 33

Un peu plus loin

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

puts salut do puts salutend

lambda puts salut proc do puts salutend

p = Procnew puts salut pcall affiche salut

p = Procnew |i| puts i + 1 pcall 1 affiche 2pcall 41 affiche 42

blocsiteacuterateursyield

page 14 sur 33

Un peu plus loin

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

puts salut do puts salutend

lambda puts salut proc do puts salutend

p = Procnew puts salut pcall affiche salut

p = Procnew |i| puts i + 1 pcall 1 affiche 2pcall 41 affiche 42

page 15 sur 33

Un peu plus loin les iteacuterateurs

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

lyonnais = [Freacutedeacuteric Alexis Jeacuterocircme] lyonnaiseach do |l| puts Dommage l nest pas venu cette anneacuteeend

rmll = 2008 =gt Mont-de-Marsan 2007 =gt Amiens 2006 =gt Vandoeuvre-les-Nancy 2002 =gt Talence

rmlleach_pair do |annee lieu| puts En annee je suis alleacute aux RMLL agrave lieuend

rmllkeyssorteach do |annee| puts En annee je suis alleacute aux RMLL agrave rmll[annee]end

page 16 sur 33

Un peu plus loin les iteacuterateurs

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

lecture dun fichier faccedilon blocs

avertissements = erreurs = 0 initialisation

Fileopen(logtxt) do |fichier| ouverture fichierreadlineseach do |ligne| lecture des lignes case ligne when ^WARN avertissements += 1 when ^ERR erreurs += 1 end endend fermeture automatique

puts Il y a avertissements avertissementsputs et erreurs erreurs dans ce fichier

page 17 sur 33

Un peu plus loin yield

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

class Personne

def initialize(nom) nom = nom end

def salue la meacutethode salue se contente drsquoexeacutecuteryield nom le bloc qui lui est passeacute

end lrsquoargument nom

end

celine = Personnenew(Ceacuteline)celinesalue |n| puts salut n affiche salut Ceacuteline

page 17 sur 33

Un peu plus loin yield

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

class Personne

def initialize(nom) nom = nom end

def salue la meacutethode salue se contente drsquoexeacutecuteryield nom le bloc qui lui est passeacute

end lrsquoargument nom

end

celine = Personnenew(Ceacuteline)celinesalue |n| puts salut n affiche salut Ceacuteline

mais comment ccedila marche

page 17 sur 33

Un peu plus loin yield

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

class Personne

def initialize(nom) nom = nom end

def salue la meacutethode salue se contente drsquoexeacutecuteryield nom le bloc qui lui est passeacute

end lrsquoargument nom

end

celine = Personnenew(Ceacuteline)celinesalue |n| puts salut n affiche salut Ceacuteline

page 18 sur 33

Dynamisme eacutevaluation de code

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

eval puts salut

def operation(operateur operande1 operande2) eval operande1 operateur operande2end

operation + 1 2 renvoie 3operation 9 0 renvoie

Presentationclass_eval do end

page 18 sur 33

Dynamisme eacutevaluation de code

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

eval puts salut

def operation(operateur operande1 operande2) eval operande1 operateur operande2end

operation + 1 2 renvoie 3operation 9 0 renvoie

Presentationclass_eval do end

eacutevaluation de codeinterception drsquoappels de meacutethodes inexistantesexeacutecution des deacutefinitions

reacuteflexiviteacute introspection

page 18 sur 33

Dynamisme eacutevaluation de code

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

eval puts salut

def operation(operateur operande1 operande2) eval operande1 operateur operande2end

operation + 1 2 renvoie 3operation 9 0 renvoie

Presentationclass_eval do end

page 19 sur 33

Dynamisme meacutethodes inexistantes

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

Presentationnombre renvoie 0p = Presentationnew(Preacutesentation de Ruby)

Presentationnombre renvoie 1

puts p affiche Preacutesentation de Ruby 45 minutes

pfinNoMethodError undefined method `fin for ltPresentation0x49214gt

def pfin puts Suffisamment de Ruby aujourdhui end

pfin affiche Suffisamment de Ruby aujourdrsquohui

page 20 sur 33

Dynamisme meacutethodes inexistantes

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

class Presentation def method_missing(nom args) method_missing puts Il ny a pas de meacutethode nom est appeleacutee end avant la leveacuteeend de lexception

p = Presentationnew(Preacutesentation de Ruby)

pfin affiche Il ny a pas de meacutethode fin pas drsquoexception

method_missing est lrsquoun des nombreux ldquohooksrdquo disponibles dans Ruby

page 21 sur 33

Dynamisme deacutefinitions exeacutecuteacutees

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

class Configuration case RUBY_PLATFORM deacutefinition dune meacutethode when linux en fonction du systegraveme def initialize(params) hocircte end when win32 def initialize(params) end when darwin include YAIBExtensionsSpecificOSX else unless include YAIBStandard raise Votre OS nest pas supporteacute end end end

page 22 sur 33

Dynamisme reacuteflexiviteacute introspection

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

On peut interroger tous les composants du langage agrave lrsquoexeacutecution

obj = Arraynewobjclass

objclassinstance_methodsobjmethods eacutequivalent agrave la ligne du dessusobjprivate_methods

objclassinstance_methodsgrep(delete)objclassinstance_methodsgrep(delete)sort

objmethodsgrep(^on_connect_do)each do |method| objsend methodend

page 23 sur 33

Dynamisme reacuteflexiviteacute introspection

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

On peut rouvrir une deacutefinition y compris celle du langage

class Array la classe Array existe on la rouvre def longueur ajout drsquoune meacutethode en franccedilais length proxy vers la meacutethode en anglais end end

arr = Arraynewarr ltlt 1arr ltlt element

arrlongueur renvoie 2

page 24 sur 33

Dynamisme reacuteflexiviteacute introspection

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

class Counterparty def has_all_mandatory_fields_filled quelques veacuterifications end def can_be_in_completed_or_approved_status return false unless selfhas_all_mandatory_fields_filled return false unless selflgdhas_all_mandatory_fields_filled unless selfratingshave_all_mandatory_fields_filled

return false end return true end

end

page 25 sur 33

Dynamisme reacuteflexiviteacute introspection

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

modification de la classe Arrayclass Array

def have_all_mandatory_fields_filled selfeach do |item| unless itemrespond_to has_all_mandatory_fields_filled return false end unless itemhas_all_mandatory_fields_filled return false end end return true end

end

page 26 sur 33

Se mettre agrave Ruby

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

(g)vi(m)(X)emacsSciTE

FreeRIDE (eacutecrit en Ruby)

e-TextEditorTextMate (seulement OSX)

Eclipse avec les Ruby Development ToolsNetBeans 61 (support Ruby et JRuby)

page 26 sur 33

Se mettre agrave Ruby

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

(g)vi(m)(X)emacsSciTE

FreeRIDE (eacutecrit en Ruby)

e-TextEditorTextMate (seulement OSX)

Eclipse avec les Ruby Development ToolsNetBeans 61 (support Ruby et JRuby)

Editeurs et environnements compatiblesLrsquooutil indispensable irbRessources en ligneLivres

page 26 sur 33

Se mettre agrave Ruby

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

(g)vi(m)(X)emacsSciTE

FreeRIDE (eacutecrit en Ruby)

e-TextEditorTextMate (seulement OSX)

Eclipse avec les Ruby Development ToolsNetBeans 61 (support Ruby et JRuby)

page 27 sur 33

Se mettre agrave Ruby irb

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

page 28 sur 33

Se mettre agrave Ruby ressources en ligne

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

Le site officiel (httpwwwruby-langorg)Sa traduction (httpwwwruby-langorgfr)

Le portail Ruby France (httpwwwrubyfranceorg)

Les listes de diffusion sur Google Groups(ruby-talk ruby-core rubyfr-public)

Les groupes de discussion sur Usenet(complangruby frcomplangruby)

Les salons IRC sur FreeNode (ircfreenodenet)(ruby-lang rubyfr)

page 29 sur 33

Se mettre agrave Ruby livres

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

Ruby in a NutshellProgramming RubyThe Ruby WayDesign Patterns for Ruby

Ruby par lrsquoexemple

Passez sur le stand Ruby France

page 30 sur 33

Fin de la preacutesentation

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

page 30 sur 33

Fin de la preacutesentation

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

Des questions

page 30 sur 33

Fin de la preacutesentation

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

page 32 sur 33

Fin de la preacutesentation

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

Merci

page 32 sur 33

Ougrave reacutecupeacuterer ce document

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

Le support de cette preacutesentation sera disponible sur httpzlabfr

page 33 sur 33

Licence de ce document

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

bullVous ecirctes libres bullde reproduire distribuer et communiquer cette creacuteation au public

bullSelon les conditions suivantes bullPaterniteacutebull Vous devez citer le nom de lauteur original de la maniegravere indiqueacutee par lauteur de loeuvre ou le titulaire des droits qui vous confegravere cette autorisation (mais pas dune maniegravere qui suggeacutererait quils vous soutiennent ou approuvent votre utilisation de loeuvre)

bullPas drsquoutilisation commercialebull Vous navez pas le droit dutiliser cette creacuteation agrave des fins commerciales

bullPas de modificationbull Vous navez pas le droit de modifier de transformer ou dadapter cette creacuteation

bullreacutesumeacute explicatif disponible sur httpcreativecommonsorglicensesby-nc-nd20fr

bullvous ecirctes autoriseacute agrave reacuteutiliser le logo Ruby France utiliseacute dans cette preacutesentation pour faire reacutefeacuterence agrave lrsquoassociation

page 14 sur 33

Un peu plus loin

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

puts salut do puts salutend

lambda puts salut proc do puts salutend

p = Procnew puts salut pcall affiche salut

p = Procnew |i| puts i + 1 pcall 1 affiche 2pcall 41 affiche 42

page 14 sur 33

Un peu plus loin

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

puts salut do puts salutend

lambda puts salut proc do puts salutend

p = Procnew puts salut pcall affiche salut

p = Procnew |i| puts i + 1 pcall 1 affiche 2pcall 41 affiche 42

blocsiteacuterateursyield

page 14 sur 33

Un peu plus loin

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

puts salut do puts salutend

lambda puts salut proc do puts salutend

p = Procnew puts salut pcall affiche salut

p = Procnew |i| puts i + 1 pcall 1 affiche 2pcall 41 affiche 42

page 15 sur 33

Un peu plus loin les iteacuterateurs

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

lyonnais = [Freacutedeacuteric Alexis Jeacuterocircme] lyonnaiseach do |l| puts Dommage l nest pas venu cette anneacuteeend

rmll = 2008 =gt Mont-de-Marsan 2007 =gt Amiens 2006 =gt Vandoeuvre-les-Nancy 2002 =gt Talence

rmlleach_pair do |annee lieu| puts En annee je suis alleacute aux RMLL agrave lieuend

rmllkeyssorteach do |annee| puts En annee je suis alleacute aux RMLL agrave rmll[annee]end

page 16 sur 33

Un peu plus loin les iteacuterateurs

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

lecture dun fichier faccedilon blocs

avertissements = erreurs = 0 initialisation

Fileopen(logtxt) do |fichier| ouverture fichierreadlineseach do |ligne| lecture des lignes case ligne when ^WARN avertissements += 1 when ^ERR erreurs += 1 end endend fermeture automatique

puts Il y a avertissements avertissementsputs et erreurs erreurs dans ce fichier

page 17 sur 33

Un peu plus loin yield

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

class Personne

def initialize(nom) nom = nom end

def salue la meacutethode salue se contente drsquoexeacutecuteryield nom le bloc qui lui est passeacute

end lrsquoargument nom

end

celine = Personnenew(Ceacuteline)celinesalue |n| puts salut n affiche salut Ceacuteline

page 17 sur 33

Un peu plus loin yield

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

class Personne

def initialize(nom) nom = nom end

def salue la meacutethode salue se contente drsquoexeacutecuteryield nom le bloc qui lui est passeacute

end lrsquoargument nom

end

celine = Personnenew(Ceacuteline)celinesalue |n| puts salut n affiche salut Ceacuteline

mais comment ccedila marche

page 17 sur 33

Un peu plus loin yield

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

class Personne

def initialize(nom) nom = nom end

def salue la meacutethode salue se contente drsquoexeacutecuteryield nom le bloc qui lui est passeacute

end lrsquoargument nom

end

celine = Personnenew(Ceacuteline)celinesalue |n| puts salut n affiche salut Ceacuteline

page 18 sur 33

Dynamisme eacutevaluation de code

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

eval puts salut

def operation(operateur operande1 operande2) eval operande1 operateur operande2end

operation + 1 2 renvoie 3operation 9 0 renvoie

Presentationclass_eval do end

page 18 sur 33

Dynamisme eacutevaluation de code

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

eval puts salut

def operation(operateur operande1 operande2) eval operande1 operateur operande2end

operation + 1 2 renvoie 3operation 9 0 renvoie

Presentationclass_eval do end

eacutevaluation de codeinterception drsquoappels de meacutethodes inexistantesexeacutecution des deacutefinitions

reacuteflexiviteacute introspection

page 18 sur 33

Dynamisme eacutevaluation de code

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

eval puts salut

def operation(operateur operande1 operande2) eval operande1 operateur operande2end

operation + 1 2 renvoie 3operation 9 0 renvoie

Presentationclass_eval do end

page 19 sur 33

Dynamisme meacutethodes inexistantes

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

Presentationnombre renvoie 0p = Presentationnew(Preacutesentation de Ruby)

Presentationnombre renvoie 1

puts p affiche Preacutesentation de Ruby 45 minutes

pfinNoMethodError undefined method `fin for ltPresentation0x49214gt

def pfin puts Suffisamment de Ruby aujourdhui end

pfin affiche Suffisamment de Ruby aujourdrsquohui

page 20 sur 33

Dynamisme meacutethodes inexistantes

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

class Presentation def method_missing(nom args) method_missing puts Il ny a pas de meacutethode nom est appeleacutee end avant la leveacuteeend de lexception

p = Presentationnew(Preacutesentation de Ruby)

pfin affiche Il ny a pas de meacutethode fin pas drsquoexception

method_missing est lrsquoun des nombreux ldquohooksrdquo disponibles dans Ruby

page 21 sur 33

Dynamisme deacutefinitions exeacutecuteacutees

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

class Configuration case RUBY_PLATFORM deacutefinition dune meacutethode when linux en fonction du systegraveme def initialize(params) hocircte end when win32 def initialize(params) end when darwin include YAIBExtensionsSpecificOSX else unless include YAIBStandard raise Votre OS nest pas supporteacute end end end

page 22 sur 33

Dynamisme reacuteflexiviteacute introspection

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

On peut interroger tous les composants du langage agrave lrsquoexeacutecution

obj = Arraynewobjclass

objclassinstance_methodsobjmethods eacutequivalent agrave la ligne du dessusobjprivate_methods

objclassinstance_methodsgrep(delete)objclassinstance_methodsgrep(delete)sort

objmethodsgrep(^on_connect_do)each do |method| objsend methodend

page 23 sur 33

Dynamisme reacuteflexiviteacute introspection

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

On peut rouvrir une deacutefinition y compris celle du langage

class Array la classe Array existe on la rouvre def longueur ajout drsquoune meacutethode en franccedilais length proxy vers la meacutethode en anglais end end

arr = Arraynewarr ltlt 1arr ltlt element

arrlongueur renvoie 2

page 24 sur 33

Dynamisme reacuteflexiviteacute introspection

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

class Counterparty def has_all_mandatory_fields_filled quelques veacuterifications end def can_be_in_completed_or_approved_status return false unless selfhas_all_mandatory_fields_filled return false unless selflgdhas_all_mandatory_fields_filled unless selfratingshave_all_mandatory_fields_filled

return false end return true end

end

page 25 sur 33

Dynamisme reacuteflexiviteacute introspection

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

modification de la classe Arrayclass Array

def have_all_mandatory_fields_filled selfeach do |item| unless itemrespond_to has_all_mandatory_fields_filled return false end unless itemhas_all_mandatory_fields_filled return false end end return true end

end

page 26 sur 33

Se mettre agrave Ruby

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

(g)vi(m)(X)emacsSciTE

FreeRIDE (eacutecrit en Ruby)

e-TextEditorTextMate (seulement OSX)

Eclipse avec les Ruby Development ToolsNetBeans 61 (support Ruby et JRuby)

page 26 sur 33

Se mettre agrave Ruby

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

(g)vi(m)(X)emacsSciTE

FreeRIDE (eacutecrit en Ruby)

e-TextEditorTextMate (seulement OSX)

Eclipse avec les Ruby Development ToolsNetBeans 61 (support Ruby et JRuby)

Editeurs et environnements compatiblesLrsquooutil indispensable irbRessources en ligneLivres

page 26 sur 33

Se mettre agrave Ruby

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

(g)vi(m)(X)emacsSciTE

FreeRIDE (eacutecrit en Ruby)

e-TextEditorTextMate (seulement OSX)

Eclipse avec les Ruby Development ToolsNetBeans 61 (support Ruby et JRuby)

page 27 sur 33

Se mettre agrave Ruby irb

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

page 28 sur 33

Se mettre agrave Ruby ressources en ligne

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

Le site officiel (httpwwwruby-langorg)Sa traduction (httpwwwruby-langorgfr)

Le portail Ruby France (httpwwwrubyfranceorg)

Les listes de diffusion sur Google Groups(ruby-talk ruby-core rubyfr-public)

Les groupes de discussion sur Usenet(complangruby frcomplangruby)

Les salons IRC sur FreeNode (ircfreenodenet)(ruby-lang rubyfr)

page 29 sur 33

Se mettre agrave Ruby livres

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

Ruby in a NutshellProgramming RubyThe Ruby WayDesign Patterns for Ruby

Ruby par lrsquoexemple

Passez sur le stand Ruby France

page 30 sur 33

Fin de la preacutesentation

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

page 30 sur 33

Fin de la preacutesentation

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

Des questions

page 30 sur 33

Fin de la preacutesentation

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

page 32 sur 33

Fin de la preacutesentation

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

Merci

page 32 sur 33

Ougrave reacutecupeacuterer ce document

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

Le support de cette preacutesentation sera disponible sur httpzlabfr

page 33 sur 33

Licence de ce document

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

bullVous ecirctes libres bullde reproduire distribuer et communiquer cette creacuteation au public

bullSelon les conditions suivantes bullPaterniteacutebull Vous devez citer le nom de lauteur original de la maniegravere indiqueacutee par lauteur de loeuvre ou le titulaire des droits qui vous confegravere cette autorisation (mais pas dune maniegravere qui suggeacutererait quils vous soutiennent ou approuvent votre utilisation de loeuvre)

bullPas drsquoutilisation commercialebull Vous navez pas le droit dutiliser cette creacuteation agrave des fins commerciales

bullPas de modificationbull Vous navez pas le droit de modifier de transformer ou dadapter cette creacuteation

bullreacutesumeacute explicatif disponible sur httpcreativecommonsorglicensesby-nc-nd20fr

bullvous ecirctes autoriseacute agrave reacuteutiliser le logo Ruby France utiliseacute dans cette preacutesentation pour faire reacutefeacuterence agrave lrsquoassociation

page 14 sur 33

Un peu plus loin

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

puts salut do puts salutend

lambda puts salut proc do puts salutend

p = Procnew puts salut pcall affiche salut

p = Procnew |i| puts i + 1 pcall 1 affiche 2pcall 41 affiche 42

blocsiteacuterateursyield

page 14 sur 33

Un peu plus loin

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

puts salut do puts salutend

lambda puts salut proc do puts salutend

p = Procnew puts salut pcall affiche salut

p = Procnew |i| puts i + 1 pcall 1 affiche 2pcall 41 affiche 42

page 15 sur 33

Un peu plus loin les iteacuterateurs

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

lyonnais = [Freacutedeacuteric Alexis Jeacuterocircme] lyonnaiseach do |l| puts Dommage l nest pas venu cette anneacuteeend

rmll = 2008 =gt Mont-de-Marsan 2007 =gt Amiens 2006 =gt Vandoeuvre-les-Nancy 2002 =gt Talence

rmlleach_pair do |annee lieu| puts En annee je suis alleacute aux RMLL agrave lieuend

rmllkeyssorteach do |annee| puts En annee je suis alleacute aux RMLL agrave rmll[annee]end

page 16 sur 33

Un peu plus loin les iteacuterateurs

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

lecture dun fichier faccedilon blocs

avertissements = erreurs = 0 initialisation

Fileopen(logtxt) do |fichier| ouverture fichierreadlineseach do |ligne| lecture des lignes case ligne when ^WARN avertissements += 1 when ^ERR erreurs += 1 end endend fermeture automatique

puts Il y a avertissements avertissementsputs et erreurs erreurs dans ce fichier

page 17 sur 33

Un peu plus loin yield

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

class Personne

def initialize(nom) nom = nom end

def salue la meacutethode salue se contente drsquoexeacutecuteryield nom le bloc qui lui est passeacute

end lrsquoargument nom

end

celine = Personnenew(Ceacuteline)celinesalue |n| puts salut n affiche salut Ceacuteline

page 17 sur 33

Un peu plus loin yield

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

class Personne

def initialize(nom) nom = nom end

def salue la meacutethode salue se contente drsquoexeacutecuteryield nom le bloc qui lui est passeacute

end lrsquoargument nom

end

celine = Personnenew(Ceacuteline)celinesalue |n| puts salut n affiche salut Ceacuteline

mais comment ccedila marche

page 17 sur 33

Un peu plus loin yield

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

class Personne

def initialize(nom) nom = nom end

def salue la meacutethode salue se contente drsquoexeacutecuteryield nom le bloc qui lui est passeacute

end lrsquoargument nom

end

celine = Personnenew(Ceacuteline)celinesalue |n| puts salut n affiche salut Ceacuteline

page 18 sur 33

Dynamisme eacutevaluation de code

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

eval puts salut

def operation(operateur operande1 operande2) eval operande1 operateur operande2end

operation + 1 2 renvoie 3operation 9 0 renvoie

Presentationclass_eval do end

page 18 sur 33

Dynamisme eacutevaluation de code

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

eval puts salut

def operation(operateur operande1 operande2) eval operande1 operateur operande2end

operation + 1 2 renvoie 3operation 9 0 renvoie

Presentationclass_eval do end

eacutevaluation de codeinterception drsquoappels de meacutethodes inexistantesexeacutecution des deacutefinitions

reacuteflexiviteacute introspection

page 18 sur 33

Dynamisme eacutevaluation de code

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

eval puts salut

def operation(operateur operande1 operande2) eval operande1 operateur operande2end

operation + 1 2 renvoie 3operation 9 0 renvoie

Presentationclass_eval do end

page 19 sur 33

Dynamisme meacutethodes inexistantes

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

Presentationnombre renvoie 0p = Presentationnew(Preacutesentation de Ruby)

Presentationnombre renvoie 1

puts p affiche Preacutesentation de Ruby 45 minutes

pfinNoMethodError undefined method `fin for ltPresentation0x49214gt

def pfin puts Suffisamment de Ruby aujourdhui end

pfin affiche Suffisamment de Ruby aujourdrsquohui

page 20 sur 33

Dynamisme meacutethodes inexistantes

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

class Presentation def method_missing(nom args) method_missing puts Il ny a pas de meacutethode nom est appeleacutee end avant la leveacuteeend de lexception

p = Presentationnew(Preacutesentation de Ruby)

pfin affiche Il ny a pas de meacutethode fin pas drsquoexception

method_missing est lrsquoun des nombreux ldquohooksrdquo disponibles dans Ruby

page 21 sur 33

Dynamisme deacutefinitions exeacutecuteacutees

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

class Configuration case RUBY_PLATFORM deacutefinition dune meacutethode when linux en fonction du systegraveme def initialize(params) hocircte end when win32 def initialize(params) end when darwin include YAIBExtensionsSpecificOSX else unless include YAIBStandard raise Votre OS nest pas supporteacute end end end

page 22 sur 33

Dynamisme reacuteflexiviteacute introspection

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

On peut interroger tous les composants du langage agrave lrsquoexeacutecution

obj = Arraynewobjclass

objclassinstance_methodsobjmethods eacutequivalent agrave la ligne du dessusobjprivate_methods

objclassinstance_methodsgrep(delete)objclassinstance_methodsgrep(delete)sort

objmethodsgrep(^on_connect_do)each do |method| objsend methodend

page 23 sur 33

Dynamisme reacuteflexiviteacute introspection

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

On peut rouvrir une deacutefinition y compris celle du langage

class Array la classe Array existe on la rouvre def longueur ajout drsquoune meacutethode en franccedilais length proxy vers la meacutethode en anglais end end

arr = Arraynewarr ltlt 1arr ltlt element

arrlongueur renvoie 2

page 24 sur 33

Dynamisme reacuteflexiviteacute introspection

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

class Counterparty def has_all_mandatory_fields_filled quelques veacuterifications end def can_be_in_completed_or_approved_status return false unless selfhas_all_mandatory_fields_filled return false unless selflgdhas_all_mandatory_fields_filled unless selfratingshave_all_mandatory_fields_filled

return false end return true end

end

page 25 sur 33

Dynamisme reacuteflexiviteacute introspection

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

modification de la classe Arrayclass Array

def have_all_mandatory_fields_filled selfeach do |item| unless itemrespond_to has_all_mandatory_fields_filled return false end unless itemhas_all_mandatory_fields_filled return false end end return true end

end

page 26 sur 33

Se mettre agrave Ruby

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

(g)vi(m)(X)emacsSciTE

FreeRIDE (eacutecrit en Ruby)

e-TextEditorTextMate (seulement OSX)

Eclipse avec les Ruby Development ToolsNetBeans 61 (support Ruby et JRuby)

page 26 sur 33

Se mettre agrave Ruby

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

(g)vi(m)(X)emacsSciTE

FreeRIDE (eacutecrit en Ruby)

e-TextEditorTextMate (seulement OSX)

Eclipse avec les Ruby Development ToolsNetBeans 61 (support Ruby et JRuby)

Editeurs et environnements compatiblesLrsquooutil indispensable irbRessources en ligneLivres

page 26 sur 33

Se mettre agrave Ruby

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

(g)vi(m)(X)emacsSciTE

FreeRIDE (eacutecrit en Ruby)

e-TextEditorTextMate (seulement OSX)

Eclipse avec les Ruby Development ToolsNetBeans 61 (support Ruby et JRuby)

page 27 sur 33

Se mettre agrave Ruby irb

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

page 28 sur 33

Se mettre agrave Ruby ressources en ligne

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

Le site officiel (httpwwwruby-langorg)Sa traduction (httpwwwruby-langorgfr)

Le portail Ruby France (httpwwwrubyfranceorg)

Les listes de diffusion sur Google Groups(ruby-talk ruby-core rubyfr-public)

Les groupes de discussion sur Usenet(complangruby frcomplangruby)

Les salons IRC sur FreeNode (ircfreenodenet)(ruby-lang rubyfr)

page 29 sur 33

Se mettre agrave Ruby livres

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

Ruby in a NutshellProgramming RubyThe Ruby WayDesign Patterns for Ruby

Ruby par lrsquoexemple

Passez sur le stand Ruby France

page 30 sur 33

Fin de la preacutesentation

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

page 30 sur 33

Fin de la preacutesentation

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

Des questions

page 30 sur 33

Fin de la preacutesentation

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

page 32 sur 33

Fin de la preacutesentation

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

Merci

page 32 sur 33

Ougrave reacutecupeacuterer ce document

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

Le support de cette preacutesentation sera disponible sur httpzlabfr

page 33 sur 33

Licence de ce document

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

bullVous ecirctes libres bullde reproduire distribuer et communiquer cette creacuteation au public

bullSelon les conditions suivantes bullPaterniteacutebull Vous devez citer le nom de lauteur original de la maniegravere indiqueacutee par lauteur de loeuvre ou le titulaire des droits qui vous confegravere cette autorisation (mais pas dune maniegravere qui suggeacutererait quils vous soutiennent ou approuvent votre utilisation de loeuvre)

bullPas drsquoutilisation commercialebull Vous navez pas le droit dutiliser cette creacuteation agrave des fins commerciales

bullPas de modificationbull Vous navez pas le droit de modifier de transformer ou dadapter cette creacuteation

bullreacutesumeacute explicatif disponible sur httpcreativecommonsorglicensesby-nc-nd20fr

bullvous ecirctes autoriseacute agrave reacuteutiliser le logo Ruby France utiliseacute dans cette preacutesentation pour faire reacutefeacuterence agrave lrsquoassociation

page 14 sur 33

Un peu plus loin

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

puts salut do puts salutend

lambda puts salut proc do puts salutend

p = Procnew puts salut pcall affiche salut

p = Procnew |i| puts i + 1 pcall 1 affiche 2pcall 41 affiche 42

page 15 sur 33

Un peu plus loin les iteacuterateurs

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

lyonnais = [Freacutedeacuteric Alexis Jeacuterocircme] lyonnaiseach do |l| puts Dommage l nest pas venu cette anneacuteeend

rmll = 2008 =gt Mont-de-Marsan 2007 =gt Amiens 2006 =gt Vandoeuvre-les-Nancy 2002 =gt Talence

rmlleach_pair do |annee lieu| puts En annee je suis alleacute aux RMLL agrave lieuend

rmllkeyssorteach do |annee| puts En annee je suis alleacute aux RMLL agrave rmll[annee]end

page 16 sur 33

Un peu plus loin les iteacuterateurs

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

lecture dun fichier faccedilon blocs

avertissements = erreurs = 0 initialisation

Fileopen(logtxt) do |fichier| ouverture fichierreadlineseach do |ligne| lecture des lignes case ligne when ^WARN avertissements += 1 when ^ERR erreurs += 1 end endend fermeture automatique

puts Il y a avertissements avertissementsputs et erreurs erreurs dans ce fichier

page 17 sur 33

Un peu plus loin yield

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

class Personne

def initialize(nom) nom = nom end

def salue la meacutethode salue se contente drsquoexeacutecuteryield nom le bloc qui lui est passeacute

end lrsquoargument nom

end

celine = Personnenew(Ceacuteline)celinesalue |n| puts salut n affiche salut Ceacuteline

page 17 sur 33

Un peu plus loin yield

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

class Personne

def initialize(nom) nom = nom end

def salue la meacutethode salue se contente drsquoexeacutecuteryield nom le bloc qui lui est passeacute

end lrsquoargument nom

end

celine = Personnenew(Ceacuteline)celinesalue |n| puts salut n affiche salut Ceacuteline

mais comment ccedila marche

page 17 sur 33

Un peu plus loin yield

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

class Personne

def initialize(nom) nom = nom end

def salue la meacutethode salue se contente drsquoexeacutecuteryield nom le bloc qui lui est passeacute

end lrsquoargument nom

end

celine = Personnenew(Ceacuteline)celinesalue |n| puts salut n affiche salut Ceacuteline

page 18 sur 33

Dynamisme eacutevaluation de code

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

eval puts salut

def operation(operateur operande1 operande2) eval operande1 operateur operande2end

operation + 1 2 renvoie 3operation 9 0 renvoie

Presentationclass_eval do end

page 18 sur 33

Dynamisme eacutevaluation de code

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

eval puts salut

def operation(operateur operande1 operande2) eval operande1 operateur operande2end

operation + 1 2 renvoie 3operation 9 0 renvoie

Presentationclass_eval do end

eacutevaluation de codeinterception drsquoappels de meacutethodes inexistantesexeacutecution des deacutefinitions

reacuteflexiviteacute introspection

page 18 sur 33

Dynamisme eacutevaluation de code

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

eval puts salut

def operation(operateur operande1 operande2) eval operande1 operateur operande2end

operation + 1 2 renvoie 3operation 9 0 renvoie

Presentationclass_eval do end

page 19 sur 33

Dynamisme meacutethodes inexistantes

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

Presentationnombre renvoie 0p = Presentationnew(Preacutesentation de Ruby)

Presentationnombre renvoie 1

puts p affiche Preacutesentation de Ruby 45 minutes

pfinNoMethodError undefined method `fin for ltPresentation0x49214gt

def pfin puts Suffisamment de Ruby aujourdhui end

pfin affiche Suffisamment de Ruby aujourdrsquohui

page 20 sur 33

Dynamisme meacutethodes inexistantes

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

class Presentation def method_missing(nom args) method_missing puts Il ny a pas de meacutethode nom est appeleacutee end avant la leveacuteeend de lexception

p = Presentationnew(Preacutesentation de Ruby)

pfin affiche Il ny a pas de meacutethode fin pas drsquoexception

method_missing est lrsquoun des nombreux ldquohooksrdquo disponibles dans Ruby

page 21 sur 33

Dynamisme deacutefinitions exeacutecuteacutees

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

class Configuration case RUBY_PLATFORM deacutefinition dune meacutethode when linux en fonction du systegraveme def initialize(params) hocircte end when win32 def initialize(params) end when darwin include YAIBExtensionsSpecificOSX else unless include YAIBStandard raise Votre OS nest pas supporteacute end end end

page 22 sur 33

Dynamisme reacuteflexiviteacute introspection

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

On peut interroger tous les composants du langage agrave lrsquoexeacutecution

obj = Arraynewobjclass

objclassinstance_methodsobjmethods eacutequivalent agrave la ligne du dessusobjprivate_methods

objclassinstance_methodsgrep(delete)objclassinstance_methodsgrep(delete)sort

objmethodsgrep(^on_connect_do)each do |method| objsend methodend

page 23 sur 33

Dynamisme reacuteflexiviteacute introspection

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

On peut rouvrir une deacutefinition y compris celle du langage

class Array la classe Array existe on la rouvre def longueur ajout drsquoune meacutethode en franccedilais length proxy vers la meacutethode en anglais end end

arr = Arraynewarr ltlt 1arr ltlt element

arrlongueur renvoie 2

page 24 sur 33

Dynamisme reacuteflexiviteacute introspection

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

class Counterparty def has_all_mandatory_fields_filled quelques veacuterifications end def can_be_in_completed_or_approved_status return false unless selfhas_all_mandatory_fields_filled return false unless selflgdhas_all_mandatory_fields_filled unless selfratingshave_all_mandatory_fields_filled

return false end return true end

end

page 25 sur 33

Dynamisme reacuteflexiviteacute introspection

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

modification de la classe Arrayclass Array

def have_all_mandatory_fields_filled selfeach do |item| unless itemrespond_to has_all_mandatory_fields_filled return false end unless itemhas_all_mandatory_fields_filled return false end end return true end

end

page 26 sur 33

Se mettre agrave Ruby

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

(g)vi(m)(X)emacsSciTE

FreeRIDE (eacutecrit en Ruby)

e-TextEditorTextMate (seulement OSX)

Eclipse avec les Ruby Development ToolsNetBeans 61 (support Ruby et JRuby)

page 26 sur 33

Se mettre agrave Ruby

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

(g)vi(m)(X)emacsSciTE

FreeRIDE (eacutecrit en Ruby)

e-TextEditorTextMate (seulement OSX)

Eclipse avec les Ruby Development ToolsNetBeans 61 (support Ruby et JRuby)

Editeurs et environnements compatiblesLrsquooutil indispensable irbRessources en ligneLivres

page 26 sur 33

Se mettre agrave Ruby

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

(g)vi(m)(X)emacsSciTE

FreeRIDE (eacutecrit en Ruby)

e-TextEditorTextMate (seulement OSX)

Eclipse avec les Ruby Development ToolsNetBeans 61 (support Ruby et JRuby)

page 27 sur 33

Se mettre agrave Ruby irb

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

page 28 sur 33

Se mettre agrave Ruby ressources en ligne

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

Le site officiel (httpwwwruby-langorg)Sa traduction (httpwwwruby-langorgfr)

Le portail Ruby France (httpwwwrubyfranceorg)

Les listes de diffusion sur Google Groups(ruby-talk ruby-core rubyfr-public)

Les groupes de discussion sur Usenet(complangruby frcomplangruby)

Les salons IRC sur FreeNode (ircfreenodenet)(ruby-lang rubyfr)

page 29 sur 33

Se mettre agrave Ruby livres

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

Ruby in a NutshellProgramming RubyThe Ruby WayDesign Patterns for Ruby

Ruby par lrsquoexemple

Passez sur le stand Ruby France

page 30 sur 33

Fin de la preacutesentation

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

page 30 sur 33

Fin de la preacutesentation

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

Des questions

page 30 sur 33

Fin de la preacutesentation

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

page 32 sur 33

Fin de la preacutesentation

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

Merci

page 32 sur 33

Ougrave reacutecupeacuterer ce document

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

Le support de cette preacutesentation sera disponible sur httpzlabfr

page 33 sur 33

Licence de ce document

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

bullVous ecirctes libres bullde reproduire distribuer et communiquer cette creacuteation au public

bullSelon les conditions suivantes bullPaterniteacutebull Vous devez citer le nom de lauteur original de la maniegravere indiqueacutee par lauteur de loeuvre ou le titulaire des droits qui vous confegravere cette autorisation (mais pas dune maniegravere qui suggeacutererait quils vous soutiennent ou approuvent votre utilisation de loeuvre)

bullPas drsquoutilisation commercialebull Vous navez pas le droit dutiliser cette creacuteation agrave des fins commerciales

bullPas de modificationbull Vous navez pas le droit de modifier de transformer ou dadapter cette creacuteation

bullreacutesumeacute explicatif disponible sur httpcreativecommonsorglicensesby-nc-nd20fr

bullvous ecirctes autoriseacute agrave reacuteutiliser le logo Ruby France utiliseacute dans cette preacutesentation pour faire reacutefeacuterence agrave lrsquoassociation

page 15 sur 33

Un peu plus loin les iteacuterateurs

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

lyonnais = [Freacutedeacuteric Alexis Jeacuterocircme] lyonnaiseach do |l| puts Dommage l nest pas venu cette anneacuteeend

rmll = 2008 =gt Mont-de-Marsan 2007 =gt Amiens 2006 =gt Vandoeuvre-les-Nancy 2002 =gt Talence

rmlleach_pair do |annee lieu| puts En annee je suis alleacute aux RMLL agrave lieuend

rmllkeyssorteach do |annee| puts En annee je suis alleacute aux RMLL agrave rmll[annee]end

page 16 sur 33

Un peu plus loin les iteacuterateurs

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

lecture dun fichier faccedilon blocs

avertissements = erreurs = 0 initialisation

Fileopen(logtxt) do |fichier| ouverture fichierreadlineseach do |ligne| lecture des lignes case ligne when ^WARN avertissements += 1 when ^ERR erreurs += 1 end endend fermeture automatique

puts Il y a avertissements avertissementsputs et erreurs erreurs dans ce fichier

page 17 sur 33

Un peu plus loin yield

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

class Personne

def initialize(nom) nom = nom end

def salue la meacutethode salue se contente drsquoexeacutecuteryield nom le bloc qui lui est passeacute

end lrsquoargument nom

end

celine = Personnenew(Ceacuteline)celinesalue |n| puts salut n affiche salut Ceacuteline

page 17 sur 33

Un peu plus loin yield

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

class Personne

def initialize(nom) nom = nom end

def salue la meacutethode salue se contente drsquoexeacutecuteryield nom le bloc qui lui est passeacute

end lrsquoargument nom

end

celine = Personnenew(Ceacuteline)celinesalue |n| puts salut n affiche salut Ceacuteline

mais comment ccedila marche

page 17 sur 33

Un peu plus loin yield

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

class Personne

def initialize(nom) nom = nom end

def salue la meacutethode salue se contente drsquoexeacutecuteryield nom le bloc qui lui est passeacute

end lrsquoargument nom

end

celine = Personnenew(Ceacuteline)celinesalue |n| puts salut n affiche salut Ceacuteline

page 18 sur 33

Dynamisme eacutevaluation de code

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

eval puts salut

def operation(operateur operande1 operande2) eval operande1 operateur operande2end

operation + 1 2 renvoie 3operation 9 0 renvoie

Presentationclass_eval do end

page 18 sur 33

Dynamisme eacutevaluation de code

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

eval puts salut

def operation(operateur operande1 operande2) eval operande1 operateur operande2end

operation + 1 2 renvoie 3operation 9 0 renvoie

Presentationclass_eval do end

eacutevaluation de codeinterception drsquoappels de meacutethodes inexistantesexeacutecution des deacutefinitions

reacuteflexiviteacute introspection

page 18 sur 33

Dynamisme eacutevaluation de code

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

eval puts salut

def operation(operateur operande1 operande2) eval operande1 operateur operande2end

operation + 1 2 renvoie 3operation 9 0 renvoie

Presentationclass_eval do end

page 19 sur 33

Dynamisme meacutethodes inexistantes

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

Presentationnombre renvoie 0p = Presentationnew(Preacutesentation de Ruby)

Presentationnombre renvoie 1

puts p affiche Preacutesentation de Ruby 45 minutes

pfinNoMethodError undefined method `fin for ltPresentation0x49214gt

def pfin puts Suffisamment de Ruby aujourdhui end

pfin affiche Suffisamment de Ruby aujourdrsquohui

page 20 sur 33

Dynamisme meacutethodes inexistantes

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

class Presentation def method_missing(nom args) method_missing puts Il ny a pas de meacutethode nom est appeleacutee end avant la leveacuteeend de lexception

p = Presentationnew(Preacutesentation de Ruby)

pfin affiche Il ny a pas de meacutethode fin pas drsquoexception

method_missing est lrsquoun des nombreux ldquohooksrdquo disponibles dans Ruby

page 21 sur 33

Dynamisme deacutefinitions exeacutecuteacutees

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

class Configuration case RUBY_PLATFORM deacutefinition dune meacutethode when linux en fonction du systegraveme def initialize(params) hocircte end when win32 def initialize(params) end when darwin include YAIBExtensionsSpecificOSX else unless include YAIBStandard raise Votre OS nest pas supporteacute end end end

page 22 sur 33

Dynamisme reacuteflexiviteacute introspection

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

On peut interroger tous les composants du langage agrave lrsquoexeacutecution

obj = Arraynewobjclass

objclassinstance_methodsobjmethods eacutequivalent agrave la ligne du dessusobjprivate_methods

objclassinstance_methodsgrep(delete)objclassinstance_methodsgrep(delete)sort

objmethodsgrep(^on_connect_do)each do |method| objsend methodend

page 23 sur 33

Dynamisme reacuteflexiviteacute introspection

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

On peut rouvrir une deacutefinition y compris celle du langage

class Array la classe Array existe on la rouvre def longueur ajout drsquoune meacutethode en franccedilais length proxy vers la meacutethode en anglais end end

arr = Arraynewarr ltlt 1arr ltlt element

arrlongueur renvoie 2

page 24 sur 33

Dynamisme reacuteflexiviteacute introspection

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

class Counterparty def has_all_mandatory_fields_filled quelques veacuterifications end def can_be_in_completed_or_approved_status return false unless selfhas_all_mandatory_fields_filled return false unless selflgdhas_all_mandatory_fields_filled unless selfratingshave_all_mandatory_fields_filled

return false end return true end

end

page 25 sur 33

Dynamisme reacuteflexiviteacute introspection

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

modification de la classe Arrayclass Array

def have_all_mandatory_fields_filled selfeach do |item| unless itemrespond_to has_all_mandatory_fields_filled return false end unless itemhas_all_mandatory_fields_filled return false end end return true end

end

page 26 sur 33

Se mettre agrave Ruby

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

(g)vi(m)(X)emacsSciTE

FreeRIDE (eacutecrit en Ruby)

e-TextEditorTextMate (seulement OSX)

Eclipse avec les Ruby Development ToolsNetBeans 61 (support Ruby et JRuby)

page 26 sur 33

Se mettre agrave Ruby

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

(g)vi(m)(X)emacsSciTE

FreeRIDE (eacutecrit en Ruby)

e-TextEditorTextMate (seulement OSX)

Eclipse avec les Ruby Development ToolsNetBeans 61 (support Ruby et JRuby)

Editeurs et environnements compatiblesLrsquooutil indispensable irbRessources en ligneLivres

page 26 sur 33

Se mettre agrave Ruby

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

(g)vi(m)(X)emacsSciTE

FreeRIDE (eacutecrit en Ruby)

e-TextEditorTextMate (seulement OSX)

Eclipse avec les Ruby Development ToolsNetBeans 61 (support Ruby et JRuby)

page 27 sur 33

Se mettre agrave Ruby irb

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

page 28 sur 33

Se mettre agrave Ruby ressources en ligne

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

Le site officiel (httpwwwruby-langorg)Sa traduction (httpwwwruby-langorgfr)

Le portail Ruby France (httpwwwrubyfranceorg)

Les listes de diffusion sur Google Groups(ruby-talk ruby-core rubyfr-public)

Les groupes de discussion sur Usenet(complangruby frcomplangruby)

Les salons IRC sur FreeNode (ircfreenodenet)(ruby-lang rubyfr)

page 29 sur 33

Se mettre agrave Ruby livres

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

Ruby in a NutshellProgramming RubyThe Ruby WayDesign Patterns for Ruby

Ruby par lrsquoexemple

Passez sur le stand Ruby France

page 30 sur 33

Fin de la preacutesentation

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

page 30 sur 33

Fin de la preacutesentation

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

Des questions

page 30 sur 33

Fin de la preacutesentation

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

page 32 sur 33

Fin de la preacutesentation

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

Merci

page 32 sur 33

Ougrave reacutecupeacuterer ce document

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

Le support de cette preacutesentation sera disponible sur httpzlabfr

page 33 sur 33

Licence de ce document

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

bullVous ecirctes libres bullde reproduire distribuer et communiquer cette creacuteation au public

bullSelon les conditions suivantes bullPaterniteacutebull Vous devez citer le nom de lauteur original de la maniegravere indiqueacutee par lauteur de loeuvre ou le titulaire des droits qui vous confegravere cette autorisation (mais pas dune maniegravere qui suggeacutererait quils vous soutiennent ou approuvent votre utilisation de loeuvre)

bullPas drsquoutilisation commercialebull Vous navez pas le droit dutiliser cette creacuteation agrave des fins commerciales

bullPas de modificationbull Vous navez pas le droit de modifier de transformer ou dadapter cette creacuteation

bullreacutesumeacute explicatif disponible sur httpcreativecommonsorglicensesby-nc-nd20fr

bullvous ecirctes autoriseacute agrave reacuteutiliser le logo Ruby France utiliseacute dans cette preacutesentation pour faire reacutefeacuterence agrave lrsquoassociation

page 16 sur 33

Un peu plus loin les iteacuterateurs

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

lecture dun fichier faccedilon blocs

avertissements = erreurs = 0 initialisation

Fileopen(logtxt) do |fichier| ouverture fichierreadlineseach do |ligne| lecture des lignes case ligne when ^WARN avertissements += 1 when ^ERR erreurs += 1 end endend fermeture automatique

puts Il y a avertissements avertissementsputs et erreurs erreurs dans ce fichier

page 17 sur 33

Un peu plus loin yield

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

class Personne

def initialize(nom) nom = nom end

def salue la meacutethode salue se contente drsquoexeacutecuteryield nom le bloc qui lui est passeacute

end lrsquoargument nom

end

celine = Personnenew(Ceacuteline)celinesalue |n| puts salut n affiche salut Ceacuteline

page 17 sur 33

Un peu plus loin yield

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

class Personne

def initialize(nom) nom = nom end

def salue la meacutethode salue se contente drsquoexeacutecuteryield nom le bloc qui lui est passeacute

end lrsquoargument nom

end

celine = Personnenew(Ceacuteline)celinesalue |n| puts salut n affiche salut Ceacuteline

mais comment ccedila marche

page 17 sur 33

Un peu plus loin yield

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

class Personne

def initialize(nom) nom = nom end

def salue la meacutethode salue se contente drsquoexeacutecuteryield nom le bloc qui lui est passeacute

end lrsquoargument nom

end

celine = Personnenew(Ceacuteline)celinesalue |n| puts salut n affiche salut Ceacuteline

page 18 sur 33

Dynamisme eacutevaluation de code

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

eval puts salut

def operation(operateur operande1 operande2) eval operande1 operateur operande2end

operation + 1 2 renvoie 3operation 9 0 renvoie

Presentationclass_eval do end

page 18 sur 33

Dynamisme eacutevaluation de code

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

eval puts salut

def operation(operateur operande1 operande2) eval operande1 operateur operande2end

operation + 1 2 renvoie 3operation 9 0 renvoie

Presentationclass_eval do end

eacutevaluation de codeinterception drsquoappels de meacutethodes inexistantesexeacutecution des deacutefinitions

reacuteflexiviteacute introspection

page 18 sur 33

Dynamisme eacutevaluation de code

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

eval puts salut

def operation(operateur operande1 operande2) eval operande1 operateur operande2end

operation + 1 2 renvoie 3operation 9 0 renvoie

Presentationclass_eval do end

page 19 sur 33

Dynamisme meacutethodes inexistantes

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

Presentationnombre renvoie 0p = Presentationnew(Preacutesentation de Ruby)

Presentationnombre renvoie 1

puts p affiche Preacutesentation de Ruby 45 minutes

pfinNoMethodError undefined method `fin for ltPresentation0x49214gt

def pfin puts Suffisamment de Ruby aujourdhui end

pfin affiche Suffisamment de Ruby aujourdrsquohui

page 20 sur 33

Dynamisme meacutethodes inexistantes

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

class Presentation def method_missing(nom args) method_missing puts Il ny a pas de meacutethode nom est appeleacutee end avant la leveacuteeend de lexception

p = Presentationnew(Preacutesentation de Ruby)

pfin affiche Il ny a pas de meacutethode fin pas drsquoexception

method_missing est lrsquoun des nombreux ldquohooksrdquo disponibles dans Ruby

page 21 sur 33

Dynamisme deacutefinitions exeacutecuteacutees

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

class Configuration case RUBY_PLATFORM deacutefinition dune meacutethode when linux en fonction du systegraveme def initialize(params) hocircte end when win32 def initialize(params) end when darwin include YAIBExtensionsSpecificOSX else unless include YAIBStandard raise Votre OS nest pas supporteacute end end end

page 22 sur 33

Dynamisme reacuteflexiviteacute introspection

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

On peut interroger tous les composants du langage agrave lrsquoexeacutecution

obj = Arraynewobjclass

objclassinstance_methodsobjmethods eacutequivalent agrave la ligne du dessusobjprivate_methods

objclassinstance_methodsgrep(delete)objclassinstance_methodsgrep(delete)sort

objmethodsgrep(^on_connect_do)each do |method| objsend methodend

page 23 sur 33

Dynamisme reacuteflexiviteacute introspection

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

On peut rouvrir une deacutefinition y compris celle du langage

class Array la classe Array existe on la rouvre def longueur ajout drsquoune meacutethode en franccedilais length proxy vers la meacutethode en anglais end end

arr = Arraynewarr ltlt 1arr ltlt element

arrlongueur renvoie 2

page 24 sur 33

Dynamisme reacuteflexiviteacute introspection

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

class Counterparty def has_all_mandatory_fields_filled quelques veacuterifications end def can_be_in_completed_or_approved_status return false unless selfhas_all_mandatory_fields_filled return false unless selflgdhas_all_mandatory_fields_filled unless selfratingshave_all_mandatory_fields_filled

return false end return true end

end

page 25 sur 33

Dynamisme reacuteflexiviteacute introspection

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

modification de la classe Arrayclass Array

def have_all_mandatory_fields_filled selfeach do |item| unless itemrespond_to has_all_mandatory_fields_filled return false end unless itemhas_all_mandatory_fields_filled return false end end return true end

end

page 26 sur 33

Se mettre agrave Ruby

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

(g)vi(m)(X)emacsSciTE

FreeRIDE (eacutecrit en Ruby)

e-TextEditorTextMate (seulement OSX)

Eclipse avec les Ruby Development ToolsNetBeans 61 (support Ruby et JRuby)

page 26 sur 33

Se mettre agrave Ruby

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

(g)vi(m)(X)emacsSciTE

FreeRIDE (eacutecrit en Ruby)

e-TextEditorTextMate (seulement OSX)

Eclipse avec les Ruby Development ToolsNetBeans 61 (support Ruby et JRuby)

Editeurs et environnements compatiblesLrsquooutil indispensable irbRessources en ligneLivres

page 26 sur 33

Se mettre agrave Ruby

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

(g)vi(m)(X)emacsSciTE

FreeRIDE (eacutecrit en Ruby)

e-TextEditorTextMate (seulement OSX)

Eclipse avec les Ruby Development ToolsNetBeans 61 (support Ruby et JRuby)

page 27 sur 33

Se mettre agrave Ruby irb

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

page 28 sur 33

Se mettre agrave Ruby ressources en ligne

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

Le site officiel (httpwwwruby-langorg)Sa traduction (httpwwwruby-langorgfr)

Le portail Ruby France (httpwwwrubyfranceorg)

Les listes de diffusion sur Google Groups(ruby-talk ruby-core rubyfr-public)

Les groupes de discussion sur Usenet(complangruby frcomplangruby)

Les salons IRC sur FreeNode (ircfreenodenet)(ruby-lang rubyfr)

page 29 sur 33

Se mettre agrave Ruby livres

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

Ruby in a NutshellProgramming RubyThe Ruby WayDesign Patterns for Ruby

Ruby par lrsquoexemple

Passez sur le stand Ruby France

page 30 sur 33

Fin de la preacutesentation

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

page 30 sur 33

Fin de la preacutesentation

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

Des questions

page 30 sur 33

Fin de la preacutesentation

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

page 32 sur 33

Fin de la preacutesentation

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

Merci

page 32 sur 33

Ougrave reacutecupeacuterer ce document

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

Le support de cette preacutesentation sera disponible sur httpzlabfr

page 33 sur 33

Licence de ce document

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

bullVous ecirctes libres bullde reproduire distribuer et communiquer cette creacuteation au public

bullSelon les conditions suivantes bullPaterniteacutebull Vous devez citer le nom de lauteur original de la maniegravere indiqueacutee par lauteur de loeuvre ou le titulaire des droits qui vous confegravere cette autorisation (mais pas dune maniegravere qui suggeacutererait quils vous soutiennent ou approuvent votre utilisation de loeuvre)

bullPas drsquoutilisation commercialebull Vous navez pas le droit dutiliser cette creacuteation agrave des fins commerciales

bullPas de modificationbull Vous navez pas le droit de modifier de transformer ou dadapter cette creacuteation

bullreacutesumeacute explicatif disponible sur httpcreativecommonsorglicensesby-nc-nd20fr

bullvous ecirctes autoriseacute agrave reacuteutiliser le logo Ruby France utiliseacute dans cette preacutesentation pour faire reacutefeacuterence agrave lrsquoassociation

page 17 sur 33

Un peu plus loin yield

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

class Personne

def initialize(nom) nom = nom end

def salue la meacutethode salue se contente drsquoexeacutecuteryield nom le bloc qui lui est passeacute

end lrsquoargument nom

end

celine = Personnenew(Ceacuteline)celinesalue |n| puts salut n affiche salut Ceacuteline

page 17 sur 33

Un peu plus loin yield

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

class Personne

def initialize(nom) nom = nom end

def salue la meacutethode salue se contente drsquoexeacutecuteryield nom le bloc qui lui est passeacute

end lrsquoargument nom

end

celine = Personnenew(Ceacuteline)celinesalue |n| puts salut n affiche salut Ceacuteline

mais comment ccedila marche

page 17 sur 33

Un peu plus loin yield

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

class Personne

def initialize(nom) nom = nom end

def salue la meacutethode salue se contente drsquoexeacutecuteryield nom le bloc qui lui est passeacute

end lrsquoargument nom

end

celine = Personnenew(Ceacuteline)celinesalue |n| puts salut n affiche salut Ceacuteline

page 18 sur 33

Dynamisme eacutevaluation de code

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

eval puts salut

def operation(operateur operande1 operande2) eval operande1 operateur operande2end

operation + 1 2 renvoie 3operation 9 0 renvoie

Presentationclass_eval do end

page 18 sur 33

Dynamisme eacutevaluation de code

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

eval puts salut

def operation(operateur operande1 operande2) eval operande1 operateur operande2end

operation + 1 2 renvoie 3operation 9 0 renvoie

Presentationclass_eval do end

eacutevaluation de codeinterception drsquoappels de meacutethodes inexistantesexeacutecution des deacutefinitions

reacuteflexiviteacute introspection

page 18 sur 33

Dynamisme eacutevaluation de code

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

eval puts salut

def operation(operateur operande1 operande2) eval operande1 operateur operande2end

operation + 1 2 renvoie 3operation 9 0 renvoie

Presentationclass_eval do end

page 19 sur 33

Dynamisme meacutethodes inexistantes

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

Presentationnombre renvoie 0p = Presentationnew(Preacutesentation de Ruby)

Presentationnombre renvoie 1

puts p affiche Preacutesentation de Ruby 45 minutes

pfinNoMethodError undefined method `fin for ltPresentation0x49214gt

def pfin puts Suffisamment de Ruby aujourdhui end

pfin affiche Suffisamment de Ruby aujourdrsquohui

page 20 sur 33

Dynamisme meacutethodes inexistantes

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

class Presentation def method_missing(nom args) method_missing puts Il ny a pas de meacutethode nom est appeleacutee end avant la leveacuteeend de lexception

p = Presentationnew(Preacutesentation de Ruby)

pfin affiche Il ny a pas de meacutethode fin pas drsquoexception

method_missing est lrsquoun des nombreux ldquohooksrdquo disponibles dans Ruby

page 21 sur 33

Dynamisme deacutefinitions exeacutecuteacutees

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

class Configuration case RUBY_PLATFORM deacutefinition dune meacutethode when linux en fonction du systegraveme def initialize(params) hocircte end when win32 def initialize(params) end when darwin include YAIBExtensionsSpecificOSX else unless include YAIBStandard raise Votre OS nest pas supporteacute end end end

page 22 sur 33

Dynamisme reacuteflexiviteacute introspection

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

On peut interroger tous les composants du langage agrave lrsquoexeacutecution

obj = Arraynewobjclass

objclassinstance_methodsobjmethods eacutequivalent agrave la ligne du dessusobjprivate_methods

objclassinstance_methodsgrep(delete)objclassinstance_methodsgrep(delete)sort

objmethodsgrep(^on_connect_do)each do |method| objsend methodend

page 23 sur 33

Dynamisme reacuteflexiviteacute introspection

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

On peut rouvrir une deacutefinition y compris celle du langage

class Array la classe Array existe on la rouvre def longueur ajout drsquoune meacutethode en franccedilais length proxy vers la meacutethode en anglais end end

arr = Arraynewarr ltlt 1arr ltlt element

arrlongueur renvoie 2

page 24 sur 33

Dynamisme reacuteflexiviteacute introspection

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

class Counterparty def has_all_mandatory_fields_filled quelques veacuterifications end def can_be_in_completed_or_approved_status return false unless selfhas_all_mandatory_fields_filled return false unless selflgdhas_all_mandatory_fields_filled unless selfratingshave_all_mandatory_fields_filled

return false end return true end

end

page 25 sur 33

Dynamisme reacuteflexiviteacute introspection

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

modification de la classe Arrayclass Array

def have_all_mandatory_fields_filled selfeach do |item| unless itemrespond_to has_all_mandatory_fields_filled return false end unless itemhas_all_mandatory_fields_filled return false end end return true end

end

page 26 sur 33

Se mettre agrave Ruby

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

(g)vi(m)(X)emacsSciTE

FreeRIDE (eacutecrit en Ruby)

e-TextEditorTextMate (seulement OSX)

Eclipse avec les Ruby Development ToolsNetBeans 61 (support Ruby et JRuby)

page 26 sur 33

Se mettre agrave Ruby

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

(g)vi(m)(X)emacsSciTE

FreeRIDE (eacutecrit en Ruby)

e-TextEditorTextMate (seulement OSX)

Eclipse avec les Ruby Development ToolsNetBeans 61 (support Ruby et JRuby)

Editeurs et environnements compatiblesLrsquooutil indispensable irbRessources en ligneLivres

page 26 sur 33

Se mettre agrave Ruby

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

(g)vi(m)(X)emacsSciTE

FreeRIDE (eacutecrit en Ruby)

e-TextEditorTextMate (seulement OSX)

Eclipse avec les Ruby Development ToolsNetBeans 61 (support Ruby et JRuby)

page 27 sur 33

Se mettre agrave Ruby irb

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

page 28 sur 33

Se mettre agrave Ruby ressources en ligne

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

Le site officiel (httpwwwruby-langorg)Sa traduction (httpwwwruby-langorgfr)

Le portail Ruby France (httpwwwrubyfranceorg)

Les listes de diffusion sur Google Groups(ruby-talk ruby-core rubyfr-public)

Les groupes de discussion sur Usenet(complangruby frcomplangruby)

Les salons IRC sur FreeNode (ircfreenodenet)(ruby-lang rubyfr)

page 29 sur 33

Se mettre agrave Ruby livres

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

Ruby in a NutshellProgramming RubyThe Ruby WayDesign Patterns for Ruby

Ruby par lrsquoexemple

Passez sur le stand Ruby France

page 30 sur 33

Fin de la preacutesentation

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

page 30 sur 33

Fin de la preacutesentation

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

Des questions

page 30 sur 33

Fin de la preacutesentation

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

page 32 sur 33

Fin de la preacutesentation

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

Merci

page 32 sur 33

Ougrave reacutecupeacuterer ce document

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

Le support de cette preacutesentation sera disponible sur httpzlabfr

page 33 sur 33

Licence de ce document

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

bullVous ecirctes libres bullde reproduire distribuer et communiquer cette creacuteation au public

bullSelon les conditions suivantes bullPaterniteacutebull Vous devez citer le nom de lauteur original de la maniegravere indiqueacutee par lauteur de loeuvre ou le titulaire des droits qui vous confegravere cette autorisation (mais pas dune maniegravere qui suggeacutererait quils vous soutiennent ou approuvent votre utilisation de loeuvre)

bullPas drsquoutilisation commercialebull Vous navez pas le droit dutiliser cette creacuteation agrave des fins commerciales

bullPas de modificationbull Vous navez pas le droit de modifier de transformer ou dadapter cette creacuteation

bullreacutesumeacute explicatif disponible sur httpcreativecommonsorglicensesby-nc-nd20fr

bullvous ecirctes autoriseacute agrave reacuteutiliser le logo Ruby France utiliseacute dans cette preacutesentation pour faire reacutefeacuterence agrave lrsquoassociation

page 17 sur 33

Un peu plus loin yield

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

class Personne

def initialize(nom) nom = nom end

def salue la meacutethode salue se contente drsquoexeacutecuteryield nom le bloc qui lui est passeacute

end lrsquoargument nom

end

celine = Personnenew(Ceacuteline)celinesalue |n| puts salut n affiche salut Ceacuteline

mais comment ccedila marche

page 17 sur 33

Un peu plus loin yield

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

class Personne

def initialize(nom) nom = nom end

def salue la meacutethode salue se contente drsquoexeacutecuteryield nom le bloc qui lui est passeacute

end lrsquoargument nom

end

celine = Personnenew(Ceacuteline)celinesalue |n| puts salut n affiche salut Ceacuteline

page 18 sur 33

Dynamisme eacutevaluation de code

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

eval puts salut

def operation(operateur operande1 operande2) eval operande1 operateur operande2end

operation + 1 2 renvoie 3operation 9 0 renvoie

Presentationclass_eval do end

page 18 sur 33

Dynamisme eacutevaluation de code

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

eval puts salut

def operation(operateur operande1 operande2) eval operande1 operateur operande2end

operation + 1 2 renvoie 3operation 9 0 renvoie

Presentationclass_eval do end

eacutevaluation de codeinterception drsquoappels de meacutethodes inexistantesexeacutecution des deacutefinitions

reacuteflexiviteacute introspection

page 18 sur 33

Dynamisme eacutevaluation de code

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

eval puts salut

def operation(operateur operande1 operande2) eval operande1 operateur operande2end

operation + 1 2 renvoie 3operation 9 0 renvoie

Presentationclass_eval do end

page 19 sur 33

Dynamisme meacutethodes inexistantes

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

Presentationnombre renvoie 0p = Presentationnew(Preacutesentation de Ruby)

Presentationnombre renvoie 1

puts p affiche Preacutesentation de Ruby 45 minutes

pfinNoMethodError undefined method `fin for ltPresentation0x49214gt

def pfin puts Suffisamment de Ruby aujourdhui end

pfin affiche Suffisamment de Ruby aujourdrsquohui

page 20 sur 33

Dynamisme meacutethodes inexistantes

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

class Presentation def method_missing(nom args) method_missing puts Il ny a pas de meacutethode nom est appeleacutee end avant la leveacuteeend de lexception

p = Presentationnew(Preacutesentation de Ruby)

pfin affiche Il ny a pas de meacutethode fin pas drsquoexception

method_missing est lrsquoun des nombreux ldquohooksrdquo disponibles dans Ruby

page 21 sur 33

Dynamisme deacutefinitions exeacutecuteacutees

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

class Configuration case RUBY_PLATFORM deacutefinition dune meacutethode when linux en fonction du systegraveme def initialize(params) hocircte end when win32 def initialize(params) end when darwin include YAIBExtensionsSpecificOSX else unless include YAIBStandard raise Votre OS nest pas supporteacute end end end

page 22 sur 33

Dynamisme reacuteflexiviteacute introspection

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

On peut interroger tous les composants du langage agrave lrsquoexeacutecution

obj = Arraynewobjclass

objclassinstance_methodsobjmethods eacutequivalent agrave la ligne du dessusobjprivate_methods

objclassinstance_methodsgrep(delete)objclassinstance_methodsgrep(delete)sort

objmethodsgrep(^on_connect_do)each do |method| objsend methodend

page 23 sur 33

Dynamisme reacuteflexiviteacute introspection

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

On peut rouvrir une deacutefinition y compris celle du langage

class Array la classe Array existe on la rouvre def longueur ajout drsquoune meacutethode en franccedilais length proxy vers la meacutethode en anglais end end

arr = Arraynewarr ltlt 1arr ltlt element

arrlongueur renvoie 2

page 24 sur 33

Dynamisme reacuteflexiviteacute introspection

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

class Counterparty def has_all_mandatory_fields_filled quelques veacuterifications end def can_be_in_completed_or_approved_status return false unless selfhas_all_mandatory_fields_filled return false unless selflgdhas_all_mandatory_fields_filled unless selfratingshave_all_mandatory_fields_filled

return false end return true end

end

page 25 sur 33

Dynamisme reacuteflexiviteacute introspection

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

modification de la classe Arrayclass Array

def have_all_mandatory_fields_filled selfeach do |item| unless itemrespond_to has_all_mandatory_fields_filled return false end unless itemhas_all_mandatory_fields_filled return false end end return true end

end

page 26 sur 33

Se mettre agrave Ruby

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

(g)vi(m)(X)emacsSciTE

FreeRIDE (eacutecrit en Ruby)

e-TextEditorTextMate (seulement OSX)

Eclipse avec les Ruby Development ToolsNetBeans 61 (support Ruby et JRuby)

page 26 sur 33

Se mettre agrave Ruby

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

(g)vi(m)(X)emacsSciTE

FreeRIDE (eacutecrit en Ruby)

e-TextEditorTextMate (seulement OSX)

Eclipse avec les Ruby Development ToolsNetBeans 61 (support Ruby et JRuby)

Editeurs et environnements compatiblesLrsquooutil indispensable irbRessources en ligneLivres

page 26 sur 33

Se mettre agrave Ruby

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

(g)vi(m)(X)emacsSciTE

FreeRIDE (eacutecrit en Ruby)

e-TextEditorTextMate (seulement OSX)

Eclipse avec les Ruby Development ToolsNetBeans 61 (support Ruby et JRuby)

page 27 sur 33

Se mettre agrave Ruby irb

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

page 28 sur 33

Se mettre agrave Ruby ressources en ligne

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

Le site officiel (httpwwwruby-langorg)Sa traduction (httpwwwruby-langorgfr)

Le portail Ruby France (httpwwwrubyfranceorg)

Les listes de diffusion sur Google Groups(ruby-talk ruby-core rubyfr-public)

Les groupes de discussion sur Usenet(complangruby frcomplangruby)

Les salons IRC sur FreeNode (ircfreenodenet)(ruby-lang rubyfr)

page 29 sur 33

Se mettre agrave Ruby livres

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

Ruby in a NutshellProgramming RubyThe Ruby WayDesign Patterns for Ruby

Ruby par lrsquoexemple

Passez sur le stand Ruby France

page 30 sur 33

Fin de la preacutesentation

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

page 30 sur 33

Fin de la preacutesentation

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

Des questions

page 30 sur 33

Fin de la preacutesentation

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

page 32 sur 33

Fin de la preacutesentation

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

Merci

page 32 sur 33

Ougrave reacutecupeacuterer ce document

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

Le support de cette preacutesentation sera disponible sur httpzlabfr

page 33 sur 33

Licence de ce document

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

bullVous ecirctes libres bullde reproduire distribuer et communiquer cette creacuteation au public

bullSelon les conditions suivantes bullPaterniteacutebull Vous devez citer le nom de lauteur original de la maniegravere indiqueacutee par lauteur de loeuvre ou le titulaire des droits qui vous confegravere cette autorisation (mais pas dune maniegravere qui suggeacutererait quils vous soutiennent ou approuvent votre utilisation de loeuvre)

bullPas drsquoutilisation commercialebull Vous navez pas le droit dutiliser cette creacuteation agrave des fins commerciales

bullPas de modificationbull Vous navez pas le droit de modifier de transformer ou dadapter cette creacuteation

bullreacutesumeacute explicatif disponible sur httpcreativecommonsorglicensesby-nc-nd20fr

bullvous ecirctes autoriseacute agrave reacuteutiliser le logo Ruby France utiliseacute dans cette preacutesentation pour faire reacutefeacuterence agrave lrsquoassociation

page 17 sur 33

Un peu plus loin yield

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

class Personne

def initialize(nom) nom = nom end

def salue la meacutethode salue se contente drsquoexeacutecuteryield nom le bloc qui lui est passeacute

end lrsquoargument nom

end

celine = Personnenew(Ceacuteline)celinesalue |n| puts salut n affiche salut Ceacuteline

page 18 sur 33

Dynamisme eacutevaluation de code

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

eval puts salut

def operation(operateur operande1 operande2) eval operande1 operateur operande2end

operation + 1 2 renvoie 3operation 9 0 renvoie

Presentationclass_eval do end

page 18 sur 33

Dynamisme eacutevaluation de code

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

eval puts salut

def operation(operateur operande1 operande2) eval operande1 operateur operande2end

operation + 1 2 renvoie 3operation 9 0 renvoie

Presentationclass_eval do end

eacutevaluation de codeinterception drsquoappels de meacutethodes inexistantesexeacutecution des deacutefinitions

reacuteflexiviteacute introspection

page 18 sur 33

Dynamisme eacutevaluation de code

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

eval puts salut

def operation(operateur operande1 operande2) eval operande1 operateur operande2end

operation + 1 2 renvoie 3operation 9 0 renvoie

Presentationclass_eval do end

page 19 sur 33

Dynamisme meacutethodes inexistantes

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

Presentationnombre renvoie 0p = Presentationnew(Preacutesentation de Ruby)

Presentationnombre renvoie 1

puts p affiche Preacutesentation de Ruby 45 minutes

pfinNoMethodError undefined method `fin for ltPresentation0x49214gt

def pfin puts Suffisamment de Ruby aujourdhui end

pfin affiche Suffisamment de Ruby aujourdrsquohui

page 20 sur 33

Dynamisme meacutethodes inexistantes

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

class Presentation def method_missing(nom args) method_missing puts Il ny a pas de meacutethode nom est appeleacutee end avant la leveacuteeend de lexception

p = Presentationnew(Preacutesentation de Ruby)

pfin affiche Il ny a pas de meacutethode fin pas drsquoexception

method_missing est lrsquoun des nombreux ldquohooksrdquo disponibles dans Ruby

page 21 sur 33

Dynamisme deacutefinitions exeacutecuteacutees

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

class Configuration case RUBY_PLATFORM deacutefinition dune meacutethode when linux en fonction du systegraveme def initialize(params) hocircte end when win32 def initialize(params) end when darwin include YAIBExtensionsSpecificOSX else unless include YAIBStandard raise Votre OS nest pas supporteacute end end end

page 22 sur 33

Dynamisme reacuteflexiviteacute introspection

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

On peut interroger tous les composants du langage agrave lrsquoexeacutecution

obj = Arraynewobjclass

objclassinstance_methodsobjmethods eacutequivalent agrave la ligne du dessusobjprivate_methods

objclassinstance_methodsgrep(delete)objclassinstance_methodsgrep(delete)sort

objmethodsgrep(^on_connect_do)each do |method| objsend methodend

page 23 sur 33

Dynamisme reacuteflexiviteacute introspection

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

On peut rouvrir une deacutefinition y compris celle du langage

class Array la classe Array existe on la rouvre def longueur ajout drsquoune meacutethode en franccedilais length proxy vers la meacutethode en anglais end end

arr = Arraynewarr ltlt 1arr ltlt element

arrlongueur renvoie 2

page 24 sur 33

Dynamisme reacuteflexiviteacute introspection

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

class Counterparty def has_all_mandatory_fields_filled quelques veacuterifications end def can_be_in_completed_or_approved_status return false unless selfhas_all_mandatory_fields_filled return false unless selflgdhas_all_mandatory_fields_filled unless selfratingshave_all_mandatory_fields_filled

return false end return true end

end

page 25 sur 33

Dynamisme reacuteflexiviteacute introspection

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

modification de la classe Arrayclass Array

def have_all_mandatory_fields_filled selfeach do |item| unless itemrespond_to has_all_mandatory_fields_filled return false end unless itemhas_all_mandatory_fields_filled return false end end return true end

end

page 26 sur 33

Se mettre agrave Ruby

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

(g)vi(m)(X)emacsSciTE

FreeRIDE (eacutecrit en Ruby)

e-TextEditorTextMate (seulement OSX)

Eclipse avec les Ruby Development ToolsNetBeans 61 (support Ruby et JRuby)

page 26 sur 33

Se mettre agrave Ruby

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

(g)vi(m)(X)emacsSciTE

FreeRIDE (eacutecrit en Ruby)

e-TextEditorTextMate (seulement OSX)

Eclipse avec les Ruby Development ToolsNetBeans 61 (support Ruby et JRuby)

Editeurs et environnements compatiblesLrsquooutil indispensable irbRessources en ligneLivres

page 26 sur 33

Se mettre agrave Ruby

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

(g)vi(m)(X)emacsSciTE

FreeRIDE (eacutecrit en Ruby)

e-TextEditorTextMate (seulement OSX)

Eclipse avec les Ruby Development ToolsNetBeans 61 (support Ruby et JRuby)

page 27 sur 33

Se mettre agrave Ruby irb

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

page 28 sur 33

Se mettre agrave Ruby ressources en ligne

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

Le site officiel (httpwwwruby-langorg)Sa traduction (httpwwwruby-langorgfr)

Le portail Ruby France (httpwwwrubyfranceorg)

Les listes de diffusion sur Google Groups(ruby-talk ruby-core rubyfr-public)

Les groupes de discussion sur Usenet(complangruby frcomplangruby)

Les salons IRC sur FreeNode (ircfreenodenet)(ruby-lang rubyfr)

page 29 sur 33

Se mettre agrave Ruby livres

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

Ruby in a NutshellProgramming RubyThe Ruby WayDesign Patterns for Ruby

Ruby par lrsquoexemple

Passez sur le stand Ruby France

page 30 sur 33

Fin de la preacutesentation

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

page 30 sur 33

Fin de la preacutesentation

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

Des questions

page 30 sur 33

Fin de la preacutesentation

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

page 32 sur 33

Fin de la preacutesentation

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

Merci

page 32 sur 33

Ougrave reacutecupeacuterer ce document

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

Le support de cette preacutesentation sera disponible sur httpzlabfr

page 33 sur 33

Licence de ce document

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

bullVous ecirctes libres bullde reproduire distribuer et communiquer cette creacuteation au public

bullSelon les conditions suivantes bullPaterniteacutebull Vous devez citer le nom de lauteur original de la maniegravere indiqueacutee par lauteur de loeuvre ou le titulaire des droits qui vous confegravere cette autorisation (mais pas dune maniegravere qui suggeacutererait quils vous soutiennent ou approuvent votre utilisation de loeuvre)

bullPas drsquoutilisation commercialebull Vous navez pas le droit dutiliser cette creacuteation agrave des fins commerciales

bullPas de modificationbull Vous navez pas le droit de modifier de transformer ou dadapter cette creacuteation

bullreacutesumeacute explicatif disponible sur httpcreativecommonsorglicensesby-nc-nd20fr

bullvous ecirctes autoriseacute agrave reacuteutiliser le logo Ruby France utiliseacute dans cette preacutesentation pour faire reacutefeacuterence agrave lrsquoassociation

page 18 sur 33

Dynamisme eacutevaluation de code

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

eval puts salut

def operation(operateur operande1 operande2) eval operande1 operateur operande2end

operation + 1 2 renvoie 3operation 9 0 renvoie

Presentationclass_eval do end

page 18 sur 33

Dynamisme eacutevaluation de code

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

eval puts salut

def operation(operateur operande1 operande2) eval operande1 operateur operande2end

operation + 1 2 renvoie 3operation 9 0 renvoie

Presentationclass_eval do end

eacutevaluation de codeinterception drsquoappels de meacutethodes inexistantesexeacutecution des deacutefinitions

reacuteflexiviteacute introspection

page 18 sur 33

Dynamisme eacutevaluation de code

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

eval puts salut

def operation(operateur operande1 operande2) eval operande1 operateur operande2end

operation + 1 2 renvoie 3operation 9 0 renvoie

Presentationclass_eval do end

page 19 sur 33

Dynamisme meacutethodes inexistantes

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

Presentationnombre renvoie 0p = Presentationnew(Preacutesentation de Ruby)

Presentationnombre renvoie 1

puts p affiche Preacutesentation de Ruby 45 minutes

pfinNoMethodError undefined method `fin for ltPresentation0x49214gt

def pfin puts Suffisamment de Ruby aujourdhui end

pfin affiche Suffisamment de Ruby aujourdrsquohui

page 20 sur 33

Dynamisme meacutethodes inexistantes

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

class Presentation def method_missing(nom args) method_missing puts Il ny a pas de meacutethode nom est appeleacutee end avant la leveacuteeend de lexception

p = Presentationnew(Preacutesentation de Ruby)

pfin affiche Il ny a pas de meacutethode fin pas drsquoexception

method_missing est lrsquoun des nombreux ldquohooksrdquo disponibles dans Ruby

page 21 sur 33

Dynamisme deacutefinitions exeacutecuteacutees

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

class Configuration case RUBY_PLATFORM deacutefinition dune meacutethode when linux en fonction du systegraveme def initialize(params) hocircte end when win32 def initialize(params) end when darwin include YAIBExtensionsSpecificOSX else unless include YAIBStandard raise Votre OS nest pas supporteacute end end end

page 22 sur 33

Dynamisme reacuteflexiviteacute introspection

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

On peut interroger tous les composants du langage agrave lrsquoexeacutecution

obj = Arraynewobjclass

objclassinstance_methodsobjmethods eacutequivalent agrave la ligne du dessusobjprivate_methods

objclassinstance_methodsgrep(delete)objclassinstance_methodsgrep(delete)sort

objmethodsgrep(^on_connect_do)each do |method| objsend methodend

page 23 sur 33

Dynamisme reacuteflexiviteacute introspection

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

On peut rouvrir une deacutefinition y compris celle du langage

class Array la classe Array existe on la rouvre def longueur ajout drsquoune meacutethode en franccedilais length proxy vers la meacutethode en anglais end end

arr = Arraynewarr ltlt 1arr ltlt element

arrlongueur renvoie 2

page 24 sur 33

Dynamisme reacuteflexiviteacute introspection

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

class Counterparty def has_all_mandatory_fields_filled quelques veacuterifications end def can_be_in_completed_or_approved_status return false unless selfhas_all_mandatory_fields_filled return false unless selflgdhas_all_mandatory_fields_filled unless selfratingshave_all_mandatory_fields_filled

return false end return true end

end

page 25 sur 33

Dynamisme reacuteflexiviteacute introspection

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

modification de la classe Arrayclass Array

def have_all_mandatory_fields_filled selfeach do |item| unless itemrespond_to has_all_mandatory_fields_filled return false end unless itemhas_all_mandatory_fields_filled return false end end return true end

end

page 26 sur 33

Se mettre agrave Ruby

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

(g)vi(m)(X)emacsSciTE

FreeRIDE (eacutecrit en Ruby)

e-TextEditorTextMate (seulement OSX)

Eclipse avec les Ruby Development ToolsNetBeans 61 (support Ruby et JRuby)

page 26 sur 33

Se mettre agrave Ruby

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

(g)vi(m)(X)emacsSciTE

FreeRIDE (eacutecrit en Ruby)

e-TextEditorTextMate (seulement OSX)

Eclipse avec les Ruby Development ToolsNetBeans 61 (support Ruby et JRuby)

Editeurs et environnements compatiblesLrsquooutil indispensable irbRessources en ligneLivres

page 26 sur 33

Se mettre agrave Ruby

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

(g)vi(m)(X)emacsSciTE

FreeRIDE (eacutecrit en Ruby)

e-TextEditorTextMate (seulement OSX)

Eclipse avec les Ruby Development ToolsNetBeans 61 (support Ruby et JRuby)

page 27 sur 33

Se mettre agrave Ruby irb

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

page 28 sur 33

Se mettre agrave Ruby ressources en ligne

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

Le site officiel (httpwwwruby-langorg)Sa traduction (httpwwwruby-langorgfr)

Le portail Ruby France (httpwwwrubyfranceorg)

Les listes de diffusion sur Google Groups(ruby-talk ruby-core rubyfr-public)

Les groupes de discussion sur Usenet(complangruby frcomplangruby)

Les salons IRC sur FreeNode (ircfreenodenet)(ruby-lang rubyfr)

page 29 sur 33

Se mettre agrave Ruby livres

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

Ruby in a NutshellProgramming RubyThe Ruby WayDesign Patterns for Ruby

Ruby par lrsquoexemple

Passez sur le stand Ruby France

page 30 sur 33

Fin de la preacutesentation

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

page 30 sur 33

Fin de la preacutesentation

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

Des questions

page 30 sur 33

Fin de la preacutesentation

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

page 32 sur 33

Fin de la preacutesentation

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

Merci

page 32 sur 33

Ougrave reacutecupeacuterer ce document

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

Le support de cette preacutesentation sera disponible sur httpzlabfr

page 33 sur 33

Licence de ce document

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

bullVous ecirctes libres bullde reproduire distribuer et communiquer cette creacuteation au public

bullSelon les conditions suivantes bullPaterniteacutebull Vous devez citer le nom de lauteur original de la maniegravere indiqueacutee par lauteur de loeuvre ou le titulaire des droits qui vous confegravere cette autorisation (mais pas dune maniegravere qui suggeacutererait quils vous soutiennent ou approuvent votre utilisation de loeuvre)

bullPas drsquoutilisation commercialebull Vous navez pas le droit dutiliser cette creacuteation agrave des fins commerciales

bullPas de modificationbull Vous navez pas le droit de modifier de transformer ou dadapter cette creacuteation

bullreacutesumeacute explicatif disponible sur httpcreativecommonsorglicensesby-nc-nd20fr

bullvous ecirctes autoriseacute agrave reacuteutiliser le logo Ruby France utiliseacute dans cette preacutesentation pour faire reacutefeacuterence agrave lrsquoassociation

page 18 sur 33

Dynamisme eacutevaluation de code

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

eval puts salut

def operation(operateur operande1 operande2) eval operande1 operateur operande2end

operation + 1 2 renvoie 3operation 9 0 renvoie

Presentationclass_eval do end

eacutevaluation de codeinterception drsquoappels de meacutethodes inexistantesexeacutecution des deacutefinitions

reacuteflexiviteacute introspection

page 18 sur 33

Dynamisme eacutevaluation de code

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

eval puts salut

def operation(operateur operande1 operande2) eval operande1 operateur operande2end

operation + 1 2 renvoie 3operation 9 0 renvoie

Presentationclass_eval do end

page 19 sur 33

Dynamisme meacutethodes inexistantes

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

Presentationnombre renvoie 0p = Presentationnew(Preacutesentation de Ruby)

Presentationnombre renvoie 1

puts p affiche Preacutesentation de Ruby 45 minutes

pfinNoMethodError undefined method `fin for ltPresentation0x49214gt

def pfin puts Suffisamment de Ruby aujourdhui end

pfin affiche Suffisamment de Ruby aujourdrsquohui

page 20 sur 33

Dynamisme meacutethodes inexistantes

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

class Presentation def method_missing(nom args) method_missing puts Il ny a pas de meacutethode nom est appeleacutee end avant la leveacuteeend de lexception

p = Presentationnew(Preacutesentation de Ruby)

pfin affiche Il ny a pas de meacutethode fin pas drsquoexception

method_missing est lrsquoun des nombreux ldquohooksrdquo disponibles dans Ruby

page 21 sur 33

Dynamisme deacutefinitions exeacutecuteacutees

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

class Configuration case RUBY_PLATFORM deacutefinition dune meacutethode when linux en fonction du systegraveme def initialize(params) hocircte end when win32 def initialize(params) end when darwin include YAIBExtensionsSpecificOSX else unless include YAIBStandard raise Votre OS nest pas supporteacute end end end

page 22 sur 33

Dynamisme reacuteflexiviteacute introspection

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

On peut interroger tous les composants du langage agrave lrsquoexeacutecution

obj = Arraynewobjclass

objclassinstance_methodsobjmethods eacutequivalent agrave la ligne du dessusobjprivate_methods

objclassinstance_methodsgrep(delete)objclassinstance_methodsgrep(delete)sort

objmethodsgrep(^on_connect_do)each do |method| objsend methodend

page 23 sur 33

Dynamisme reacuteflexiviteacute introspection

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

On peut rouvrir une deacutefinition y compris celle du langage

class Array la classe Array existe on la rouvre def longueur ajout drsquoune meacutethode en franccedilais length proxy vers la meacutethode en anglais end end

arr = Arraynewarr ltlt 1arr ltlt element

arrlongueur renvoie 2

page 24 sur 33

Dynamisme reacuteflexiviteacute introspection

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

class Counterparty def has_all_mandatory_fields_filled quelques veacuterifications end def can_be_in_completed_or_approved_status return false unless selfhas_all_mandatory_fields_filled return false unless selflgdhas_all_mandatory_fields_filled unless selfratingshave_all_mandatory_fields_filled

return false end return true end

end

page 25 sur 33

Dynamisme reacuteflexiviteacute introspection

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

modification de la classe Arrayclass Array

def have_all_mandatory_fields_filled selfeach do |item| unless itemrespond_to has_all_mandatory_fields_filled return false end unless itemhas_all_mandatory_fields_filled return false end end return true end

end

page 26 sur 33

Se mettre agrave Ruby

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

(g)vi(m)(X)emacsSciTE

FreeRIDE (eacutecrit en Ruby)

e-TextEditorTextMate (seulement OSX)

Eclipse avec les Ruby Development ToolsNetBeans 61 (support Ruby et JRuby)

page 26 sur 33

Se mettre agrave Ruby

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

(g)vi(m)(X)emacsSciTE

FreeRIDE (eacutecrit en Ruby)

e-TextEditorTextMate (seulement OSX)

Eclipse avec les Ruby Development ToolsNetBeans 61 (support Ruby et JRuby)

Editeurs et environnements compatiblesLrsquooutil indispensable irbRessources en ligneLivres

page 26 sur 33

Se mettre agrave Ruby

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

(g)vi(m)(X)emacsSciTE

FreeRIDE (eacutecrit en Ruby)

e-TextEditorTextMate (seulement OSX)

Eclipse avec les Ruby Development ToolsNetBeans 61 (support Ruby et JRuby)

page 27 sur 33

Se mettre agrave Ruby irb

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

page 28 sur 33

Se mettre agrave Ruby ressources en ligne

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

Le site officiel (httpwwwruby-langorg)Sa traduction (httpwwwruby-langorgfr)

Le portail Ruby France (httpwwwrubyfranceorg)

Les listes de diffusion sur Google Groups(ruby-talk ruby-core rubyfr-public)

Les groupes de discussion sur Usenet(complangruby frcomplangruby)

Les salons IRC sur FreeNode (ircfreenodenet)(ruby-lang rubyfr)

page 29 sur 33

Se mettre agrave Ruby livres

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

Ruby in a NutshellProgramming RubyThe Ruby WayDesign Patterns for Ruby

Ruby par lrsquoexemple

Passez sur le stand Ruby France

page 30 sur 33

Fin de la preacutesentation

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

page 30 sur 33

Fin de la preacutesentation

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

Des questions

page 30 sur 33

Fin de la preacutesentation

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

page 32 sur 33

Fin de la preacutesentation

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

Merci

page 32 sur 33

Ougrave reacutecupeacuterer ce document

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

Le support de cette preacutesentation sera disponible sur httpzlabfr

page 33 sur 33

Licence de ce document

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

bullVous ecirctes libres bullde reproduire distribuer et communiquer cette creacuteation au public

bullSelon les conditions suivantes bullPaterniteacutebull Vous devez citer le nom de lauteur original de la maniegravere indiqueacutee par lauteur de loeuvre ou le titulaire des droits qui vous confegravere cette autorisation (mais pas dune maniegravere qui suggeacutererait quils vous soutiennent ou approuvent votre utilisation de loeuvre)

bullPas drsquoutilisation commercialebull Vous navez pas le droit dutiliser cette creacuteation agrave des fins commerciales

bullPas de modificationbull Vous navez pas le droit de modifier de transformer ou dadapter cette creacuteation

bullreacutesumeacute explicatif disponible sur httpcreativecommonsorglicensesby-nc-nd20fr

bullvous ecirctes autoriseacute agrave reacuteutiliser le logo Ruby France utiliseacute dans cette preacutesentation pour faire reacutefeacuterence agrave lrsquoassociation

page 18 sur 33

Dynamisme eacutevaluation de code

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

eval puts salut

def operation(operateur operande1 operande2) eval operande1 operateur operande2end

operation + 1 2 renvoie 3operation 9 0 renvoie

Presentationclass_eval do end

page 19 sur 33

Dynamisme meacutethodes inexistantes

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

Presentationnombre renvoie 0p = Presentationnew(Preacutesentation de Ruby)

Presentationnombre renvoie 1

puts p affiche Preacutesentation de Ruby 45 minutes

pfinNoMethodError undefined method `fin for ltPresentation0x49214gt

def pfin puts Suffisamment de Ruby aujourdhui end

pfin affiche Suffisamment de Ruby aujourdrsquohui

page 20 sur 33

Dynamisme meacutethodes inexistantes

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

class Presentation def method_missing(nom args) method_missing puts Il ny a pas de meacutethode nom est appeleacutee end avant la leveacuteeend de lexception

p = Presentationnew(Preacutesentation de Ruby)

pfin affiche Il ny a pas de meacutethode fin pas drsquoexception

method_missing est lrsquoun des nombreux ldquohooksrdquo disponibles dans Ruby

page 21 sur 33

Dynamisme deacutefinitions exeacutecuteacutees

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

class Configuration case RUBY_PLATFORM deacutefinition dune meacutethode when linux en fonction du systegraveme def initialize(params) hocircte end when win32 def initialize(params) end when darwin include YAIBExtensionsSpecificOSX else unless include YAIBStandard raise Votre OS nest pas supporteacute end end end

page 22 sur 33

Dynamisme reacuteflexiviteacute introspection

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

On peut interroger tous les composants du langage agrave lrsquoexeacutecution

obj = Arraynewobjclass

objclassinstance_methodsobjmethods eacutequivalent agrave la ligne du dessusobjprivate_methods

objclassinstance_methodsgrep(delete)objclassinstance_methodsgrep(delete)sort

objmethodsgrep(^on_connect_do)each do |method| objsend methodend

page 23 sur 33

Dynamisme reacuteflexiviteacute introspection

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

On peut rouvrir une deacutefinition y compris celle du langage

class Array la classe Array existe on la rouvre def longueur ajout drsquoune meacutethode en franccedilais length proxy vers la meacutethode en anglais end end

arr = Arraynewarr ltlt 1arr ltlt element

arrlongueur renvoie 2

page 24 sur 33

Dynamisme reacuteflexiviteacute introspection

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

class Counterparty def has_all_mandatory_fields_filled quelques veacuterifications end def can_be_in_completed_or_approved_status return false unless selfhas_all_mandatory_fields_filled return false unless selflgdhas_all_mandatory_fields_filled unless selfratingshave_all_mandatory_fields_filled

return false end return true end

end

page 25 sur 33

Dynamisme reacuteflexiviteacute introspection

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

modification de la classe Arrayclass Array

def have_all_mandatory_fields_filled selfeach do |item| unless itemrespond_to has_all_mandatory_fields_filled return false end unless itemhas_all_mandatory_fields_filled return false end end return true end

end

page 26 sur 33

Se mettre agrave Ruby

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

(g)vi(m)(X)emacsSciTE

FreeRIDE (eacutecrit en Ruby)

e-TextEditorTextMate (seulement OSX)

Eclipse avec les Ruby Development ToolsNetBeans 61 (support Ruby et JRuby)

page 26 sur 33

Se mettre agrave Ruby

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

(g)vi(m)(X)emacsSciTE

FreeRIDE (eacutecrit en Ruby)

e-TextEditorTextMate (seulement OSX)

Eclipse avec les Ruby Development ToolsNetBeans 61 (support Ruby et JRuby)

Editeurs et environnements compatiblesLrsquooutil indispensable irbRessources en ligneLivres

page 26 sur 33

Se mettre agrave Ruby

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

(g)vi(m)(X)emacsSciTE

FreeRIDE (eacutecrit en Ruby)

e-TextEditorTextMate (seulement OSX)

Eclipse avec les Ruby Development ToolsNetBeans 61 (support Ruby et JRuby)

page 27 sur 33

Se mettre agrave Ruby irb

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

page 28 sur 33

Se mettre agrave Ruby ressources en ligne

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

Le site officiel (httpwwwruby-langorg)Sa traduction (httpwwwruby-langorgfr)

Le portail Ruby France (httpwwwrubyfranceorg)

Les listes de diffusion sur Google Groups(ruby-talk ruby-core rubyfr-public)

Les groupes de discussion sur Usenet(complangruby frcomplangruby)

Les salons IRC sur FreeNode (ircfreenodenet)(ruby-lang rubyfr)

page 29 sur 33

Se mettre agrave Ruby livres

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

Ruby in a NutshellProgramming RubyThe Ruby WayDesign Patterns for Ruby

Ruby par lrsquoexemple

Passez sur le stand Ruby France

page 30 sur 33

Fin de la preacutesentation

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

page 30 sur 33

Fin de la preacutesentation

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

Des questions

page 30 sur 33

Fin de la preacutesentation

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

page 32 sur 33

Fin de la preacutesentation

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

Merci

page 32 sur 33

Ougrave reacutecupeacuterer ce document

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

Le support de cette preacutesentation sera disponible sur httpzlabfr

page 33 sur 33

Licence de ce document

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

bullVous ecirctes libres bullde reproduire distribuer et communiquer cette creacuteation au public

bullSelon les conditions suivantes bullPaterniteacutebull Vous devez citer le nom de lauteur original de la maniegravere indiqueacutee par lauteur de loeuvre ou le titulaire des droits qui vous confegravere cette autorisation (mais pas dune maniegravere qui suggeacutererait quils vous soutiennent ou approuvent votre utilisation de loeuvre)

bullPas drsquoutilisation commercialebull Vous navez pas le droit dutiliser cette creacuteation agrave des fins commerciales

bullPas de modificationbull Vous navez pas le droit de modifier de transformer ou dadapter cette creacuteation

bullreacutesumeacute explicatif disponible sur httpcreativecommonsorglicensesby-nc-nd20fr

bullvous ecirctes autoriseacute agrave reacuteutiliser le logo Ruby France utiliseacute dans cette preacutesentation pour faire reacutefeacuterence agrave lrsquoassociation

page 19 sur 33

Dynamisme meacutethodes inexistantes

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

Presentationnombre renvoie 0p = Presentationnew(Preacutesentation de Ruby)

Presentationnombre renvoie 1

puts p affiche Preacutesentation de Ruby 45 minutes

pfinNoMethodError undefined method `fin for ltPresentation0x49214gt

def pfin puts Suffisamment de Ruby aujourdhui end

pfin affiche Suffisamment de Ruby aujourdrsquohui

page 20 sur 33

Dynamisme meacutethodes inexistantes

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

class Presentation def method_missing(nom args) method_missing puts Il ny a pas de meacutethode nom est appeleacutee end avant la leveacuteeend de lexception

p = Presentationnew(Preacutesentation de Ruby)

pfin affiche Il ny a pas de meacutethode fin pas drsquoexception

method_missing est lrsquoun des nombreux ldquohooksrdquo disponibles dans Ruby

page 21 sur 33

Dynamisme deacutefinitions exeacutecuteacutees

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

class Configuration case RUBY_PLATFORM deacutefinition dune meacutethode when linux en fonction du systegraveme def initialize(params) hocircte end when win32 def initialize(params) end when darwin include YAIBExtensionsSpecificOSX else unless include YAIBStandard raise Votre OS nest pas supporteacute end end end

page 22 sur 33

Dynamisme reacuteflexiviteacute introspection

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

On peut interroger tous les composants du langage agrave lrsquoexeacutecution

obj = Arraynewobjclass

objclassinstance_methodsobjmethods eacutequivalent agrave la ligne du dessusobjprivate_methods

objclassinstance_methodsgrep(delete)objclassinstance_methodsgrep(delete)sort

objmethodsgrep(^on_connect_do)each do |method| objsend methodend

page 23 sur 33

Dynamisme reacuteflexiviteacute introspection

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

On peut rouvrir une deacutefinition y compris celle du langage

class Array la classe Array existe on la rouvre def longueur ajout drsquoune meacutethode en franccedilais length proxy vers la meacutethode en anglais end end

arr = Arraynewarr ltlt 1arr ltlt element

arrlongueur renvoie 2

page 24 sur 33

Dynamisme reacuteflexiviteacute introspection

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

class Counterparty def has_all_mandatory_fields_filled quelques veacuterifications end def can_be_in_completed_or_approved_status return false unless selfhas_all_mandatory_fields_filled return false unless selflgdhas_all_mandatory_fields_filled unless selfratingshave_all_mandatory_fields_filled

return false end return true end

end

page 25 sur 33

Dynamisme reacuteflexiviteacute introspection

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

modification de la classe Arrayclass Array

def have_all_mandatory_fields_filled selfeach do |item| unless itemrespond_to has_all_mandatory_fields_filled return false end unless itemhas_all_mandatory_fields_filled return false end end return true end

end

page 26 sur 33

Se mettre agrave Ruby

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

(g)vi(m)(X)emacsSciTE

FreeRIDE (eacutecrit en Ruby)

e-TextEditorTextMate (seulement OSX)

Eclipse avec les Ruby Development ToolsNetBeans 61 (support Ruby et JRuby)

page 26 sur 33

Se mettre agrave Ruby

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

(g)vi(m)(X)emacsSciTE

FreeRIDE (eacutecrit en Ruby)

e-TextEditorTextMate (seulement OSX)

Eclipse avec les Ruby Development ToolsNetBeans 61 (support Ruby et JRuby)

Editeurs et environnements compatiblesLrsquooutil indispensable irbRessources en ligneLivres

page 26 sur 33

Se mettre agrave Ruby

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

(g)vi(m)(X)emacsSciTE

FreeRIDE (eacutecrit en Ruby)

e-TextEditorTextMate (seulement OSX)

Eclipse avec les Ruby Development ToolsNetBeans 61 (support Ruby et JRuby)

page 27 sur 33

Se mettre agrave Ruby irb

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

page 28 sur 33

Se mettre agrave Ruby ressources en ligne

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

Le site officiel (httpwwwruby-langorg)Sa traduction (httpwwwruby-langorgfr)

Le portail Ruby France (httpwwwrubyfranceorg)

Les listes de diffusion sur Google Groups(ruby-talk ruby-core rubyfr-public)

Les groupes de discussion sur Usenet(complangruby frcomplangruby)

Les salons IRC sur FreeNode (ircfreenodenet)(ruby-lang rubyfr)

page 29 sur 33

Se mettre agrave Ruby livres

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

Ruby in a NutshellProgramming RubyThe Ruby WayDesign Patterns for Ruby

Ruby par lrsquoexemple

Passez sur le stand Ruby France

page 30 sur 33

Fin de la preacutesentation

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

page 30 sur 33

Fin de la preacutesentation

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

Des questions

page 30 sur 33

Fin de la preacutesentation

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

page 32 sur 33

Fin de la preacutesentation

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

Merci

page 32 sur 33

Ougrave reacutecupeacuterer ce document

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

Le support de cette preacutesentation sera disponible sur httpzlabfr

page 33 sur 33

Licence de ce document

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

bullVous ecirctes libres bullde reproduire distribuer et communiquer cette creacuteation au public

bullSelon les conditions suivantes bullPaterniteacutebull Vous devez citer le nom de lauteur original de la maniegravere indiqueacutee par lauteur de loeuvre ou le titulaire des droits qui vous confegravere cette autorisation (mais pas dune maniegravere qui suggeacutererait quils vous soutiennent ou approuvent votre utilisation de loeuvre)

bullPas drsquoutilisation commercialebull Vous navez pas le droit dutiliser cette creacuteation agrave des fins commerciales

bullPas de modificationbull Vous navez pas le droit de modifier de transformer ou dadapter cette creacuteation

bullreacutesumeacute explicatif disponible sur httpcreativecommonsorglicensesby-nc-nd20fr

bullvous ecirctes autoriseacute agrave reacuteutiliser le logo Ruby France utiliseacute dans cette preacutesentation pour faire reacutefeacuterence agrave lrsquoassociation

page 20 sur 33

Dynamisme meacutethodes inexistantes

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

class Presentation def method_missing(nom args) method_missing puts Il ny a pas de meacutethode nom est appeleacutee end avant la leveacuteeend de lexception

p = Presentationnew(Preacutesentation de Ruby)

pfin affiche Il ny a pas de meacutethode fin pas drsquoexception

method_missing est lrsquoun des nombreux ldquohooksrdquo disponibles dans Ruby

page 21 sur 33

Dynamisme deacutefinitions exeacutecuteacutees

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

class Configuration case RUBY_PLATFORM deacutefinition dune meacutethode when linux en fonction du systegraveme def initialize(params) hocircte end when win32 def initialize(params) end when darwin include YAIBExtensionsSpecificOSX else unless include YAIBStandard raise Votre OS nest pas supporteacute end end end

page 22 sur 33

Dynamisme reacuteflexiviteacute introspection

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

On peut interroger tous les composants du langage agrave lrsquoexeacutecution

obj = Arraynewobjclass

objclassinstance_methodsobjmethods eacutequivalent agrave la ligne du dessusobjprivate_methods

objclassinstance_methodsgrep(delete)objclassinstance_methodsgrep(delete)sort

objmethodsgrep(^on_connect_do)each do |method| objsend methodend

page 23 sur 33

Dynamisme reacuteflexiviteacute introspection

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

On peut rouvrir une deacutefinition y compris celle du langage

class Array la classe Array existe on la rouvre def longueur ajout drsquoune meacutethode en franccedilais length proxy vers la meacutethode en anglais end end

arr = Arraynewarr ltlt 1arr ltlt element

arrlongueur renvoie 2

page 24 sur 33

Dynamisme reacuteflexiviteacute introspection

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

class Counterparty def has_all_mandatory_fields_filled quelques veacuterifications end def can_be_in_completed_or_approved_status return false unless selfhas_all_mandatory_fields_filled return false unless selflgdhas_all_mandatory_fields_filled unless selfratingshave_all_mandatory_fields_filled

return false end return true end

end

page 25 sur 33

Dynamisme reacuteflexiviteacute introspection

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

modification de la classe Arrayclass Array

def have_all_mandatory_fields_filled selfeach do |item| unless itemrespond_to has_all_mandatory_fields_filled return false end unless itemhas_all_mandatory_fields_filled return false end end return true end

end

page 26 sur 33

Se mettre agrave Ruby

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

(g)vi(m)(X)emacsSciTE

FreeRIDE (eacutecrit en Ruby)

e-TextEditorTextMate (seulement OSX)

Eclipse avec les Ruby Development ToolsNetBeans 61 (support Ruby et JRuby)

page 26 sur 33

Se mettre agrave Ruby

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

(g)vi(m)(X)emacsSciTE

FreeRIDE (eacutecrit en Ruby)

e-TextEditorTextMate (seulement OSX)

Eclipse avec les Ruby Development ToolsNetBeans 61 (support Ruby et JRuby)

Editeurs et environnements compatiblesLrsquooutil indispensable irbRessources en ligneLivres

page 26 sur 33

Se mettre agrave Ruby

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

(g)vi(m)(X)emacsSciTE

FreeRIDE (eacutecrit en Ruby)

e-TextEditorTextMate (seulement OSX)

Eclipse avec les Ruby Development ToolsNetBeans 61 (support Ruby et JRuby)

page 27 sur 33

Se mettre agrave Ruby irb

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

page 28 sur 33

Se mettre agrave Ruby ressources en ligne

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

Le site officiel (httpwwwruby-langorg)Sa traduction (httpwwwruby-langorgfr)

Le portail Ruby France (httpwwwrubyfranceorg)

Les listes de diffusion sur Google Groups(ruby-talk ruby-core rubyfr-public)

Les groupes de discussion sur Usenet(complangruby frcomplangruby)

Les salons IRC sur FreeNode (ircfreenodenet)(ruby-lang rubyfr)

page 29 sur 33

Se mettre agrave Ruby livres

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

Ruby in a NutshellProgramming RubyThe Ruby WayDesign Patterns for Ruby

Ruby par lrsquoexemple

Passez sur le stand Ruby France

page 30 sur 33

Fin de la preacutesentation

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

page 30 sur 33

Fin de la preacutesentation

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

Des questions

page 30 sur 33

Fin de la preacutesentation

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

page 32 sur 33

Fin de la preacutesentation

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

Merci

page 32 sur 33

Ougrave reacutecupeacuterer ce document

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

Le support de cette preacutesentation sera disponible sur httpzlabfr

page 33 sur 33

Licence de ce document

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

bullVous ecirctes libres bullde reproduire distribuer et communiquer cette creacuteation au public

bullSelon les conditions suivantes bullPaterniteacutebull Vous devez citer le nom de lauteur original de la maniegravere indiqueacutee par lauteur de loeuvre ou le titulaire des droits qui vous confegravere cette autorisation (mais pas dune maniegravere qui suggeacutererait quils vous soutiennent ou approuvent votre utilisation de loeuvre)

bullPas drsquoutilisation commercialebull Vous navez pas le droit dutiliser cette creacuteation agrave des fins commerciales

bullPas de modificationbull Vous navez pas le droit de modifier de transformer ou dadapter cette creacuteation

bullreacutesumeacute explicatif disponible sur httpcreativecommonsorglicensesby-nc-nd20fr

bullvous ecirctes autoriseacute agrave reacuteutiliser le logo Ruby France utiliseacute dans cette preacutesentation pour faire reacutefeacuterence agrave lrsquoassociation

page 21 sur 33

Dynamisme deacutefinitions exeacutecuteacutees

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

class Configuration case RUBY_PLATFORM deacutefinition dune meacutethode when linux en fonction du systegraveme def initialize(params) hocircte end when win32 def initialize(params) end when darwin include YAIBExtensionsSpecificOSX else unless include YAIBStandard raise Votre OS nest pas supporteacute end end end

page 22 sur 33

Dynamisme reacuteflexiviteacute introspection

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

On peut interroger tous les composants du langage agrave lrsquoexeacutecution

obj = Arraynewobjclass

objclassinstance_methodsobjmethods eacutequivalent agrave la ligne du dessusobjprivate_methods

objclassinstance_methodsgrep(delete)objclassinstance_methodsgrep(delete)sort

objmethodsgrep(^on_connect_do)each do |method| objsend methodend

page 23 sur 33

Dynamisme reacuteflexiviteacute introspection

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

On peut rouvrir une deacutefinition y compris celle du langage

class Array la classe Array existe on la rouvre def longueur ajout drsquoune meacutethode en franccedilais length proxy vers la meacutethode en anglais end end

arr = Arraynewarr ltlt 1arr ltlt element

arrlongueur renvoie 2

page 24 sur 33

Dynamisme reacuteflexiviteacute introspection

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

class Counterparty def has_all_mandatory_fields_filled quelques veacuterifications end def can_be_in_completed_or_approved_status return false unless selfhas_all_mandatory_fields_filled return false unless selflgdhas_all_mandatory_fields_filled unless selfratingshave_all_mandatory_fields_filled

return false end return true end

end

page 25 sur 33

Dynamisme reacuteflexiviteacute introspection

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

modification de la classe Arrayclass Array

def have_all_mandatory_fields_filled selfeach do |item| unless itemrespond_to has_all_mandatory_fields_filled return false end unless itemhas_all_mandatory_fields_filled return false end end return true end

end

page 26 sur 33

Se mettre agrave Ruby

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

(g)vi(m)(X)emacsSciTE

FreeRIDE (eacutecrit en Ruby)

e-TextEditorTextMate (seulement OSX)

Eclipse avec les Ruby Development ToolsNetBeans 61 (support Ruby et JRuby)

page 26 sur 33

Se mettre agrave Ruby

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

(g)vi(m)(X)emacsSciTE

FreeRIDE (eacutecrit en Ruby)

e-TextEditorTextMate (seulement OSX)

Eclipse avec les Ruby Development ToolsNetBeans 61 (support Ruby et JRuby)

Editeurs et environnements compatiblesLrsquooutil indispensable irbRessources en ligneLivres

page 26 sur 33

Se mettre agrave Ruby

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

(g)vi(m)(X)emacsSciTE

FreeRIDE (eacutecrit en Ruby)

e-TextEditorTextMate (seulement OSX)

Eclipse avec les Ruby Development ToolsNetBeans 61 (support Ruby et JRuby)

page 27 sur 33

Se mettre agrave Ruby irb

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

page 28 sur 33

Se mettre agrave Ruby ressources en ligne

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

Le site officiel (httpwwwruby-langorg)Sa traduction (httpwwwruby-langorgfr)

Le portail Ruby France (httpwwwrubyfranceorg)

Les listes de diffusion sur Google Groups(ruby-talk ruby-core rubyfr-public)

Les groupes de discussion sur Usenet(complangruby frcomplangruby)

Les salons IRC sur FreeNode (ircfreenodenet)(ruby-lang rubyfr)

page 29 sur 33

Se mettre agrave Ruby livres

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

Ruby in a NutshellProgramming RubyThe Ruby WayDesign Patterns for Ruby

Ruby par lrsquoexemple

Passez sur le stand Ruby France

page 30 sur 33

Fin de la preacutesentation

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

page 30 sur 33

Fin de la preacutesentation

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

Des questions

page 30 sur 33

Fin de la preacutesentation

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

page 32 sur 33

Fin de la preacutesentation

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

Merci

page 32 sur 33

Ougrave reacutecupeacuterer ce document

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

Le support de cette preacutesentation sera disponible sur httpzlabfr

page 33 sur 33

Licence de ce document

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

bullVous ecirctes libres bullde reproduire distribuer et communiquer cette creacuteation au public

bullSelon les conditions suivantes bullPaterniteacutebull Vous devez citer le nom de lauteur original de la maniegravere indiqueacutee par lauteur de loeuvre ou le titulaire des droits qui vous confegravere cette autorisation (mais pas dune maniegravere qui suggeacutererait quils vous soutiennent ou approuvent votre utilisation de loeuvre)

bullPas drsquoutilisation commercialebull Vous navez pas le droit dutiliser cette creacuteation agrave des fins commerciales

bullPas de modificationbull Vous navez pas le droit de modifier de transformer ou dadapter cette creacuteation

bullreacutesumeacute explicatif disponible sur httpcreativecommonsorglicensesby-nc-nd20fr

bullvous ecirctes autoriseacute agrave reacuteutiliser le logo Ruby France utiliseacute dans cette preacutesentation pour faire reacutefeacuterence agrave lrsquoassociation

page 22 sur 33

Dynamisme reacuteflexiviteacute introspection

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

On peut interroger tous les composants du langage agrave lrsquoexeacutecution

obj = Arraynewobjclass

objclassinstance_methodsobjmethods eacutequivalent agrave la ligne du dessusobjprivate_methods

objclassinstance_methodsgrep(delete)objclassinstance_methodsgrep(delete)sort

objmethodsgrep(^on_connect_do)each do |method| objsend methodend

page 23 sur 33

Dynamisme reacuteflexiviteacute introspection

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

On peut rouvrir une deacutefinition y compris celle du langage

class Array la classe Array existe on la rouvre def longueur ajout drsquoune meacutethode en franccedilais length proxy vers la meacutethode en anglais end end

arr = Arraynewarr ltlt 1arr ltlt element

arrlongueur renvoie 2

page 24 sur 33

Dynamisme reacuteflexiviteacute introspection

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

class Counterparty def has_all_mandatory_fields_filled quelques veacuterifications end def can_be_in_completed_or_approved_status return false unless selfhas_all_mandatory_fields_filled return false unless selflgdhas_all_mandatory_fields_filled unless selfratingshave_all_mandatory_fields_filled

return false end return true end

end

page 25 sur 33

Dynamisme reacuteflexiviteacute introspection

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

modification de la classe Arrayclass Array

def have_all_mandatory_fields_filled selfeach do |item| unless itemrespond_to has_all_mandatory_fields_filled return false end unless itemhas_all_mandatory_fields_filled return false end end return true end

end

page 26 sur 33

Se mettre agrave Ruby

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

(g)vi(m)(X)emacsSciTE

FreeRIDE (eacutecrit en Ruby)

e-TextEditorTextMate (seulement OSX)

Eclipse avec les Ruby Development ToolsNetBeans 61 (support Ruby et JRuby)

page 26 sur 33

Se mettre agrave Ruby

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

(g)vi(m)(X)emacsSciTE

FreeRIDE (eacutecrit en Ruby)

e-TextEditorTextMate (seulement OSX)

Eclipse avec les Ruby Development ToolsNetBeans 61 (support Ruby et JRuby)

Editeurs et environnements compatiblesLrsquooutil indispensable irbRessources en ligneLivres

page 26 sur 33

Se mettre agrave Ruby

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

(g)vi(m)(X)emacsSciTE

FreeRIDE (eacutecrit en Ruby)

e-TextEditorTextMate (seulement OSX)

Eclipse avec les Ruby Development ToolsNetBeans 61 (support Ruby et JRuby)

page 27 sur 33

Se mettre agrave Ruby irb

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

page 28 sur 33

Se mettre agrave Ruby ressources en ligne

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

Le site officiel (httpwwwruby-langorg)Sa traduction (httpwwwruby-langorgfr)

Le portail Ruby France (httpwwwrubyfranceorg)

Les listes de diffusion sur Google Groups(ruby-talk ruby-core rubyfr-public)

Les groupes de discussion sur Usenet(complangruby frcomplangruby)

Les salons IRC sur FreeNode (ircfreenodenet)(ruby-lang rubyfr)

page 29 sur 33

Se mettre agrave Ruby livres

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

Ruby in a NutshellProgramming RubyThe Ruby WayDesign Patterns for Ruby

Ruby par lrsquoexemple

Passez sur le stand Ruby France

page 30 sur 33

Fin de la preacutesentation

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

page 30 sur 33

Fin de la preacutesentation

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

Des questions

page 30 sur 33

Fin de la preacutesentation

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

page 32 sur 33

Fin de la preacutesentation

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

Merci

page 32 sur 33

Ougrave reacutecupeacuterer ce document

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

Le support de cette preacutesentation sera disponible sur httpzlabfr

page 33 sur 33

Licence de ce document

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

bullVous ecirctes libres bullde reproduire distribuer et communiquer cette creacuteation au public

bullSelon les conditions suivantes bullPaterniteacutebull Vous devez citer le nom de lauteur original de la maniegravere indiqueacutee par lauteur de loeuvre ou le titulaire des droits qui vous confegravere cette autorisation (mais pas dune maniegravere qui suggeacutererait quils vous soutiennent ou approuvent votre utilisation de loeuvre)

bullPas drsquoutilisation commercialebull Vous navez pas le droit dutiliser cette creacuteation agrave des fins commerciales

bullPas de modificationbull Vous navez pas le droit de modifier de transformer ou dadapter cette creacuteation

bullreacutesumeacute explicatif disponible sur httpcreativecommonsorglicensesby-nc-nd20fr

bullvous ecirctes autoriseacute agrave reacuteutiliser le logo Ruby France utiliseacute dans cette preacutesentation pour faire reacutefeacuterence agrave lrsquoassociation

page 23 sur 33

Dynamisme reacuteflexiviteacute introspection

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

On peut rouvrir une deacutefinition y compris celle du langage

class Array la classe Array existe on la rouvre def longueur ajout drsquoune meacutethode en franccedilais length proxy vers la meacutethode en anglais end end

arr = Arraynewarr ltlt 1arr ltlt element

arrlongueur renvoie 2

page 24 sur 33

Dynamisme reacuteflexiviteacute introspection

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

class Counterparty def has_all_mandatory_fields_filled quelques veacuterifications end def can_be_in_completed_or_approved_status return false unless selfhas_all_mandatory_fields_filled return false unless selflgdhas_all_mandatory_fields_filled unless selfratingshave_all_mandatory_fields_filled

return false end return true end

end

page 25 sur 33

Dynamisme reacuteflexiviteacute introspection

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

modification de la classe Arrayclass Array

def have_all_mandatory_fields_filled selfeach do |item| unless itemrespond_to has_all_mandatory_fields_filled return false end unless itemhas_all_mandatory_fields_filled return false end end return true end

end

page 26 sur 33

Se mettre agrave Ruby

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

(g)vi(m)(X)emacsSciTE

FreeRIDE (eacutecrit en Ruby)

e-TextEditorTextMate (seulement OSX)

Eclipse avec les Ruby Development ToolsNetBeans 61 (support Ruby et JRuby)

page 26 sur 33

Se mettre agrave Ruby

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

(g)vi(m)(X)emacsSciTE

FreeRIDE (eacutecrit en Ruby)

e-TextEditorTextMate (seulement OSX)

Eclipse avec les Ruby Development ToolsNetBeans 61 (support Ruby et JRuby)

Editeurs et environnements compatiblesLrsquooutil indispensable irbRessources en ligneLivres

page 26 sur 33

Se mettre agrave Ruby

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

(g)vi(m)(X)emacsSciTE

FreeRIDE (eacutecrit en Ruby)

e-TextEditorTextMate (seulement OSX)

Eclipse avec les Ruby Development ToolsNetBeans 61 (support Ruby et JRuby)

page 27 sur 33

Se mettre agrave Ruby irb

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

page 28 sur 33

Se mettre agrave Ruby ressources en ligne

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

Le site officiel (httpwwwruby-langorg)Sa traduction (httpwwwruby-langorgfr)

Le portail Ruby France (httpwwwrubyfranceorg)

Les listes de diffusion sur Google Groups(ruby-talk ruby-core rubyfr-public)

Les groupes de discussion sur Usenet(complangruby frcomplangruby)

Les salons IRC sur FreeNode (ircfreenodenet)(ruby-lang rubyfr)

page 29 sur 33

Se mettre agrave Ruby livres

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

Ruby in a NutshellProgramming RubyThe Ruby WayDesign Patterns for Ruby

Ruby par lrsquoexemple

Passez sur le stand Ruby France

page 30 sur 33

Fin de la preacutesentation

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

page 30 sur 33

Fin de la preacutesentation

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

Des questions

page 30 sur 33

Fin de la preacutesentation

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

page 32 sur 33

Fin de la preacutesentation

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

Merci

page 32 sur 33

Ougrave reacutecupeacuterer ce document

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

Le support de cette preacutesentation sera disponible sur httpzlabfr

page 33 sur 33

Licence de ce document

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

bullVous ecirctes libres bullde reproduire distribuer et communiquer cette creacuteation au public

bullSelon les conditions suivantes bullPaterniteacutebull Vous devez citer le nom de lauteur original de la maniegravere indiqueacutee par lauteur de loeuvre ou le titulaire des droits qui vous confegravere cette autorisation (mais pas dune maniegravere qui suggeacutererait quils vous soutiennent ou approuvent votre utilisation de loeuvre)

bullPas drsquoutilisation commercialebull Vous navez pas le droit dutiliser cette creacuteation agrave des fins commerciales

bullPas de modificationbull Vous navez pas le droit de modifier de transformer ou dadapter cette creacuteation

bullreacutesumeacute explicatif disponible sur httpcreativecommonsorglicensesby-nc-nd20fr

bullvous ecirctes autoriseacute agrave reacuteutiliser le logo Ruby France utiliseacute dans cette preacutesentation pour faire reacutefeacuterence agrave lrsquoassociation

page 24 sur 33

Dynamisme reacuteflexiviteacute introspection

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

class Counterparty def has_all_mandatory_fields_filled quelques veacuterifications end def can_be_in_completed_or_approved_status return false unless selfhas_all_mandatory_fields_filled return false unless selflgdhas_all_mandatory_fields_filled unless selfratingshave_all_mandatory_fields_filled

return false end return true end

end

page 25 sur 33

Dynamisme reacuteflexiviteacute introspection

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

modification de la classe Arrayclass Array

def have_all_mandatory_fields_filled selfeach do |item| unless itemrespond_to has_all_mandatory_fields_filled return false end unless itemhas_all_mandatory_fields_filled return false end end return true end

end

page 26 sur 33

Se mettre agrave Ruby

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

(g)vi(m)(X)emacsSciTE

FreeRIDE (eacutecrit en Ruby)

e-TextEditorTextMate (seulement OSX)

Eclipse avec les Ruby Development ToolsNetBeans 61 (support Ruby et JRuby)

page 26 sur 33

Se mettre agrave Ruby

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

(g)vi(m)(X)emacsSciTE

FreeRIDE (eacutecrit en Ruby)

e-TextEditorTextMate (seulement OSX)

Eclipse avec les Ruby Development ToolsNetBeans 61 (support Ruby et JRuby)

Editeurs et environnements compatiblesLrsquooutil indispensable irbRessources en ligneLivres

page 26 sur 33

Se mettre agrave Ruby

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

(g)vi(m)(X)emacsSciTE

FreeRIDE (eacutecrit en Ruby)

e-TextEditorTextMate (seulement OSX)

Eclipse avec les Ruby Development ToolsNetBeans 61 (support Ruby et JRuby)

page 27 sur 33

Se mettre agrave Ruby irb

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

page 28 sur 33

Se mettre agrave Ruby ressources en ligne

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

Le site officiel (httpwwwruby-langorg)Sa traduction (httpwwwruby-langorgfr)

Le portail Ruby France (httpwwwrubyfranceorg)

Les listes de diffusion sur Google Groups(ruby-talk ruby-core rubyfr-public)

Les groupes de discussion sur Usenet(complangruby frcomplangruby)

Les salons IRC sur FreeNode (ircfreenodenet)(ruby-lang rubyfr)

page 29 sur 33

Se mettre agrave Ruby livres

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

Ruby in a NutshellProgramming RubyThe Ruby WayDesign Patterns for Ruby

Ruby par lrsquoexemple

Passez sur le stand Ruby France

page 30 sur 33

Fin de la preacutesentation

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

page 30 sur 33

Fin de la preacutesentation

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

Des questions

page 30 sur 33

Fin de la preacutesentation

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

page 32 sur 33

Fin de la preacutesentation

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

Merci

page 32 sur 33

Ougrave reacutecupeacuterer ce document

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

Le support de cette preacutesentation sera disponible sur httpzlabfr

page 33 sur 33

Licence de ce document

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

bullVous ecirctes libres bullde reproduire distribuer et communiquer cette creacuteation au public

bullSelon les conditions suivantes bullPaterniteacutebull Vous devez citer le nom de lauteur original de la maniegravere indiqueacutee par lauteur de loeuvre ou le titulaire des droits qui vous confegravere cette autorisation (mais pas dune maniegravere qui suggeacutererait quils vous soutiennent ou approuvent votre utilisation de loeuvre)

bullPas drsquoutilisation commercialebull Vous navez pas le droit dutiliser cette creacuteation agrave des fins commerciales

bullPas de modificationbull Vous navez pas le droit de modifier de transformer ou dadapter cette creacuteation

bullreacutesumeacute explicatif disponible sur httpcreativecommonsorglicensesby-nc-nd20fr

bullvous ecirctes autoriseacute agrave reacuteutiliser le logo Ruby France utiliseacute dans cette preacutesentation pour faire reacutefeacuterence agrave lrsquoassociation

page 25 sur 33

Dynamisme reacuteflexiviteacute introspection

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

modification de la classe Arrayclass Array

def have_all_mandatory_fields_filled selfeach do |item| unless itemrespond_to has_all_mandatory_fields_filled return false end unless itemhas_all_mandatory_fields_filled return false end end return true end

end

page 26 sur 33

Se mettre agrave Ruby

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

(g)vi(m)(X)emacsSciTE

FreeRIDE (eacutecrit en Ruby)

e-TextEditorTextMate (seulement OSX)

Eclipse avec les Ruby Development ToolsNetBeans 61 (support Ruby et JRuby)

page 26 sur 33

Se mettre agrave Ruby

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

(g)vi(m)(X)emacsSciTE

FreeRIDE (eacutecrit en Ruby)

e-TextEditorTextMate (seulement OSX)

Eclipse avec les Ruby Development ToolsNetBeans 61 (support Ruby et JRuby)

Editeurs et environnements compatiblesLrsquooutil indispensable irbRessources en ligneLivres

page 26 sur 33

Se mettre agrave Ruby

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

(g)vi(m)(X)emacsSciTE

FreeRIDE (eacutecrit en Ruby)

e-TextEditorTextMate (seulement OSX)

Eclipse avec les Ruby Development ToolsNetBeans 61 (support Ruby et JRuby)

page 27 sur 33

Se mettre agrave Ruby irb

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

page 28 sur 33

Se mettre agrave Ruby ressources en ligne

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

Le site officiel (httpwwwruby-langorg)Sa traduction (httpwwwruby-langorgfr)

Le portail Ruby France (httpwwwrubyfranceorg)

Les listes de diffusion sur Google Groups(ruby-talk ruby-core rubyfr-public)

Les groupes de discussion sur Usenet(complangruby frcomplangruby)

Les salons IRC sur FreeNode (ircfreenodenet)(ruby-lang rubyfr)

page 29 sur 33

Se mettre agrave Ruby livres

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

Ruby in a NutshellProgramming RubyThe Ruby WayDesign Patterns for Ruby

Ruby par lrsquoexemple

Passez sur le stand Ruby France

page 30 sur 33

Fin de la preacutesentation

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

page 30 sur 33

Fin de la preacutesentation

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

Des questions

page 30 sur 33

Fin de la preacutesentation

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

page 32 sur 33

Fin de la preacutesentation

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

Merci

page 32 sur 33

Ougrave reacutecupeacuterer ce document

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

Le support de cette preacutesentation sera disponible sur httpzlabfr

page 33 sur 33

Licence de ce document

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

bullVous ecirctes libres bullde reproduire distribuer et communiquer cette creacuteation au public

bullSelon les conditions suivantes bullPaterniteacutebull Vous devez citer le nom de lauteur original de la maniegravere indiqueacutee par lauteur de loeuvre ou le titulaire des droits qui vous confegravere cette autorisation (mais pas dune maniegravere qui suggeacutererait quils vous soutiennent ou approuvent votre utilisation de loeuvre)

bullPas drsquoutilisation commercialebull Vous navez pas le droit dutiliser cette creacuteation agrave des fins commerciales

bullPas de modificationbull Vous navez pas le droit de modifier de transformer ou dadapter cette creacuteation

bullreacutesumeacute explicatif disponible sur httpcreativecommonsorglicensesby-nc-nd20fr

bullvous ecirctes autoriseacute agrave reacuteutiliser le logo Ruby France utiliseacute dans cette preacutesentation pour faire reacutefeacuterence agrave lrsquoassociation

page 26 sur 33

Se mettre agrave Ruby

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

(g)vi(m)(X)emacsSciTE

FreeRIDE (eacutecrit en Ruby)

e-TextEditorTextMate (seulement OSX)

Eclipse avec les Ruby Development ToolsNetBeans 61 (support Ruby et JRuby)

page 26 sur 33

Se mettre agrave Ruby

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

(g)vi(m)(X)emacsSciTE

FreeRIDE (eacutecrit en Ruby)

e-TextEditorTextMate (seulement OSX)

Eclipse avec les Ruby Development ToolsNetBeans 61 (support Ruby et JRuby)

Editeurs et environnements compatiblesLrsquooutil indispensable irbRessources en ligneLivres

page 26 sur 33

Se mettre agrave Ruby

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

(g)vi(m)(X)emacsSciTE

FreeRIDE (eacutecrit en Ruby)

e-TextEditorTextMate (seulement OSX)

Eclipse avec les Ruby Development ToolsNetBeans 61 (support Ruby et JRuby)

page 27 sur 33

Se mettre agrave Ruby irb

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

page 28 sur 33

Se mettre agrave Ruby ressources en ligne

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

Le site officiel (httpwwwruby-langorg)Sa traduction (httpwwwruby-langorgfr)

Le portail Ruby France (httpwwwrubyfranceorg)

Les listes de diffusion sur Google Groups(ruby-talk ruby-core rubyfr-public)

Les groupes de discussion sur Usenet(complangruby frcomplangruby)

Les salons IRC sur FreeNode (ircfreenodenet)(ruby-lang rubyfr)

page 29 sur 33

Se mettre agrave Ruby livres

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

Ruby in a NutshellProgramming RubyThe Ruby WayDesign Patterns for Ruby

Ruby par lrsquoexemple

Passez sur le stand Ruby France

page 30 sur 33

Fin de la preacutesentation

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

page 30 sur 33

Fin de la preacutesentation

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

Des questions

page 30 sur 33

Fin de la preacutesentation

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

page 32 sur 33

Fin de la preacutesentation

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

Merci

page 32 sur 33

Ougrave reacutecupeacuterer ce document

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

Le support de cette preacutesentation sera disponible sur httpzlabfr

page 33 sur 33

Licence de ce document

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

bullVous ecirctes libres bullde reproduire distribuer et communiquer cette creacuteation au public

bullSelon les conditions suivantes bullPaterniteacutebull Vous devez citer le nom de lauteur original de la maniegravere indiqueacutee par lauteur de loeuvre ou le titulaire des droits qui vous confegravere cette autorisation (mais pas dune maniegravere qui suggeacutererait quils vous soutiennent ou approuvent votre utilisation de loeuvre)

bullPas drsquoutilisation commercialebull Vous navez pas le droit dutiliser cette creacuteation agrave des fins commerciales

bullPas de modificationbull Vous navez pas le droit de modifier de transformer ou dadapter cette creacuteation

bullreacutesumeacute explicatif disponible sur httpcreativecommonsorglicensesby-nc-nd20fr

bullvous ecirctes autoriseacute agrave reacuteutiliser le logo Ruby France utiliseacute dans cette preacutesentation pour faire reacutefeacuterence agrave lrsquoassociation

page 26 sur 33

Se mettre agrave Ruby

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

(g)vi(m)(X)emacsSciTE

FreeRIDE (eacutecrit en Ruby)

e-TextEditorTextMate (seulement OSX)

Eclipse avec les Ruby Development ToolsNetBeans 61 (support Ruby et JRuby)

Editeurs et environnements compatiblesLrsquooutil indispensable irbRessources en ligneLivres

page 26 sur 33

Se mettre agrave Ruby

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

(g)vi(m)(X)emacsSciTE

FreeRIDE (eacutecrit en Ruby)

e-TextEditorTextMate (seulement OSX)

Eclipse avec les Ruby Development ToolsNetBeans 61 (support Ruby et JRuby)

page 27 sur 33

Se mettre agrave Ruby irb

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

page 28 sur 33

Se mettre agrave Ruby ressources en ligne

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

Le site officiel (httpwwwruby-langorg)Sa traduction (httpwwwruby-langorgfr)

Le portail Ruby France (httpwwwrubyfranceorg)

Les listes de diffusion sur Google Groups(ruby-talk ruby-core rubyfr-public)

Les groupes de discussion sur Usenet(complangruby frcomplangruby)

Les salons IRC sur FreeNode (ircfreenodenet)(ruby-lang rubyfr)

page 29 sur 33

Se mettre agrave Ruby livres

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

Ruby in a NutshellProgramming RubyThe Ruby WayDesign Patterns for Ruby

Ruby par lrsquoexemple

Passez sur le stand Ruby France

page 30 sur 33

Fin de la preacutesentation

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

page 30 sur 33

Fin de la preacutesentation

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

Des questions

page 30 sur 33

Fin de la preacutesentation

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

page 32 sur 33

Fin de la preacutesentation

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

Merci

page 32 sur 33

Ougrave reacutecupeacuterer ce document

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

Le support de cette preacutesentation sera disponible sur httpzlabfr

page 33 sur 33

Licence de ce document

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

bullVous ecirctes libres bullde reproduire distribuer et communiquer cette creacuteation au public

bullSelon les conditions suivantes bullPaterniteacutebull Vous devez citer le nom de lauteur original de la maniegravere indiqueacutee par lauteur de loeuvre ou le titulaire des droits qui vous confegravere cette autorisation (mais pas dune maniegravere qui suggeacutererait quils vous soutiennent ou approuvent votre utilisation de loeuvre)

bullPas drsquoutilisation commercialebull Vous navez pas le droit dutiliser cette creacuteation agrave des fins commerciales

bullPas de modificationbull Vous navez pas le droit de modifier de transformer ou dadapter cette creacuteation

bullreacutesumeacute explicatif disponible sur httpcreativecommonsorglicensesby-nc-nd20fr

bullvous ecirctes autoriseacute agrave reacuteutiliser le logo Ruby France utiliseacute dans cette preacutesentation pour faire reacutefeacuterence agrave lrsquoassociation

page 26 sur 33

Se mettre agrave Ruby

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

(g)vi(m)(X)emacsSciTE

FreeRIDE (eacutecrit en Ruby)

e-TextEditorTextMate (seulement OSX)

Eclipse avec les Ruby Development ToolsNetBeans 61 (support Ruby et JRuby)

page 27 sur 33

Se mettre agrave Ruby irb

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

page 28 sur 33

Se mettre agrave Ruby ressources en ligne

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

Le site officiel (httpwwwruby-langorg)Sa traduction (httpwwwruby-langorgfr)

Le portail Ruby France (httpwwwrubyfranceorg)

Les listes de diffusion sur Google Groups(ruby-talk ruby-core rubyfr-public)

Les groupes de discussion sur Usenet(complangruby frcomplangruby)

Les salons IRC sur FreeNode (ircfreenodenet)(ruby-lang rubyfr)

page 29 sur 33

Se mettre agrave Ruby livres

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

Ruby in a NutshellProgramming RubyThe Ruby WayDesign Patterns for Ruby

Ruby par lrsquoexemple

Passez sur le stand Ruby France

page 30 sur 33

Fin de la preacutesentation

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

page 30 sur 33

Fin de la preacutesentation

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

Des questions

page 30 sur 33

Fin de la preacutesentation

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

page 32 sur 33

Fin de la preacutesentation

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

Merci

page 32 sur 33

Ougrave reacutecupeacuterer ce document

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

Le support de cette preacutesentation sera disponible sur httpzlabfr

page 33 sur 33

Licence de ce document

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

bullVous ecirctes libres bullde reproduire distribuer et communiquer cette creacuteation au public

bullSelon les conditions suivantes bullPaterniteacutebull Vous devez citer le nom de lauteur original de la maniegravere indiqueacutee par lauteur de loeuvre ou le titulaire des droits qui vous confegravere cette autorisation (mais pas dune maniegravere qui suggeacutererait quils vous soutiennent ou approuvent votre utilisation de loeuvre)

bullPas drsquoutilisation commercialebull Vous navez pas le droit dutiliser cette creacuteation agrave des fins commerciales

bullPas de modificationbull Vous navez pas le droit de modifier de transformer ou dadapter cette creacuteation

bullreacutesumeacute explicatif disponible sur httpcreativecommonsorglicensesby-nc-nd20fr

bullvous ecirctes autoriseacute agrave reacuteutiliser le logo Ruby France utiliseacute dans cette preacutesentation pour faire reacutefeacuterence agrave lrsquoassociation

page 27 sur 33

Se mettre agrave Ruby irb

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

page 28 sur 33

Se mettre agrave Ruby ressources en ligne

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

Le site officiel (httpwwwruby-langorg)Sa traduction (httpwwwruby-langorgfr)

Le portail Ruby France (httpwwwrubyfranceorg)

Les listes de diffusion sur Google Groups(ruby-talk ruby-core rubyfr-public)

Les groupes de discussion sur Usenet(complangruby frcomplangruby)

Les salons IRC sur FreeNode (ircfreenodenet)(ruby-lang rubyfr)

page 29 sur 33

Se mettre agrave Ruby livres

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

Ruby in a NutshellProgramming RubyThe Ruby WayDesign Patterns for Ruby

Ruby par lrsquoexemple

Passez sur le stand Ruby France

page 30 sur 33

Fin de la preacutesentation

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

page 30 sur 33

Fin de la preacutesentation

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

Des questions

page 30 sur 33

Fin de la preacutesentation

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

page 32 sur 33

Fin de la preacutesentation

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

Merci

page 32 sur 33

Ougrave reacutecupeacuterer ce document

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

Le support de cette preacutesentation sera disponible sur httpzlabfr

page 33 sur 33

Licence de ce document

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

bullVous ecirctes libres bullde reproduire distribuer et communiquer cette creacuteation au public

bullSelon les conditions suivantes bullPaterniteacutebull Vous devez citer le nom de lauteur original de la maniegravere indiqueacutee par lauteur de loeuvre ou le titulaire des droits qui vous confegravere cette autorisation (mais pas dune maniegravere qui suggeacutererait quils vous soutiennent ou approuvent votre utilisation de loeuvre)

bullPas drsquoutilisation commercialebull Vous navez pas le droit dutiliser cette creacuteation agrave des fins commerciales

bullPas de modificationbull Vous navez pas le droit de modifier de transformer ou dadapter cette creacuteation

bullreacutesumeacute explicatif disponible sur httpcreativecommonsorglicensesby-nc-nd20fr

bullvous ecirctes autoriseacute agrave reacuteutiliser le logo Ruby France utiliseacute dans cette preacutesentation pour faire reacutefeacuterence agrave lrsquoassociation

page 28 sur 33

Se mettre agrave Ruby ressources en ligne

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

Le site officiel (httpwwwruby-langorg)Sa traduction (httpwwwruby-langorgfr)

Le portail Ruby France (httpwwwrubyfranceorg)

Les listes de diffusion sur Google Groups(ruby-talk ruby-core rubyfr-public)

Les groupes de discussion sur Usenet(complangruby frcomplangruby)

Les salons IRC sur FreeNode (ircfreenodenet)(ruby-lang rubyfr)

page 29 sur 33

Se mettre agrave Ruby livres

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

Ruby in a NutshellProgramming RubyThe Ruby WayDesign Patterns for Ruby

Ruby par lrsquoexemple

Passez sur le stand Ruby France

page 30 sur 33

Fin de la preacutesentation

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

page 30 sur 33

Fin de la preacutesentation

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

Des questions

page 30 sur 33

Fin de la preacutesentation

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

page 32 sur 33

Fin de la preacutesentation

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

Merci

page 32 sur 33

Ougrave reacutecupeacuterer ce document

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

Le support de cette preacutesentation sera disponible sur httpzlabfr

page 33 sur 33

Licence de ce document

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

bullVous ecirctes libres bullde reproduire distribuer et communiquer cette creacuteation au public

bullSelon les conditions suivantes bullPaterniteacutebull Vous devez citer le nom de lauteur original de la maniegravere indiqueacutee par lauteur de loeuvre ou le titulaire des droits qui vous confegravere cette autorisation (mais pas dune maniegravere qui suggeacutererait quils vous soutiennent ou approuvent votre utilisation de loeuvre)

bullPas drsquoutilisation commercialebull Vous navez pas le droit dutiliser cette creacuteation agrave des fins commerciales

bullPas de modificationbull Vous navez pas le droit de modifier de transformer ou dadapter cette creacuteation

bullreacutesumeacute explicatif disponible sur httpcreativecommonsorglicensesby-nc-nd20fr

bullvous ecirctes autoriseacute agrave reacuteutiliser le logo Ruby France utiliseacute dans cette preacutesentation pour faire reacutefeacuterence agrave lrsquoassociation

page 29 sur 33

Se mettre agrave Ruby livres

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

Ruby in a NutshellProgramming RubyThe Ruby WayDesign Patterns for Ruby

Ruby par lrsquoexemple

Passez sur le stand Ruby France

page 30 sur 33

Fin de la preacutesentation

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

page 30 sur 33

Fin de la preacutesentation

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

Des questions

page 30 sur 33

Fin de la preacutesentation

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

page 32 sur 33

Fin de la preacutesentation

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

Merci

page 32 sur 33

Ougrave reacutecupeacuterer ce document

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

Le support de cette preacutesentation sera disponible sur httpzlabfr

page 33 sur 33

Licence de ce document

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

bullVous ecirctes libres bullde reproduire distribuer et communiquer cette creacuteation au public

bullSelon les conditions suivantes bullPaterniteacutebull Vous devez citer le nom de lauteur original de la maniegravere indiqueacutee par lauteur de loeuvre ou le titulaire des droits qui vous confegravere cette autorisation (mais pas dune maniegravere qui suggeacutererait quils vous soutiennent ou approuvent votre utilisation de loeuvre)

bullPas drsquoutilisation commercialebull Vous navez pas le droit dutiliser cette creacuteation agrave des fins commerciales

bullPas de modificationbull Vous navez pas le droit de modifier de transformer ou dadapter cette creacuteation

bullreacutesumeacute explicatif disponible sur httpcreativecommonsorglicensesby-nc-nd20fr

bullvous ecirctes autoriseacute agrave reacuteutiliser le logo Ruby France utiliseacute dans cette preacutesentation pour faire reacutefeacuterence agrave lrsquoassociation

page 30 sur 33

Fin de la preacutesentation

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

page 30 sur 33

Fin de la preacutesentation

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

Des questions

page 30 sur 33

Fin de la preacutesentation

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

page 32 sur 33

Fin de la preacutesentation

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

Merci

page 32 sur 33

Ougrave reacutecupeacuterer ce document

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

Le support de cette preacutesentation sera disponible sur httpzlabfr

page 33 sur 33

Licence de ce document

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

bullVous ecirctes libres bullde reproduire distribuer et communiquer cette creacuteation au public

bullSelon les conditions suivantes bullPaterniteacutebull Vous devez citer le nom de lauteur original de la maniegravere indiqueacutee par lauteur de loeuvre ou le titulaire des droits qui vous confegravere cette autorisation (mais pas dune maniegravere qui suggeacutererait quils vous soutiennent ou approuvent votre utilisation de loeuvre)

bullPas drsquoutilisation commercialebull Vous navez pas le droit dutiliser cette creacuteation agrave des fins commerciales

bullPas de modificationbull Vous navez pas le droit de modifier de transformer ou dadapter cette creacuteation

bullreacutesumeacute explicatif disponible sur httpcreativecommonsorglicensesby-nc-nd20fr

bullvous ecirctes autoriseacute agrave reacuteutiliser le logo Ruby France utiliseacute dans cette preacutesentation pour faire reacutefeacuterence agrave lrsquoassociation

page 30 sur 33

Fin de la preacutesentation

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

Des questions

page 30 sur 33

Fin de la preacutesentation

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

page 32 sur 33

Fin de la preacutesentation

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

Merci

page 32 sur 33

Ougrave reacutecupeacuterer ce document

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

Le support de cette preacutesentation sera disponible sur httpzlabfr

page 33 sur 33

Licence de ce document

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

bullVous ecirctes libres bullde reproduire distribuer et communiquer cette creacuteation au public

bullSelon les conditions suivantes bullPaterniteacutebull Vous devez citer le nom de lauteur original de la maniegravere indiqueacutee par lauteur de loeuvre ou le titulaire des droits qui vous confegravere cette autorisation (mais pas dune maniegravere qui suggeacutererait quils vous soutiennent ou approuvent votre utilisation de loeuvre)

bullPas drsquoutilisation commercialebull Vous navez pas le droit dutiliser cette creacuteation agrave des fins commerciales

bullPas de modificationbull Vous navez pas le droit de modifier de transformer ou dadapter cette creacuteation

bullreacutesumeacute explicatif disponible sur httpcreativecommonsorglicensesby-nc-nd20fr

bullvous ecirctes autoriseacute agrave reacuteutiliser le logo Ruby France utiliseacute dans cette preacutesentation pour faire reacutefeacuterence agrave lrsquoassociation

page 30 sur 33

Fin de la preacutesentation

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

page 32 sur 33

Fin de la preacutesentation

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

Merci

page 32 sur 33

Ougrave reacutecupeacuterer ce document

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

Le support de cette preacutesentation sera disponible sur httpzlabfr

page 33 sur 33

Licence de ce document

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

bullVous ecirctes libres bullde reproduire distribuer et communiquer cette creacuteation au public

bullSelon les conditions suivantes bullPaterniteacutebull Vous devez citer le nom de lauteur original de la maniegravere indiqueacutee par lauteur de loeuvre ou le titulaire des droits qui vous confegravere cette autorisation (mais pas dune maniegravere qui suggeacutererait quils vous soutiennent ou approuvent votre utilisation de loeuvre)

bullPas drsquoutilisation commercialebull Vous navez pas le droit dutiliser cette creacuteation agrave des fins commerciales

bullPas de modificationbull Vous navez pas le droit de modifier de transformer ou dadapter cette creacuteation

bullreacutesumeacute explicatif disponible sur httpcreativecommonsorglicensesby-nc-nd20fr

bullvous ecirctes autoriseacute agrave reacuteutiliser le logo Ruby France utiliseacute dans cette preacutesentation pour faire reacutefeacuterence agrave lrsquoassociation

page 32 sur 33

Fin de la preacutesentation

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

Merci

page 32 sur 33

Ougrave reacutecupeacuterer ce document

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

Le support de cette preacutesentation sera disponible sur httpzlabfr

page 33 sur 33

Licence de ce document

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

bullVous ecirctes libres bullde reproduire distribuer et communiquer cette creacuteation au public

bullSelon les conditions suivantes bullPaterniteacutebull Vous devez citer le nom de lauteur original de la maniegravere indiqueacutee par lauteur de loeuvre ou le titulaire des droits qui vous confegravere cette autorisation (mais pas dune maniegravere qui suggeacutererait quils vous soutiennent ou approuvent votre utilisation de loeuvre)

bullPas drsquoutilisation commercialebull Vous navez pas le droit dutiliser cette creacuteation agrave des fins commerciales

bullPas de modificationbull Vous navez pas le droit de modifier de transformer ou dadapter cette creacuteation

bullreacutesumeacute explicatif disponible sur httpcreativecommonsorglicensesby-nc-nd20fr

bullvous ecirctes autoriseacute agrave reacuteutiliser le logo Ruby France utiliseacute dans cette preacutesentation pour faire reacutefeacuterence agrave lrsquoassociation

page 32 sur 33

Ougrave reacutecupeacuterer ce document

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

Le support de cette preacutesentation sera disponible sur httpzlabfr

page 33 sur 33

Licence de ce document

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

bullVous ecirctes libres bullde reproduire distribuer et communiquer cette creacuteation au public

bullSelon les conditions suivantes bullPaterniteacutebull Vous devez citer le nom de lauteur original de la maniegravere indiqueacutee par lauteur de loeuvre ou le titulaire des droits qui vous confegravere cette autorisation (mais pas dune maniegravere qui suggeacutererait quils vous soutiennent ou approuvent votre utilisation de loeuvre)

bullPas drsquoutilisation commercialebull Vous navez pas le droit dutiliser cette creacuteation agrave des fins commerciales

bullPas de modificationbull Vous navez pas le droit de modifier de transformer ou dadapter cette creacuteation

bullreacutesumeacute explicatif disponible sur httpcreativecommonsorglicensesby-nc-nd20fr

bullvous ecirctes autoriseacute agrave reacuteutiliser le logo Ruby France utiliseacute dans cette preacutesentation pour faire reacutefeacuterence agrave lrsquoassociation

page 33 sur 33

Licence de ce document

RMLL 2008 - Mont-de-Marsan - Preacutesentation de Ruby - Guillaume ldquoZifrordquo Desrat -

bullVous ecirctes libres bullde reproduire distribuer et communiquer cette creacuteation au public

bullSelon les conditions suivantes bullPaterniteacutebull Vous devez citer le nom de lauteur original de la maniegravere indiqueacutee par lauteur de loeuvre ou le titulaire des droits qui vous confegravere cette autorisation (mais pas dune maniegravere qui suggeacutererait quils vous soutiennent ou approuvent votre utilisation de loeuvre)

bullPas drsquoutilisation commercialebull Vous navez pas le droit dutiliser cette creacuteation agrave des fins commerciales

bullPas de modificationbull Vous navez pas le droit de modifier de transformer ou dadapter cette creacuteation

bullreacutesumeacute explicatif disponible sur httpcreativecommonsorglicensesby-nc-nd20fr

bullvous ecirctes autoriseacute agrave reacuteutiliser le logo Ruby France utiliseacute dans cette preacutesentation pour faire reacutefeacuterence agrave lrsquoassociation