lundi, février 28, 2005

Iterateur

Comment parcourir un tableau ordonné? Par exemple de la manière suivante:
villes = [ "Toulouse", "Paris", "Lille", "Nice" ]
villes.sort.each do |ville|
    puts ville
end
Résultat:
C:\ruby\rubyscube>ruby iterator.rb
Lille
Nice
Paris
Toulouse

Manipulation de tableaux

Excellent, on peut manipuler des tableaux très facilement, exemple:
adresses = [ 
  [ 17, "Boulevard de la Sauvenière" ], 
  [ 2, "Place de la République Française"], 
  [ 19, "Rue de la Renaissance"] 
]
adresses += [ [ 3, "Rue de la paix" ] ]
adresses -= [ [ 17, "Boulevard de la Sauvenière" ] ]
puts adresses.sort

Résultat:
C:\ruby\rubyscube>ruby tableau_sort.rb
2
Place de la RÚpublique Franþaise
3
Rue de la paix
19
Rue de la Renaissance

vendredi, février 25, 2005

Tableau à 2 dimensions

Voila comment parcourir un tableau à 2 dimensions:
nombres = [[0, "zero"], [1, "un"], [2, "deux"], [3, "trois"]]
i = 0
while i < nombres.length
  j = 0
  puts "-> Nombre: "
  while j < nombres[i].length
    puts nombres[i][j].to_s
    j += 1
  end
  i += 1
end

Résultat:
C:\ruby\rubyscube>ruby tableaux_2dimensions.rb
->Nombre:
0
zero
->Nombre:
1
un
->Nombre:
2
deux
->Nombre:
3
trois

Condition if - else

C'est simple voilà comment faire:
puts "Combien font 2 + 2"
resultat = gets.chomp
if (resultat.to_i == 4)
  puts "bon résultat"
else
  puts "mauvais résultat"
end
Rem: on peut aussi utiliser elsif dans certains cas (à utiliser avec parcimonie).

Saisir des données

Pour récupérer les données saisies par un utilisateur:
puts "Quel temps fait-il?"
temps = gets
puts "Je suis content d'apprendre qu'il fait: " + temps

Résultat:
C:\ruby\rubyscube>ruby question.rb
Quel temps fait-il?
beau
Je suis content d'apprendre qu'il fait: beau
Rem: gets.chomp retire le \n (retour charriot) à la fin de la saisie.

Commentaires

Les commentaires en ruby commencent par #, exemple:
print "ligne1\n" # commentaire 1
print "ligne2\n"
# commentaire 2
print "ligne3"

Résultat:
C:\ruby\rubyscube>ruby commentaires.rb
ligne1
ligne2
ligne3

Constantes

Les contantes sont repérées parce qu'elles commencent par une majuscule, exemple:
C:\ruby\rubyscube>irb
irb(main):001:0> Constante = "ma constante"
=> "ma constante"
irb(main):002:0> Constante = "ma nouvelle constante"
(irb):2: warning: already initialized constant Constante
=> "ma nouvelle constante"
alors que dans le code suivant la variable n'est pas une constante donc ça marche:
irb(main):003:0> constante = "ma constante"
=> "ma constante"
irb(main):004:0> constante = "ma nouvelle constante"
=> "ma nouvelle constante"
Donc attention aux majuscules ça a de l'importance... Le mieux c'est de mettre tous les noms des constantes en majuscule, exemple:
irb(main):005:0> CONST = "ma constante"
=> "ma constante"
irb(main):006:0> CONST = "ma constante2"
(irb):6: warning: already initialized constant CONST
=> "ma constante2"

Afficher l'alphabet

Pour afficher l'alphabet sans saisir toutes les lettres:
letter = "a"
26.times do
  print letter + " "
  letter = letter.next
end

Résultat:
C:\ruby\rubyscube>ruby alphabet.rb
a b c d e f g h i j k l m n o p q r s t u v w x y z

Transformation de chaines de caractères

print "Bonjour\n".upcase
print "Bonjour\n".downcase
print "Bonjour\n".next
print "BoNjOuR\n".swapcase
print "Bonjour".reverse

Résultat:
C:\ruby\rubyscube>ruby string_methods.rb
BONJOUR
bonjour
Bonjous
bOnJoUr
ruojnoB

Nombre long et grand

On peut écrire les chiffres long de la manière suivante pour plus de lisibilité:
irb(main):014:0> 192_500_400_300_200_100
=> 192500400300200100
irb(main):015:0> 192_500_400_300_200_100 - 1
=> 192500400300200099

jeudi, février 24, 2005

Interactive ruby shell - IRB

On peut lancer ruby comme une ligne de commande en tapant:
C:/ruby/rubyscube>irb
irb(main):001:0> 1 + 1
=> 2
irb(main):007:0> 3-1
=> 2
irb(main):008:0> 2*2
=> 4
irb(main):012:0> 3.0 / 2.0
=> 1.5
C'est encore mieux que l'option -e!

mercredi, février 09, 2005

De l'interet de l'option -e de ruby pour les batchs

Sous Unix les batch ont des possibilités très étendues mais sous windows on atteind souvent très vite les limites du bon vieux Dos!

Mais on peut profiter de la puissance de ruby pour faire plus de chose dans ses .bat.

