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