[Newb`s ] MathX_ Ptit_Nico eragon77 : ça commence
[skateinmars ] si vous voulez consultez les logs, suivez le lien de u-bot
[Ptigrouick ] juste une petite phrase pour poulleur le log :-D
[Ptigrouick ] *polluer
[apteno ] il nous faudra un jours un cours sur les magies des bots irc
[Coolgeek ] combien de temps le cours skateinmars ?
[illovae ] apteno: tu pourras en faire un avec ruby :p
[apteno ] Coolgeek, 2h max il a dis
[skateinmars ] Coolgeek: grand maxi 2h, sinon aucune idee
[apteno ] illovae, o_O
[Coolgeek ] oki
[Ptigrouick ] oh ptin 2 heures!
[Vermoot ] ah quand même
[altg ] plus vite on commence plus vite on fini !!
[Vermoot ] on peut se munir d'un rhythmbox ?
[Ptigrouick ] ACTION va chercher la bière et les chips pour survivre
[skateinmars ] soyez sages ;o
[skateinmars ] donc juste avant de commencer
[skateinmars ] lorsque je parlerais je mettrais le chan en mode +m, vous ne pourrez pas parler a ce moment la
[skateinmars ] j'enleverai ce mode lorsque vous aurez des questions
[skateinmars ] donc si vous etes pret, c'est parti :)
[Vermoot ] oh say cacaaaaaaaa
[altg ] ok, c'est parti
[skateinmars ] *prêts
[apteno ] ready
[charade ] ok
[Vermoot ] dictature !!! ^^
[Coolgeek ] m pour moderate :p
[xens ] gogo
[Vermoot ] allez hop
[skateinmars ] Introduction à la programmation avec Ruby
[skateinmars ] =========================================
[skateinmars ] Bienvenue donc pour ce cours d'initiation à la programmation avec ruby
[skateinmars ] comme prévenu sur le blog donc, ce cours sera destiné à tous, et particulièrement aux debutants
[skateinmars ] (si ca marche bien il y aura une serie de cours pour approfondir le tout :))
[skateinmars ] commencez donc par une présentation du langage Ruby
[skateinmars ] *commençons
[skateinmars ] ### Ruby : présentation ###
[skateinmars ] Ruby est un langage de programmation. C'est un langage de haut niveau, interprété (contrairement au C par exemple qui doit être compilé avant de pouvoir être exécuté), et orienté objet.
[skateinmars ] Il est utilisable facilement comme langage de script (programmation procédurale), à la manière de python ou perl, pour créer facilement de petits programmes,
[skateinmars ] mais est bien sur également adapté pour mettre en place de gros sites Web ou des applications graphiques.
[Coolgeek ] interpreté ?
[Coolgeek ] donc lent
[Vermoot ] Quelle Genre d'applications ?
[Ptigrouick ] bon pour l'instant rien de nouveau par rapport à PHP :p
[Vermoot ] (Des exemples ?)
[Coolgeek ] pour des appli graphique ou WEB, pas top...
[Ptigrouick ] j'aurai pu faire la même description
[apteno ] Coolgeek, et RoR ?
[skateinmars ] Vermoot: ruby on rails, raggle, metasploit, puppet...
[Newb`s ] Coolgeek: le PHP est interprété aussi, pourtant on l'utilise dans le web...
[Ptigrouick ] d'ailleurs je vais faire un copier/coller pour mon cours PHP tiens ;-)
[skateinmars ] Vermoot: toutes sortes en fait
[Coolgeek ] apteno : RoR ?
[skateinmars ] Coolgeek: pour le web, si la vitesse importe on utilisera du cache donc ce n'est pas un problème
[alkove ] Ruby et python sont plus rapide que PHP
[Vermoot ] skateinmars, des trucs puissssants ?
[apteno ] Coolgeek, Ruby on Rails
[Ptigrouick ] alkove: bof...
[skateinmars ] Vermoot: ruby on rails est un peu le meilleur framework web qui existe :) c'est l'application phare de ruby
[alkove ] Ptigrouick: J'ai vu des tests :)
[Vermoot ] skateinmars, je comprends pas trop...ça permet de faire des applis web?
[skateinmars ] après donc pour la vitesse c'est certes moins lent que du C mais similaire à python
[Vermoot ] genre twitter ou des conneries comme ça ?
[Newb`s ] plus lent*
[skateinmars ] Vermoot: ruby on rails oui. Ruby permet toutes sortes d'applications
[Ptigrouick ] alkove: avec les systèmes de cache activé ?
[alkove ] Ptigrouick: avec et sans, faudrait que je trouve le lien
[Derwidorn ] on peut utiliser la SFML avec Ruby :D
[Ptigrouick ] alkove: ça m'intéresse :-)
[skateinmars ] Ptigrouick: debian a réalisé des benchmarks si tu es curieux, mais peu importe
[TorF ] J'utilise courament PHP pour développer des applications Web. Dans quel cas ruby peut le remplacer avantageusement ?
[skateinmars ] TorF: on verra ca plus tard si tu le veut bien ;)
[skateinmars ] je continue
[skateinmars ] Le créateur du langage ruby est Yukihiro Matsumoto, alias Matz.
[skateinmars ] Pour les plus curieux, il a inventé Ruby en 1993 car des langages tels que perl ou python ne le satisfaisaient pas, en s'inspirant entre autres de Smalltalk.
[skateinmars ] Lors de sa création il a essayé de s'inspirer des principes de "moindre surprise". Cela veut dire que si vous comprenez comment marche un composant du langage,
[skateinmars ] vous devriez pouvoir utiliser un composant similaire de la même manière (ne vous inquietez pas si vous ne comprenez pas ce concept pour le moment ! :-)).
[skateinmars ] Petite note en passant, un cours sur ruby avait déjà été fait par FiFouille (le 14/03/2007), mais je recommence la série à zéro pour m'adresser aux débutants.
[skateinmars ] Si vous êtes interréssé par ce premier cours les logs sont dispo sur le site u-classroom.net.
[skateinmars ] Enfin avant de commencer sachez que pour ce cours je m'inspire du tutorial "ruby en vingt minutes" disponible ici http://www.ruby-lang.org/fr/documentation/quickstart/
[skateinmars ] ainsi que du cours de gpocentek sur python. Merci à eux :-)
[skateinmars ] des questions rapidement ?
[Coolgeek ] quand tu parle de concept ? des objets ?
[Vermoot ] ptain le mec il est pas content de ce qu'existe, il INVENTE un langage...la classe...
[Ptigrouick ] pourquoi le nom "Ruby" ?
[Derwidorn ] il est toujours en développement Ruby ?
[illovae ] Vermoot: ^^
[Ptigrouick ] Vermoot: ben Python et PHP c'est un peu la même histoire...
[Vermoot ] Ptigrouick, j'y connais rien...
[Coolgeek ] Vermoot : ca s'appelle un ultra geek :p
[skateinmars ] Ptigrouick: c'est en rapport avec le langage Perl
[Ptigrouick ] PHP c'est Rasmus Lerdorf qui a fait pareil
[Vermoot ] Coolgeek, c'est fort ^^
[skateinmars ] Coolgeek: euh la dans la phrase je parle du concept de moindre surprise (least surprise)
[Ptigrouick ] skateinmars: ah ben ouaip ok, j'aurai pu m'en rendre compte tout seul :-)
[Ptigrouick ] * se cache
[Ptigrouick ] ACTION se cache
[skateinmars ] Il y a plus de détails sur l'historique sur wikipedia si vous voulez plus d'infos
[skateinmars ] Donc, on va installer ruby si vous le voulez bien
[skateinmars ] ### Installer ruby ###
[skateinmars ] La version stable courante de ruby est ruby 1.8.7 (la version la plus utilisée est toutefois ruby 1.8.6. La version de développement est ruby 1.9.1).
[skateinmars ] Installons donc ruby. Sous ubuntu/debian on installera les paquets ruby et irb ou mieux, ruby-full qui dépend de ruby ainsi que d'autres paquets utiles.
[skateinmars ] (Parmi ceux-ci se trouve irb dont nous allons voir tout de suite l'utilité.)
[apteno ] aptitude install ruby-full donc
[skateinmars ] donc si vous voulez une ligne à copier/coller pour ubuntu/debian :
[skateinmars ] sudo apt-get install ruby-full
[Ptigrouick ] c'est gros ruby-full ?
[TorF ] heureusement j'ai installer ruby-full tout à l'heure, il est un peu lourd :)
[Newb`s ] skateinmars: ça install emacs
[Newb`s ] non merci
[xens ] 27mo de dl
[Aalinia ] sinon y'a juste besoin des paquets ruby et irb nan ?
[skateinmars ] Newb`s: pas ici
[Vermoot ] heu si on a une petite connexion c'est quoi le mieux ?
[Patlord ] ca s'installe :)
[altg ] ruby-full installé
[illovae ] Vermoot: ruby irb
[Newb`s ] skateinmars: sur Ubuntu 9.04 ça install emacs...
[Ptigrouick ] beurck emacs !!!
[Patlord ] voila, c'est fait :)
[Coolgeek ] ruby full installé itoo
[skateinmars ] Newb`s: c'est dans les dependances ou dans les recommends ?
[_zanrek ] Version windows (pour ceux qui crashent leur systeme 20 min avant) la 186a avec scite çà le fera?
[Vermoot ] illovae, et on edite dans quoi? (puisque ruby-full installe emacs je suppose qu'il faut de quoi editer ...gedit ?)
[illovae ] Vermoot: ce que tu veux, gedit, geany, vim, emacs
[Vermoot ] ok
[Newb`s ] skateinmars: aucune idée
[illovae ] _zanrek: oui pas de souci
[skateinmars ] _zanrek: alors pour windows tu as http://rubyforge.org/frs/download.php/29263/ruby186-26.exe
[dj_ ] sur 8.10aussi ça install emacs
[Coolgeek ] sur 8.04 pas d'emacs
[xens ] emacs c est dans les recommends
[_zanrek ] j'ai déjà la "version" avec scite d'installée spour çÃ
[skateinmars ] _zanrek: ok, si tu as irb pas de problemes
[altg ] comme Coolgeek sur 8.04 pa d'emacs :)
[Ptigrouick ] c'est installé pour moi
[Coolgeek ] LTS powa ... :p
[jerry4dijon ] bonjour
[jerry4dijon ] Newb`s : et si tu desintalle ensuite emacs après
[xens ] pareil pour moi
[Coolgeek ] installé aussi
[skateinmars ] si votre apt-get installe les paquets recommandés et que vous ne voulez pas d'emacs vous pouvez installer uniquement : ruby irb rdoc
[Patlord ] sur elive pas d'emacs non plus lol
[skateinmars ] ca devrait suffire
[komlan ] bonjour ruby full installé
[superk ] installé ici aussi :)
[Newb`s ] Plus simplement
[skateinmars ] quelqu'un n'a pas encore ruby (et irb) d'installé ?
[Newb`s ] moi
[babounain ] moi aussi :)
[Newb`s ] ça install
[dj_ ] ruby-full installé avec emacs
[Newb`s ] Quand ça demande d'installer emacs
[apteno ] Simple question pour la suite : l'extension des scripts ruby, c'est .rby ?
[Newb`s ] Ã la place d'appuyer sur Y ou N
[Vermoot ] ACTION 's Ready
[Newb`s ] appuyez sur "e"
[skateinmars ] apteno: .rb
[apteno ] ok, merci
[Newb`s ] et appuyez sur "-" sur tout les fichiers "emacs"
[xens ] irb c est l interpreteur?
[Newb`s ] packages*
[illovae ] xens: oui tout à fait
[xens ] merci
[skateinmars ] Newb`s, babounain pas _encore_ installé ?
[Newb`s ] Et après apuyez sur "g"
[skateinmars ] xens: on va voir ca dans 30 secondes :)
[babounain ] si c'est bon !
[Newb`s ] skateinmars: c'est installer
[skateinmars ] ok donc on enchaine
[Ptigrouick ] comprend pas pourquoi emacs est dans les dépendances du Ruby... c'est bizarre non ?
[_zanrek ] ok pour moi l'interpreteur se lance
[skateinmars ] Ptigrouick: c'est a cause de ruby-elisp
[illovae ] Ptigrouick: c'est un recommends par une dependance
[skateinmars ] (dans les recommands)
[skateinmars ] Premiers pas avec ruby et irb
[skateinmars ] -----------------------------
[skateinmars ] ### Irb ? ###
[skateinmars ] Irb (interactive RuBy) est un interpréteur de commandes, c'est à dire qu'on peut l'utiser à la manière d'un shell tel que bash pour y entrer du code ruby qui sera interprété directement, sans devoir passer par un fichier.
[skateinmars ] Ouvrez donc un terminal et lancez irb en tapant simplement `irb`.
[skateinmars ] (ou cliquez sur irb.exe sous windows ? :))
[Coolgeek ] ok pour moi
[apteno ] difficile comme étape !
[dj_ ] ok
[Ptigrouick ] sous quoi ?? :p
[Vermoot ] irb(main):001:0>
[babounain ] ok
[Coolgeek ] irb(main):001:0>
[xens ] ok
[Newb`s ] Pourquoi tu parles de fenêtre skateinmars ?
[_zanrek ] ayé irb :)
[_zanrek ] (c'est un .bat sous win?)
[skateinmars ] Newb`s: de fenêtre ?
[Newb`s ] skateinmars: "windows"
[komlan ] on
[skateinmars ] _zanrek: je sais pas, ca fait un bail que j'ai pas fait de ruby sous windows
[skateinmars ] Newb`s: je parle de l'os mais tu le sais bien ;)
[Newb`s ] _zanrek: les .bat c'est des fichiers batch
[_zanrek ] l'invite est irb(main):001:0>
[skateinmars ] quelqu'un ne voit pas ce que Vermoot à copié/collé ?
[_zanrek ] (sans les smiles)
[skateinmars ] Vous voila dans irb.
[skateinmars ] Comme dans un shell classique, vous pouvez entrer du code en le tapant simplement puis en appuyant sur entrée.
[skateinmars ] Essayons donc !
[skateinmars ] On va commencer par une utilisation simple, du calcul. Entrez dans votre interpréteur le code suivant :
[skateinmars ] 2+2
[skateinmars ] Et validez donc par la touche entrée. irb nous affiche en retour :
[skateinmars ] => 4
[skateinmars ] Le "=>" signifie que ruby nous a renvoyé une valeur, 4. Essayons encore :
[skateinmars ] (20/20) * 20
[skateinmars ] (+ entrée)
[skateinmars ] Traditionellement en programmation `/` représente la division et `*` la multiplication.
[xens ] ok pour moi
[skateinmars ] (Notez que durant le cours, je préfixerait de 4 espaces le texte que vous aurez à entrer dans votre interpréteur.)
[Derwidorn ] super, une calculette en cli
[Ptigrouick ] trop puissant le dernier calcul ;-)
[TorF ] ca valait le coup rien que pour avoir une calculette !
[dj_ ] ok
[Patlord ] ca marche ;)
[Ptigrouick ] au moins il fait pas d'arrondi foireux :p
[_zanrek ] +1
[komlan ] +1
[Newb`s ] +1
[babounain ] +1
[skateinmars ] Ptigrouick: et pourtant :)
[xens ] je vois venir le truc :)
[hajtux ] +1
[apteno ] Ptigrouick, 5/4
[apteno ] => 1
[skateinmars ] apteno: patience :)
[skateinmars ] On vient donc d'écrire du code ruby, aussi simple soit-il.
[skateinmars ] Précisement, le code "2+2" est une instruction qui est interprétée par ruby et 4 est le résultat de l'exécution de cette instruction.
[skateinmars ] Essayez d'entrer simplement une valeur comme 2, vous verrez que le résultat donné par ruby sera bien évidemment 2.
[Vermoot ] FOOOORT
[Patlord ] lol
[Ptigrouick ] cool 2+0 aussi !!
[TorF ] ca roxe trop ruby :)
[Ptigrouick ] mouhahaha
[Vermoot ] cool on a installé une calculatrice :D
[skateinmars ] besoin de clarifications sur la terminologie ?
[skateinmars ] (instruction, exécution etc)
[Aalinia ] ruby c'est typé ou pas ?
[Newb`s ] Avant j'utilisais python comme calculette
[Ptigrouick ] y'a du typage en ruby ?
[Derwidorn ] pour avec des valeurs correctes (5/4 par exemple) 5.0/4.0 => 1.25
[Newb`s ] Et j'utiliserai toujours python comme calculette
[Ptigrouick ] Aalinia: y'a de l'echo en dirait ;)
[Newb`s ] :D
[apteno ] Derwidorn, oups :-'
[skateinmars ] Derwidorn: tu peut eviter de donner le cours a l'avance ? :p
[Derwidorn ] :
[Derwidorn ] :$
[Derwidorn ] :-#
[Newb`s ] :D
[xens ] :/
[skateinmars ] oui ruby est typé, mais dynamiquement
[skateinmars ] J'imagine que vous voulez faire plus compliqué que du calcul. Entrez donc le code suivant :
[skateinmars ] "Bonjour tout le monde"
[skateinmars ] (Je m'excuse par avance pour les pédants qui me feront la remarque que ceci n'est pas la traduction de "Hello world")
[skateinmars ] Ruby nous a donc donné en retour `"Bonjour tout le monde"`. Notez les guillemets qui sont importants comme nous allons voir cela.
[Vermoot ] Hello World !
[Newb`s ] skateinmars: arf, j'avais essayer un print "olol"
[Newb`s ] mais marchait qu'a moitier
[Newb`s ] irb(main):018:0> "olol"
[TorF ] non seulement il gère les chiffres, mais aussi les chaines de caracteres !
[Newb`s ] => "olol"
[dj_ ] typé c quoi ?
[Newb`s ] oops
[babounain ] ça marche aussi avec les ' ' !
[Newb`s ] skateinmars:
[Newb`s ] irb(main):008:0> print "ololo"
[Newb`s ] ololo=> nil
[skateinmars ] dj_: on va voir après les types une fois qu'on aura vu les variables
[Newb`s ] pourquoi y'a "=> nil"
[Newb`s ] ?
[skateinmars ] Newb`s: on verra après :p
[TorF ] ruby retourne des codes un peu bizarre quand je mets un accent dans la chaine de caractères
[Newb`s ] Mais euh
[Aalinia ] Torf: il écrit le résultat avec les caractères unicode
[Ptigrouick ] hé oh mais j'y tiens moi à mes beaux accents :-(
[skateinmars ] TorF: oui, c'est la manière de ruby de stocker des accents, en utilisant unicode
[TorF ] ok merci
[Vermoot ] la suite la suite !!!
[TorF ] et pour mettre un " au milieu d'une chaine de caractères ?
[Vermoot ] :D
[Ptigrouick ] un \ non ?
[Ptigrouick ] ah non perdu...
[skateinmars ] TorF: on verra a la fin si vous voulez comment dire a ruby de stocker nos accents "différemment"
[TorF ] pas de pb :)
[skateinmars ] TorF: alors, tu peut utiliser 'texte "guillemets"'
[Aalinia ] heu, je crois que j'ai fait une bétise
[Aalinia ] j'ai tapé """
[Newb`s ] skateinmars: et si y'a des " et ' ? :D
[skateinmars ] donc avec les guillemets simples qui entourent les guillemets doubles
[Aalinia ] et maintenant à la fin de l'invite y'a " et pas >
[Newb`s ] Aalinia: ça ne retourne rien
[Aalinia ] c'est normal ?
[skateinmars ] Aalinia: oui tu as voulu écrire 2 chaines de caractères a la suite
[Ptigrouick ] fait un " entrée
[Aalinia ] ok
[skateinmars ] Aalinia: avec control+c tu peut annuler ce que tu tapes, ou fermes ta chaine avec un "
[Aalinia ] merci :)
[skateinmars ] donc si vous voulez a la fois des guillemets simples et doubles dans votre chaine, utilisez \
[apteno ] mais les \ s'affichent !
[_zanrek ] c'est normal lorsque l'on tape des mots accentués (sans "") çà qiutte?
[skateinmars ] par exemple : "des \"guillemets\""
[Ptigrouick ] oui les vilains \ restent affichés
[skateinmars ] _zanrek: non ? :)
[TorF ] oui les \ restent affichés
[illovae ] _zanrek: ouai chez moi aussi ça faitç a
[skateinmars ] Ptigrouick: oui, remarquez qu'on affiche pas du texte a proprement parler pour le moment
[Newb`s ] skateinmars: et si on tape * ça fait un truc bizarre
[skateinmars ] on voit juste ce que ruby comprend quand on lui dit cela
[skateinmars ] (on verra après comment vraiment afficher du texte)
[Newb`s ] j'ai l'impression qu'on peut faire des array avec vu qu'il retourne le truc sous cette forme [x]
[TorF ] d'accord, donc c'est normal d'avoir un \ au milieu de la chaine, ok
[skateinmars ] illovae: ah ?
[skateinmars ] zut je me disais que c'etait un bug sous windows :)
[illovae ] skateinmars: ouai pas grave, il "crash" si on peut dire, rien de grage
[illovae ] s/grage/grave/
[skateinmars ] ah ben non la aussi en fait
[xens ] pareil
[skateinmars ] je sais comment résoudre le problème, mais on verra ca plus tard :)
[skateinmars ] on continue si vous le voulez bien
[alkove ] avec un print devant la chaine, il n'affiche pas les caractères échappés
[Newb`s ] ça va durer 3h ce cours
[skateinmars ] pas grave si on apprend ;)
[skateinmars ] ### Les variables ###
[skateinmars ] Le calcul c'est bien joli, mais vous conviendrez que tout cela est assez éphémère. Nous allons donc utiliser des variables.
[skateinmars ] Une variable sert à stocker des données diverses. Elles ont un nom (aussi appelé le symbole), et une valeur qui leur est attribué.
[skateinmars ] Un nom de variable en ruby peut être composé de lettres (minuscules comme majuscules), chiffres et du tiret bas `_`.
[skateinmars ] De plus, son nom _ne doit pas_ commencer par un chiffre ou une lettre majuscule.
[skateinmars ] Comment créer une variable ? C'est très simple :
[skateinmars ] nombre = 42
[skateinmars ] Ici on crée la variable nombre, et lui assigne la valeur 42 grâce à l'opérateur d'assignation `=`
[skateinmars ] Essayons encore :
[skateinmars ] calcul = 2+2
[skateinmars ] La variable calcul se voit assigné le résultat de l'instruction `2+2`.
[skateinmars ] Vérifiez par vous même :
[skateinmars ] calcul
[skateinmars ] (toujours à entrer dans irb donc)
[skateinmars ] Avec cette instruction ruby vous renvoie la valeur de `calcul`.
[Vermoot ] comme par hassard, 42...
[Ptigrouick ] ah ouais tiens pas de lettre majuscule en 1er dans le nom d'une variable ? marrant ça...
[Derwidorn ] XD
[apteno ] et pour assigner du texte à une variable, il faut ajouter des " ?
[Newb`s ] the_answer=42
[Newb`s ] haha
[illovae ] skateinmars: et si on veut sauvegarder "2+2" et non simplement 4 ?
[dj_ ] ok
[zanrek ] ok
[zanrek ] ok
[skateinmars ] (Ptigrouick: c'est pour les classes/constantes en fait)
[Patlord ] l'espace entre le nom de la variable et le = est obligatoire?
[Derwidorn ] non
[Vermoot ] nan
[skateinmars ] illovae: le texte "2+2" ?
[xens ] apteno: calcul = '2+2'
[Ptigrouick ] skateinmars: ah ben vi y'a pas de $ au début du nom, donc pour différencier...
[illovae ] skateinmars: non vraiment le calcul en lui-même ; ça n'a peut-être pas d'intérêt...
[skateinmars ] apteno: oui, on fait texte = "mon texte"
[Newb`s ] skateinmars: les double quotes et les singles quotes, y'a des différences comme en PHP?
[skateinmars ] illovae: tu peut mettre un bloc de code dans une variable mais on verra ca pas aujourd'hui :)
[illovae ] ah d'accord
[skateinmars ] Newb`s: oui, le même genre de différences qu'avec php
[TorF ] et on peut faire "calcul = nombre + 2" :)
[Newb`s ] oki
[skateinmars ] Vous pouvez donc bien sur effectuer toutes sortes d'opération sur les variables, comme par exemple :
[skateinmars ] nombre - calcul
[skateinmars ] Ou même :
[skateinmars ] calcul = nombre - calcul
[skateinmars ] Remarquez ici que j'ai remplacé la valeur de la variable calcul par le résultat de l'opération `nombre - calcul`.
[xens ] pour l instant ça ressemble assez à python
[skateinmars ] encore des petites questions sur les variables ?
[Vermoot ] donc le nouveau "calcul" ce sera nombre - l'ancian calcul ?
[Ptigrouick ] pour l instant ça ressemble assez à php :-p
[Patlord ] on ne doit jamais définir le type d'une variable?
[skateinmars ] Vermoot: oui, ruby va faire `nombre - calcul` puis mettre ce resultat dans la variable calcul
[Coolgeek ] pour l'instant ca ressemble beaucoup au C :p
[Vermoot ] skateinmars, ok
[TorF ] ca peut être cool de pas avoir à s'#@{[^ avec des $ partout comme en php
[skateinmars ] Patlord: pas besoin non, comme en python/php/etc
[skateinmars ] Une dernière chose !
[skateinmars ] mavariableinexistante
[skateinmars ] Ah, ca ne marche pas.
[skateinmars ] *ça
[skateinmars ] Ruby vous a retourné une erreur (il a en fait précisément levé une exception de type `NameError`).
[skateinmars ] Vous pouvez voir une description détaillée de l'erreur "undefined local variable or method `mavariableinexistante' for main:Object" et la ligne ou s'est produite l'erreur.
[skateinmars ] Vous pouvez ignorer le "main:Object" pour le moment, remarquez par contre que l'erreur est assez explicite ("variable ou méthode locale indéfinie").
[skateinmars ] La ligne est utile lorsque l'erreur se produit dans un script (dans un fichier .rb) pour savoir ou chercher dans notre fichier.
[skateinmars ] ok pour ca ?
[illovae ] ok
[Datenshi33 ] oui
[xens ] ui
[Coolgeek ] yep
[zanrek ] ok
[dj_ ] ok
[Coolgeek ] gestion d'erreur classique
[Ptigrouick ] chef oui chef !!
[Vermoot ] ok
[TorF ] ok
[superk ] ok
[apteno ] attention, voici venir "Les types de données"
[Coolgeek ] je suppose qu'on pourra "catcher" ces erreur et les traiter dans le code ?
[babounain ] tout bon
[skateinmars ] apteno: sssh :p
[skateinmars ] Coolgeek: tout à fait
[skateinmars ] (pas au programme aujourd'hui)
[Coolgeek ] hmmm ca me fait penser a java ca :p
[Aalinia ] ou à python ;)
[xens ] ruby peut sintégrer à apache comme php ??
[skateinmars ] bon on continue, on peut accélerer si vous etes tous forts :)
[Ptigrouick ] moi je trouve aussi que tout ça ressemble à perl
[TorF ] on est tous des DIEUX !
[skateinmars ] xens: il y a mod_ruby et passenger mais c'est hors sujet ;)
[xens ] ok merci
[TorF ] ca ressemble à PHP :)
[zanrek ] ok pour la suite chez moi
[skateinmars ] n'hesitez pas a m'interrompre si vous avez une question (sur le sujet en cours :p)
[Newb`s ] ça ressemble à Ruby moi je dis
[skateinmars ] ### Les types de variables ###
[skateinmars ] (bravo apteno :))
[skateinmars ] Je ne l'ai pas encore précisé mais les données que renferment une variable ont un "type".
[skateinmars ] Vous avez déjà vu deux types pour le moment, Integer (nombre entier) et String (une chaîne de caractère).
[skateinmars ] Un type *nombre entier* ? Oui, regardez :
[skateinmars ] 5/2
[skateinmars ] Oulah, `2` ! Ca a l'air faux. Qu'est-ce que ca veut dire ?
[skateinmars ] En fait ruby a simplement remarqué que vous utilisez deux nombres entier, et vous a donc retourné un nombre entier.
[skateinmars ] Pour cela il a tronqué le résultat de la division pour obtenir la valeur entière.
[skateinmars ] Pour représenter un nombre à virgule en informatique on utilise des "nombres à virgule flottante", plus communément appelé "flottant" ou nombre "flottant" (Float en ruby).
[skateinmars ] Vous faire comprendre à ruby que votre nombre est un flottant comme ceci :
[skateinmars ] 2.5
[skateinmars ] (avec la virgule)
[skateinmars ] On peut donc utiliser l'astuce suivante :
[skateinmars ] flottant = 5.0
[skateinmars ] Le point `.` représente la virgule, et ruby comprend ici que l'on souhaite un nombre flottant. Ressayons la division de tout à l'heure :
[skateinmars ] flottant / 2
[skateinmars ] C'est gagné, ruby nous retourne un flottant.
[skateinmars ] Remarquez aussi qu'il suffit d'un seul flottant à ruby sur les deux nombres pour comprend qu'il doit retourner un flottant.
[skateinmars ] Ok, ca marche, mais... ?
[skateinmars ] 2.0 / 3
[skateinmars ] Ouille, on obtient `0.666666666666667`. En effet (principalement pour des raisons de performance) le nombre de chiffre après la virgule que peut gérer un flottant est limité.
[skateinmars ] Ruby a donc arrondi le résultat en essayant d'obtenir la meilleure précision possible.
[Coolgeek ] y'a une limite a pas depasser par type ?
[skateinmars ] (désolé pour les 2 petites erreurs d'ortho)
[Coolgeek ] genre 35536 pour un int
[skateinmars ] Coolgeek: ruby transformera tout seul ta variable en "gros int"
[Coolgeek ] oki :)
[Patlord ] trop fort ce Ruby ;)
[apteno ] et est il possible d'aller plus loin que 0.666666666666667 ?
[TorF ] "a=5 ; b=2 ; a/b" <== comment obtenir le résultat en flottant alors que les 2 variables sont des entiers ?
[dj_ ] ?
[skateinmars ] TorF: il y a un moyen de transformer un int en float mais je parle pas d'objet aujourd'hui donc je'en parlerais pas :) (pour info, tu peut faire a.to_f/b)
[skateinmars ] *je n'en
[skateinmars ] apteno: bonne question ? :>
[TorF ] ok merci
[TorF ] apteno veut des résultats en flottant double précision ! :)
[apteno ] je suis surtout curieux :p
[antonino ] 2.00000000000000000000000000000000000000/3.00000000000000000000000000000000000000000000
[Patlord ] lol pratique!
[apteno ] antonino, non, toujours pareille
[antonino ] ça marche pas
[Ptigrouick ] non 2.00000000000000000000000000000000000000/3 ça suffit ... faut suivre le cours bon sang ;-)
[skateinmars ] apteno: il y a un module Precision mais je t'avouerai que je ne m'en suis jamais servi
[apteno ] donc c'est possible !! merci skateinmars ^^
[skateinmars ] ouais voila en gros 'oui' :)
[skateinmars ] #### Strings (et bikinis ?) ####
[skateinmars ] (pardon)
[skateinmars ] Bref, passons à d'autres types, notamment le type String cité plus haut.
[skateinmars ] Un string est donc une chaîne de caractères, soit comme son nom l'indique une série de... caractères :
[skateinmars ] chaine = "Voila du texte"
[skateinmars ] Votre variable `chaine` contient donc à présent la chaîne de caractères "Voila du texte". Notez que les restrictions sur les noms de variable ne s'appliquent pas au contenu des strings.
[skateinmars ] Un string peut être créé (entres autres) en utilisant les délimiteurs "" et '' :
[skateinmars ] chaine2 = 'et encore du texte'
[skateinmars ] (comme on a deja vu en fait :))
[skateinmars ] Les strings peuvent comme les entiers et les flottants subir diverses opérations :
[skateinmars ] chaine + chaine2
[skateinmars ] Pas mal, c'est presque bien. Encore mieux :
[skateinmars ] "-" * 20
[skateinmars ] (20 fois "-")
[skateinmars ] Sympa non ? Et la soustraction ?
[skateinmars ] "texte" - "tex"
[skateinmars ] Ah non, ruby n'est quand même pas _si_ intelligent :-)
[skateinmars ] Ruby nous indique que la méthode `-` n'existe pas pour les strings. Nous verrons plus tard ce qu'est une méthode en détail.
[illovae ] pourquoi 20 * "-" ne marche pas ?
[Ptigrouick ] tiens la concaténation c'est le même symbole que l'addition
[skateinmars ] (plus tard veut dire dans une prochaine session en fait)
[dj_ ] pa compris "-" * 20
[skateinmars ] illovae: dans l'autre sens ?
[Newb`s ] dj_: ça affiche 20 fois la chaine
[illovae ] skateinmars: ouai
[eragon77 ] doué Newb`s
[illovae ] skateinmars: le plus important est donc le premier "truc" ?
[eragon77 ] :p
[Ptigrouick ] vous avez déjà essayé de faire a+1 en PHP ? ça donne b ...
[Newb`s ] surement parce que ça prend ça pour une multiplication
[skateinmars ] illovae: parce que dans ce cas, il choisit le type de 20 comme type a retrouver
[illovae ] ok
[skateinmars ] donc il veut un nombre, mais il sait pas trouver un nombre avec "-"
[dj_ ] Newb`s, ok :)
[Ptigrouick ] php est plus intelligent que ruby lui il est capable de faire b-1 na !
[Ptigrouick ] :p
[skateinmars ] des questions sur les strings ? (je remarque qu'on a deja parlé des guillemets tout a l'heure donc pas de problemes normalement)
[TorF ] les strings c'est mieux à la plage !
[Newb`s ] Ou dans un lit.
[Ptigrouick ] oui je préfère les strings ficelles moi aussi
[apteno ] Dérapage en vue mon capitaine !
[skateinmars ] on continue ;)
[skateinmars ] Une petite remarque qui a son importance, un String n'est pas du tout un nombre !
[skateinmars ] Essayez donc :
[skateinmars ] "2" + 2
[skateinmars ] Ruby nous dit ici qu'il ne peut changer un String en Fixnum (pour les petits curieux un Fixnum est "une sorte d'Integer").
[skateinmars ] ho, on enchaine
[skateinmars ] *hop
[skateinmars ] #### Au tableau ! ####
[skateinmars ] Y-a-t-il d'autres types ? Oui, plein !
[skateinmars ] Il faudrait plus d'une session pour voir les différents types que propose ruby.
[skateinmars ] Mais voyons tout de même un autre type considéré comme basique dans les langages de script, les tableaux.
[skateinmars ] Les tableaux, ou arrays, ont pour objectif de contenir un ensemble de valeurs. un exemple sera surement plus parlant :
[skateinmars ] notes = [12, 15, 8, 17, 5.5, "zero"]
[skateinmars ] Il s'agit donc d'un groupe de valeurs, qui peuvent être de n'importe quel type.
[xens ] "test" * 3 fonctionne mais pas 3 * "test" ?
[illovae ] xens: oui comme dit tout à l'heure ;)
[skateinmars ] xens: alors oui, parce que dans un cas il applique la multiplication sur un string, dans l'autre sur un nombre
[Ptigrouick ] rigolo le "test" * 3 tiens
[xens ] merci :-)
[illovae ] xens: avec 3 avant il cherche à renvoyer un chiffre, avec "test" ça donne rien
[skateinmars ] (mais euh on parle des tableaux la :p)
[sashimi ] yop tout le monde, dsl d'arriver maintenant
[illovae ] yo sashimi :)
[Derwidorn ] c'est pas plutot les listes ça ?
[Ptigrouick ] pas de sushi sashimi :p
[Aalinia ] c'est beau les tableaux où on peut tout mélanger
[sashimi ] rer de m*****
[Patlord ] on ne doit pas mettre des valeurs de memes types dans un tableau?
[TorF ] et donc notes[0] pour accéder à la 1ere valeur du tableau
[skateinmars ] Derwidorn: ou des dictionnaires en python
[Aalinia ] on peut même faire du multi-dimension : ll = [['a', 'b', 'c'], [0, 1, 2]]
[skateinmars ] TorF: arrete de lire mon cours :p
[skateinmars ] (soit un tableau dans un tableau)
[Newb`s ] haha
[Newb`s ] un tableau en 3D
[Patlord ] un peu comme dans la plupart des langages ;)
[Ptigrouick ] et pour avoir la taille d'un tableau ?
[TorF ] notes.length ?
[Ptigrouick ] bingo !
[skateinmars ] Derwidorn: j'ai dit une bétise, c'est bien une liste en python
[skateinmars ] rooh bah zut je voulais pas aborder l'objet aujourd'hui :o mais c'est bien ca
[skateinmars ] bref,
[skateinmars ] Pour accéder à une valeur contenue dans un tableau on doit connaitre sa position (dite index) :
[skateinmars ] notes[0]
[skateinmars ] notes[2]
[skateinmars ] Notez que la numérotation commence à 0. La dernière entrée d'un tableau de 6 valeurs est donc située à l'index 5.
[skateinmars ] Il est aussi possible d'accéder à un tableau en partant de la fin, de cette manière :
[skateinmars ] notes[-1]
[skateinmars ] notes[-2] #avant-dernier element
[skateinmars ] On peut ajouter des valeurs à un tableau :
[skateinmars ] notes << 10
[skateinmars ] (la valeur ira a la fin du tableau)
[skateinmars ] La valeur renvoyée par ruby est la nouvelle valeur de votre tableau notes.
[skateinmars ] On peut aussi ajouter des tableaux :
[skateinmars ] notes + [5, 12]
[skateinmars ] Notez ici que ce qu'affiche irb est simplement le résultat de l'opération, votre tableau n'ayant pas été modifié.
[TorF ] super le <<
[skateinmars ] hop mini test : comment vraiment modifier notes ?
[skateinmars ] (en lui ajoutant 5 et 12)
[illovae ] en ajoutant << ?
[illovae ] notes << 5, 12
[illovae ] ?
[Aalinia ] notes = notes + [5, 12] ?
[Coolgeek ] notes = notes << 5
[Ptigrouick ] ben notes = [...]
[Coolgeek ] ?
[Newb`s ] notes.append = [value] ?
[illovae ] Ptigrouick: pouarf faut tout réécrire avec ton truc >.<
[skateinmars ] un bon point pour Aalinia :-)
[Newb`s ] (je dis ça juste pour pas dire le même truc que les autres :D)
[illovae ] Ptigrouick: si y'a 600 entrées :>
[Ptigrouick ] notes[4] = ....
[Aalinia ] y'a même le - qui fonctionne !
[Drup ] et on peut ajouter au debut ? :D
[skateinmars ] illovae: alors bien tenté mais << ne veut qu'un seul argument
[Derwidorn ] notes << 5 <<12
[illovae ] okay :}
[Newb`s ] notes += ["value", "value2"] sinon
[Newb`s ] plus simple
[dj_ ] notes + [5, 12] me modifie notes
[Ptigrouick ] illovae: ben il a dit vraiment modifier le tableau, moi je le modifie vraiment... complètement
[TorF ] et ya un truc aussi simple pour rajouter un élément en début de tableau ?
[illovae ] Ptigrouick: lol :>
[skateinmars ] TorF, Drup oui mais en utilisant la programmation objet
[TorF ] ok, et pour supprimer un élément du tableau ?
[illovae ] euh
[TorF ] notes >> 2
[TorF ] oups, trompé :)
[xens ] notes = notes - [ element]
[illovae ] notes = notes - notes[2] ?
[skateinmars ] La soustraction entre tableaux est possible :
[skateinmars ] notes = notes - [5.5, "zero"]
[skateinmars ] Comme vous l'imaginez la position de chaque entrée du tableau peut donc varier durant l'exécution de votre programme.
[Aalinia ] notes - [elt] ça supprime toutes les occurences
[Coolgeek ] le "tab" marche pas pour voir les methodes possibles pour une classe ?
[Newb`s ] notes -= [cequ'onveutenlever]
[Newb`s ] plus simple
[Newb`s ] :)
[Newb`s ] Oubliez pas les formes abrégés
[Newb`s ] += -= *= /=
[skateinmars ] Coolgeek: pas avec irb par defaut, on verra ca a la fin
[Coolgeek ] on s'ecarte du niveau debutant Newb`s :p
[Coolgeek ] oki :)
[Newb`s ] Coolgeek: ça simplifie ça :D
[TorF ] ha oui Aalinia, ca efface bien tous les occurences
[Vermoot ] et alors mon met notes = notes - 5.5 ou bien notes = notes - notes[1] ?
[illovae ] Vermoot: soit notes = notes - [5.5]
[illovae ] Vermoot: soit notes = notes - [notes[2]]
[Vermoot ] illovae, okay
[skateinmars ] voila
[skateinmars ] Aalinia: avec quoi dans 'elt' ?
[Aalinia ] j'ai rajouté un 15 pour voir dans le tableau
[Aalinia ] donc j'en avait 2
[Aalinia ] et ça m'a supprimé les 2
[skateinmars ] ok oui en effet
[TorF ] par exemple "notes = [1, 2, 3, 1, 1, 2] ; notes = notes - [1]"
[illovae ] moi perso j'ai rien pigé avec le elt lÃ
[Vermoot ] Aalinia, dans ce cas, c'est notes[X] qu'il faudra utiliser
[TorF ] on se retrouve avec [2, 3, 2]
[skateinmars ] illovae: regarde l'exemple de TorF
[skateinmars ] si un élément est en double dans le tableau et qu'on soustrait au tableau cet élément, tous les éléments disparaissent
[skateinmars ] (si vous voulez supprimer un seul élément il y a une méthode delete_at, mais comme je le disais donc je ne parlerai pas d'objet aujourd'hui :))
[Coolgeek ] bon... quand est-ce qu'on creer un WM en ruby ? :p
[Vermoot ] faudra preciser avec sa position...par exemple notes[1]
[Vermoot ] non ?
[skateinmars ] Vermoot: non pour delete_at tu donnes la position
[skateinmars ] Coolgeek: Ã la session 567 ? :]
[Vermoot ] skateinmars, notes = notes - notes[1]
[Vermoot ] marceha pas ?
[Vermoot ] marche*
[skateinmars ] notes = notes - [notes[1]]
[skateinmars ] comme l'a dit illovae :)
[Vermoot ] ouch
[Vermoot ] ah ouais
[skateinmars ] (Vermoot: ou notes.delete_at(1))
[Vermoot ] donc dans ce cas ça marche, on peut supprimer une seule entrée
[Coolgeek ] quand on a un tableau a 2 dimension, on enleve 1 dimension. ruby le passe a 1 dimension tout seul ?
[skateinmars ] (et si vous voulez ajouter un element a une position precise, il y a la méthode insert)
[skateinmars ] Coolgeek: ruby se fiche un peu de ce concept de dimensions
[skateinmars ] c'est juste un tableau dans un tableau
[Vermoot ] et dans ce cas (on enleve notes[1]) notes[2] devient notes[1] etc ?
[Coolgeek ] bah pas vraiment, sinon, pour la notation des [[]] c'est ardu
[skateinmars ] Vermoot: oui
[Vermoot ] okay
[antonino ] notes.sort pour trier :)
[illovae ] avec quoi vous trichez comme ça ?
[skateinmars ] Coolgeek: [[]] c'est un tableau vide dans un tableau
[Vermoot ] antonino, trier comment ?
[skateinmars ] (antonino: arretez de parler d'objet :p)
[skateinmars ] je continue ;)
[skateinmars ] #### C'est pas vrai ? ####
[skateinmars ] Allez, un dernier type pour la route.
[skateinmars ] Que se passe-t-il si l'on veut comparer des variables ?
[skateinmars ] 4 > 2
[skateinmars ] Ruby nous a renvoyé `true`. Remarquez que ce n'est pas une chaîne de caractères (pas de guillemets).
[skateinmars ] Essayons autre chose :
[skateinmars ] 10 == 20
[skateinmars ] On obtient `false` maintenant.
[skateinmars ] Notez que l'opérateur == sert à comparer si deux valeurs sont égales (le caractère = simple servant déjà à l'assignation).
[skateinmars ] ceci est un booléen
[skateinmars ] (boolean)
[Coolgeek ] bah c'est un langage objet... donc parler se ruby snas objet c'est pas faisable xD
[Vermoot ] say comme du say (euh...C)
[Ptigrouick ] 10 == "10" => false y'a bon :-)
[apteno ] ok, et on apprend à faire un bot irc quand ? :p
[skateinmars ] Un booléen est une variable qui peut avoir deux états, vrai (true) ou faux (false).
[skateinmars ] Nous verrons leur utilité (énorme !) lorsque nous aborderons les tests conditionnels.
[illovae ] apteno: ça va pas être pour aujourd'hui je crois :}
[Vermoot ] Ptigrouick, ouais parce que 10 est pas égal à la chaine de caractere 10
[Newb`s ] oh la bourde
[illovae ] apteno: en tout cas, moi je suis pas prêt là :D
[skateinmars ] Ptigrouick: tu t'es cru en php ? :)
[Newb`s ] j'ai ctrl-c mon guake
[Ptigrouick ] vermoot: ben oui mais ruby fait la différence sur le type automatiquement
[Ptigrouick ] vermoot: en php, faut utiliser ===
[skateinmars ] Newb`s: http://u-classroom.net/logs/2009-04-30-ruby.html pour voir les logs en direct
[Vermoot ] Ptigrouick, oui, grace aux guiillemets...l'est trop fort ce ruby
[xens ] ACTION va chercher une biere
[illovae ] Newb`s: bah bravo :0
[Newb`s ] illovae: ouais
[smarter ] apteno: un bot irc en ruby ça se fait en une demie-heure avec la doc des sockets de ruby dans une main et la RFC d'IRC dans l'autre :]
[illovae ] xens: yeah, un kalua pour moi stp :p
[xens ] :)
[illovae ] smarter: spèce de geek :0
[Ptigrouick ] ACTION se fait apporter une bière par sa copine :-)
[Newb`s ] mplayer + compilation de kernel + un vim + interpreteur python + irb ....
[apteno ] smarter, tu es mon Dieu.
[illovae ] 0:
[skateinmars ] smarter: nan ya un framework ruby pour creer des bots donc 5 minutes :p
[apteno ] skateinmars, tu viens de le remplacer.
[illovae ] lol
[illovae ] fidèle le apteno !!!
[skateinmars ] :-]
[Newb`s ] skateinmars: il s'appelle comment ce framework?
[apteno ] :-°
[skateinmars ] Newb`s: yen a plusieurs en fait
[smarter ] skateinmars: j'ai passé plus de temps à essayer de faire marcher correctement les divers framework que j'ai trouvé sur le net sans grand succès qu'à le faire à la mano :]
[Coolgeek ] Newb`s : emacs :0
[skateinmars ] rbot est le plus connu Newb`s
[Newb`s ] Coolgeek: hahahaha, troll velue
[Newb`s ] oki, merci
[skateinmars ] (il y a leaves sinon)
[skateinmars ] smarter: ah ? jamais testé perso
[skateinmars ] smarter: et arrete de pourrir mon cours de hs merci ;o
[skateinmars ] on continue et si vous le voulez bine on debattra tout à la fin
[skateinmars ] *bien
[skateinmars ] Quelques autres opérateurs de comparaison :
[skateinmars ] * != : différent (le contraire de l'égalité)
[skateinmars ] * >= : supérieur ou égal
[skateinmars ] * < : inférieur
[skateinmars ] ### Passons à autre chose ###
[skateinmars ] Bien, nous savons maintenant nous servir d'irb et nous pouvons jouer avec les variables de différents types.
[skateinmars ] On peut donc écrire notre premier vrai script !
[skateinmars ] Quittez irb en utilisant Control+D ou en tapant `exit` (ou encore `quit`) pour revenir à votre shell favori.
[Newb`s ] zsh \o/
[apteno ] La suite après la pub ?
[Coolgeek ] yep zsh !
[Ptigrouick ] zsh powaaa
[TorF ] ya pas eu une classroom sur zsh ?
[Aalinia ] vive zqh !
[skateinmars ] pour la prochaine étape vous aurez besoin d'un éditeur de texte, quelqu'un ne sait pas se servir d'un éditeur de texte ou n'en possède pas ?
[Coolgeek ] Newb`s : de toute facon, c'ets pas VI ni EMACS le meilleur.. mais GEDIT !!!
[Aalinia ] *zsh
[xens ] /bin/bash :/ <--
[Newb`s ] Coolgeek: vim y'a que ça de vrai
[skateinmars ] (mousepad, gedit, vim peu importe)
[Ptigrouick ] TorF: ben si justement on joue les leches-bottes :p
[alkove ] vim \o:
[xens ] sudo apt-get install vim
[Vermoot ] GNOME POWAAAAA
[Coolgeek ] sudo apt-get install gedit
[Vermoot ] (ah non merde, trompé de troll)
[Aalinia ] ed !
[Vermoot ] ACTION se cache
[TorF ] faut que je retrouve le cours sur zsh, je compte m'y mettre bientôt. Sinon oui j'ai un éditeur
[skateinmars ] TorF: oui il y a eu un cours zsh, cf u-classroom.net partie wiki ;)
[skateinmars ] si vous voulez un editeur sympa en gtk, il y a geany (ceci n'est pas une pub)
[skateinmars ] Ecriture d'un script
[skateinmars ] --------------------
[skateinmars ] Nous allons donc écrire notre premier programme. Pour cela il vous faudra utiliser un éditeur de texte quelconque : vim, nano, gedit, geany...
[skateinmars ] Créez donc un fichier que l'on pourra nommer par exemple "test_classroom.rb" et ouvrez le dans votre éditeur.
[skateinmars ] L'extension .rb est une convention qui indique que ce fichier contient du code ruby, à la manière des fichiers .py (python).
[skateinmars ] Donc, c'est parti !
[skateinmars ] Insérez le texte suivant dans votre fichier :
[skateinmars ] #!/usr/bin/env ruby
[skateinmars ] (sans les espaces au début)
[skateinmars ] et sautez une ou deux lignes.
[skateinmars ] Cette ligne totalement optionelle est appelée "shebang", ce n'est pas du code ruby mais un indicateur qui permettra à votre shell de déterminer quel programme utiliser pour l'exécuter.
[skateinmars ] Si vous l'omettez vous devrez lancer votre programme en utilisant la commande `ruby test_classroom.rb`;
[skateinmars ] tandis que si vous rendez votre fichier exécutable vous pourrez utiliser la forme `./test_classroom.rb` grâce au shebang.
[skateinmars ] pas de problèmes ?
[illovae ] nop
[Vermoot ] ah ouaiiiiiiiiiis
[Vermoot ] j'avais jamais compris ça !
[Ptigrouick ] il est étrange ce shebang
[apteno ] ne pas oublier de chmod +x test_classroom.rb
[Coolgeek ] Vermoot viens d'avoir une revelation...
[TorF ] si demain je veux utiliser un tel executable ruby sur une debian, faut que j'installe quel paquet ?
[Vermoot ] on se moque pas des noob... snif
[Newb`s ] shebang
[komlan ] c bon
[Ptigrouick ] /usr/bin/env ???
[Newb`s ] ça fait produit nettoyant
[skateinmars ] Ptigrouick: on aurait pu mettre #!/usr/bin/ruby
[illovae ] Ptigrouick: ouai ça évite de donner le path exact, qui peut changer d'une machine à l'autre)
[skateinmars ] TorF: ruby
[Ptigrouick ] skateinmars: ah ok :-)
[TorF ] ok skateinmars, et puis facile à retenir :)
[skateinmars ] TorF: selon le script il y aura peut-etre d'autres librairies a installer, souvent c'est expliqué dans le README du script si nécessaire
[skateinmars ] notes bien que je préfixe mon code avec des espaces pour rester clair, mais vous n'en avez pas besoin dans votre fichier
[skateinmars ] *Notez
[skateinmars ] Entrons ensuite ce code :
[skateinmars ] prenom = "John"
[skateinmars ] nom = "Doe"
[skateinmars ] texte = "Bonjour " + nom_complet
[skateinmars ] (woops les espaces ne sont pas passées)
[skateinmars ] http://gist.github.com/104654 si vous voulez copier/coller (mal)
[skateinmars ] Notez les lignes commencant par `#`, ce sont des commentaires. Ils sont ignorés par ruby et servent aux programmeurs qui veulent détailler certains points de leurs programmes.
[skateinmars ] vous pouvez mettre des lignes blanches avant chaque ligne commentée pour plus de clarté (cf le lien vers le gist)
[apteno ] volontaire l'omission de l'accent au a de texte à afficher ?
[skateinmars ] apteno: on peut mettre un accent si on veut
[apteno ] ok
[skateinmars ] pas de question sur le code ? on a deja vu tout ca auparavant, et on l'a simplement mis dans le fichier
[Coolgeek ] pas compliqué pour le momen,t
[xens ] yep c est ok
[komlan ] ça roule
[Ptigrouick ] ma poule
[skateinmars ] Nous pouvons maintenant essayer d'exécuter notre programme selon une des méthodes citées ci-dessus
[skateinmars ] ouvrez donc un terminal et entrez par exemple :
[skateinmars ] $ ruby test_classroom.rb
[skateinmars ] (sans le $ qui represente votre prompt)
[skateinmars ] Et voila que...
[skateinmars ] Ça n'a pas l'air de marcher ?
[skateinmars ] En fait, si. Seulement on a oublié de demander a ruby d'afficher notre texte !
[skateinmars ] Corrigeons donc cet oubli en ajoutant après notre création de variable texte :
[skateinmars ] puts texte
[skateinmars ] Et relancons notre programme. Youpi !
[Ptigrouick ] yes !
[xens ] puts c est propre à ruby?
[illovae ] 'tainje me disais aussi
[Coolgeek ] comment s'extasier sur un "hello world" :p
[skateinmars ] illovae: :))
[TorF ] HOURRA !
[Ptigrouick ] ben non c'est pas un hello world justement... :-)
[Aalinia ] c'est un bonjour John Doe ;)
[Coolgeek ] je remarque que le retour a la ligne est automatique
[skateinmars ] (xens: oui j'explique après)
[skateinmars ] un problème chez quelqu'un ?
[komlan ] nop
[Coolgeek ] pas de exit a la fin ?
[Coolgeek ] (comme en shell)
[skateinmars ] Coolgeek: le programme se termine quand il atteint la fin du fichier
[smarter ] comme en shell, c'est facultatif :)
[skateinmars ] Coolgeek: en effet
[skateinmars ] Mais qu'est-ce que ce `puts` ? C'est une fonction.
[skateinmars ] Les fonctions sont des concepts très important comme nous allons le voir tout de suite.
[skateinmars ] Les fonctions
[skateinmars ] -------------
[skateinmars ] Continuons un peu notre script pour le rendre intéractif.
[skateinmars ] (désolé encore pour l'orthographe)
[skateinmars ] Modifiez la ligne `prenom = "John"` par :
[skateinmars ] prenom = gets.chomp
[skateinmars ] Et relancez votre programme. Vous avez l'impression que ruby bloque mias il attends simplement une entrée.
[skateinmars ] Tapez donc votre prénom suivi de la touche entrée.
[skateinmars ] Ainsi `gets` nous a permit de récupérer le texte entré
[Aalinia ] chomp ? Ça veut dire quoi ?
[Coolgeek ] gets aurait pas suffit ?
[skateinmars ] chomp permet de retirer la fin de ligne que ruby récupère
[skateinmars ] (quand on appuie sur entree)
[Coolgeek ] ok :)
[MatToufoutu ] c'est fini ou il en reste un peu pour moi?
[illovae ] MatToufoutu: il en rsete beaucoup même :p
[MatToufoutu ] (coucou all)
[Coolgeek ] MatToufoutu : regarde la log :p
[skateinmars ] MatToufoutu: on a fait les 2/3 environ
[MatToufoutu ] ok cool
[apteno ] un peu plus long que prévu ? ^^
[Ptigrouick ] gaaaa... je vais mourir avant la fin moi !
[MatToufoutu ] meme si j'ai raté les bases, mais on va essayer de faire avec
[Coolgeek ] ACTION ventile Ptigrouick
[skateinmars ] apteno: en effet :-) mais c'est parce que vous êtes curieux :p
[MatToufoutu ] hum, 404 sur le link du topic
[skateinmars ] donc on enchaine si personne n'a de question ?
[xens ] gogogo
[smarter ] c'est pas un keyword puts?
[skateinmars ] MatToufoutu: http://u-classroom.net/logs/2009-04-30-ruby.html pour les logs
[MatToufoutu ] thx skateinmars
[skateinmars ] smarter: non c'est une fonction (du module Kernel)
[Coolgeek ] skateinmars : d'ailleurs, on a rien chargé en module
[Coolgeek ] y'a des module chargé automatiquement ?
[skateinmars ] Coolgeek: oui pas la peine, Kernel est toujorus chargé entre autres
[skateinmars ] *toujours
[smarter ] on peut passer des arguments à une fonction sans l'entourer de parenthèses en ruby? :)
[skateinmars ] smarter: je continue :p
[skateinmars ] Des instructions telles que puts et chomp sont donc des fonctions.
[skateinmars ] On vient de voir que puts sert à afficher du texte, et gets à en obtenir depuis l'entrée standard.
[skateinmars ] (le terminal)
[skateinmars ] Pour appeler une fonction il suffit d'entrer son nom, suivi si nécessaire d'une liste de valeurs appelés "arguments" ou encore "paramètres".
[skateinmars ] Les arguments seront passés à la fonction qui pourra les réutiliser.
[skateinmars ] Pour appeler une fonction on utilise donc traditionellement la forme suivante :
[skateinmars ] mafonction(argument1, argument2)
[skateinmars ] Mais ruby nous facilite la vie en rendant les parenthèses inutiles la plupart du temps. On peut donc utiliser :
[skateinmars ] mafonction argument1, argument2
[skateinmars ] Ou même simplement `mafonction` si celle ci ne prend pas de paramètres.
[Coolgeek ] la ',' est obligatoire ?
[smarter ] han je savais pas ça
[TorF ] il faut séparer les arguments par une virgule ?
[skateinmars ] Coolgeek: en gros oui
[TorF ] bon déjà c'est cool de se séparer des parenthèses :)
[skateinmars ] Coolgeek: parce que tu peut faire mafonctiona mafonctionb(arg)
[skateinmars ] et si tu fais
[skateinmars ] mafonctiona mafonctionb arg
[skateinmars ] il va pas trop comprendre si c'est 2 arguments ou autre chose
[skateinmars ] (cool j'ai appris un truc a smarter :})
[smarter ] skateinmars: merci :p
[skateinmars ] pas de question sur le principe des fonctions ?
[Coolgeek ] on peux passer un nom de fonction comme argument ?
[TorF ] à part "comment on crée une fonction ?" non :)
[apteno ] existe il par hasard un "annuaire" des fonctions ruby ? (dans le même genre que celui de php)
[skateinmars ] apteno: oui, mais on verra a la fin (tu me le rappelera ? :))
[skateinmars ] TorF: ca arrive :)
[skateinmars ] Coolgeek: tu peut faire :
[apteno ] skateinmars, ok :]
[skateinmars ] mafonctiona mafonctionb
[skateinmars ] dans ce cas la il va passer en argument a mafonctiona le resultat de mafonctionb
[Coolgeek ] oki
[skateinmars ] ca revient à faire :
[skateinmars ] mafonctiona(mafonctionb())
[Coolgeek ] et mafonctiona(mafonctionb)
[skateinmars ] Coolgeek: pareil
[freeh_ ] c'est quoi les arguments?
[Coolgeek ] meme sans les ()( ?
[skateinmars ] freeh_: c'est ce que tu donnes a une fonction
[skateinmars ] affiche(texte) << ici l'argument est "texte"
[freeh_ ] ok
[skateinmars ] Essayons maintenant de définir une fonction. Vous pouvez revenir dans irb, ou ouvrir un nouveau fichier pour entrer le code suivant :
[skateinmars ] def dit_bonjour()
[skateinmars ] puts "Salut !"
[skateinmars ] end
[skateinmars ] Vous pouvez maintenant appeler votre fonction en utilisant `dit_bonjour`, ou `dit_bonjour()`.
[skateinmars ] Le def est un mot-clé qui sert comme son nom l'indique à établir une définition. `end` marque lui la fin de cette définition.
[skateinmars ] L'indentation (le fait d'ajouter des caractères espaces ou tabluation devant du code) n'est pas nécessaire (contrairement à python),
[skateinmars ] mais elle est recommandée et extrèmement utile pour avoir un code clair et aéré.
[skateinmars ] Notez que le nom d'une fonction est important, il doit être explicite sous peine de devoir ajouter des commentaires afin de comprendre son code.
[skateinmars ] Remarquez aussi que les parenthèses sont ici optionnelles de la même manière que dans l'appel d'une fonction. La définition d'une fonction ressemble donc fortement à son appel.
[illovae ] ça équivaut à function {} en fait ?
[illovae ] en bash je veux dire
[skateinmars ] on aurait donc pu faire
[skateinmars ] def dit_bonjour
[skateinmars ] puts "'lu"
[skateinmars ] end
[skateinmars ] (vous pouvez tester tout ca dans irb, c'est plus rapide que de créer un fichier)
[skateinmars ] illovae: oui
[illovae ] ok
[Coolgeek ] yes! un hello world !
[antonino ] la définition des fonctions se placent en début du fichier?
[babounain ] Il me renvoie =>nil à la fin ... Qu'est ce que ça siginifie ?
[smarter ] antonino: elle se place où tu veux :)
[illovae ] ah il lis pas de haut en bas ?
[antonino ] smarter : ok merci
[skateinmars ] notez que comme pour les fonctions c'est une mauvaise idée d'utiliser une majuscule, des nombres ou _ en début de nom de fonction
[skateinmars ] antonino: tant que tu définit la fonction avant de l'utiliser c'est bon
[skateinmars ] babounain: j'en parle dans 2 minutes :)
[skateinmars ] petite remarque également
[babounain ] merci !
[skateinmars ] il y a plusieurs façons de nommer une fonction
[Vermoot ] def formulaire()
[Vermoot ] prenom = gets.chomp
[Vermoot ] end
[Vermoot ] ouuuuuuuuups
[skateinmars ] le camel case
[Vermoot ] trompé de fenetre
[Vermoot ] bon...sinon...ça marche ?
[skateinmars ] ou en utilisant des underscores
[skateinmars ] avec la méthode camel case on aurait dit :
[skateinmars ] def ditBonjour
[skateinmars ] (merci illovae)
[skateinmars ] la norme avec ruby c'est d'utiliser plutot les underscores
[skateinmars ] def fais_ceci
[skateinmars ] (et d'utiliser le CamelCase pour les noms de classe ou de module)
[Vermoot ] (encore desolé hein)
[illovae ] ^^
[Ptigrouick ] faut bannir vermoot pour flood ^^
[Vermoot ] snif
[skateinmars ] Vermoot: oui ca marche, tu peut tester dans irb
[skateinmars ] (penser a appuyer sur entree quand il demande le prenom, puis le nom)
[Ptigrouick ] ACTION réconforte Vermoot, mais non on t'aime bien quand même
[Vermoot ] => nil ...hein?
[Coolgeek ] bouh ! le floodeur ! il interrompt le prof quand il parle bouh !
[skateinmars ] Vermoot: je parle de ca après comme j'ai dit a babounain
[skateinmars ] je continue
[skateinmars ] Essayons à présent une fonction qui prend deux paramètres :
[skateinmars ] def nom_complet(prenom, nom)
[skateinmars ] return "#{prenom} #{nom}"
[skateinmars ] end
[skateinmars ] Je viens également d'introduire un autre concept en ruby : à l'intérieur d'un string, on peut utiliser #{} pour appeler du code ruby (ici des variables) qui sera inséré à cet endroit.
[skateinmars ] Notez qu'il faut déclarer notre string en utilisant les guillemets doubles pour pouvoir utiliser cette fonctionnalité.
[skateinmars ] Vous voyez ici l'utilisation du mot-clé return. Utilisé dans une fonction, cette instruction arrête son exécution (si il reste du code après cette directive, celui-ci ne sera pas executé) et retourne la valeur spécifiée.
[skateinmars ] Nous nous sommes déjà servi du mécanisme de renvoi de valeurs :
[skateinmars ] a = 2+2
[skateinmars ] Assigne à la variable a la valeur renvoyée par l'instruction 2+2. Vous en déduisez donc que l'on peut faire :
[skateinmars ] mon_nom = nom_complet("John", "Doe")
[apteno ] interactif ou pas ?
[Ptigrouick ] ben puts mon_nom ...
[skateinmars ] apteno: non dans un script par exemple
[superk ] petite question : c'est quoi le CamelCase?
[Patlord ] puts mon_nom
[Aalinia ] puts nom_complet "John", "Doe"
[illovae ] oulah
[skateinmars ] ok pour Patlord et Aalinia, c'etait juste pour vérifier si vous suiviez :-p
[Aalinia ] c'est rigolo sans les parenthèses, mais ça devient vite illisible
[skateinmars ] superk: comme je l'ai expliqué c'est juste une norme d'écriture
[Ptigrouick ] j'aime pas sans les parenthèses c'est l'art de gagner 2 caractères pour rendre un code moins lisible
[Ptigrouick ] ... mauvais calcul ça
[superk ] ok ;)
[skateinmars ] c'est surtout vrai si on utilise une fonction dans une fonction
[skateinmars ] sinon ca reste simple
[skateinmars ] et vous n'êtes pas obligés de faire comme ça :)
[Ptigrouick ] oui mais bon comme dans certains cas faut éviter
[illovae ] j'ai pas pigé ce que fait return en fait ?
[Ptigrouick ] vaut mieux éviter tout le temps
[skateinmars ] illovae: alors
[skateinmars ] quand tu fais calcul = 2 + 2
[skateinmars ] ruby va examiner 2 + 2
[skateinmars ] et exécuter ce code
[skateinmars ] le résultat de l'exécution de code code est `4`
[illovae ] oui
[skateinmars ] il va donc renvoyer 4
[skateinmars ] et avec calcul = ...
[skateinmars ] on dit a ruby de mettre dans calcul le résultat de cette exécution
[skateinmars ] donc 4
[skateinmars ] ici avec return "#{prenom} #{nom}"
[skateinmars ] ruby va renvoyer ce qui est donné à return
[TorF ] return, c'est la valeur retournée par la fonction
[skateinmars ] donc "#{prenom} #{nom}" (et il remplace prenom et nom donc)
[illovae ] hum
[Ptigrouick ] bah le return c'est présent dans à peu près tous les langages tu connaissais pas illo ?
[skateinmars ] illovae: donc si on fait variable = nom_complet "John", "Doe"
[illovae ] Ptigrouick: ah non mais je suis un noob moi en "languages"
[Ptigrouick ] illovae: ah bon ?
[skateinmars ] illovae: tu vois que ruby va "mettre dans variable" la valeur "John Doe"
[skateinmars ] illovae: tu as compris ?
[illovae ] ah tout simplement ?
[illovae ] ok oui oui j'ai pigé
[Ptigrouick ] ACTION croyais que illovae était un DIEU ...
[skateinmars ] illovae: oui c'est simple :)
[illovae ] non je suis plus proche de la défection dromadariale que du dieu omnipotent
[illovae ] skateinmars: ouaip
[Ptigrouick ] raaaah ptin j'suis déçu... :p
[apteno ] fail.
[skateinmars ] illovae: donc après tu peut faire puts(nom_complet("mon prenom", "nom"))
[Coolgeek ] you failed at prog illo
[Vermoot ] You're doing it wrong
[illovae ] skateinmars: ok ouai je vois
[skateinmars ] Coolgeek: ce cours est fait pour les debutants aussi ;-)
[Coolgeek ] je sais ^
[Vermoot ] comme moi :D
[skateinmars ] donc continuons
[skateinmars ] Sachez aussi que ruby a une particularité, qui est de renvoyer la valeur de la dernière instruction présente dans une fonction si aucun mot-clé return n'est rencontré.
[skateinmars ] Par exemple :
[skateinmars ] def double val
[skateinmars ] val * 2
[skateinmars ] end
[skateinmars ] En essayant
[skateinmars ] double 8
[skateinmars ] ou double(8)
[skateinmars ] On obtiendra bien 16 qui est la valeur renvoyée par l'instruction `val * 2` lorsque val est égale à 8.
[skateinmars ] ok ? :-)
[Coolgeek ] je suppose que c'est pas trop a ecrire dans un souci de lisibilité
[Coolgeek ] (a ne psa ecrirte dans ce cas la)
[illovae ] tu fais juste un 8 * 2 là c'est tout en fait non ?
[Aalinia ] on fait comment pour lire (sur l'entrée standard) un nombre ?
[skateinmars ] Coolgeek: si ta fonction fais peu de lignes c'est tout a fait clair
[Ptigrouick ] ben surtout que tu risques de renvoyer n'importe quoi sans faire attention ...
[illovae ] je vois pas où est le souci moi...
[Vermoot ] skateinmars, ouais mais pour doubler c'est pas forcément necessaire...
[skateinmars ] illovae: ils ont trop fait de php c'est tout :-D
[Ptigrouick ] mouarf :p
[skateinmars ] Vermoot: c'est a dire ?
[skateinmars ] (je comprend pas ta phrase)
[illovae ] Vermoot: c'est juset un exemple pour la forme :p
[Vermoot ] skateinmars, bah une fonction pour doubler une variable c'est pas un peu...Superflu? juste var*2 non?
[Vermoot ] illovae, oui bien sur je sais ;D
[skateinmars ] Aalinia: il y a une méthode pour convertir un string en nombre, redemande moi ca a la fin :)
[Vermoot ] histoire de bien comprendre ce que c'est q'uune fonction
[Aalinia ] ok
[skateinmars ] Vermoot: oui c'est juste un exemple :) la fonction servira jamais dans "le monde réel"
[Ptigrouick ] y'en a encore pour longtemps le cours ? parce que si je mange pas rapidement je vais tomber en syncope moi
[skateinmars ] bon on continue
[skateinmars ] j'accélère ?
[apteno ] oui !
[illovae ] Ptigrouick: lol
[Vermoot ] heu non merci
[illovae ] Vermoot: +1 :D
[skateinmars ] bon en gros il reste seulement les tests en fait donc ca va, on y est presque arrivé
[Ptigrouick ] oki :-)
[skateinmars ] Il y a bien d'autres choses à dire sur les fonctions, mais ce que l'on a appris ici devrait être suffisant pour la suite du cours.
[skateinmars ] Une petite remarque toutefois, essayez dans irb :
[skateinmars ] puts "test"
[skateinmars ] Vous verrez que irb renvoie `nil`. En ruby, `nil` représente l'absence totale de valeur, et vous le rencontrerez à de nombreuses reprises.
[skateinmars ] comme on me l'a fait remarqué ruby renvoie aussi nil quand on définit une fonction
[apteno ] hum, null aurait été plus clair
[illovae ] 'nil' c'est la version orale de 'null' en japonnais ? ou ça veut vraiment dire quelque chose ?
[Aalinia ] c'est comme en Ada
[Coolgeek ] le createur de ruby etait egyptien ?
[illovae ] Coolgeek: nippon
[skateinmars ] comme le dit apteno vous connaissez peut-être déjà NULL (ou null)
[skateinmars ] illovae: nil est bien un mot anglais
[Ptigrouick ] c'est pour ça que son langage est pas mauvais
[skateinmars ] ca représente le vide en gros
[Ptigrouick ] nippon ni mauvais...
[Coolgeek ] erf... parce qu'il deviat bien aimer le nil il me semble non ?
[illovae ] ah je trouvais ça pas mal en japonnais moi : wakatebayo nil, uruseeee
[Coolgeek ] ACTION fui
[illovae ] ACTION tape Ptigrouick
[skateinmars ] (bande de cancres :o)
[skateinmars ] je continue :)
[skateinmars ] Les tests conditionnels
[skateinmars ] Les tests conditionnels sont également un concept de base en programmation. Il servent à effectuer des actions selon le résultat d'une instruction.
[skateinmars ] La syntaxe d'un test basique est la suivante :
[skateinmars ] if(4 > 2)
[skateinmars ] puts "4 est plus grand que 2"
[skateinmars ] end
[skateinmars ] Ce code peut se lire ainsi : "si 4 est supérieur à 2, j'exécute puts "4 est plus grand que 2"
[skateinmars ] C'est avec les tests conditionnels que les booléens vu plus haut prennent toute leur utilité.
[skateinmars ] Notez également le `end` qui sert bien à délimiter des blocs de code.
[xens ] yep
[Vermoot ] say comme le C encore...
[Vermoot ] if, else, then, then if... ?
[xens ] vermoot: python je t'ai dit :P
[Ptigrouick ] et le else ... elseif ?
[skateinmars ] petite remarque, contrairement à php par exemple, les seules choses qui sont équivalentes à false sont false, et nil
[apteno ] et if 4 > 2 fonctionne ? (sans les parenthèses)
[Vermoot ] xens, may je connay pas python
[xens ] :]
[skateinmars ] apteno: oui
[skateinmars ] Vermoot: pas besoin de then
[illovae ] skateinmars: ah ? tu fais comment alors ?
[skateinmars ] illovae: ben comme je vient de l'écrire ? :))
[skateinmars ] (tu confonds avec else peut-etre)
[Coolgeek ] xens : python.. je me sent oppresser avec lui.. voir il me fait l'effet d'etre "constrictuer" :p
[xens ] lol
[illovae ] skateinmars: ah oui pardon
[illovae ] désolé j'avais mal lu
[Ptigrouick ] et le else ... elseif c'est quoi la syntaxe ?
[skateinmars ] ### Et sinon ? ###
[skateinmars ] Un test conditionnel ne se limite pas au if, on peut également exécuter du code si la condition n'est pas remplie, comme ceci :
[skateinmars ] if user_is_authorized
[skateinmars ] puts "Accès autorisé"
[skateinmars ] end
[skateinmars ] On peut également utiliser `elsif` pour exécuter un autre test si le premier échoue :
[skateinmars ] if age >= 18
[skateinmars ] personne = "majeur"
[skateinmars ] personne = "moins de 16 ans"
[skateinmars ] end
[skateinmars ] (Le dernier bloc else étant optionnel si vous n'en avez pas besoin.)
[illovae ] ouai "normal" quoi y'a pas de difficulté particulière avec ça on dirait
[Vermoot ] skateinmars, if (var1 > var2) if (var1 < var3) puts "#{var1} est entre #{var2} et #{var3}" ???
[Coolgeek ] si user_is_authorized est une fonction... un `return false` ou `return true` est faisable dans cette fonction ?
[Vermoot ] (pour then if)
[skateinmars ] Vermoot: je comprends pas ta phrase ^^'
[smarter ] Vermoot: if (var3 > var1 and var1 > var2) plutôt
[Vermoot ] skateinmars, ok
[skateinmars ] Coolgeek: oui (remarque que comme dit plus haut tout est true en ruby sauf false et nil)
[Vermoot ] smarter, ok
[skateinmars ] donc if "texte"
[apteno ] smarter, and == && ?
[skateinmars ] sera bon
[Vermoot ] donc le and fait office de liant enre les deux conditions
[apteno ] (en ruby je parle)
[Coolgeek ] une variable peux contenir true ou false ?
[smarter ] apteno: les deux sont possible, je sais pas si y'a une différence subtile entre eux
[skateinmars ] apteno: oui
[skateinmars ] Coolgeek: oui bien sur : bool = 1 < 2
[apteno ] ok (en php en tout cas, && a une plus grande importance d'après ce que j'ai lu)
[Coolgeek ] et bool = false ?
[TorF ] (je redébarque) donc le chiffre 0 est considéré comme true dans un test ?
[skateinmars ] apteno: non pas de différence entre les 2
[skateinmars ] TorF: oui
[skateinmars ] ainsi que ''
[apteno ] ok :]
[TorF ] merci, mais ca craint un max ! :D
[skateinmars ] non c'est plus propre ;)
[skateinmars ] Coolgeek: oui
[skateinmars ] donc on peut bien faire :
[skateinmars ] if (4 > 2) and (5 > 3)
[skateinmars ] ou encore :
[skateinmars ] if (nombre == 42) or (nombre > 9000)
[skateinmars ] dans le premier cas les deux conditions doivent etre respectées
[skateinmars ] dans le deuxième cas il suffit d'une seule condition
[skateinmars ] (ruby testera la première condition puis la deuxième)
[skateinmars ] notez que 'and' et 'or' peuvent etre remplacés par '&&' et '||' respectivement
[skateinmars ] enfin sachez qu'on peut enchainer les and/or
[skateinmars ] il n'est pas rare de trouver dans une application ruby ce genre de code :
[skateinmars ] mavariable = variable1 || var2 || var3
[skateinmars ] ce qui veut dire :
[skateinmars ] mavarible sera égal à variable1, ou si elle est fausse var2, ou si elle est fausse var3
[Coolgeek ] les ( et ) servent a déterminer un ordre pour interprétation du test je suppose
[Vermoot ] et allez, encore un 42...bande de geeks !
[babounain ] et xor existe aussi ?
[skateinmars ] (je suis un peu sorti du if/else)
[skateinmars ] Coolgeek: oui
[smarter ] ah ouais, ça assigne pas true ou false à la variable ton truc?
[illovae ] Vermoot: cay pô geek 42!!
[Vermoot ] on aura un exemple de code source d'application en ruby après, pour voir ?
[skateinmars ] smarter: non :)
[Coolgeek ] mavariable est egale a quoi si les 3 variables sont fausse ?
[Vermoot ] a false
[smarter ] ACTION est choqué :p
[illovae ] Vermoot: install rbot :p
[skateinmars ] Coolgeek: a la valeur de la derniere variable
[Vermoot ] ah, perdu
[xens ] ACTION va aller au pieut :)
[apteno ] illovae, :D
[skateinmars ] Vermoot: oui donc certainement false ou nil
[illovae ] apteno: ^^
[xens ] merci pour le cours skate
[skateinmars ] xens: il reste 5 minutes ;)
[xens ] je lis la fin demain sur le web
[Vermoot ] illovae, ouais mais je veux voir le code moi :D
[xens ] oki :D
[smarter ] Vermoot: apt-get source :]
[Coolgeek ] Vermoot : espce de pisseur de code
[skateinmars ] smarter: c'est souvent utilisé quand on teste nil
[illovae ] Vermoot: ls /usr/lib/ruby/1.8 && ls /usr/share/rbot/plugins/ :0
[skateinmars ] petite remarque aussi, on peut faire :
[illovae ] Vermoot: et vi /usr/bin/rbot :P
[skateinmars ] puts "youpi !" if 4 < 10
[skateinmars ] (une forme raccourcie donc)
[illovae ] ah ouai sympas ça
[skateinmars ] ### Unless ###
[skateinmars ] Vous vous demandez peut-être maintenant comment tester le contraire d'une expression, sans passer par `else`.
[skateinmars ] Pour cela vous pouvez utiliser l'opérateur `!` (appelé "bang"), présent dans tous les langages classiques, comme ceci :
[skateinmars ] if !user_is_authorized
[skateinmars ] puts "Accès interdit"
[skateinmars ] end
[skateinmars ] Mais ruby peut faire mieux. Il propose en effet l'instruction `unless` :
[skateinmars ] unless user_is_authorized
[skateinmars ] puts "Accès interdit"
[skateinmars ] end
[skateinmars ] On peut également compléter cela avec un `else` (mais pas utiliser elsif).
[Ptigrouick ] ACTION vient à peine de se rendre compte que y'a pas de ; entre les instructions...
[skateinmars ] Ptigrouick: c'est facultatif comme en bash ;)
[illovae ] attend donc pas de elseif quand y'a unless ? ça paraît logique, mais si on en as besoin on passe par un if !plouf ?
[Vermoot ] du coup on peut aussi en mettre plusieurs ? unless XXXXX && YYYYYYYYY
[skateinmars ] illovae: oui
[illovae ] Ptigrouick: il est temps ^^
[skateinmars ] Vermoot: oui comme avec if
[illovae ] skateinmars: ok
[Ptigrouick ] illovae: oui hein ? mais bon j'ai pas encore mangé :p
[skateinmars ] illovae: note que c'est rare d'utiliser unless et else vu que ca revient a inverser un if/else classique
[illovae ] Ptigrouick: krkrkr ;)
[skateinmars ] des questions sur les tests conditionnels ?
[illovae ] skateinmars: ouai, mais ça peut être pratique, j'ai déjà des idées d'application...
[skateinmars ] (la fin arrive :p)
[skateinmars ] Conclusion
[skateinmars ] ----------
[skateinmars ] Avant de nous quitter, sachez que vous pouvez gagner du temps dans l'utilisation d'irb en activant des fonctionnalités avancées de l'interpréteur.
[skateinmars ] Pour cela il vous faudra modifier votre fichier ~/.irbrc pour y ajouter des options, à la manière d'un bashrc.
[skateinmars ] Vous trouverez un exemple de fichier irbrc ici : http://gist.github.com/104140 pour activer entre autres l'autocomplétion et un fichier d'historique de commandes.
[skateinmars ] (vous noterez que ce fichier est un fichier source ruby. ne vous inquietez pas si vous ne comprenez pas son contenu ! :))
[skateinmars ] Il est maintenant temps de nous quitter. Vous êtes à présent équipés (je l'espère) de quelques unes des connaissances de base nécessaires à la création d'un programme informatique.
[skateinmars ] J'ai malheureusement dû omettre de grosses parts du langage et des concepts de la programmation (avec entre autres évidemment les boucles, les classes...).
[skateinmars ] Ce cours est donc seulement le début d'une série sur le sujet, et j'espère vous retrouver pour la suite du programme !
[illovae ] yeah!!
[skateinmars ] N'hésitez pas à nous donner votre feedback sur ce cours (ici, ou sur le blog), ou vos suggestions, afin de mieux orienter les suivants.
[skateinmars ] Enfin sachez que les logs et le cours seront disponibles rapidement sur notre site http://u-classroom.net
[skateinmars ] Merci de m'avoir suivi :-)
[apteno ] Et cet annuaire de fonction ? :p
[kinouchou ] skateinmars: il est bien ton cours
[skateinmars ] drring ;)
[Ptigrouick ] super cette intro skate
[illovae ] super merci skateinmars ^^
[alkove ] merci beaucoup :)
[Ptigrouick ] mais j'ai la daaaaaaaaaaaaaaaalle !!
[Vermoot ] ptit jeu de mots avec programme ^^
[babounain ] bravo !
[xens ] merci pour le job :-) bien cool!
[smarter ] Vermoot: si tu veux voir du code, du vrai, balade toi sur http://github.com, c'est rempli de machins en ruby :]
[TorF ] franchement merci skateinmars pour le cours, et merci à tous pour la participation et l'ambiance
[xens ] bonne nuit @+
[illovae ] skateinmars: !logend :P
[Ptigrouick ] donc tcho merci pour tout a + .... bafr bafr
[Vermoot ] smarter, je verrai ça :D
[antonino ] skateinmars, merci
[skateinmars ] apteno: alors il y a http://www.ruby-doc.org/ (section Core API) mais il faut un peu connaitre ce qu'est une classe donc on verra ca a la session suivante :-)
[apteno ] ok, merci :]
[skateinmars ] (quelqu'un avait une question en stock aussi je crois ?)
[TorF ] quelles sont les utilisations réelles de ruby ? du shell ? appli web ? applis locales ? etc.
[kinouchou ] tu as une idée de quand est la session suivante?
[skateinmars ] kinouchou: j'ai les themes, il me reste a écrire le cours
[kinouchou ] ok
[skateinmars ] kinouchou: selon ce que veulent faire illovae et gpocentek ca peut etre dans 2 semaines
[kinouchou ] ok
[skateinmars ] TorF: alors donc il y a ruby on rails, un framework pour créer des sites/applications web, et plein d'autres :p
[skateinmars ] TorF: on en faire autant que python en gros
[TorF ] bin python aussi chui à la ramasse, faut que je rattrape le temps perdu
[superk ] skateinmars, merci pour cette intro à Ruby
[kaooo ] moi j'ai raté le cours, mais je vous félicite de ce que vous faites . c'est vraiment interessant
[TorF ] donc ce serait plutôt applis web avec le fameux ruby on rails
[skateinmars ] kaooo: on va mettre les logs a dispo :)