• Share
  • Email
  • Embed
  • Like
  • Save
  • Private Content
Ruby
 

Ruby

on

  • 1,583 views

Une introduction au langage Ruby

Une introduction au langage Ruby

Statistics

Views

Total Views
1,583
Views on SlideShare
1,578
Embed Views
5

Actions

Likes
0
Downloads
8
Comments
0

3 Embeds 5

http://www.linkedin.com 3
http://hkairi.scriptmania.com 1
http://www.hkairi.scriptmania.com 1

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

    Ruby Ruby Document Transcript

    • Ruby, c'est quoi comme langage ? Ruby c'est un langage informatique, au même titre que PHP, Python, Java, C, C++, l'ActionScript... Parmis tous ces langages, trois familles existent, les langages compilés, les langages interprétés et les langages intermédiaires. Pour information voici comment se répartissent certains langages que vous connaissez surement : • Langages compilés : C, C++... • Langages interprétés : PHP, PERL... • Langages intermédiaires : Java, ActionScript... Pour en savoir plus sur les différences entre ces trois familles de langages, je vous invite à lire l'explication de commentcamarche.net dont la vulgarisation est excellente (je m'étais lancé dans une explication, mais faire clair, simple et concis à ce sujet est vraiment compliqué). Puisque que c'est de lui qu'il s'agit, Ruby est un langage interprété, donc de la même famille que PHP, c'est d'ailleurs lui que j'utiliserais dans les comparaisons à venir puisqu'il est surement le langage interpreté le plus connu (au moins des lecteurs de ce blog). D'ailleurs contrairement à la croyance qui veut que Ruby soit un truc tout nouveau qui tombera bientôt à l'eau, Ruby est en fait aussi quot;vieuxquot; que PHP, leur première publication ayant toutes les deux eu lieu en 1995. Attention toutefois, Ruby est très différent de PHP ! Pourquoi ? Orienté Web / Peut tout faire hkairi@hotmail.com, 77 366 77 92 Page 1
    • PHP a été crée par un développeur Web pour le développement Web, les bases de PHP viennent de la nécessité pour son créateur Rasmus Lerdorf, d'enregistrer la fréquentation sur son CV... Ruby quant à lui, a été crée par Yukihiro Matsumotow dit quot;Matzquot; en s'inspirant notamment de PERL et Smalltalk, cela veut principalement dire que Ruby a été écrit pour être un langage applicatif quot;à tout fairequot; en allant du petit script de classement de vos images aux bibliothèques d'interfaces graphiques (il est en cela comparable au C, C++, Java...). Non-Objet / Objet Dans un langage objet, les objets répondent à des messages. exemple : l'objet maVoiture reçoit un message lui demandant d'avancer donne ma_voiture.avance() PHP, lui, n'est pas un langage (entièrement) orienté objet. D'ailleurs à l'origine PHP n'est pas du tout un langage objet. Même si depuis la version 5, tout cela a bien évolué. Toutefois, en PHP, pour mettre en majuscule un mot ou une phrase, on écrira : strtoupper(quot;jonathanquot;) On voit bien ici que quot;l'objetquot; traité est passé à une méthode au lieu de recevoir un message. Si vous n'avez pas encore compris, regardez ce que cela donne en Ruby. quot;jonathanquot;.uppercase() Ici c'est bien l'objet (le string) qui reçoit le message lui indiquant de se mettre en majuscule. Une des particularités de Ruby est qu'absolument tout (ou presque) est Objet. C'est la raison pour laquelle j'ai pu écrire quot;jonathanquot;.uppercase() sans avoir auparavant créé une instance de String... Ruby quot;comprendquot; automatiquement que ce qui est entre deux guillemets est un string et répond donc aux méthodes de cette classe. On touche là une autre particularité de Ruby, le quot;Duck Typingquot; ou quot;Typage Canardquot; (si ça marche comme un canard et si ça cancane comme un canard, alors ce doit être un canardquot; ). Le principe est donc de ne pas forcer le programmeur à utiliser une classe donnée, mais de l'obliger à mettre les données dans le format que nous voulons utiliser. J'ai écrit quot;jonathanquot; entre guillemets, Ruby comprends que cet objet est un String. Si j'écris [1, 14, 15] ce sera un Array (Tableau), {1=>quot;aaaquot;, 2=>quot;bquot;} sera un Hash (ou tableau associatif)... Bizarreries / P.O.L.S. hkairi@hotmail.com, 77 366 77 92 Page 2
    • Une autre particularité de Ruby est de suivre au maximum le P.O.L.S ou quot;Principle of Least Surprisequot; (quot;Principe de moindre surprisequot;). Cela peut sembler une évidence, mais en gros cela veut dire que les méthodes font ce que leur nom laisse penser qu'elles font. Pourtant, lorsque l'on lit la documentation de PHP, on se rend compte que ce n'est pas toujours le cas : array_merge( array $array1 [, array $array2 [, array $... ]] ) Merges the elements of one or more arrays together so that the values of one are appended to the end of the previous one. It returns the resulting array. If the input arrays have the same string keys, then the later value for that key will overwrite the previous one. If, however, the arrays contain numeric keys, the later value will not overwrite the original value, but will be appended. If only one array is given and the array is numerically indexed, the keys get reindexed in a continuous way. La même chose en Ruby (méthode merge de la classe Hash) : hsh.merge(other_hash) Returns a new hash containing the contents of other_hash and the contents of hsh, overwriting entries in hsh with duplicate keys with those from other_hash. Vous voyez la différence, n'est ce pas [private joke] On peut aussi en faire la démonstration avec AS3 et Ruby pour retourner un string : AS3 : myString.split('').reverse().join('') Ruby my_string.reverse() [/private joke] Voilà pour la première introduction, j'espère vous avoir donner envie d'en savoir un peu plus et je vous monterais bientot les rudiments de la syntaxe Ruby (certes un peu étrange pour un développeur PHP ou Flash, mais tellement sexy à l'usage !) Un peu de syntaxe Ruby... hkairi@hotmail.com, 77 366 77 92 Page 3
    • Alors, essayons d'écrire un peu plus de Ruby... Pour commencer, si vous souhaitez tester ces exemples sur votre poste je vous invite à installer Ruby sur votre machine. Pour les autres, vous pouvez tester en ligne ou vous contenter de lire :). Pour l'installation, les Linuxiens se débrouillerons avec leur gestionnaire de paquets pour installer les paquets ruby irb et rdoc. Pour les utilisateurs de Windows, je vous invite à utiliser le one-click install qui vous donnera tout ce qu'il faut pour commencer. Comme je le disais dans le précédent article, la syntaxe de Ruby peut étonner au premier abord, mais sa lisibilité en est fortement améliorée. Regardons ces quelques lignes tirées ou inspirés du fameux quot;Why's (poignant) guide to Rubyquot; et de Softiesonrails pour s'en convaincre. 5.times { print quot;Hello!quot; } Essayons de lire ce bout de code en anglais, Five times print Hello, je vous laisse deviner ce qu'il fait Un autre exemple : exit unless quot;restaurantquot;.include? quot;auraquot; En anglais lu : Exit unless restaurant includes aura Avec cette ligne, notre programme va se terminer (exit) sauf si (unless) le mot quot;restaurantquot; contient (include?) le mot quot;auraquot;. On retiendra de cette ligne le unless , assez rare dans les autres langages qui est en fait l'inverse du if ainsi que l'utilisation très judicieuse du point d'interrogation dans le nom de méthode include? pour signifier une question, un test (est-ce que quot;restaurantquot; contient quot;auraquot; ?. Vous aurez déduis que les méthodes ce terminant par un point d'interrogation retourneront normalement true ou false. Allez écrivons maintenant une petite méthode (ou fonction si vous préférez, mais normalement en Programmation Orientée Objet on dit méthode). Imaginez un appareil photo, écrivons la méthode qui prend une photo. Celle-ci vérifiera si l'appareil est allumé et s'il reste de la place sur la carte mémoire. def capture_clicked capture_image if @camera.on? && @camera.memory_available? end Comme vous pouvez le constater, une méthode Ruby s'écrit avec def et end. Pour le reste c'est encore une fois plutôt standard, vous remarquerez toutefois qu'en Ruby, on peut écrire la clause if à la fin de l'instruction ce qui améliore la lisibilité. En effet, ce que l'on veut faire dans notre cas (99% du temps) c'est capture_screen, il est hkairi@hotmail.com, 77 366 77 92 Page 4
    • donc logique de le voir tout dès le début de la méthode et pas encadré par un if comme ce serait le cas dans beaucoup d'autres langages. Imaginons maintenant qu'on vous demande une méthode qui prendrai des photos en mode rafale tant qu'il y a de place, vous écrieriez alors simplement : def rafale capture_image while @camera.memory_available? end Allez un dernier exemple pour la route, écrivons une petite classe Etudiant. Celui-ci aura un nom, un prénom et un âge. on a déjà tous écrit un truc du style avec une classe avec trois propriétés et leurs quot;gettersquot;. <br />class Etudiant { private $prenom; private $nom; private $age; function Etudiant(prenom, nom, age) { $this->prenom = prenom; $this->nom = nom; $this->age = age; } function prenom() { return $this->prenom; } function nom() { return $this->nom; } function age() { return $this->age; } } C'est moche n'est-ce pas ! Et bien en Ruby cela nous donne : class Etudiant attr_reader :prenom, :nom, :age def initialize(prenom, nom, age) @prenom, @nom, @age = prenom, nom, age end end Alors, vous voyez bien que le mot sexy n'était pas exagéré pour décrire la syntaxe de Ruby hkairi@hotmail.com, 77 366 77 92 Page 5
    • Pour information, si l'on veut aussi les quot;settersquot;, en PHP ce sera trois nouvelles fonctions en Ruby on remplacera juste : attr_reader :prenom, :nom, :age par attr_accessor :prenom, :nom, :age et si l'on veut mettre un peu de logique dans le getter, pour récupérer le prénom avec une majuscule au début, il suffira de l'écrire à la main def prenom @prenom.capitalize end Vous vous demandez quand même surement ce que sont ces @ que l'on peut voir devant certaines variables. Ce signe sert à distinguer les variables d'instances (les attributs d'un objet) des variables locales (à une méthode ou autre). Il existe également des variables notées @@ma_variable, celles-ci sont des variables de classes, elles sont donc attachées à la classe et non à son instance. Regardez ce petit exemple pour mieux comprendre : class Voiture @@nom = quot;Renault Clioquot; attr_accessor :nom def initialize(nom) @nom = nom end def nom @nom.capitalize end def se_presente puts quot;Je suis une quot;+@@nom+quot; surnomée quot;+nom end end ma_voiture = Voiture.new(quot;titinequot;) ma_voiture.se_presente Cet exemple va afficher Je suis une Renault Clio surnommée Titine. Vous remarquerez au passage que je peux appeler les méthodes sans les parenthèses, celles-ci sont optionnelles et les conventions veulent qu'on ne les écrive pas quand il n'y a pas de paramètres. Pour résumer pour les habitués à PHP : nom équivaut à $nom hkairi@hotmail.com, 77 366 77 92 Page 6
    • @nom équivaut à $this->nom @@nom équivaut à self::$nom Alors, c'est qui qui a la plus belle syntaxe ? Supprimé : grosse J'espère que vous avez encore appris plein de belles choses sur Ruby et je m'excuse d'avance pour les larmes versées lors de votre prochaine tentative de codage en PHP, ActionScript, Cobol ou Fortran . hkairi@hotmail.com, 77 366 77 92 Page 7