Apprenons le Ruby




Introduction

Petit histoire sur la programmation en RUBY, ce logiciel a été créait en 1995 par Yukihiro Matsumoto.

Ce personnage était un peu frustré des langages existants qui étaient plus concentrés sur le langage machine que sur le langage humain, voilà pourquoi il a voulu inventé un langage de programmation que tout le monde pourrait comprendre.

Historique ce programme a commencé en:

  • Le 25 décembre 1998 pour la version 1.2.0
  • Le 13 août 1999 pour la version 1.4.0
  • Le 19 septembre 2000 pour la version 1.6.0
  • Le 4 août 2003 pour la version 1.8.0
  • Le 30 janvier 2009 pour la version 1.9.1(version stable de la branche)
  • Le 30 octobre 2011 pour la version 1.9.38
  • Le 24 février 2013 pour la version 2.0.0.9
  • Le 25 décembre 2013 pour la version 2.1.010
  • Le 19 août 2015 pour la version 2.2.3

Pour ceux qui veulent en savoir plus, vous pourrez aller voir le site suivant (https://fr.wikipedia.org/wiki/Ruby)

Utilisation de RUBY

L'utilisation de RUBY sera utilisé pour la gestion de scripts sur les serveurs, utilisé sur la création d'application avec le framework (http://rubyonrails.org), il peut être utilisé aussi pour la création d'application http://www.rubymotion.com/fr/

Rugby est un langage spécial car celui-ci est:



Installation de RUBY

Sur mac:

L'installation dans notre cas se fera sur un mac, le gros avantage d'utiliser un MAC c'est que logiciel RUBY est déjà présent sur votre machine, il suffira de taper la commande ruby —version dans une console afin de voir la version utilisée.

Console

Sur windows:


Si vous êtes sous windows, vous devrez passer par le site web http://rubyinstaller.org ensuite vous cliquez sur le bouton Download comme le montre la figure

Installation de Ruby sur Windows

Sur linux

Il suffira de lancer les commandes suivante sur une console Linux:

#sudo apt-get install python-software-properties

#sudo apt-add-repository ppa-brightbox/ruby-ng

#sudo apt-get update

Attention, si vous avez déjà installé votre logiciel de programmation python, normalement le fait de lancer uniquement la commande suivante devrait suffire:

sudo apt-get install ruby2.2



Lancement du logiciel RUBY

Maintenant que la version de Ruby est installé, nous allons commencé à taper quelques commandes pour ce faire, nous allons taper celles-ci dans le prompt prévu à cet effet.

Dans notre cas étant donné que je travaille sur une console MAC, nous allons lancer la commande irb (Interactive Ruby) dans la console.

Console IRB sur RUBY

Gestion des objets de base

Avant toute chose il est très important de comprendre que RUBY ne fonctionne qu'avec des objets, tout est objet que cela soit un entier, une chaine de caractère ou un booléen

On crée un entier directement sans déclarer de variable, car comme je l'ai précédemment dit tout est objet.

  • On crée un chiffre de type INT
  • On crée un objet chaine de caractères compris entre guillemets.
  • On crée une valeur BOOLEEN
Console IRB

Comme défini plus tôt, tout est objet, on peut jouer maintenant avec des méthodes, si l'on prend par exemple la string "Bonjour" que l'on souhaite écrire en MAJUSCULE, pour cela il suffira de noter la commande suivante:

Console IRB

Comme tout est objet, il suffit de savoir de quel type est votre objet, nous allons donc aller voir sur le site suivant(http://ruby-doc.org/core-2.3.1/) puis choisir le mot STRING qui correspond au mot bonjour, cliquer sur STRING afin d'avoir accès à la totalité des méthodes pour votre STRING.

Accès à la documentation RUBY

Maintenant que vous avez vu la manipulation des objets, on peut aussi créer des variables afin de stocker les valeurs de type INT, STRING, BOOL dans des variables.

Console IRB

Nota: le symbole + va permettre de concaténer la chaine de caractère plus la variable.

Ensuite vous pouvez écrire cela d'une manière différente afin de bien distinguer qui est qui, le fait d'utiliser le # avec une accolade ouvrante et fermante permet de distinguer la variable lors de l'utilisation de la méthode puts, c'est une variable déclarer dans RUBY #{nom}.

Console IRB

Remarque: lorsque vous verrez le retour NIL, cela est équivalent à NULL comme cela se fait pour d'autres langages.


Edition du code dans un logiciel

Logo du logiciel Sublime Text

Maintenant que l'on a vu comment exécuter quelques commandes nous allons utiliser un éditeur de texte ou IDE afin d'être plus cool lors de l'écriture, dans mon cas j'utilise le logiciel Sublime Text qui me convient parfaitement que cela soit pour du python, PHP ou JavaScript pour ne citer qu'eux, quoi qu'il en soit libre à vous de choisir l'éditeur de votre choix, pour ceux qui sont intéressés par l'éditeur Sublime Text, vous pourrez télécharger celui-ci à l'adresse suivante: https://www.sublimetext.com

L'exécution d'un fichier sera toujours fait par la console, placez-vous dans le répertoire ou se trouve vos fichiers puis taper simplement la commande suivante ruby exercice.rb par exemple (l'extension vous l'aurez compris finit par rb).

Ensuite nous allons étudier les deux méthodes les plus utilisés c'est à dire imprimer du texte ou récupérer une commande donné par l'utilisateur.

  • puts = permet d'afficher des valeurs (permet d'afficher une chaine de caractère)
  • putc = permet d'afficher un caractère.
  • gets = permet de récupérer des valeurs

Résultat dans la console

Voici maintenant un cas concret d'un test permettant de voir si le chiffre rentré par l'utilisateur est pair ou impair, disons que selon la méthode utilisé celui-ci renverra TRUE ou FALSE.

Puts avec la phrase en guillemets permettra d'afficher la phrase.

Ensuite on définit une variable ou l'on récupère ce que l'utilisateur aura taper, c'est à dire le chiffre 12 par exemple, ensuite on applique deux méthodes chomp (permet d'enlever les sauts de ligne) et la méthode to_i (permet de transformer un STRING en INT).

Pour finir on affiche la variable en utilisant une dernière méthode even?(qui permettra de renvoyer TRUE si la valeur tapée est PAIR et FALSE si celle-ci est IMPAIR)

Exercice RUBY

Dans l'exemple de cet exercice, nous avons pas testé si la personne rentré une valeur autre qu'un nombre, donc le prochain chapitre portera sur la gestion des conditions.


Gestion des conditions

Maintenant que nous avons vu les variables, afficher ou rentrer un nombre avec quelques méthodes travaillant sur les type STRING, il va être intéressant de se pencher sur les gestions des conditions
Donc on va continuer pour le prochain exercice avant entrer un chiffre si celui est PAIR, on affiche une phrase sinon on affiche que le chiffre est impair.


Exercice RUBY

Oups, j'ai complètement oublié de vous spécifier que la couleur grise dans mon code est du aux commentaires symbolisé par le symbole #, mais je suis sûr que vous le saviez déjà, bon au moins ça c'est fait.

Reparlons du code, il faut comprendre que l'on utilise IF puis ELSE et on finit par END et c'est tout simple non.
Maintenant imaginons que la personne rentre un nombre et on testera si le nombre rentré est trop petit, trop grand ou c'est le bon nombre.

Nous allons cette fois-ci utiliser les conditions IF ELSIF END afin de pouvoir créer le code.


Exercice RUBY

La personne rentre un chiffre, si celui-ci est plus grand que la variable valeur, on affiche plus grand si c'est plus petit on affiche plus petit, sinon la valeur est exacte on affiche BRAVO
Essayons un autre exercice, nous allons essayer de trouver si le mot tapé par l'utilisateur est un palindrome ou pas (voir définition française https://fr.wikipedia.org/wiki/Liste_de_palindromes_français)

Exercice RUBY

Voyons l'explication ensemble, on demande à l'utilisateur d'entrer un mot, on crée une variable ou l'on place le mot placé (deux méthodes "suppression CR puis on met le mot en minuscule"), puis on crée une variable ou on applique une méthode qui inverse le mot.
On vérifie que le mot inversé correspond bien au mot tapé par l'utilisateur.

Dernière chose, avant d'attaquer la gestion des tableaux, nous allons voir deux choses quis ont trés souvent utilisés dans la gestion des conditions, on verra donc deux tableaux (Opérateurs logiques et comparaisons).

Gestion sur les comparaisons

Comparaisons RUBY

Gestion sur les opérateurs logiques

Opérateurs logiques RUBY

Gestion des tableaux et HASH

Pour ceux qui connaissent déjà la programmation, seul le mot HASH ne doit pas parler à ces personnes.

Gestion d'un tableau (assimilé à un tableau indexé)

Pour créer un tableau il suffira de mettre vos valeurs entre crochets [ ] que vous pourrez placer dans une variable.

J'ai une liste de mots que je souhaite mettre dans une variable de type tableau, appelons celle-ci mots, on aura donc $mots = [](création de la variable de type tableau qui est pour l'instant vide)