Prenons un exemple simple. Notre batch:
@echo off
ruby -e 'print "Voici l\'emplacement de mon jdk: %JAVA_HOME%"'
On obtient:
C:\ruby\rubyscube>batch_option_e.bat
Voici l'emplacement de mon jdk: C:\Sun\Java\j2sdk1.4.2_04

Ca permet de passer des arguments à un programme ruby sans avoir besoin de créer un fichier et de lui passer des paramètres!

Comment publier un lien sur le wiki de Ruby Garden

Si on essaye de taper un lien en http://quelquechose sur la page du wiki de rubygarden on est systématiquement redirigé vers cette page: External links.
Comment faire quand on est débutant en ruby ?!
Créer un fichier wiki_garden_link.rb, par exemple, contenant le code suivant:
  def fix_external_link(url)
    url.sub(/^[^:]+:/) { |p| p.upcase }
  end
  
  print fix_external_link("http://rubyscube.blogspot.com")

Le lancer en faisant sous dos:
C:\ruby\rubyscube>ruby wiki_garden_link.rb
Et voilà suffit mainteant de copier le lien correctement formaté dans la page.

Utilisateurs français

Voici une page avec les utilisateurs français de ruby.
Je l'ai mise à jour pour que les liens vers les sites web externes remarches, la page ne pouvait plus être éditée parce qu'ils avaient mis en place un système anti-spam de wiki.

SyntaxHighlighter pour Ruby

Vu que je compte mettre pas mal d'exemples de code sur ce site j'ai décidé d'utiliser l'excellent javascript: SyntaxHighlighter pour formater le code sur les pages.
Malheursement la syntaxe ruby n'est pas supportée alors je l'ai ajoutée ;)
J'ai envoyé le source au créateur j'espère qu'il va l'intégrer dans le zip à télécharger :)
Si ca interesse quelqu'un je peux lui envoyer par zip la version modifiée.
Envoyez moi un mail à cette addresse (ne soyez pas trop pressé svp, je ne relève pas cette boite tous les jours)

Un petit exemple d'utilisation (ce code est tiré des exemples fournit avec Ruby):
#!/usr/bin/env ruby

require 'logger'

logfile = 'shifting.log'
# Max 3 age ... logShifting.log, logShifting.log.0, and logShifting.log.1
shift_age = 3
# Shift log file about for each 1024 bytes.
shift_size = 1024

log = Logger.new(logfile, shift_age, shift_size)

def do_log(log)
  log.debug('do_log1') { 'd' * rand(100) }
  log.info('do_log2') { 'i' * rand(100) }
  log.warn('do_log3') { 'w' * rand(100) }
  log.error('do_log4') { 'e' * rand(100) }
  log.fatal('do_log5') { 'f' * rand(100) }
  log.unknown('do_log6') { 'u' * rand(100) }
end

(1..10).each do
  do_log(log)
end

puts 'See shifting.log and shifting.log.[01].'
update déc 2007: Je ne l'utilise plus maintenant and syntaxhighlighter à beaucoup changé depuis que j'ai fait ce post...

mardi, février 08, 2005

Bonjour le monde! (super simple)

Avec l'installation de ruby vous trouver plusieurs Hello word! mais on peut faire encore plus simple!

Créer un fichier hello_simple.rb (et oui les fichiers ruby se finissent par .rb !)

Avec bloc note ou quelque chose dans le genre tapez:
print "Bonjour le monde!"
Enregistrer

Hop! sous dos:
C:\ruby\rubyscube>ruby hello_simple.rb

Comme par magie:
C:\ruby\rubyscube>ruby hello_simple.rb
Bonjour le monde!
C:\ruby\rubyscube>

Si c'est pas simple çà!

Installer ruby

Rien de plus simple, un projet RubyInstaller existe juste pour vous simplifer la vie sous Windows!
Vous trouver un installer qui va s'occuper de tout.

Pour des raisons de simplicité je l'ai installé sous c:\ruby (plus rapide à taper sous dos au cas où).

Bienvenue sur Ruby’s Cube

Ce site est consacré à l’apprentissage de Ruby le langage de programmation pas le rubik’s cube ;-)
D’ailleurs si vous vous êtes égaré vous pouvez retrouver votre cube à facette préféré sur ce site.

Plus sérieusement, j’avais besoin de connaître un autre langage que Java notamment pour faire de petits programmes rapidement pour manipuler des chaînes de caractères et du texte.
  • J’ai pensé à Perl mais la synthaxe devient vite complexe.
  • J’ai hésiter entre Python et Ruby, Ruby étant plus récent j’ai opté pour celui-là ! (et voilà)

Ce blog est donc mon évolution au jour le jour dans le monde solitaire des mines de ruby :-)

Vous trouverez des exemples de codes avec des explications.

Pourquoi en français, 3 raisons:
  • j'ai déjà un blog personnel en anglais
  • il y a déjà pleins de très bon sites anglais qui traitent le sujet
  • mon but est de m'amuser et si possible de faire un peu plus connaître Ruby en france

Je vous conseille de connaître plus d'un langage de programmation, pour votre culture personnel mais aussi parce que certains langages sont plus adaptés et plus efficaces que d'autres pour certaines taches.
Ce conseil je l'ai lu dans l'excellent livre Pragmatic Programmer que je vous conseille aussi.

Allez on commence!