Introduction à Ruby

puts "Bonjour tout le monde"

Aujourd’hui je vais vous parler d’un jeune langage de programmation pas comme les autres. Il a fêté ses 20 ans le 24 février 2013. Sa version 2.0.0 est sortie en release le même jour.

Ce langage m’a facilité ma vie de développeur depuis que je l’ai découvert ça fait maintenant 5 ans (depuis 2008). Ce qui m’a le plus séduit chez ce langage c’est sa simplicité et le Framework Ruby On Rails (développé par David Heinemeier Hasson) pour les développements d’application Web et le Framework Sinatra (développé par Blake Mizerany) qui est vraiment simple pour implémenter des Services Web. Ne vous inquétez pas, je vous parlerai de tous ça dans mes articles à venir 🙂

Maintenant passons à la présentation de ce langage et je vous montrerais quelques bouts de code 🙂 Vous allez adorer (hihi)

C’est quoi le langage Ruby

Il ne faut pas le confondre avec l’actrice Ruby de je ne sais quel film. Le Ruby dont je vous parle est un langage de programmation interprété, libre, 100% orienté objet, … Il est développé par le japonais Yukihiro Matsumoto “Matz” qui a été honoré du prix du logiciel libre 2011.

Installation

  • Si vous êtes sous linux
    • téléchargez le code source ici : http://www.ruby-lang.org/fr/downloads/
    • ensuite vous le décompresser
    • vous ouvrez votre terminal
    • vous vous déplacer dans le dossier
    • vous tapez les commandes suivantes
      • > ./configure
      • > make
      • > make install
  • Si vous êtes sous windows vous pouvez télécharger ruby installer ensuite il suffit de faire du “suivant, suivant, …, terminer :)”

 

voilà maintenant passons au code

les bases de ruby

Ruby vient avec un irb (Interactive Ruby) qui est un interpréteur interactif de commande Ruby.

Vous pouvez le lancer avec la commande

> irb

après vous aurez un truc du genre :

irb(main):001:0>