Comme vous le savez une liste de mots dans un tableau va être indexé par un numéro
On commencera toujours par le numéro 0.

Maintenant que nous savons créer un tableau comme tout qui se trouve dans le code RUBY est un objet, vous l'aurez compris compris votre tableau est un objet, on peut donc faire appel à différentes méthodes afin de jouer avec cet objet.

Là aussi on trouvera les méthodes à appliquer à un objet de type array en consultant le lien suivant http://ruby-doc.org/core-2.3.1/Array.html

Pour parcourir un tableau il faudra se reporter au chapitre gestion des boucles afin de comprendre le fonctionnement, on utilisera la méthode each que nous verrons plus tard.

Exercice RUBY

Remarque: nous verrons le parcours des tableaux sur la gestion des boucles.

Pour ajouter un élément à un tableau il existe plusieurs solutions:

  • On peut noter mots = ["titi","tutu"], par exemple
  • On peut noter mots << "titi" et aprés mots << "tutu"
  • Incovénient de cette méthode c'est que l'on peut injecter qu'un seul éléménent à la fois.

Nota: le résultat sera le même sachant qu'il existe des méthodes afin de jouer avec les tableaux, pour cela reportez-vous au lien que j'ai noté ci-dessus.
Pour accédez à l'élément d'un tableau il suffira de noter puts mots [0], ce qui nous donnera la valeur titi

