Derniers messages sur Zeste de Savoirhttps://zestedesavoir.com/forums/2023-01-03T21:03:21+01:00Les derniers messages parus sur le forum de Zeste de Savoir.Une introduction à Ruby, message #2481212023-01-03T21:03:21+01:00Karnaj/@Karnajhttps://zestedesavoir.com/forums/sujet/1398/une-introduction-a-ruby/?page=7#p248121<p>Bonjour les agrumes !</p>
<p>La bêta a été mise à jour et décante sa pulpe
à l’adresse suivante :</p>
<div class="align-center"><p> <a href="https://zestedesavoir.com/contenus/beta/634/une-introduction-a-ruby/">Une introduction à Ruby</a> </p></div>
<p>Merci d’avance pour vos commentaires.</p>
<p>TODO.</p>
<ul>
<li>Finir chapitre « Présentation du joyau ».</li>
<li>Exercice chapitre « De bonnes classes ».</li>
<li>Exercice chapitre « Les classes plus en profondeur ».</li>
</ul>Une introduction à Ruby, message #2477642022-12-20T16:47:51+01:00Karnaj/@Karnajhttps://zestedesavoir.com/forums/sujet/1398/une-introduction-a-ruby/?page=7#p247764<p>Bonjour les agrumes !</p>
<p>La bêta a été mise à jour et décante sa pulpe
à l’adresse suivante :</p>
<div class="align-center"><p> <a href="https://zestedesavoir.com/contenus/beta/634/une-introduction-a-ruby/">Une introduction à Ruby</a> </p></div>
<p>Merci d’avance pour vos commentaires.</p>Une introduction à Ruby, message #2319062021-03-06T18:45:57+01:00Karnaj/@Karnajhttps://zestedesavoir.com/forums/sujet/1398/une-introduction-a-ruby/?page=7#p231906<p>Bonjour les agrumes !</p>
<p>La bêta a été mise à jour et décante sa pulpe
à l’adresse suivante :</p>
<div class="align-center"><p> <a href="https://zestedesavoir.com/contenus/beta/634/une-introduction-a-ruby/">Une introduction à Ruby</a> </p></div>
<p>Merci d’avance pour vos commentaires.</p>Une introduction à Ruby, message #2312172021-02-15T18:36:07+01:00Karnaj/@Karnajhttps://zestedesavoir.com/forums/sujet/1398/une-introduction-a-ruby/?page=6#p231217<p>Bonjour les agrumes !</p>
<p>La bêta a été mise à jour et décante sa pulpe
à l’adresse suivante :</p>
<div class="align-center"><p> <a href="https://zestedesavoir.com/contenus/beta/634/une-introduction-a-ruby/">Une introduction à Ruby</a> </p></div>
<p>Merci d’avance pour vos commentaires.</p>Une introduction à Ruby, message #2281812020-11-17T15:20:18+01:00Karnaj/@Karnajhttps://zestedesavoir.com/forums/sujet/1398/une-introduction-a-ruby/?page=6#p228181<p>Bonjour les agrumes !</p>
<p>La bêta a été mise à jour et décante sa pulpe
à l’adresse suivante :</p>
<div class="align-center"><p> <a href="https://zestedesavoir.com/contenus/beta/634/une-introduction-a-ruby/">Une introduction à Ruby</a> </p></div>
<p>Merci d’avance pour vos commentaires.</p>Une introduction à Ruby, message #2279102020-11-11T16:30:50+01:00Karnaj/@Karnajhttps://zestedesavoir.com/forums/sujet/1398/une-introduction-a-ruby/?page=6#p227910<p>Bonjour les agrumes !</p>
<p>La bêta a été mise à jour et décante sa pulpe
à l’adresse suivante :</p>
<div class="align-center"><p> <a href="https://zestedesavoir.com/contenus/beta/634/une-introduction-a-ruby/">Une introduction à Ruby</a> </p></div>
<p>Merci d’avance pour vos commentaires.</p>Une introduction à Ruby, message #2223492020-06-13T21:25:48+02:00Karnaj/@Karnajhttps://zestedesavoir.com/forums/sujet/1398/une-introduction-a-ruby/?page=6#p222349<p>Bonjour les agrumes !</p>
<p>La bêta a été mise à jour et décante sa pulpe
à l’adresse suivante :</p>
<div class="align-center"><p> <a href="https://zestedesavoir.com/contenus/beta/634/une-introduction-a-ruby/">Une introduction à Ruby</a> </p></div>
<p>Merci d’avance pour vos commentaires.</p>Une introduction à Ruby, message #2211692020-05-23T16:34:52+02:00lhp22/@lhp22https://zestedesavoir.com/forums/sujet/1398/une-introduction-a-ruby/?page=6#p221169<p>Owi du pattern matching ! <img src="/static/smileys/svg/1f60d.svg" alt="<3" class="smiley"> c’est ma raison principale d’aimer OCaml et il est bien trop absent de beaucoup trop de langages à mon sens ! <img src="/static/smileys/svg/1f60d.svg" alt="<3" class="smiley"></p>
<p>Bref, OK. J’ai découvert que Mastodontes utilisait ROR d’ailleurs, ça me parait être un gage de '’oui, ce langage est toujours d’actualité’' <img src="/static/smileys/svg/smile.svg" alt=":)" class="smiley"></p>Une introduction à Ruby, message #2211652020-05-23T15:44:05+02:00Karnaj/@Karnajhttps://zestedesavoir.com/forums/sujet/1398/une-introduction-a-ruby/?page=6#p221165<blockquote>
<p>Coucou ! Ce cours m’enjaille de plus en plus. Je vais peut-être y consacrer du temps dans les prochains jours (python me gonfle, et j’ai pas du tout envie de faire du scripting en bash). Bravo pour ton travail.</p>
</blockquote>
<p>Merci, ça veut dire que le tutoriel remplit totalement son objectif. <img src="/static/smileys/svg/smile.svg" alt=":)" class="smiley"> je fais également quelques scripts en Ruby et c’est plutôt cool. La bibliothèque standard a de très bons outils pour (je pense notamment à <a href="https://ruby-doc.org/core/Dir.html"><code>Dir</code></a> et à <a href="https://ruby-doc.org/core/File.html"><code>File</code></a>.</p>
<blockquote>
<p>J’ai une question très humble qui peut paraître totalement méchante et je te prie de bien vouloir ne pas la prendre ainsi. Est-ce que Ruby est encore bien soutenue ? J’en ai beaucoup entendu parler il y a un peu moins d’une dizaine d’années, mais je le vois très peu en ce moment. Désolé si ma question te blesse :s</p>
</blockquote>
<p>Ma blessure est sans égal et saigne à flot. <img src="/static/smileys/svg/langue.svg" alt=":p" class="smiley"> En France, il n’est pas forcément le plus populaire, surtout quand on le compare avec Python, mais il reste quand même utilisé. Le langage est toujours maintenu (la version 2.7.1 est sortie en mars). La version 2.7 a notamment apporté un support expérimental du <em>pattern matching</em>. Le but avec toutes ces versions est d’arriver à la version 3 qui apportera plusieurs nouveautés dont du <em>type checking</em> et un nouveau modèle de concurrence.</p>Une introduction à Ruby, message #2211372020-05-23T04:15:29+02:00lhp22/@lhp22https://zestedesavoir.com/forums/sujet/1398/une-introduction-a-ruby/?page=6#p221137<p>Coucou ! Ce cours m’enjaille de plus en plus. Je vais peut-être y consacrer du temps dans les prochains jours (python me gonfle, et j’ai pas du tout envie de faire du scripting en bash). Bravo pour ton travail.</p>
<p>J’ai une question très humble qui peut paraître totalement méchante et je te prie de bien vouloir ne pas la prendre ainsi. Est-ce que Ruby est encore bien soutenue ? J’en ai <em>beaucoup</em> entendu parler il y a un peu moins d’une dizaine d’années, mais je le vois très peu en ce moment. Désolé si ma question te blesse :s</p>Une introduction à Ruby, message #2209152020-05-18T17:25:12+02:00Karnaj/@Karnajhttps://zestedesavoir.com/forums/sujet/1398/une-introduction-a-ruby/?page=6#p220915<p>Bonjour les agrumes !</p>
<p>La bêta a été mise à jour et décante sa pulpe
à l’adresse suivante :</p>
<div class="align-center"><p> <a href="https://zestedesavoir.com/contenus/beta/634/une-introduction-a-ruby/">Une introduction à Ruby</a> </p></div>
<p>Merci d’avance pour vos commentaires.</p>
<hr>
<p>Après le retour de validation de <a href="/membres/voir/adri1/" rel="nofollow" class="ping ping-link">@<span class="ping-username">adri1</span></a>, la partie sur la POO est remaniée, dans la partie <a href="https://zestedesavoir.com/contenus/beta/634/une-introduction-a-ruby/poo-chantier/">POO chantier</a> qui sera à terme la partie POO. En voici un plan.</p>
<h3 id="objets-et-classes">Objets et classes<a aria-hidden="true" href="#objets-et-classes"><span class="icon icon-link"></span></a></h3>
<h4 id="ruby-et-les-objets">Ruby et les objets<a aria-hidden="true" href="#ruby-et-les-objets"><span class="icon icon-link"></span></a></h4>
<ul>
<li>C’est quoi un objet ?</li>
<li>Ruby est un langage orienté objet, tout est objet en Ruby.</li>
<li>On agit sur les objets à l’aide de méthodes.</li>
<li>Création du premier objet avec <code>Objct.new</code> et ajout de méthodes à cet objet.</li>
<li>Introduction des attributs et de méthodes pour y accéder et les modifier.</li>
</ul>
<h4 id="un-modèle-de-construction">Un modèle de construction<a aria-hidden="true" href="#un-modèle-de-construction"><span class="icon icon-link"></span></a></h4>
<ul>
<li>Classe = moule pour créer des objets.</li>
<li>Création de la première classe.</li>
<li>Vocabulaire instances, méthodes d’instance, etc.</li>
<li>Constructeur avec méthode <code>initialize</code>.</li>
</ul>
<h4 id="des-méthodes-usuelles">Des méthodes usuelles<a aria-hidden="true" href="#des-méthodes-usuelles"><span class="icon icon-link"></span></a></h4>
<ul>
<li>Accesseurs et mutateurs avec <code>attr_reader</code>, <code>attr_writer</code> et <code>attr_accessor</code>.</li>
<li>Tout ce qui est conversion (<code>to_s</code>, etc.).</li>
<li>Opérateurs sont aussi des méthodes.</li>
</ul>
<h4 id="exercices">Exercices<a aria-hidden="true" href="#exercices"><span class="icon icon-link"></span></a></h4>
<p>Création d’une classe pour représenter des durées.</p>
<h3 id="les-classes-plus-en-profondeur">Les classes plus en profondeur<a aria-hidden="true" href="#les-classes-plus-en-profondeur"><span class="icon icon-link"></span></a></h3>
<h4 id="retour-sur-les-méthodes">Retour sur les méthodes<a aria-hidden="true" href="#retour-sur-les-méthodes"><span class="icon icon-link"></span></a></h4>
<ul>
<li>Les méthodes d’instances sont dans les classes, pas dans les objets.</li>
<li>On peut ouvrir une classe.</li>
<li>Méthodes singletons sont aussi dans une classe appelée classe singleton.</li>
<li>Algorithme de <em>lookup</em> => regarder les méthodes d’instances dans la classe singleton, puis celles dans la classe, puis celles dans <code>Object</code>. </li>
</ul>
<h4 id="objet-courant">Objet courant<a aria-hidden="true" href="#objet-courant"><span class="icon icon-link"></span></a></h4>
<ul>
<li>Quand on écrit <code>method_name</code>, Ruby sait pour quel objet il faut appeler cette méthode => objet courant.</li>
<li>Plot twist : <code>puts</code>, <code>print</code> et les méthodes déclarées au <em>top level</em> sont des méthodes de tous les objets ce qui explique qu’on puisse les appeler partout.</li>
<li><code>self</code> permet d’accéder à l’objet courant.</li>
<li>Méthodes <em>bang</em>.</li>
<li><code>main</code> = objet courant au <em>top level</em>.</li>
</ul>
<h4 id="les-classes-sont-des-objets">Les classes sont… des objets<a aria-hidden="true" href="#les-classes-sont-des-objets"><span class="icon icon-link"></span></a></h4>
<ul>
<li>Classes ont des méthodes.</li>
<li>Définir méthodes de classe = définir méthodes singleton pour un objet qui est la classe en question.</li>
<li>Utile par exemple pour fournir d’autres constructeurs.</li>
<li>En tant qu’objet, a aussi des variables d’instances.</li>
<li>Peut mettre constante de classe.</li>
<li>Modèle de structure de classe.</li>
</ul>
<h4 id="exercices-non-écrit-pour-le-moment">Exercices (Non écrit pour le moment)<a aria-hidden="true" href="#exercices-non-écrit-pour-le-moment"><span class="icon icon-link"></span></a></h4>
<p>Gestion de compte en banque. Trois monnaies, le <code>Z</code>, le <code>S</code> et le <code>C</code> avec des taux de change (fixe ou variables ?). Une banque a une monnaie et des frais de change vers les autres monnaies, frais qui ne doivent pas excéder un maximum. Avec un compte on peut ajouter et retirer de l’argent. On peut comparer deux banques pour savoir laquelle est la mieux pour jouer avec un certain type de monnaie. Une banque peut aussi comparer ses clients.</p>
<p>Aller plus loin => rajouter client. Client = humains => possède vrai argent dans devise, peut retirer, ajouter en utilisant un compte, peut obtenir un compte dans une banque, supprimer son compte, etc. </p>
<h3 id="de-bonnes-classes">De bonnes classes<a aria-hidden="true" href="#de-bonnes-classes"><span class="icon icon-link"></span></a></h3>
<h4 id="des-fournisseurs-de-services">Des fournisseurs de services<a aria-hidden="true" href="#des-fournisseurs-de-services"><span class="icon icon-link"></span></a></h4>
<ul>
<li>Exemple du chat avec attributs pour l’énergie et la faim.</li>
<li>Mais, ces attributs sont internes au chat. Ce qu’on veut c’est savoir s’il est fatigué/a faim.</li>
<li>Construire une classe => se demander quels services on doit pouvoir demander à une instance.</li>
<li>Solution, méthode <code>hungry?</code> et <code>tired?</code></li>
<li>Tout ça forme l’interface de la classe.</li>
<li>Pour avoir une bonne interface, rendre certaines méthodes inaccessibles => visibilité.</li>
<li>Méthodes privées et protégées.</li>
<li>Visibilité = aide pour le programmeur => rendre privé ce qui doit être privé.</li>
<li>Nouveau Modèle de structure de classe.</li>
</ul>
<h4 id="une-histoire-dinvariants">Une histoire d’invariants<a aria-hidden="true" href="#une-histoire-dinvariants"><span class="icon icon-link"></span></a></h4>
<ul>
<li>Un objet doit rendre son service bien. Par exemple afficher <code>28:12:03</code>, c’est une erreur.</li>
<li>Pour ça, il doit notamment être dans un état correct (s’il y a un attribut <code>hour</code> et que c’est lui qui est affiché, il ne doit pas pouvoir avoir la valeur <code>28</code>).</li>
<li>On doit s’assurer que l’objet garde un état correct de sa création jusqu’à la fin du programme. => Respecter les invariants.</li>
<li>Lorsque des méthodes modifient des attributs, il y a des chances d’obtenir un objet dans un état incorrect, faire attention à cela.</li>
<li>Une bonne visibilité aide à conserver les invariants.</li>
<li>Encapsulation = n’offrir que des services permettant de respecter les invariants.</li>
<li>Qu’utiliser lorsque nous programmons la classe, attributs ou accesseurs/mutateurs => faire des choix et rester cohérent. Toujours faire attention au respect des invariants.</li>
</ul>
<h4 id="de-bons-et-loyaux-services">De bons et loyaux services<a aria-hidden="true" href="#de-bons-et-loyaux-services"><span class="icon icon-link"></span></a></h4>
<ul>
<li>L’objectif est de fournir de bons services : code clair, facile à tester et maintenir.</li>
<li>Identifier le service, c’est identifier un contrat entre la méthode et son utilisateur : si tu me donnes ça, je te garantis ça => notions de préconditions et de postconditions. Mention du TDD.</li>
<li>Pour faciliter tout ça, des services simples, donc des méthodes simples. En particulier, une méthode = un service. Mention du SRP.</li>
<li>Avoir une classe permet de donner du sens à certains objets et à certaines opérations et donc d’avoir un code plus clair. Par exemple, on n’additionne pas les températures et les distances. En particulier, rajout (et respect) d’invariants et de contrats facilités (on ne construit pas d’objets incohérents et nos services les gardent dans des états cohérents). </li>
<li>Un objet peut être compris comme les services qu’il peut rendre => Duck Typing, une méthode n’attend pas un objet d’une certaine classe, mais juste un objet qui sait rendre les services qu’on lui demandera. <code>print</code> par exemple attend juste un objet qui sait s’afficher avec <code>to_s</code>.</li>
</ul>
<h4 id="exercices-non-écrit">Exercices (Non écrit)<a aria-hidden="true" href="#exercices-non-écrit"><span class="icon icon-link"></span></a></h4>
<h3 id="les-modules">Les modules<a aria-hidden="true" href="#les-modules"><span class="icon icon-link"></span></a></h3>
<h4 id="les-modules-1">Les modules<a aria-hidden="true" href="#les-modules-1"><span class="icon icon-link"></span></a></h4>
<ul>
<li>On crée un premier module. </li>
<li>Permet de regrouper des méthodes et des constantes.</li>
<li>Introduction de <code>module_function</code>.</li>
<li>Les modules sont des espaces de noms.</li>
<li>On peut inclure un module => analogie avec un tiroir qu’on déverse.</li>
</ul>
<h4 id="modules-et-classes">Modules et classes<a aria-hidden="true" href="#modules-et-classes"><span class="icon icon-link"></span></a></h4>
<ul>
<li>Modules semblables aux classes. Que faut-il utiliser ?</li>
<li>Modules ne sont pas instanciables.</li>
<li>Modules pour regroupement de méthodes et constantes.</li>
<li>On peut imbriquer des modules et des classes dans d’autres modules/classes.</li>
<li>Un fichier par module et par class. Utilisation du fichier avec <code>require_relative</code>.</li>
</ul>
<h4 id="inclusion-de-modules">Inclusion de modules<a aria-hidden="true" href="#inclusion-de-modules"><span class="icon icon-link"></span></a></h4>
<ul>
<li><code>include</code> indique à Ruby que les méthodes d’instances du module sont maintenant des méthodes d’instances de <code>Object</code>.</li>
<li><code>module_function</code> déclare des méthodes du module, mais aussi des méthodes d’instances, ce qui permet à <code>include</code> de fonctionner.</li>
<li>Un peu plus de complexité dans notre algorithme de <em>lookup</em>. Après avoir regardé les méthodes de <code>Object</code>, on regarde dans les méthodes des modules qu’on a inclus.</li>
</ul>
<h4 id="exercices-en-cours-décriture">Exercices (En cours d’écriture)<a aria-hidden="true" href="#exercices-en-cours-décriture"><span class="icon icon-link"></span></a></h4>
<p>solveur de Sudoku</p>
<h3 id="des-objets-plus-complexes-non-écrit">Des objets plus complexes (non écrit)<a aria-hidden="true" href="#des-objets-plus-complexes-non-écrit"><span class="icon icon-link"></span></a></h3>
<p>Très semblable à <a href="https://zestedesavoir.com/contenus/beta/634/une-introduction-a-ruby/organisation-de-code/des-objets-plus-complexes/">la version du chapitre précédemment écrite</a>. Puisque certains points ont déjà été abordé précédemment (on a par exemple introduit de plus en plus d’éléments de l’algorithme de <em>lookup</em>, le *duck typing, la composition, les variables d’instances de classes ont déjà été abordées, etc.) il sera un peu plus léger, ce qui permettra de se concentrer vraiment sur l’héritage et les mixins. Avec les mixins, expliquer que les méthodes <code>puts</code> et <code>print</code> sont des méthodes de <code>Kernel</code> qui est mixé à <code>Object</code>.</p>
<h3 id="chapitre-tp-avec-comme-objectif-les-principes-solid">Chapitre TP avec comme objectif les principes SOLID<a aria-hidden="true" href="#chapitre-tp-avec-comme-objectif-les-principes-solid"><span class="icon icon-link"></span></a></h3>
<p>Gestion de Discographie, (TP honteusement piqué au tutoriel C++ <img src="/static/smileys/svg/1f60d.svg" alt="<3" class="smiley"> )… </p>
<hr>
<p>Et le reste (exceptions et blocs) ne change pas trop.</p>
<p>EDIT : plan modifié</p>Une introduction à Ruby, message #2204672020-05-09T11:08:45+02:00Karnaj/@Karnajhttps://zestedesavoir.com/forums/sujet/1398/une-introduction-a-ruby/?page=6#p220467<p>Bonjour les agrumes !</p>
<p>La bêta a été mise à jour et décante sa pulpe
à l’adresse suivante :</p>
<div class="align-center"><p> <a href="https://zestedesavoir.com/contenus/beta/634/une-introduction-a-ruby/">Une introduction à Ruby</a> </p></div>
<p>Merci d’avance pour vos commentaires.</p>Une introduction à Ruby, message #2186172020-04-08T16:13:03+02:00Karnaj/@Karnajhttps://zestedesavoir.com/forums/sujet/1398/une-introduction-a-ruby/?page=6#p218617<p>Merci pour ta relecture. Je réponds à tes différents points (ceux auxquels je ne réponds pas seront bien sûrs pris en compte).</p>
<blockquote>
<blockquote>
<p>Nous pouvons également utiliser les syntaxes %(), %q() et %Q() pour déclarer une chaîne de caractères.</p>
</blockquote>
<p>Préciser si il y a une différence entre ces différentes syntaxes ou non ? C’est assez déroutant de voir trois syntaxes de plus sortir de nulle part.</p>
</blockquote>
<p>Je précise les choses à la fin du chapitre avant les exercices. Les syntaxes % et %Q sont équivalentes (% est un raccourci) et correspondent à des guillemets doubles, la syntaxe %q à des guillemets simples. Et je donne également quelques règles d’utilisation. Mais c’est vrai que ça peut être déroutant de les voir apparaître comme ça au milieu du chapitre sans aucune explication. Je devrais peut-être déplacer leur introduction à la fin du chapitre avec ces explications ? </p>
<blockquote>
<div class="custom-block custom-block-spoiler"><div class="custom-block-heading">Pinaillage</div><div class="custom-block-body"><blockquote>
<p>En effet, %W[une chaîne deux] ne donne pas ["une chaîne", "deux"] mais ["une", "chaîne", "deux"]</p>
</blockquote><p>L’espace entre "une et chaîne" est caché par un espace à la ligne quand je le lis. Je ne sais pas si c’est empêchable ?</p></div></div>
</blockquote>
<p>C’est lié au HTML ça. Je vais ruser et placer le code dans un bloc de code !</p>
<blockquote>
<p>A propos des hash de Ruby : j’imagine que c’est comme pour tout autre structure de données similaires : il faut forcément que les clés soient hashables pour pouvoir faire exister un hash, non ? (Je pose la question au cas où Ruby serait encore plus fun que je suis en train de le découvrir <img src="/static/smileys/langue.png" alt=":p" class="smiley"> ) Si c’est le cas, il est possible d’en toucher un mot dans le chapitre sur les hashs ?</p>
</blockquote>
<p>Il faut effectivement que les clés soient hashables. Mais chaque objet de Ruby a une méthode <code>hash</code> et donc tous les objets sont hashables.</p>
<div class="hljs-code-div"><div class="hljs-line-numbers"><span></span><span></span><span></span><span></span><span></span></div><pre><code class="hljs language-ruby">puts <span class="hljs-number">2</span>.hash
puts <span class="hljs-string">'abc'</span>.hash
puts method(<span class="hljs-symbol">:puts</span>).hash
puts <span class="hljs-number">2</span>.<span class="hljs-keyword">class</span>.hash
puts Object.new.hash
</code></pre></div>
<p>Et on peut la redéfinir. Par exemple, si on a une classe <code>C</code> dont on sait que l’attribut <code>x</code> est unique pour chaque instance, on pourrait redéfinit <code>hash</code> pour qu’il corresponde au hash de cet attribut.</p>
<div class="hljs-code-div"><div class="hljs-line-numbers"><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span><span></span></div><pre><code class="hljs language-ruby"><span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">C</span></span>
@id = <span class="hljs-number">0</span>
<span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">self</span>.<span class="hljs-title">id</span></span>
@id
<span class="hljs-keyword">end</span>
<span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">self</span>.<span class="hljs-title">id=</span><span class="hljs-params">(x)</span></span>
@id = x
<span class="hljs-keyword">end</span>
<span class="hljs-keyword">attr_reader</span> <span class="hljs-symbol">:x</span>
<span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">initialize</span></span>
@x = C.id
C.id += <span class="hljs-number">1</span>
<span class="hljs-keyword">end</span>
<span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">hash</span></span>
@x.hash
<span class="hljs-keyword">end</span>
<span class="hljs-keyword">end</span>
puts C.new.hash == <span class="hljs-number">0</span>.hash <span class="hljs-comment"># => true</span>
puts C.new.hash == <span class="hljs-number">1</span>.hash <span class="hljs-comment"># => true</span>
</code></pre></div>
<hr>
<p>Voilà, encore merci pour ta relecture. <img src="/static/smileys/smile.png" alt=":)" class="smiley"></p>Une introduction à Ruby, message #2186052020-04-08T13:49:00+02:00lhp22/@lhp22https://zestedesavoir.com/forums/sujet/1398/une-introduction-a-ruby/?page=6#p218605<p>Voici mes remarques, après une relecture du tutoriel. Sachant que </p>
<ul>
<li>J’ai lu le tutoriel, je n’ai pas cherché à l’appliquer (pas testé les codes par exemple)</li>
<li>Je ne connais pas Ruby de base.</li>
</ul>
<blockquote>
<p>Nous pouvons également utiliser les syntaxes %(), %q() et %Q() pour déclarer une chaîne de caractères.</p>
</blockquote>
<p>Préciser si il y a une différence entre ces différentes syntaxes ou non ? C’est assez déroutant de voir trois syntaxes de plus sortir de nulle part.</p>
<div class="custom-block custom-block-spoiler"><div class="custom-block-body"><p>Il y a des ternaires en Ruby <3</p></div></div>
<p>Juste avant la section "Contrôler l’exécution du code", tu as un "0 1 2 3 4" dont le "0" est affiché bizarrement. (et ça se répète régulièrement comme situation)</p>
<p>Quand tu parles de la méthode each, tu utilises "|i|", mais tu ne précises pas ce que c’est. Après quelques secondes de bug, j’imagine que c’est ce qui définit la variable dans le bloc ?</p>
<div class="custom-block custom-block-spoiler"><div class="custom-block-heading">Pinaillage</div><div class="custom-block-body"><blockquote>
<p>En effet, %W[une chaîne deux] ne donne pas ["une chaîne", "deux"] mais ["une", "chaîne", "deux"]</p>
</blockquote><p>L’espace entre "une et chaîne" est caché par un espace à la ligne quand je le lis. Je ne sais pas si c’est empêchable ? </p></div></div>
<p>A propos des hash de Ruby : j’imagine que c’est comme pour tout autre structure de données similaires : il faut forcément que les clés soient hashables pour pouvoir faire exister un hash, non ? (Je pose la question au cas où Ruby serait encore plus fun que je suis en train de le découvrir <img src="/static/smileys/langue.png" alt=":p" class="smiley"> ) Si c’est le cas, il est possible d’en toucher un mot dans le chapitre sur les hashs ?</p>
<blockquote>
<p>Nous les utilisons depuis le premier chapitre de ce tutoriel et <strong>nous nous</strong> n’avons jamais vraiment répondu à cette question ?
[c’est dans le chapitre sur "revenons aux variables"]</p>
</blockquote>
<p>C’est tout pour la partie 1. Je relirai sans doute la partie 2 un peu plus tard.</p>
<p>En tout cas, ce tuto a vraiment l’air excellent <img src="/static/smileys/smile.png" alt=":)" class="smiley"></p>Une introduction à Ruby, message #2169882020-03-12T01:05:33+01:00Karnaj/@Karnajhttps://zestedesavoir.com/forums/sujet/1398/une-introduction-a-ruby/?page=6#p216988<p>Bonjour les agrumes !</p>
<p>La bêta a été mise à jour et décante sa pulpe
à l’adresse suivante :</p>
<div class="align-center"><p> <a href="https://zestedesavoir.com/contenus/beta/634/une-introduction-a-ruby/">Une introduction à Ruby</a> </p></div>
<p>Merci d’avance pour vos commentaires.</p>Une introduction à Ruby, message #2163432020-02-28T15:52:33+01:00Karnaj/@Karnajhttps://zestedesavoir.com/forums/sujet/1398/une-introduction-a-ruby/?page=6#p216343<p>Bonjour les agrumes !</p>
<p>La bêta a été mise à jour et décante sa pulpe
à l’adresse suivante :</p>
<div class="align-center"><p> <a href="https://zestedesavoir.com/contenus/beta/634/une-introduction-a-ruby/">Une introduction à Ruby</a> </p></div>
<p>Merci d’avance pour vos commentaires.</p>
<p>EDIT : </p>
<ul>
<li>La partie 2 est terminée, donc des relectures sont bienvenus (et peuvent sans doute aider pour la validation).</li>
<li>Le chapitre sur les énumérables est terminé (et est lonnnnnnnng). En exercice, on recode une partie du module.</li>
<li>J’ai commencé à placé des TPs (que j’ai la flemme d’écrire pour le moment) histoire d’avoir plus de pratique dans le tutoriel).</li>
<li>Je suis également en train de réécrire le chapitre d’introduction qui sera découpé en deux. En particulier, on expliquera qu’il y a plusieurs implémentations de Ruby, fera installer Ruby avec rbenv, présentera un peu l’histoire de Ruby, quelques ressources bibliographiques, etc.</li>
</ul>Une introduction à Ruby, message #2156822020-02-14T20:03:25+01:00Karnaj/@Karnajhttps://zestedesavoir.com/forums/sujet/1398/une-introduction-a-ruby/?page=6#p215682<p>Bonjour les agrumes !</p>
<p>La bêta a été mise à jour et décante sa pulpe
à l’adresse suivante :</p>
<div class="align-center"><p> <a href="https://zestedesavoir.com/contenus/beta/634/une-introduction-a-ruby/">Une introduction à Ruby</a> </p></div>
<p>Merci d’avance pour vos commentaires.</p>Une introduction à Ruby, message #2143112020-01-22T16:40:32+01:00Karnaj/@Karnajhttps://zestedesavoir.com/forums/sujet/1398/une-introduction-a-ruby/?page=6#p214311<p>Bonjour les agrumes !</p>
<p>La bêta a été mise à jour et décante sa pulpe
à l’adresse suivante :</p>
<div class="align-center"><p> <a href="https://zestedesavoir.com/contenus/beta/634/une-introduction-a-ruby/">Une introduction à Ruby</a> </p></div>
<p>Merci d’avance pour vos commentaires.</p>Une introduction à Ruby, message #2020522019-04-18T22:53:42+02:00Karnaj/@Karnajhttps://zestedesavoir.com/forums/sujet/1398/une-introduction-a-ruby/?page=6#p202052<p>Bonjour les agrumes !</p>
<p>La bêta a été mise à jour et décante sa pulpe
à l’adresse suivante :</p>
<div class="align-center"><p> <a href="https://zestedesavoir.com/contenus/beta/634/une-introduction-a-ruby/">Une introduction à Ruby</a> </p></div>
<p>Merci d’avance pour vos commentaires.</p>Battledev Saison 13 le 26 Mars 2019, message #2006982019-03-22T14:15:43+01:00jules061/@jules061https://zestedesavoir.com/forums/sujet/12240/battledev-saison-13-le-26-mars-2019/?page=1#p200698<figure><blockquote>
<p>Bonjour jules061,</p>
<p>Comme précisé par Karnaj, nous te saurons gré d’apporter quelques précisions en éditant ton message, car en l’état, l’information est assez lacunaire.</p>
</blockquote><figcaption><a href="https://zestedesavoir.com/forums/sujet/12240/battledev-saison-13-le-26-mars-2019/?page=1#p200455">Taurre</a></figcaption></figure>
<p>Bonjour Taurre,</p>
<p>Merci pour ton message.</p>
<p>Je viens de le modifier <img src="/static/smileys/smile.png" alt=":)" class="smiley"></p>Une introduction à Ruby, message #2005142019-03-18T01:27:31+01:00Karnaj/@Karnajhttps://zestedesavoir.com/forums/sujet/1398/une-introduction-a-ruby/?page=6#p200514<p>Bonjour les agrumes !</p>
<p>La bêta a été mise à jour et décante sa pulpe
à l’adresse suivante :</p>
<div class="align-center"><p> <a href="https://zestedesavoir.com/contenus/beta/634/une-introduction-a-ruby/">Une introduction à Ruby</a> </p></div>
<p>Merci d’avance pour vos commentaires.</p>