Ruby Pour RoR

1 503 vues

Publié le

presentation du langage ruby

Publié dans : Technologie
0 commentaire
1 j’aime
Statistiques
Remarques
  • Soyez le premier à commenter

Aucun téléchargement
Vues
Nombre de vues
1 503
Sur SlideShare
0
Issues des intégrations
0
Intégrations
4
Actions
Partages
0
Téléchargements
26
Commentaires
0
J’aime
1
Intégrations 0
Aucune incorporation

Aucune remarque pour cette diapositive

Ruby Pour RoR

  1. 1. Ruby for ROR   (Ruby on Rails) By Eric German Lemonasso.org version 1.1
  2. 2. il était une fois <ul><li>Origine : Matsumoto Yukihiro , a.k.a. Matz , </li></ul><ul><li>Année : 1993 </li></ul><ul><li>hérité de Perl , Python  , PHP, java </li></ul><ul><li>Interprété  et   objet </li></ul><ul><li>  </li></ul><ul><li>Poussé par Rails  (framework  MVC)  </li></ul><ul><li>  Rails : David Hansson (2004) </li></ul><ul><li>  </li></ul>
  3. 3. Vérification et installation <ul><li>ruby -v  (interpréteur de commande) </li></ul><ul><li>irb v       (interpreteur interactif) </li></ul><ul><li>gem -v  (gestion des modules gemmes) </li></ul><ul><li>rdoc -v  (générateur de doc) </li></ul><ul><li>ri -v        (lecteur de doc § man) </li></ul><ul><li>rdebub -v (mode debug de ruby) Installation : </li></ul><ul><li>Par apt-get (ruby , irb,ri,rdoc,rubygems et ruby-dev| libruby-dev ) </li></ul><ul><li>(Attention  faire préalablement :apt-get install libyaml-ruby apt-get install libzlib-ruby) </li></ul>
  4. 4. Manip initiale <ul><li>Tester la présence de ruby  </li></ul><ul><li>Tester la présence de irb </li></ul><ul><li>Tester la présence de ri </li></ul><ul><li>En cas d'échec , installer les programmes manquants. </li></ul>
  5. 5. Gem <ul><li>Permet de chercher et d'installer des modules distants. </li></ul><ul><li>Installation </li></ul><ul><li>(par apt-get  install rubygems)  </li></ul><ul><li>Ou à partir de l'archive </li></ul><ul><li>ruby setup.rb </li></ul><ul><li>Utilisation </li></ul><ul><li>gem list  -r  (liste des gemmes) ==> interrogation des serveurs distant (r= remote) pour le local => gem list </li></ul><ul><li>gem  install   <nom_du_gemme> </li></ul>
  6. 6. Installation de Rails <ul><li>gem install rails </li></ul><ul><li>Installation des drivers des bases de données par gem. </li></ul><ul><li>Bases supportées : </li></ul><ul><ul><li>MySQL </li></ul></ul><ul><ul><li>PostgreSQL </li></ul></ul><ul><ul><li>SQLite </li></ul></ul><ul><ul><li>SQL Server </li></ul></ul><ul><ul><li>IBM DB2 </li></ul></ul><ul><ul><li>Informix </li></ul></ul><ul><ul><li>Oracle – HowtoConnectToOracle </li></ul></ul><ul><ul><li>Firebird /Interbase (as of Rails 0.14.4) </li></ul></ul><ul><ul><li>LDAP – Not exactly a DB driver, but ActiveLDAP can be used with Rails. </li></ul></ul><ul><ul><li>SybaseASA (Sybase Adaptive Server Anywhere aka SQL Anywhere Studio) </li></ul></ul><ul><ul><li>MonetDB? see http://rubyforge.org/projects/monetdb </li></ul></ul><ul><li>  </li></ul>
  7. 7. Documentation <ul><li>  Par RI </li></ul><ul><li>ri Class </li></ul><ul><li>Par rdoc </li></ul><ul><li>gem rdoc </li></ul><ul><li>puis  gem server </li></ul><ul><li>http://localhost:8808/ </li></ul><ul><li>Par web  </li></ul><ul><li>http://www.digitalmediaminute.com/ </li></ul><ul><li>article/1816/top-ruby-on-rails-tutorials  </li></ul><ul><li>http://www.ruby-doc.org/  </li></ul><ul><li>http://www.rubyonrails.org/docs </li></ul><ul><li>http://tryruby.hobix.com/    (ruby en ligne) </li></ul><ul><li>http://phrogz.net/ProgrammingRuby/frameset.html </li></ul>
  8. 8. Ruby :variables <ul><li>Les variables => Par contenu </li></ul><ul><ul><li>Les chaines de caractères </li></ul></ul><ul><ul><li>Les nombres </li></ul></ul><ul><ul><li>Les tableaux =[..] </li></ul></ul><ul><ul><li>Les tableaux associatifs ={..} </li></ul></ul><ul><ul><li>Les symboles :nom </li></ul></ul>
  9. 9. Les IDE <ul><li>Jedit + plugin ruby </li></ul><ul><li>  </li></ul><ul><li>Radrails  (aptana studio et eclipse) </li></ul><ul><li>  </li></ul><ul><li>SciTe </li></ul><ul><li>  </li></ul><ul><li>Gedit </li></ul><ul><li>(emacs , vim)  </li></ul>
  10. 10. Démarrage <ul><li>Les chaines de caractères a = &quot;eric&quot; puts a </li></ul><ul><li>Mise en pratique : </li></ul><ul><ul><li>Fichier essai.rb  </li></ul></ul><ul><li>#!/usr/bin/ruby </li></ul><ul><li>a = &quot;eric&quot; puts a </li></ul><ul><li>puis lancement par ruby ./essai.rb </li></ul><ul><li>Ou  </li></ul><ul><ul><li>Par irb  </li></ul></ul><ul><ul><li>Par http://tryruby.hobix.com/ </li></ul></ul>
  11. 11. Manip demarrage <ul><ul><li>Réaliser un programme qui affiche 'bonjour tout le monde' </li></ul></ul><ul><li>(hello.rb) </li></ul><ul><ul><li>Le lancer par ruby </li></ul></ul><ul><ul><li>Le lancer par irb (load <nom_pgm>  </li></ul></ul><ul><ul><li>Le réaliser en ligne par irb et TryRuby. </li></ul></ul>
  12. 12. <ul><li>  Les nombres </li></ul><ul><li>b=1 puts b b=23.4 puts b </li></ul>
  13. 13. Méthode sur les chaines: String.methode <ul><li>capitalize et capitalize!                        to_i </li></ul><ul><li>'+'  et <<                                               upcase </li></ul><ul><li>length </li></ul><ul><li>count &quot;&quot; </li></ul><ul><li>delete </li></ul><ul><li>downcase </li></ul><ul><li>empty? </li></ul><ul><li>scan  </li></ul><ul><li>sub </li></ul><ul><li>succ </li></ul><ul><li>[] (int) </li></ul>
  14. 14. Méthodes sur les nombres <ul><li>to_s </li></ul><ul><li>zero? </li></ul><ul><li>chr </li></ul><ul><li>succ  </li></ul><ul><li>upto </li></ul><ul><li>next </li></ul><ul><li>time </li></ul><ul><li>+= </li></ul>
  15. 15. Manip sur les chaines et les nombres Avec ruby  (puts , print ,p ) Avec irb forme &quot;chaine&quot;.methode Trouver les methodes de chaine Essayer quelques opérations de chaines 'e'[0]     nombres ( ajout , soustraction ) Calculer une moyenne    Objectifs:   creation par new , liste des méthodes  completion dans irb  syntaxe methode!
  16. 16. Les tableaux (array) <ul><li>[] </li></ul><ul><li>collect </li></ul><ul><li>delete_at </li></ul><ul><li>pop </li></ul><ul><li>push </li></ul><ul><li>empty? </li></ul><ul><li>first </li></ul><ul><li>insert </li></ul><ul><li><< </li></ul>
  17. 17. Hashtable - hash <ul><li>[] </li></ul><ul><li>delete </li></ul><ul><li>exist? </li></ul><ul><li>Utilisation des symboles: </li></ul><ul><li>hash[:cle]= 'valeur' </li></ul><ul><li>keys </li></ul><ul><li>values </li></ul>
  18. 18. Manip sur les tableaux et hash <ul><li>Créer un tableau, l'afficher </li></ul><ul><li>Ajouter des éléments </li></ul><ul><li>Créer un hash, l'afficher </li></ul><ul><li>  </li></ul><ul><li>Trier un tableau. </li></ul><ul><li>Afficher les clés d'un hash </li></ul>
  19. 19. Ruby :variables <ul><li>Par portée </li></ul><ul><ul><li>variables globales ($nom) </li></ul></ul><ul><ul><li>variables locale (par defaut) </li></ul></ul><ul><ul><li>Les constantes  : NOM </li></ul></ul><ul><ul><li>Les variables d'instances (@nom) </li></ul></ul><ul><ul><li>Les variables de classe (@@nom) </li></ul></ul>
  20. 20. Les structures de contrôle: if <ul><li>if condition [then] </li></ul><ul><li>  else </li></ul><ul><li>end </li></ul><ul><ul><li>elsif  </li></ul></ul><ul><ul><li>unless  </li></ul></ul><ul><ul><li>case  </li></ul></ul><ul><li>          when  </li></ul><ul><ul><li>  instruction sous condition  </li></ul></ul><ul><li>           a=2  if condition </li></ul>
  21. 21. Les structures de contrôle: boucles <ul><li>while condition [do] </li></ul><ul><li>  ... </li></ul><ul><li>end </li></ul><ul><li>Plus rare : </li></ul><ul><li>  begin  </li></ul><ul><li>   code  </li></ul><ul><li>  end while condition  </li></ul><ul><ul><li>code while condition </li></ul></ul><ul><ul><li>for  i in 1..range (.)   =>  intervalle ouvert ou fermé.. </li></ul></ul><ul><li>          range => .. </li></ul><ul><li>          liste  =>  [  ]  </li></ul><ul><li>       end </li></ul><ul><li>  </li></ul><ul><ul><li>(until ) </li></ul></ul>
  22. 22. Les fonctions <ul><li>Définition  </li></ul><ul><li>def cube     a= 4 * * 3     return a end  </li></ul><ul><li>appel   </li></ul><ul><li>cube </li></ul><ul><li>...  ou  </li></ul><ul><li>def cub </li></ul><ul><li>  a= 4 * * 3 end </li></ul><ul><li>.... </li></ul>
  23. 23. Parametres <ul><li>def cube (valeur) valeur * * 3 end </li></ul><ul><li>appel cube 5    ou   cube(5)   </li></ul><ul><li>def cube (valeur=4)  => valeur par defaut </li></ul><ul><li>def cube (*valeur)                                                    </li></ul><ul><li>   valeur[0] **3                                     </li></ul><ul><li>end                                                                   def cubeET (v,*valeur)                                                    </li></ul><ul><li>def cubeET (v,valeur=4)  </li></ul><ul><li>  </li></ul><ul><li>Parametres nommés  </li></ul><ul><li>def cubeET (*params)          </li></ul><ul><li>  puts params[:level]  </li></ul><ul><li>end </li></ul><ul><li>cudeET :nom => 'eric' </li></ul>
  24. 24. manip sur les fonctions <ul><li>Ecrire une fonction de conversion : </li></ul><ul><li>  </li></ul><ul><li>Euros/Dollar </li></ul><ul><li>Celsius /Fahrenheit (formule : °F = (( 9 x °C ) / 5 ) + 32 ) </li></ul><ul><li>Une fonction qui affiche les parametres et leur type </li></ul>
  25. 25. Les objets <ul><li>Tout est objet (et convention)  en RUBY Création (new) class Chanson   def initialize(t, a, duree)     @titre     = t     @artiste   = a     @duree = duree   end end mon_morceau = Chanson.new('let it be' , 'beatles' , 180) puts mon_morceau </li></ul>
  26. 26. Les classes <ul><li>class NomDeLaClasse </li></ul><ul><li>   def methode </li></ul><ul><li>  </li></ul><ul><li>   end </li></ul><ul><li>end </li></ul>
  27. 27. Appels de methode <ul><li>puts mon_morceau.class puts mon_morceau.id  (ou object_id)   a= mon_morceau puts a.id c=a.clone (ou dup) put c.id </li></ul><ul><li>Remarque : Il n'est pas necessaire d'avoir une methode d'initialisation </li></ul>
  28. 28. Exemple <ul><li>class Bis   def hurlement     'une autre , une autre'   end end a=Bis.new puts  a.hurlement </li></ul>
  29. 29. Accesseurs manuels  class Chanson   def initialize(t, a, duree)     @titre     = t     @artiste   = a     @duree = duree   end def titre @titre end def titre(=titre) @titre = titre end end
  30. 30. Les  accesseurs 'Automatiques'   attr_accessor attr_reader attr_writer attr_reader(titre) attr_reader :titre class Chanson   attr_accessor :titre, :artiste , :duree   (utilisation de 'self')
  31. 31. Quelques méthodes natives <ul><li>to_s  (to string ) </li></ul><ul><li>inspect (sortie améliorée) id / object_id ( identifiant de l'objet) class / type is_a? methods respond_to? :methode </li></ul>
  32. 32. Variables de classe <ul><li>class Voiture </li></ul><ul><li>  @@nb_de_voiture </li></ul><ul><li>Methodes de classe </li></ul><ul><li>class Voiture </li></ul><ul><li>def Voiture.comptage </li></ul><ul><li>@@nb_de_voiture+=1 </li></ul><ul><li>end </li></ul><ul><li>  </li></ul><ul><li>  </li></ul>
  33. 33. Manip sur les classes <ul><li>  Créer une classe 'Carte'   (couleur ,valeur, nom_usage) </li></ul><ul><li>methodes: </li></ul><ul><li>        def initialize(couleur,valeur)         def to_humain(v)         def to_s </li></ul><ul><li>Créer une classe  'Jeu' (32 cartes)   </li></ul><ul><li>         def initialize(nb=32)          def affiche          def melange          def tirage(nb=1) </li></ul><ul><li>Créer une classe UneMain (5 cartes)  </li></ul><ul><li>        def initialize </li></ul><ul><li>        def ajoute(carte)         def defausse(*param)         def to_s         def tri_par_couleur         def tri_par_valeur         def initialize(nb=32) </li></ul><ul><li>  </li></ul>
  34. 34. Etendre une classe <ul><li>class 'Nom_de_classe'  </li></ul><ul><li>   def nouvelle_methode </li></ul><ul><li>   end </li></ul><ul><li>   def  surcharge  </li></ul><ul><li>   end </li></ul><ul><li>end </li></ul><ul><li>(pour restreindre => remove_method :nom_de_method ) ou  </li></ul><ul><li>undef(:methode) </li></ul>
  35. 35. Méthode singleton <ul><li>a=Essai.new </li></ul><ul><li>class << a </li></ul><ul><li>  def methode_singleton </li></ul><ul><li>  end </li></ul><ul><li>end </li></ul><ul><li>Ou  </li></ul><ul><li>def a.perso </li></ul><ul><li>.. </li></ul><ul><li>end </li></ul>
  36. 36. Heritage <ul><li>(unique)  </li></ul><ul><li>class Voiture < Vehicule </li></ul><ul><li>  def .. </li></ul><ul><li>  def </li></ul><ul><li>end </li></ul><ul><ul><li>Posiblité d'appeler la méthode 'super'  </li></ul></ul><ul><ul><li>Possibilité de rejeter l'héritage  :remove_method(:method) /  undef </li></ul></ul><ul><ul><li>Utilisation de la methode : method_missing </li></ul></ul><ul><li>  </li></ul><ul><li>  </li></ul>
  37. 37. Modules <ul><li>Regroupe des fonctions et des classes </li></ul><ul><li>Permettent le 'mixin' et donc l'héritage multiple  </li></ul><ul><li>  </li></ul><ul><li>Utilisation: </li></ul><ul><li>require <nom_module> </li></ul><ul><li>class Voiture </li></ul><ul><li>include <Ressource> </li></ul><ul><li>  </li></ul>
  38. 38. Mais on utilisera plutot  les itérateurs <ul><li>Méthodes des instances : </li></ul><ul><li>  </li></ul><ul><li>Nombres :  </li></ul><ul><li>nb.dowto(1) </li></ul><ul><li>nb.upto(3) </li></ul><ul><li>nb.times do  </li></ul><ul><li>... </li></ul><ul><li>end </li></ul>
  39. 39. Itérateurs pour  les chaines: <ul><li>(pas vraiment) </li></ul><ul><li>.each_byte  </li></ul><ul><li>Itérateur pour les tableaux: </li></ul><ul><li>.each  (each_index) </li></ul><ul><li>.collect </li></ul><ul><li>.map (select , inject) </li></ul>
  40. 40. Itérateur pour les Hashes <ul><li>.each </li></ul><ul><li>.each_key </li></ul><ul><li>.each_values </li></ul><ul><li>Et surtout :     .select </li></ul><ul><li>  </li></ul>
  41. 41. Ecrire ses propres itérateurs <ul><li>[1,2,'eric'].each do puts 'present'  </li></ul><ul><li>                            end  </li></ul><ul><li>Encore plus fort  </li></ul><ul><li>[1,2,'eric'].each do |item|   </li></ul><ul><li>                             puts item      </li></ul><ul><li>                             puts 'present' </li></ul><ul><li>                        end  </li></ul><ul><li>OU  [1,2,'eric'].each {|item| puts item ..} </li></ul>
  42. 42. Manip Classes - itérateurs -Doc <ul><li>Développer les classes définies pour Cartes, Jeu  UneMain </li></ul><ul><li>  </li></ul><ul><li>Générer la doc par rdoc </li></ul>
  43. 43. Utilisation de 'yield'  (restituer) <ul><li>def demo </li></ul><ul><li>  puts  'dans demo'  </li></ul><ul><li>  puts 'demo' </li></ul><ul><li>  yield </li></ul><ul><li>  puts 'demo' </li></ul><ul><li>end </li></ul><ul><li>demo do  puts &quot;eric&quot; end </li></ul><ul><li>  </li></ul><ul><li>OU  </li></ul><ul><li>demo  {  puts &quot;eric&quot;   } </li></ul>
  44. 44. suite <ul><li>def demo (param) </li></ul><ul><li>  puts  'dans demo'  </li></ul><ul><li>  puts param </li></ul><ul><li>  autre = 'coucou' </li></ul><ul><li>  yield autre </li></ul><ul><li>   </li></ul><ul><li>end </li></ul><ul><li>  </li></ul><ul><li>demo 'bonjour' do |suite| puts suite *2  end </li></ul>
  45. 45. Manip yield <ul><li>Developper une fonction utilisant yield sans parametre </li></ul><ul><li>Developper une fonction utilisant yield avec un parametre en entrée </li></ul><ul><li>Developper une fonction utilisant yield effectuant une restitution </li></ul>
  46. 46. Opérations sur  les fichiers <ul><li>Classique : </li></ul><ul><li>  monfile =File.new('fichier','r')  </li></ul><ul><li>... </li></ul><ul><li>monfile.close </li></ul><ul><li>  </li></ul><ul><li>OU </li></ul><ul><li>  File.open('fichier','r') do |monfile| ... </li></ul><ul><li>  end </li></ul><ul><li>OU </li></ul><ul><li>   tableau = IO.readline s ('fichier','r') </li></ul><ul><li>  </li></ul>
  47. 47. Manip sur les fichiers <ul><li>Ouvrir un fichier en lecture par les deux methodes (File.new  </li></ul><ul><li>et File.open)  </li></ul><ul><li>  </li></ul><ul><li>Lire , ligne par ligne  </li></ul><ul><li>Lire tout le fichier dans un tableau  </li></ul><ul><li>  </li></ul><ul><li>Lire depuis stdin, écrire dans stout  et stderr  </li></ul>
  48. 48. Les expressions régulières <ul><li>Dans des conditions </li></ul><ul><li>  if  variable=~/trouve/ </li></ul><ul><li>ou if /trouve/.match(subject)  </li></ul><ul><li>Pour les substitutions :  </li></ul><ul><li>  &quot;machaine&quot;.gsub(/ma/,&quot;ta&quot;)  (attention : gsub et gsub!) </li></ul><ul><li>La bonne pratique: </li></ul><ul><li>reg= /(et.+)(neiges)/ </li></ul><ul><li>rech= reg.match('etoile-des-neiges') </li></ul><ul><li>rech.length (nb elements) </li></ul><ul><li>rech.to_a    (=>   donne le resultat dans un tableau ) </li></ul><ul><li>..[2]  => 'neiges' </li></ul>
  49. 49. Manip expressions régulières <ul><li>Utilisation de gsub et gsub! </li></ul><ul><li>  </li></ul><ul><ul><li>Remplacer les 'a' par des 'o' </li></ul></ul><ul><ul><li>Enlever les espace de fin  </li></ul></ul><ul><ul><li>Découper une url en :  </li></ul></ul><ul><ul><li>protocole, serveur, ressource , paramètre </li></ul></ul><ul><li>  </li></ul>
  50. 50. Dates <ul><li>madate= Date.now </li></ul><ul><li>heure= madate.hours </li></ul><ul><li>monformat= madate.strftime('%d/%m/%y')  </li></ul><ul><li>  </li></ul><ul><li>Pour des choses plus complexes:  </li></ul><ul><li>require 'date' </li></ul>
  51. 51. rdebug <ul><li>Utilisation par ruby -rdebug <nom_du_programme> </li></ul><ul><li>Ou par  </li></ul><ul><li>rdebug <nom_du_programme> </li></ul><ul><li>  </li></ul><ul><li>Commande:  </li></ul><ul><li>n: next </li></ul><ul><li>s: step (next en profondeur) </li></ul><ul><li>p: affiche </li></ul><ul><li>b: point d'arret </li></ul><ul><li>c: continu </li></ul><ul><li>h: help </li></ul>
  52. 52. Duck typing <ul><li>Pour etre de type canard il suffit de se comporter comme un canard. </li></ul><ul><li>=> Eviter de tester le type dans les méthodes </li></ul><ul><li>Utiliser  respond_to :method    (au lieu de)  is_a? </li></ul>
  53. 53. Module Test::Unit <ul><li>Définir une série de test (new,mise à jour etc.)  </li></ul><ul><li>  </li></ul><ul><li>Vérifier la concordance entre le résultat attendu et obtenu </li></ul><ul><li>Utilisation des clauses : </li></ul><ul><li>assert_equal( expected, actual, [message] ) assert_not_equal( expected, actual, [message] ) </li></ul><ul><li>(nil ,match, instance_of) </li></ul><ul><li>Actions préalables </li></ul><ul><li>def setup </li></ul><ul><li>end </li></ul>
  54. 54. Attention !!!! <ul><li>a=&quot;eric&quot;  </li></ul><ul><li>b=a </li></ul><ul><li>puts a </li></ul><ul><li>puts b </li></ul><ul><li>a=&quot;german&quot; </li></ul><ul><li>puts a </li></ul><ul><li>puts b </li></ul><ul><li>  </li></ul><ul><li>b=a </li></ul><ul><li>a << ' eric'   (ou  a[0] = &quot;T&quot;  ) </li></ul><ul><li>puts a </li></ul><ul><li>puts b </li></ul>
  55. 55. Pour terminer <ul><li>Doc intégrée : rdoc </li></ul><ul><li>Serveur web de doc (gem server)  </li></ul><ul><li>Tests </li></ul>
  56. 56. Je n'ai pas parlé de: <ul><ul><li>Méthodes privées , publiques ou protégées </li></ul></ul><ul><ul><li>La gestion des exceptions </li></ul></ul><ul><ul><li>La gestion de règles de nommage des modules </li></ul></ul><ul><ul><li>Des modules 'enumerable' et 'comparable' </li></ul></ul><ul><ul><li>De YAML </li></ul></ul>
  57. 57. Manip <ul><li>Générer les tests  pour les classes Jeu , carte </li></ul>

×