Il y a encore pleins de choses à dire sur les tableaux mais j'en dirais plus dans le module Exercices.
Pour ceux qui sont intéressés, aller voir le lien le site web suivant: http://ruby-doc.org/core-2.3.1/Array.html

Pour une petite liste de méthodes permettant de faire des actions sur les élements d'un tabeau, bien entendu cette liste n'est pas exhaustive.

Gestion de quelques méthodes sur les tableaux

Tableau en Ruby

Gestion d'un HASH (assimilé à un tableau associatif)

Gestion d'un HASH peut être assimilé à un dictionnaire comme cela est souvent utilisé en python, par contre pour ceux qui ne connaissent pas, nous allons voir un exemple, vous avez bien compris que dans le cas d'un tableau associatif, on a des clés équivalentes à des index 0, 1, 2 …, dans le cas des HASH, on pourra utiliser des noms à la place des clés, ce qui se sera plus pratique afin de savoir qui correspond à quoi.


Prenons le cas d'un livre ou l'on notera son nom, auteur, nbrePages, couleur par exemple on notera donc cela de la manière suivante:

Livre = {nom: Asterix, auteur: uderzo, nbre: 100, couleur:rouge }.
Nota: vous pourrez voir aussi une ancienne manière d'écrire qui est:

Livre = {"nom" => "Asterix", "auteur" => "uderzo", "nbre" => 100, "couleur" => "rouge" }

