Je me suis mis à rédiger ce petit cours, et une fois finis, j'ai remarqué que metroid_prime avait déjà posté un document expliquant tout ca.
Mais bon, vu que j'y ai passé la matinée je le post quand même
Libre au staff de le virer ou pas.
/!\ C'est long ^^
Bon, il a souvent été dis qu'il manquait des tutos sur la programmation en Ruby.
L'apprenant actuellement, je ferais un petit cours sur ce que j'apprendrais, pour que
vous puissiez par la suite l'apprendre aussi.
Je ne pense pas faire des cours parfait et sans faute, mais c'est mieux que rien non ?
Pour tester vos script, je vous conseil d'utiliser Sublimetext2 qui est pas mal pour écrire votre code, et il vous faut aussi l'invité de commande windows.
pour l'invité de commande, démmarer / taper "CMD".
Puis, pour tester votre code, dans l'invité de commande, taper l'adresse de votre fichier.
exemple :
C:\Jin\Ruby\test.rb
Toujours enregistrer ses fichiers en " .rb " rb => Ruby ^^
Alors pour commencer, voici quelque methode :
.to_i : (integer/ int) Il convertis une chaine en entier.
Donc, si vous créer une variable avec dedans du text.
- Code:
-
variable = "salut"
variable.to_i => vous renvera 0
Si la variable contient du text et des chiffres
- Code:
-
Variable = "22salut"
variable.to_i => vous renvera 22
En revanche, si vous faites variable = "salut22"
Il vous renvera 0. La lecture se faisant de gauche à droite, et le début étant une
chaine de caractère, il en conclus que la variable vos 0.
.to_s : Il convertis en string.
Exemeple
- Code:
-
variable = bobo30
variable.to_s => vous renvera "bobo30"
.to_f : (float) il convertit une chaine en réel.
variable = 10 => vous revera 10.0
PLutot utile si il vous est ammené à faire des division par exemple.
Si vous faites :
- Code:
-
5/2 => il renvera 2
Or, si vous faite :
- Code:
-
variable = 5.to_f/2 => il vous renvera 2.5
Pas besoin de mettre les 2 en réel, si l'un est en réel, l'opération se fera en réel.
.upcase : Il convertit une chaine de caractère en majuscule.
- Code:
-
variable = "uesh uesh"
variable.upcase => "UESH UESH"
( histoire d'être encore plus crainios
)
.updown : Marche comme upcase, sauf que lui converti en minuscule.
.swapcase : Il inverse les majuscule et minuscule dans une chaine de caractère.
- Code:
-
variable = "UeSh UeSh lEs bOulZor"
variable.swapcase => renvoie "uEsH uEsH LeS BoULzor"
.capitalize : Il met le premier caratère d'un chaine en majuscule
exemple :
- Code:
-
variable = "ca manque majuscule dans cette phrase."
variable.capitalize => "Ca manque de majuscule dans cette phrase."
.reverse : Il permet d'inverser les chaine.
exemple :
- Code:
-
variable = "salut"
variable.reverse => "tulas"(dans le cul )
ensuite, il y a 2 opérateurs, j'ai vaguement compris leur utilisation, mais je connais quelqu'un
qui va vite venir critiquer / corriger
Donc c'est pour les opératuer ! et ?
Si je dis pas de connerie, "!" permet d'agir sur tout l'objet
exemple :
- Code:
-
var = "salut", var2 = var, var = var.reverse
ici var2 vaut "salut"
Or si vous faites :
- Code:
-
var = "salut", var2 = var, var = var.reverse!
var2 sera égale à var, soit "tulas"
Un peu flou peut être, mais les questions sont là pour aider ^^
Et pour l'opérateur "?"
Il permet de renvoyer un booléen, mais je ne n'ai pas encore eu l'occasion de l'utiliser.
J'éditerais quand je saurais :p
Maintenant, nous allons passer au condition.
Alors les conditions, vous devez savoir ce que c'est, RM vous propose d'en faire,
et le principe est exactement le même. Sauf que là il y a pas de bouton à cliquer :p
Alors pour faire une confition, nous allons utilisé "if" et "unless".
"if" = "si"
"unless" = est l'inverse de "if" on peut le traduire par "A moins que"
Sous forme littéraire ca donnerai :
Si ceci vaut ca, faire ca.
A mois que ceci vaut ca faire ca.
Une condition retourne en fait un booléen
condition en "if" : Si ca est vrai(true) faire ca
condition en "unless" : A mois que ca est faux(false) faire ca.
Passons maintenant au code.
Nous allons retourner un message si la variable X vaut 3.
- Code:
-
X = 3
if x == 3
print " X vaut bien 3"
end
Une condition, une boucle ou methode se termine toujours par un "end"
- Code:
-
if
action
end
while
Action
end
def method()
action
end
"print" permet d'afficher ce que contient une variable ou y écrire du test.
Pour Unless
- Code:
-
Unless x != 3
"x vaut bien 3 "
end
Le Unless est un peu tordu, mais il est parfois plus adapté d'utiliser unless plutot que if.
Petit info pour les opérateurs de comparaison.
http://www.gladir.com/CODER/RUBY/operator.htm
Pour les conditions, il existe aussi les mots "else" et "elsif"
"else" = Sinon
"elsif" = sinon si (Sachez que l'on peut mettre autant de elsif que necessaire"
Mais il existe les switchs qui permettent d'alleger vaut code et éviter d'avoir 5-6 elsif de suite. Mais je n'en parlerais pas maintenant =) )
Pour IF :
- Code:
-
If x == 3
print " X vaut 3"
elsif x == 2
print " X vaut 2"
else
print "x ne vaut ni 2 ni 3"
end
Pour Unless
Alors, je sais qu'il existe un elsunless, mais je n'ai pas réusis à le faire fonctionner comme pour le elsif ... donc encore quelque chose que j'éditerais plus tars =)
Sachez que vous pouvez simplifier vos condition comme ceci :
return "x vaut 3" if x == 3
return "x vaut 2" if x == 2
et donc pas besoin de "end" =)
Sauf que les else / elsif ne sont pas possible ainsi ^^
Bien, nous allons maintenant passer au boucle.
Tout comme les conditions, vous en avez déjà vu sur RM.
Le principe est toujours le même.
Une boucle permet de faire une action jusqu'à ce que la condition de boucle est respecter.
Exemple avec une boucle en while ("tant que") :
Tant que x != 10
ajouter 1 à la variable x
fin
Ce qui donnerai en code :
- Code:
-
x = 0
while x < 10
x +=1
end
print "la variable x vaut " +x.to_s
"+x.to_s" le "+" permet en fait de dire de lié le contenu de la variable avec le text.
On peut aussi faire x.to_s+ "est la valeur de la variable x "
Pourquoi ai-je mis ".to_s" ?
Tout simplement parce la fonction print lis en format "string" et votre variable étant
en int(integer) il ne comprend pas. tout simplement =)
Voyons maintenant la boucle en for.
La boucle for prend un énumérable en argument contrairement à la boucle while qui prend une
expression.
While => fait ca tant que ca n'est pas comme ca.
for => liste moi tout ca et ensuite sort
Donc l'utilisation de "for" se fait pour lister un tableau.
Exemple :
- Code:
-
tableau = ["a","b","c"]
for i in tableau
print i "\n"
end
Retourne => a
b
c
"\n" <= sert à faire un retour à la ligne.
Alors petite explication quand même.
for i in tableau.
alors "i" est une variable local.
Ce qui veut dire qu'elle n'égistera que pour cette boucle.
A moins que vous fassiez
- Code:
-
tableau = ["a","b","c"]
var = "0"
for i in tableau
var = i
end
Mais du coup j ne sera = qu'à "c" ^^
Donc
- Code:
-
tableau = ["a","b","c"]
tableau2 = []
for i in tableau
tableau2 << i
end
print tableau2 => renvoie ["a","b","c"]
Je vous expliquerai les nouveauté après.
donc on a vu que "i" était une variable local. ( vous pouvez lui donner le nom que vous voulez)
donc boucle sous forme littéraire dirait :
pour chaque "i" de tableau, mettre "i" dans tableau2.
Alors, "<<" qu'est ce que c'est que ces truc là ?
ce truc là pour permet d'ajouter i à la fin du tableau.
vous pouvez aussi écrire : tableau.push(i) aussi, mais c'est quand plus court d'utiliser "<<"
tableau = ["a","b","c"]
tableau2 = []
ici tableau2 = []
est un tableau vide.
mais qui sera pleins une fois notre boucle for terminé =)
On peut aussi faire ceci :
- Code:
-
tableau = []
for i in 0..10
tableau << i
end
print tableau => [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
Il ne faut pas oublier qu'on part toujours de 0
donc le chiffre 3 du tableau est égale à la cellule numéro 4.
0..10 <= fait une liste de 0 à 10
0...10 <= fait une liste de 0 à 9
Comme quoi il y pas qu'à l'école qu'un point change tout
donc nous avons finis avec les boucles.
Il y a bien sur d'autre type de boucle qui existe, mais on se contentera de ces deux là.
Aller, une dernière petite methode à savoir, et après ce sera là pratique =)
la methode "gets.chomp"
Cette methode vous permet de faire une saisis de text.
variable = gets.chomp
print variable => affiche votre saisis =)
maintenant nous allons voir comment créer une methode.
Lorsque l'on créer une methode, il faut commencer par le mot "def" pour définition.
suivit du nom de la methode, puis ses paramètre.
Exemple :
- Code:
-
def maPremiereMethode (argument1, argument2, etc)
action de la methode
end
Alors nous allons créer une methode toute bête, une methode qui met le mot
inséré en majuscule. ( j'ai dis que ce serai vraiment tout bête)
- Code:
-
def methodTableau(mot)
mot = mot.upcase
end
mot = gets.chomp.to_s
print methodTableau(mot)
C'était seulement pour vous montrer comment créer une methode et comment l'appeler.
car on aurait très bien pu faire
mot = gets.chomp.to_s
print mot.upcase
Qui est carrément plus court ^^
Donc une petite explication quand même.
# Ici on défini le nom de la methode et son argument.
def methodTableau(mot)
#ici on lui dit que l'argument mot doit être convertis en .upcase (majuscule)
mot = mot.upcase
end #fin de la method
mot = gets.chomp.to_s #ici la saisis du text que l'on met en string, puisque l'on va insérer du text et/ou des chiffre
print methodTableau(mot)# et ici on fait un print (normal) puis le nom de la methode suis de la variable entre parenthèse.
Donc on demande à ce que la methode crée agisse sur la variable.
donc la, j'ai utilisé la variable "mot" et l'argument de la methode est "mot" aussi.
J'ai fais ainsi pour ne pas vous perdre, mais l'argument donné à la methode est
grossomodo "factice"
exemple :
- Code:
-
def methodTableau(mot)
mot = mot.upcase
end
variable = gets.chomp.to_s
print methodTableau(variable)
methodTableau(variable) <= on lui dit de passer variable en argument de la methode.
Je sais pas si ca à été assez clair pour vous ... j'ai fais ce que je pouvais ^^
Bon on va passer à un petit exercice, pour mettre tout ca en application.
Le corriger sera sous spoiler, mais regardez le une fois votre code terminé, ou si vraiment
vous êtes coincé.
J'vous fais confiance :p
Alors vous allez me faire un code qui permettera d'insérer des notes sur 10
dans un tableau. Vous devez faire ce code pour 2 éleves.
La methode consistera à savoir quel élève à la plus grosse moyen et la plus petite ou
si ils ont la même moyenne.
Vous devez aussi empecher que l'utilisateur entre une note au dessus de 10, ou en
dessous de 0
Et pour finir, vous ferez un calcule de la moyen de toute les notes =)
Allez à vous !
Correction :
- Spoiler:
- Code:
-
def compareNote(note1, note2, eleve1, eleve2)
return eleve1+ " a une moyen plus eleve que " +eleve2 if note1 > note2
return eleve2+ " a une moyen plus eleve que " +eleve1 if note2 > note1
return eleve2+ " et " +eleve1+ "ont la meme moyenne" if note2 == note1
end
note1 = 0
note2 = 0
nb_note1 = 0
nb_note2 = 0
saisis = 0
nom1 = (gets.chomp).to_s
while saisis != -1
print "veuillez inserer une notes pour " +nom1+ "(-1 pour arreter)"
saisis = (gets.chomp).to_i
note1 += saisis if saisis != -1 && saisis > 0
nb_note1 += 1 if saisis != -1 && saisis > 0
end
nom2 = (gets.chomp).to_s
saisis = 0 if saisis == -1
while saisis != -1
print "veuillez inserer une notes pour " +nom2+ "(-1 pour arreter)"
saisis = (gets.chomp).to_i
note2 += saisis if saisis != -1 && saisis > 0
nb_note2 += 1 if saisis != -1 && saisis > 0
end
print compareNote(note1, note2, nom1, nom2)
moyenne1 = (note1/nb_note1.to_f)
moyenne2 = (note2/nb_note2.to_f)
print "\n La moyenne de #{nom1} est de #{moyenne1} alors que celle de #{nom2} est de #{moyenne2}"