Voilà maintenant vous pouvez discuter avec votre ami Ruby 🙂 (si vous ne voulez pas installer Ruby vous pouvez le tester sur votre navigateur http://joshnuss.github.io/mruby-web-irb/ mais ce n’est pas complet).

On va commencer par le fameux ‘Hello world’

irb(main):001:0> puts “Hello World”
Hello World
=> nil

‘puts’ est une commande pour afficher.

les variables

irb(main):001:0> a = 14
=> 14
irb(main):002:0> b = 11
=> 11
irb(main):003:0> puts "a + b vaut " + (a+b).to_s
a + b vaut 25
=> nil

Ici nous avons créé deux variables a et b en leur affectant les valeurs respectives 14 et 11 après nous avons affiché la somme avec la méthode puts. Nous avons calculé la somme, la transformer en chaîne de caractères avec la méthodes to_s pour que la concaténation avec la chaîne de caractère “a + b vaut “ marche. La concaténation se fait avec l’opérateur ‘+’.

On vient d’apprendre beaucoup de choses hein, okey je vais faire doucement 😀

les chaînes de caractères

irb(main):001:0> s = gets
coucou
=> "coucou\n"
irb(main):002:0> s.chomp
=> "coucou"
irb(main):003:0> s2 = gets.chomp
cou
=> "cou"
irb(main):004:0> puts s2 * 2
=> "coucou"

Qui a compris ?

Qui n’a pas compris ?

Ok je vous explique.

gets est une méthode qui permet de demander à l’utilisateur de saisir une valeur comme le readln de Pascal ou le cin de C++ mais il y’a une petite différente, si vous êtes un bon observateur vous pouvez le voir : la frappe sur la touche [ENTER] est incluse dans la chaîne de caractère. Mais ne vous inquiétez pas Matz à ajouté une méthode qui permet de l’enlever facilement => chomp.

Donc au lieu de faire les traitements séparément vous pouvez demander une valeur à l’utilisateur avec gets.chomp comme je l’ai fait à la troisième instruction.

La multiplication d’une chaîne de caractères par n fait une répétition de la chaîne n fois comme le montre l’exemple précédent.

Tout à l’heure je vous ai montré comment faire une concaténation avec l’opérateur ‘+’, mais s’il y a beaucoup d’élément à concaténer ça devient ennuyant. Une autre façon de concaténer c’est de mettre la variable ou bien l’expression dans la chaîne même entouré de #{...} mais dans ce cas il faut utiliser les guillemets au lieu d’apostrophes pour délimiter la chaîne sinon l’expression ne sera pas interprétée. Ok un exemple -_-

irb(main):001:0> pseudo = "scicasoft"
=> "scicasoft"
irb(main):002:0> puts "Bonjour #{pseudo} !"
"Bonjour scicasoft !"
=> nil

Voilà, vous êtes content maintenant ?

Voici d’autres méthodes intéressantes pour les chaînes de caractères :

  • to_i : transformer un chaîne en entier
  • to_f : transformer un chaîne en réel
  • length : retourne la taille d’une chaîne
  • upcase : convertit une chaîne en majuscule
  • downcase : le contraire de upcase 😛
  • capitalize : met en majuscule le premier caractère de la chaîne
  • reverse : inverse la chaîne

Tableaux

irb(main):001:0> mon_tableau = ["a", 12, "b"]
=> ["a", 12, "b"]

Nous venons de créer une tableau 🙂 Non je ne me suis pas trompé le tableau est mixte. Un seul tableau peut contenir des entiers, réels, chaînes et même des tableaux.

Il y’a aussi des méthodes très intéressantes pour les tableaux :

  • shuffle : permet de mélanger le contenu du tableau
  • reverse : inverse le tableau
  • sort : tri le tableau
  • count : renvoit sa taille
  • first : renvoit le premier élément du tableau
  • last : renvoit le dernier élément
  • empty? : vérifie si le tableau est vide

C’est pas tout. On peut concaténer 2 tableaux avec l’opérateur ‘+’, une méthode ‘uniq’ qui permet d’enlever les répétitions, l’opérateur ‘-’ qui calcule la différence entre deux tableaux, …

les structures de contrôle

  • if … else … end
reponse = 12
if (reponse == 42)
  puts "Bingo, LA réponse !"
else
  puts "Essaie encore"
end
  • unless … end

C’est le contraire de if (sauf si)

j = rand(10)
unless (j <= 5)
  puts "j vaut plus de 5"
end
  • while … end
puts "compte de 1 a 10"
i = 0
while (i < 10)
  i += 1
  puts i
end
  • for … end

la boucle for s’applique à des éléments de collections : list, array, ...

puts "compte de 1 a 10"
for e in (1..10)
  puts e
end
  • each
puts "compte de 1 a 10"
(1..10).each { |elt1|
  puts elt1
}

création d’une fonction

def say_hello
  puts "hello"
end

création d’une classe

class Personne
  def say_hello
    puts ‘hello’
  end

  def self.who_are_you?
    puts “je suis une personne”
  end
end

une méthode précédée de self. est une méthode de classe.

Les gems

Comme la plupart des langages de programmation actuels, Ruby s’appuie sur tout un écosystème de librairies.

Ces librairies sont bien souvent disponibles sous la forme d’une gem. RubyGems est le « gestionnaire de paquet de Ruby » permettant de télécharger et d’installer ces gems. Il facilite également leur création et leur partage. Il s’agit donc d’un équivalent à Apt ou Homebrew, mais pour Ruby spécifiquement.

utilisation

  • recherche d’une gem
gem search -r html

l’option r (remote) permet d’inspecter le dépot distant http://rubygems.org.

  • installer une gem
gem install djanoa

cette commande permet d’installer la gem djanoa

  • lister toutes les gems
gem list -r

permet de lister toutes les gems disponible

gem list

permet de lister les gems en local seulement

  • help

Une aide succincte est disponible directement en ligne de commande

gem help

C’est “tout”

Voilà j’ai assez parlé maintenant je vous laisse quelques liens pour si vous voulez approfondir :

Après je vais essayer de vous présenter quelques gems intéressants donc restez connecté 😉

([*(0..9)]+[*('a'..'z')]).shuffle[0..9].join