Exemple Hash en Ruby

Pour finir voici un autre site (http://devdocs.io/ruby/) ou vous pourrez trouver des informations forts utiles.


Gestion des boucles

Nous allons utiliser les boucles de type WHILE, UNTIL, FOR afin de créer le petit jeu que tout le monde connaît, vous taper un nombre compris par exemple entre 1 et 20, puis celui-ci vous dira si le nombre est plus petit ou plus grand que le nombre entré.

Lorsque celui-ci a trouvé il vous dit en combien de coups vous avez trouvé la réponse.

Exemple de boucle WHILE

Exercice sur les boucles WHILE en RUBY
Résultat sur les boucles WHILE en RUBY

Voyons mainteannt la même chose avec la boucle UNTIL

Exemple de boucle UNTIL

Je vous mets simplement le code ou seul le nom de la boucle a changé avec sa condition, until nombre == résultat, le reste ne change pas seul la condition de début change comme le montre l'exemple de code ci-dessous:


Résultat sur les boucles UNTIL en RUBY

Nous allons maintenant voir une boucle ou l'on pourra définir avec précision combien de fois celle-ci sera exécutée.

La boucle utilisée cette fois dans cette exercice, permettra de créer par exemple une table de multiplication, eh oui souvenir de l'école ou l'on avait les tables multiplications inscrits sur le cahier de brouillon enfin pour les plus vieux d'entres nous.

Nota: le fait d'utiliser le symbole ! permet d'inverser la fonctionnalité d'une condition.

        if !false
        	puts "OK"
        end
      

- Le résultat sera: si vrai alors on affiche OK

Nota: Le symbole ! peut être remplacé par la condition unless.

Exemple de boucle FOR

Dans cet exemple j'ai fait en sorte de vérifier que le nombre rentré est bien compris entre le min et le max dans la méthode range, deux variables min, max ont été créés afin de modifier les variables et non les valeurs dans la boucle.


Ex sur la boucles FOR en RUBY

Imaginons vous souhaitez sauter le Multiplication du nombre X3, pour cela il suffira de rajouter la ligne suivante avant le puts "#{table …., la notation suivante next if num == 3, on passe au prochain.

Voyons maintenant comment parcourir un tableau avec la méthode EACH,rapellez-vous on avez vu ce type de boucle lors de l'apprentissage des tableaux.

Exemple de parcours de tableau avec EACH

Imaginons nous souhaitons parcourir le tableau des éléments des tableaux de couleur

On aura donc le tableau décrivant les couleurs comme color = ["rouge", "jaune", "noir"], etc
 Ex sur la boucles EACH en RUBY

Remarque: une erreur à noter, ce n'est pas i mais col qui récupère l'index du tableau.

Pour chaque élément dans le tableau, on parcourt l'index 0 jusqu'à la fin du tableau que l'on injecte dans la variable col afin de la traiter par la suite.
Si vous notez à la place le mot clé each_index, cela vous permettra de lire des HASH.


Gestion des blocs

Vous venez découvrir précédemment la gestion des boucles avec les mots clés WHILE, UNTIL, FOR, EACH et ainsi de suite.

La gestion des blocs c'est un peu comme la gestion d'une boucle, dans une boucle on aura toujours les mots clés do et end.

Nota: une autre manière plus moderne peut être vue comme l'exemple ci-dessous:

Pour finir il existe la gestion des blocs c'est très souvent du code qui aura les mots do et end ou alors les accolades ouvrantes { et fermantes }, là aussi voici un petit exemple que j'ai crée ci-dessous avec la fonction times.

Maintenant imaginons que je souhaite afficher 10 fois j'aime le rubis, eh bien oui vous l'aurez deviner il existe une méthode permettant de dire pendant 10 fois tu affiches "j'aime le rubis.", cette méthode s'apelle times.

Bloc RUBY

Gestion des fonctions (méthodes)

Une fonction ou une méthode va permettre d'éviter de retaper du code afin de reproduire la même chose.
L'avantage des fonctions c'est que l'on pourra faire appel à elles, dés que l'on en aura besoin.

Sans que vous le sachiez, vous avez déjà utilisé des méthodes comme PUTS ou GETS et d'autres qui sont propres au langage RUBY.

Une méthode commence toujours par le mot clé DEF et fini toujours par le mot clé END.
Ensuite une fonction ou méthode peut faire appel à des arguments d'entrées ou non.

Console

Imaginons la méthode suivante j'envoie une phrase en minuscule et automatiquement lors de l'entrée dans la méthode, celle-ci ressortira en lettres capitales
L'avantage comme évoqué précdédemment c'est que vous pouvez faire appel à cette méthode autant de fois que vous le souhaité.


Exercice sur la méthode en RUBY

On a donc bien une transformation de la donnée de sortie comme est montré sur la figure ci-dessous.

Nota: la méthode return permet de retourner votre ligne de code, cependant si vous omettez de mettre la méthode RETURN, par défaut seul la dernière ligne sera retournée, petite subtilité de RUBY.

Il important de comprendre que vous pouvez mettre autant d'arguments que vous souhaitez dans la définition de la méthode, par contre lors de l'appel il faudra mettre autant de paramètres sinon vous aurez une erreur lors de l'exécution du code.

Prenons l'exemple 2 ou cette fois-ci nous allons définir plusieurs arguments en notant une valeur par défaut au deuxième argument.

Exercice sur la méthode en RUBY

Dernier point, vous souhaitez mettre plus d'arguments que de paramètres, comment peut-on faire?

C'est simple il suffira de mettre de noter votre argument précédé d'un astérisque(ex *autre).
Lorsque vous notez un astérisque, celui-ci se comportera comme un tableau, voyons avec l'exemple suivant

Exercice sur la méthode en RUBY

Maintenant que nous avons vu les fonctions, il va être intéressant de mettre cela en pratique par un petit TP.

Je fournis un liste de mots et je souhaiterais que la liste soit classé par ordre croissant ou décroissant pour cela je mettrai un deuxième paramètre qui récupéra TRUE ou FALSE.
On aura la liste de fruits [ "abricot", "pomme", "poire", "cerise", "banane", "fraise", "orange"]
.

Travaux paratiques sur la méthode en RUBY

Programmation Objet

Maintenant que nous avons vu la méthode procédurale, nous allons nous intéresser de plus près à la méthode OBJET.

Comme pour toute programmation objet, on retrouve une classe composée de ses attributs membre et ses méthodes membre.
Le mot clé afin de définir une classe sera class, ensuite vous devez définir le nom de la classe et enfin celle-ci se terminera par le mot end.

Gestion d'une class

Tout d'abord il est intéressant de savoir que tout objet, entier ou chaine de caractères à une classe pour savoir quelle est la classe de votre ITEM, il suffira de taper la commande class, par exemple si vous tapez la string "Bonjour".class, vous aurez en retour la class STRING.

Synoptique d'une classe en RUBY

Création d'une class

La création d'un nouvel objet ou une instanciation de la classe Utilisateur se fera par le biais du mot clé new, cette fonction va permettre de construire et initialiser en même temps votre objet.
On écrira de la manière suivante:

le nom de votre objet = Class.new

Nota: On aura donc comme résultat Utilisateur(équivalent à la classe)

Exercice sur les class en RUBY

Ensuite il va être intéressant de définir des attributs à cet objet comme "nom" et "prénom" par exemple.




Toute reproduction totale ou partielle est interdite sans l'accord de l'auteur.

Copyright © Le Concepteur (Qc) 2017