pourquoi :ruby, :ruby on rails sont géniaux · • +2 an de dev ruby on rails • +3 ans de dev...
TRANSCRIPT
![Page 1: Pourquoi :ruby, :ruby on rails sont géniaux · • +2 an de dev Ruby on Rails • +3 ans de dev Web (PHP, Java, ...) Ruby:ruby • Libre • 100% Objet • Interprété • Multi-paradigme](https://reader030.vdocuments.net/reader030/viewer/2022011908/5f5a43b6aad07879fa335fd9/html5/thumbnails/1.jpg)
Pourquoi :ruby, :ruby_on_rails
sont géniaux ?
D’un point de vue technique!
9 juillet 2010 Maxime Menant
![Page 2: Pourquoi :ruby, :ruby on rails sont géniaux · • +2 an de dev Ruby on Rails • +3 ans de dev Web (PHP, Java, ...) Ruby:ruby • Libre • 100% Objet • Interprété • Multi-paradigme](https://reader030.vdocuments.net/reader030/viewer/2022011908/5f5a43b6aad07879fa335fd9/html5/thumbnails/2.jpg)
Qui parle?
• Maxime Menant
• 25 ans
• Sophia Antipolis
• http://blog.maximemenant.fr
• maxime_menant
• +2 an de dev Ruby on Rails
• +3 ans de dev Web (PHP, Java, ...)
![Page 3: Pourquoi :ruby, :ruby on rails sont géniaux · • +2 an de dev Ruby on Rails • +3 ans de dev Web (PHP, Java, ...) Ruby:ruby • Libre • 100% Objet • Interprété • Multi-paradigme](https://reader030.vdocuments.net/reader030/viewer/2022011908/5f5a43b6aad07879fa335fd9/html5/thumbnails/3.jpg)
Ruby
![Page 4: Pourquoi :ruby, :ruby on rails sont géniaux · • +2 an de dev Ruby on Rails • +3 ans de dev Web (PHP, Java, ...) Ruby:ruby • Libre • 100% Objet • Interprété • Multi-paradigme](https://reader030.vdocuments.net/reader030/viewer/2022011908/5f5a43b6aad07879fa335fd9/html5/thumbnails/4.jpg)
:ruby
• Libre
• 100% Objet
• Interprété
• Multi-paradigme
• Syntaxe proche du langage naturel
• Code compact
• Méta-programmation
![Page 5: Pourquoi :ruby, :ruby on rails sont géniaux · • +2 an de dev Ruby on Rails • +3 ans de dev Web (PHP, Java, ...) Ruby:ruby • Libre • 100% Objet • Interprété • Multi-paradigme](https://reader030.vdocuments.net/reader030/viewer/2022011908/5f5a43b6aad07879fa335fd9/html5/thumbnails/5.jpg)
Les bases de
![Page 6: Pourquoi :ruby, :ruby on rails sont géniaux · • +2 an de dev Ruby on Rails • +3 ans de dev Web (PHP, Java, ...) Ruby:ruby • Libre • 100% Objet • Interprété • Multi-paradigme](https://reader030.vdocuments.net/reader030/viewer/2022011908/5f5a43b6aad07879fa335fd9/html5/thumbnails/6.jpg)
:variables
![Page 7: Pourquoi :ruby, :ruby on rails sont géniaux · • +2 an de dev Ruby on Rails • +3 ans de dev Web (PHP, Java, ...) Ruby:ruby • Libre • 100% Objet • Interprété • Multi-paradigme](https://reader030.vdocuments.net/reader030/viewer/2022011908/5f5a43b6aad07879fa335fd9/html5/thumbnails/7.jpg)
:variables
Variables :
locale
@instance
@@de_classe
![Page 8: Pourquoi :ruby, :ruby on rails sont géniaux · • +2 an de dev Ruby on Rails • +3 ans de dev Web (PHP, Java, ...) Ruby:ruby • Libre • 100% Objet • Interprété • Multi-paradigme](https://reader030.vdocuments.net/reader030/viewer/2022011908/5f5a43b6aad07879fa335fd9/html5/thumbnails/8.jpg)
:variables
Constante : COLORS
Variables :
locale
@instance
@@de_classe
![Page 9: Pourquoi :ruby, :ruby on rails sont géniaux · • +2 an de dev Ruby on Rails • +3 ans de dev Web (PHP, Java, ...) Ruby:ruby • Libre • 100% Objet • Interprété • Multi-paradigme](https://reader030.vdocuments.net/reader030/viewer/2022011908/5f5a43b6aad07879fa335fd9/html5/thumbnails/9.jpg)
:variables
Constante : COLORS
Variables :
locale
@instance
@@de_classe
Accesseur :
attr_accessorattr_readerattr_writer
![Page 10: Pourquoi :ruby, :ruby on rails sont géniaux · • +2 an de dev Ruby on Rails • +3 ans de dev Web (PHP, Java, ...) Ruby:ruby • Libre • 100% Objet • Interprété • Multi-paradigme](https://reader030.vdocuments.net/reader030/viewer/2022011908/5f5a43b6aad07879fa335fd9/html5/thumbnails/10.jpg)
:conditions
![Page 11: Pourquoi :ruby, :ruby on rails sont géniaux · • +2 an de dev Ruby on Rails • +3 ans de dev Web (PHP, Java, ...) Ruby:ruby • Libre • 100% Objet • Interprété • Multi-paradigme](https://reader030.vdocuments.net/reader030/viewer/2022011908/5f5a43b6aad07879fa335fd9/html5/thumbnails/11.jpg)
:conditionsif value == 3 then ...elsif value > 3 ...else ...end
![Page 12: Pourquoi :ruby, :ruby on rails sont géniaux · • +2 an de dev Ruby on Rails • +3 ans de dev Web (PHP, Java, ...) Ruby:ruby • Libre • 100% Objet • Interprété • Multi-paradigme](https://reader030.vdocuments.net/reader030/viewer/2022011908/5f5a43b6aad07879fa335fd9/html5/thumbnails/12.jpg)
:conditionsif value == 3 then ...elsif value > 3 ...else ...end
unless value < 20 ...end
![Page 13: Pourquoi :ruby, :ruby on rails sont géniaux · • +2 an de dev Ruby on Rails • +3 ans de dev Web (PHP, Java, ...) Ruby:ruby • Libre • 100% Objet • Interprété • Multi-paradigme](https://reader030.vdocuments.net/reader030/viewer/2022011908/5f5a43b6aad07879fa335fd9/html5/thumbnails/13.jpg)
:conditionsif value == 3 then ...elsif value > 3 ...else ...end
unless value < 20 ...end
thresold = true if a < 100
thresold = true unless a >= 100
![Page 14: Pourquoi :ruby, :ruby on rails sont géniaux · • +2 an de dev Ruby on Rails • +3 ans de dev Web (PHP, Java, ...) Ruby:ruby • Libre • 100% Objet • Interprété • Multi-paradigme](https://reader030.vdocuments.net/reader030/viewer/2022011908/5f5a43b6aad07879fa335fd9/html5/thumbnails/14.jpg)
:boucles
![Page 15: Pourquoi :ruby, :ruby on rails sont géniaux · • +2 an de dev Ruby on Rails • +3 ans de dev Web (PHP, Java, ...) Ruby:ruby • Libre • 100% Objet • Interprété • Multi-paradigme](https://reader030.vdocuments.net/reader030/viewer/2022011908/5f5a43b6aad07879fa335fd9/html5/thumbnails/15.jpg)
:boucles10.times do |i|
puts i
end
![Page 16: Pourquoi :ruby, :ruby on rails sont géniaux · • +2 an de dev Ruby on Rails • +3 ans de dev Web (PHP, Java, ...) Ruby:ruby • Libre • 100% Objet • Interprété • Multi-paradigme](https://reader030.vdocuments.net/reader030/viewer/2022011908/5f5a43b6aad07879fa335fd9/html5/thumbnails/16.jpg)
:boucles10.times do |i|
puts i
endbooks.each do |book|
puts book.name
end
![Page 17: Pourquoi :ruby, :ruby on rails sont géniaux · • +2 an de dev Ruby on Rails • +3 ans de dev Web (PHP, Java, ...) Ruby:ruby • Libre • 100% Objet • Interprété • Multi-paradigme](https://reader030.vdocuments.net/reader030/viewer/2022011908/5f5a43b6aad07879fa335fd9/html5/thumbnails/17.jpg)
:boucles10.times do |i|
puts i
endbooks.each do |book|
puts book.name
end
a *= 2 while a < 100
a *= 2 until a >= 100
![Page 18: Pourquoi :ruby, :ruby on rails sont géniaux · • +2 an de dev Ruby on Rails • +3 ans de dev Web (PHP, Java, ...) Ruby:ruby • Libre • 100% Objet • Interprété • Multi-paradigme](https://reader030.vdocuments.net/reader030/viewer/2022011908/5f5a43b6aad07879fa335fd9/html5/thumbnails/18.jpg)
:symbole
![Page 19: Pourquoi :ruby, :ruby on rails sont géniaux · • +2 an de dev Ruby on Rails • +3 ans de dev Web (PHP, Java, ...) Ruby:ruby • Libre • 100% Objet • Interprété • Multi-paradigme](https://reader030.vdocuments.net/reader030/viewer/2022011908/5f5a43b6aad07879fa335fd9/html5/thumbnails/19.jpg)
:symbole
'symbol'.object_id 2159861560
![Page 20: Pourquoi :ruby, :ruby on rails sont géniaux · • +2 an de dev Ruby on Rails • +3 ans de dev Web (PHP, Java, ...) Ruby:ruby • Libre • 100% Objet • Interprété • Multi-paradigme](https://reader030.vdocuments.net/reader030/viewer/2022011908/5f5a43b6aad07879fa335fd9/html5/thumbnails/20.jpg)
:symbole
'symbol'.object_id 2159861560
:symbol.object_id 329788
![Page 21: Pourquoi :ruby, :ruby on rails sont géniaux · • +2 an de dev Ruby on Rails • +3 ans de dev Web (PHP, Java, ...) Ruby:ruby • Libre • 100% Objet • Interprété • Multi-paradigme](https://reader030.vdocuments.net/reader030/viewer/2022011908/5f5a43b6aad07879fa335fd9/html5/thumbnails/21.jpg)
:symbole
'symbol'.object_id 2159861560
:symbol.object_id 329788
'symbol'.object_id 2159845100
![Page 22: Pourquoi :ruby, :ruby on rails sont géniaux · • +2 an de dev Ruby on Rails • +3 ans de dev Web (PHP, Java, ...) Ruby:ruby • Libre • 100% Objet • Interprété • Multi-paradigme](https://reader030.vdocuments.net/reader030/viewer/2022011908/5f5a43b6aad07879fa335fd9/html5/thumbnails/22.jpg)
:symbole
'symbol'.object_id 2159861560
:symbol.object_id 329788
'symbol'.object_id 2159845100
:symbol.object_id 329788
![Page 23: Pourquoi :ruby, :ruby on rails sont géniaux · • +2 an de dev Ruby on Rails • +3 ans de dev Web (PHP, Java, ...) Ruby:ruby • Libre • 100% Objet • Interprété • Multi-paradigme](https://reader030.vdocuments.net/reader030/viewer/2022011908/5f5a43b6aad07879fa335fd9/html5/thumbnails/23.jpg)
:array, :hash
![Page 24: Pourquoi :ruby, :ruby on rails sont géniaux · • +2 an de dev Ruby on Rails • +3 ans de dev Web (PHP, Java, ...) Ruby:ruby • Libre • 100% Objet • Interprété • Multi-paradigme](https://reader030.vdocuments.net/reader030/viewer/2022011908/5f5a43b6aad07879fa335fd9/html5/thumbnails/24.jpg)
:array, :hasharray = []array << 'one'array << 'two'array << 'three'
![Page 25: Pourquoi :ruby, :ruby on rails sont géniaux · • +2 an de dev Ruby on Rails • +3 ans de dev Web (PHP, Java, ...) Ruby:ruby • Libre • 100% Objet • Interprété • Multi-paradigme](https://reader030.vdocuments.net/reader030/viewer/2022011908/5f5a43b6aad07879fa335fd9/html5/thumbnails/25.jpg)
:array, :hasharray = []array << 'one'array << 'two'array << 'three'
['one', 'two', 'three']
![Page 26: Pourquoi :ruby, :ruby on rails sont géniaux · • +2 an de dev Ruby on Rails • +3 ans de dev Web (PHP, Java, ...) Ruby:ruby • Libre • 100% Objet • Interprété • Multi-paradigme](https://reader030.vdocuments.net/reader030/viewer/2022011908/5f5a43b6aad07879fa335fd9/html5/thumbnails/26.jpg)
:array, :hasharray = []array << 'one'array << 'two'array << 'three'
['one', 'two', 'three']
hash = {}hash[:one] = 1hash[:two] = 2hash[:three] = 3
![Page 27: Pourquoi :ruby, :ruby on rails sont géniaux · • +2 an de dev Ruby on Rails • +3 ans de dev Web (PHP, Java, ...) Ruby:ruby • Libre • 100% Objet • Interprété • Multi-paradigme](https://reader030.vdocuments.net/reader030/viewer/2022011908/5f5a43b6aad07879fa335fd9/html5/thumbnails/27.jpg)
:array, :hasharray = []array << 'one'array << 'two'array << 'three'
['one', 'two', 'three']
hash = {}hash[:one] = 1hash[:two] = 2hash[:three] = 3
{:one => 1, :two => 2, :three => 3]
![Page 28: Pourquoi :ruby, :ruby on rails sont géniaux · • +2 an de dev Ruby on Rails • +3 ans de dev Web (PHP, Java, ...) Ruby:ruby • Libre • 100% Objet • Interprété • Multi-paradigme](https://reader030.vdocuments.net/reader030/viewer/2022011908/5f5a43b6aad07879fa335fd9/html5/thumbnails/28.jpg)
:classes
class Wizard def initialize(name) @name = name endend
![Page 29: Pourquoi :ruby, :ruby on rails sont géniaux · • +2 an de dev Ruby on Rails • +3 ans de dev Web (PHP, Java, ...) Ruby:ruby • Libre • 100% Objet • Interprété • Multi-paradigme](https://reader030.vdocuments.net/reader030/viewer/2022011908/5f5a43b6aad07879fa335fd9/html5/thumbnails/29.jpg)
:classes
class Wizard def initialize(name) @name = name endend merlin = Wizard.new 'Merlin'
puts merlin.inspect
![Page 30: Pourquoi :ruby, :ruby on rails sont géniaux · • +2 an de dev Ruby on Rails • +3 ans de dev Web (PHP, Java, ...) Ruby:ruby • Libre • 100% Objet • Interprété • Multi-paradigme](https://reader030.vdocuments.net/reader030/viewer/2022011908/5f5a43b6aad07879fa335fd9/html5/thumbnails/30.jpg)
:classes
class Wizard def initialize(name) @name = name endend merlin = Wizard.new 'Merlin'
puts merlin.inspect
#<Wizard:0x100124070 @name="Merlin">
![Page 31: Pourquoi :ruby, :ruby on rails sont géniaux · • +2 an de dev Ruby on Rails • +3 ans de dev Web (PHP, Java, ...) Ruby:ruby • Libre • 100% Objet • Interprété • Multi-paradigme](https://reader030.vdocuments.net/reader030/viewer/2022011908/5f5a43b6aad07879fa335fd9/html5/thumbnails/31.jpg)
:classesclass Wizard attr_reader :name
def initialize(name) @name = name endend
![Page 32: Pourquoi :ruby, :ruby on rails sont géniaux · • +2 an de dev Ruby on Rails • +3 ans de dev Web (PHP, Java, ...) Ruby:ruby • Libre • 100% Objet • Interprété • Multi-paradigme](https://reader030.vdocuments.net/reader030/viewer/2022011908/5f5a43b6aad07879fa335fd9/html5/thumbnails/32.jpg)
:classesclass Wizard attr_reader :name
def initialize(name) @name = name endend merlin = Wizard.new 'Merlin'
puts merlin.name
![Page 33: Pourquoi :ruby, :ruby on rails sont géniaux · • +2 an de dev Ruby on Rails • +3 ans de dev Web (PHP, Java, ...) Ruby:ruby • Libre • 100% Objet • Interprété • Multi-paradigme](https://reader030.vdocuments.net/reader030/viewer/2022011908/5f5a43b6aad07879fa335fd9/html5/thumbnails/33.jpg)
:classesclass Wizard attr_reader :name
def initialize(name) @name = name endend merlin = Wizard.new 'Merlin'
puts merlin.name
Merlin
![Page 34: Pourquoi :ruby, :ruby on rails sont géniaux · • +2 an de dev Ruby on Rails • +3 ans de dev Web (PHP, Java, ...) Ruby:ruby • Libre • 100% Objet • Interprété • Multi-paradigme](https://reader030.vdocuments.net/reader030/viewer/2022011908/5f5a43b6aad07879fa335fd9/html5/thumbnails/34.jpg)
:modules, :mixinsmodule Spell def cast(spell) puts "#{self.name} invokes #{spell}!" endend
![Page 35: Pourquoi :ruby, :ruby on rails sont géniaux · • +2 an de dev Ruby on Rails • +3 ans de dev Web (PHP, Java, ...) Ruby:ruby • Libre • 100% Objet • Interprété • Multi-paradigme](https://reader030.vdocuments.net/reader030/viewer/2022011908/5f5a43b6aad07879fa335fd9/html5/thumbnails/35.jpg)
:modules, :mixinsmodule Spell def cast(spell) puts "#{self.name} invokes #{spell}!" endend class Wizard
include Spell end
![Page 36: Pourquoi :ruby, :ruby on rails sont géniaux · • +2 an de dev Ruby on Rails • +3 ans de dev Web (PHP, Java, ...) Ruby:ruby • Libre • 100% Objet • Interprété • Multi-paradigme](https://reader030.vdocuments.net/reader030/viewer/2022011908/5f5a43b6aad07879fa335fd9/html5/thumbnails/36.jpg)
:modules, :mixinsmodule Spell def cast(spell) puts "#{self.name} invokes #{spell}!" endend
merlin = Wizard.new 'Merlin'merlin.cast 'Thunder Bolt'
class Wizard include Spell end
![Page 37: Pourquoi :ruby, :ruby on rails sont géniaux · • +2 an de dev Ruby on Rails • +3 ans de dev Web (PHP, Java, ...) Ruby:ruby • Libre • 100% Objet • Interprété • Multi-paradigme](https://reader030.vdocuments.net/reader030/viewer/2022011908/5f5a43b6aad07879fa335fd9/html5/thumbnails/37.jpg)
:modules, :mixinsmodule Spell def cast(spell) puts "#{self.name} invokes #{spell}!" endend
merlin = Wizard.new 'Merlin'merlin.cast 'Thunder Bolt'
Merlin invokes Thunder Bolt!
class Wizard include Spell end
![Page 38: Pourquoi :ruby, :ruby on rails sont géniaux · • +2 an de dev Ruby on Rails • +3 ans de dev Web (PHP, Java, ...) Ruby:ruby • Libre • 100% Objet • Interprété • Multi-paradigme](https://reader030.vdocuments.net/reader030/viewer/2022011908/5f5a43b6aad07879fa335fd9/html5/thumbnails/38.jpg)
• Soit une classe A contenant une collection d’objets B
• A possède la méthode de parcours each
• et B la méthode de comparaison <=>
• alors en incluant le module Enumerable
• A obtient plus de 45 nouvelles méthodes basées sur les comparaisons et les parcours
:exemple => Enumerable
![Page 39: Pourquoi :ruby, :ruby on rails sont géniaux · • +2 an de dev Ruby on Rails • +3 ans de dev Web (PHP, Java, ...) Ruby:ruby • Libre • 100% Objet • Interprété • Multi-paradigme](https://reader030.vdocuments.net/reader030/viewer/2022011908/5f5a43b6aad07879fa335fd9/html5/thumbnails/39.jpg)
• Soit une classe A contenant une collection d’objets B
• A possède la méthode de parcours each
• et B la méthode de comparaison <=>
• alors en incluant le module Enumerable
• A obtient plus de 45 nouvelles méthodes basées sur les comparaisons et les parcours
:exemple => Enumerable
![Page 40: Pourquoi :ruby, :ruby on rails sont géniaux · • +2 an de dev Ruby on Rails • +3 ans de dev Web (PHP, Java, ...) Ruby:ruby • Libre • 100% Objet • Interprété • Multi-paradigme](https://reader030.vdocuments.net/reader030/viewer/2022011908/5f5a43b6aad07879fa335fd9/html5/thumbnails/40.jpg)
:implémentation
• Plusieurs versions de la machine virtuelle ruby :
• jRuby : Java
• IronRuby : .Net
• MacRuby : Objective C
• Rubinius : Ruby lorsque c’est possible, C++ sinon
![Page 41: Pourquoi :ruby, :ruby on rails sont géniaux · • +2 an de dev Ruby on Rails • +3 ans de dev Web (PHP, Java, ...) Ruby:ruby • Libre • 100% Objet • Interprété • Multi-paradigme](https://reader030.vdocuments.net/reader030/viewer/2022011908/5f5a43b6aad07879fa335fd9/html5/thumbnails/41.jpg)
:exemple => jRuby
![Page 42: Pourquoi :ruby, :ruby on rails sont géniaux · • +2 an de dev Ruby on Rails • +3 ans de dev Web (PHP, Java, ...) Ruby:ruby • Libre • 100% Objet • Interprété • Multi-paradigme](https://reader030.vdocuments.net/reader030/viewer/2022011908/5f5a43b6aad07879fa335fd9/html5/thumbnails/42.jpg)
:exemple => jRuby
include Java frame = javax.swing.JFrame.new()frame.getContentPane().add(javax.swing.JLabel.new('Hello, World!'))frame.setDefaultCloseOperation(javax.swing.JFrame::EXIT_ON_CLOSE)frame.pack()frame.set_visible(true)
![Page 43: Pourquoi :ruby, :ruby on rails sont géniaux · • +2 an de dev Ruby on Rails • +3 ans de dev Web (PHP, Java, ...) Ruby:ruby • Libre • 100% Objet • Interprété • Multi-paradigme](https://reader030.vdocuments.net/reader030/viewer/2022011908/5f5a43b6aad07879fa335fd9/html5/thumbnails/43.jpg)
:exemple => jRuby
include Java frame = javax.swing.JFrame.new()frame.getContentPane().add(javax.swing.JLabel.new('Hello, World!'))frame.setDefaultCloseOperation(javax.swing.JFrame::EXIT_ON_CLOSE)frame.pack()frame.set_visible(true)
![Page 44: Pourquoi :ruby, :ruby on rails sont géniaux · • +2 an de dev Ruby on Rails • +3 ans de dev Web (PHP, Java, ...) Ruby:ruby • Libre • 100% Objet • Interprété • Multi-paradigme](https://reader030.vdocuments.net/reader030/viewer/2022011908/5f5a43b6aad07879fa335fd9/html5/thumbnails/44.jpg)
:gems
• Equivalent des packages .deb pour Ruby
• S’installe avec leurs dépendances
• Plus de 14000 gems à ce jour
• Un repository de ces gems :
• http://rubygems.org/
![Page 45: Pourquoi :ruby, :ruby on rails sont géniaux · • +2 an de dev Ruby on Rails • +3 ans de dev Web (PHP, Java, ...) Ruby:ruby • Libre • 100% Objet • Interprété • Multi-paradigme](https://reader030.vdocuments.net/reader030/viewer/2022011908/5f5a43b6aad07879fa335fd9/html5/thumbnails/45.jpg)
![Page 46: Pourquoi :ruby, :ruby on rails sont géniaux · • +2 an de dev Ruby on Rails • +3 ans de dev Web (PHP, Java, ...) Ruby:ruby • Libre • 100% Objet • Interprété • Multi-paradigme](https://reader030.vdocuments.net/reader030/viewer/2022011908/5f5a43b6aad07879fa335fd9/html5/thumbnails/46.jpg)
:ruby_on_rails
• 2 Principes :
• DRY : Don’t Repeat Yourself
• Convention over Configuration
• REST : Representational state transfer
• MVC : Modèle - Vue - Contrôleur
![Page 47: Pourquoi :ruby, :ruby on rails sont géniaux · • +2 an de dev Ruby on Rails • +3 ans de dev Web (PHP, Java, ...) Ruby:ruby • Libre • 100% Objet • Interprété • Multi-paradigme](https://reader030.vdocuments.net/reader030/viewer/2022011908/5f5a43b6aad07879fa335fd9/html5/thumbnails/47.jpg)
:REST
• l’URI identifie clairement une ressource
• Operations HTTP :
• GET
• POST
• PUT
• DELETE
• Stateless - chaque opération est auto-suffisante
![Page 48: Pourquoi :ruby, :ruby on rails sont géniaux · • +2 an de dev Ruby on Rails • +3 ans de dev Web (PHP, Java, ...) Ruby:ruby • Libre • 100% Objet • Interprété • Multi-paradigme](https://reader030.vdocuments.net/reader030/viewer/2022011908/5f5a43b6aad07879fa335fd9/html5/thumbnails/48.jpg)
DémonstrationIt’s gonna be Legend...ary :)
![Page 49: Pourquoi :ruby, :ruby on rails sont géniaux · • +2 an de dev Ruby on Rails • +3 ans de dev Web (PHP, Java, ...) Ruby:ruby • Libre • 100% Objet • Interprété • Multi-paradigme](https://reader030.vdocuments.net/reader030/viewer/2022011908/5f5a43b6aad07879fa335fd9/html5/thumbnails/49.jpg)
:idée
Mise en place d’une application de
gestion de tâches pour des projets
![Page 50: Pourquoi :ruby, :ruby on rails sont géniaux · • +2 an de dev Ruby on Rails • +3 ans de dev Web (PHP, Java, ...) Ruby:ruby • Libre • 100% Objet • Interprété • Multi-paradigme](https://reader030.vdocuments.net/reader030/viewer/2022011908/5f5a43b6aad07879fa335fd9/html5/thumbnails/50.jpg)
:awesome
• Création d’un prototype d’application web et de son API en quelques minutes
• Scaffolding des ressources
• Abstraction de très haut niveau
• Des gems et des plugins couvrant tous les usages courant
• 1er déploiement en moins d’une minute sur Heroku