Outils pour utilisateurs

Outils du site


issue160:c_c

Okay rustafarians, we head back to Rust development – @Daredevil14 and Ellin complained about where Lucas’ rust blog went. It looks like you guys want more rust and less ‘security nonsense’. Firstly, do not neglect to read the above book. If you are a complete beginner to rust, or even programming, we got you covered here at FCM. These articles are not to replace the book mentioned above, think of it more as helpers along the way. At the moment, we are just taking a high-level view of things. We can drill down into each of these topics we have covered in more detail. Usually when you want to define custom types, it’s ‘structs’ and ‘enums’. Let’s start with structs?

OK, bandes de RUST-iques, nous revenons au développement de Rust car @Daredevil14 et Ellin se sont plaints de la direction que prenait le blog de Lucas sur Rust. Il semblerait que vous aimeriez toujours plus de rust et moins de « non-sens sur la sécurité ». En premier lieu, ne négligez pas la lecture du livre indiqué le mois dernier. Si vous êtes complètement débutant dans Rust ou même en programmation, vous trouverez ce qu'il vous faut ici, dans le FCM. Ces articles n'ont pas l'intention de remplacer le livre cité plus haut ; voyez-les plutôt comme une aide en parallèle.

Pour le moment, je ne vous donne qu'une vision générale des choses. Nous pouvons rentrer dans le détail de chacun des sujets dont nous avons parlé. En général, quand nous voulons définir des types personnalisés, ce sont des « struct » et des « enum ». Nous commençons par les structs.

This will be chapter five in the book above. This is the direct link: https://doc.rust-lang.org/book/ch05-01-defining-structs.html Structs group things together, like your character stats in a RPG game. So let’s say we create a character in our RPG. Characters have a name, they have a strength attribute, a dexterity attribute, etc. These “characteristics” are the same across any player, be it a half elf or an ogre. If you are not familiar with RPG games or DND, quickly look up DND (or D&D) character creation on the interwebs. I did not like the example here: https://doc.rust-lang.org/rust-by-example/custom_types/structs.html. But, if it makes more sense to you than my example, please go ahead on that page.

C'est dans le chapitre cinq du livre ci-dessus. Voici le lien direct : https://doc.rust-lang.org/book/ch05-01-defining-structs.html

Les structs regroupent des choses, comme les statistiques sur vos personnages dans un jeu RPG (jeu de rôles). Aussi, disons que nous créons un personnage dans notre jeu de rôle. Les personnages ont un nom, ils possèdent des attributs « force », « dextérité », etc. Ces « caractéristiques » sont les mêmes pour tous les joueurs, que ce soit un demi-elfe ou un ogre. Si vous n'êtes pas familier avec les jeux de rôles ou les jeux de Donjons et Dragons (DND ou D&D), regardez rapidement la création d'un tel personnage sur le Net. Je n'aime pas cet exemple : https://doc.rust-lang.org/rust-by-example/custom_types/structs.html. Mais si vous le comprenez mieux que le mien, n'hésitez pas à aller sur cette page.

Like other things in Rust, we let Rust know what we are defining, so we use the struct keyword. struct PlayerCharacter { name: String, gender: String, race: String, Strength: u8, Agility: u8, Constitution: u8, Charisma: u8, } What you are looking at is a CSV (Comma Separated Values) just neatly below each other. You can think of them as fields in an excel or calc worksheet.

Comme d'autres choses dans Rust, nous faisons savoir à Rust ce que nous définissons ; donc, nous utilisons le mot-clé struct.

struct PlayerCharacter {

name: String,
gender: String,
race: String,
Strength: u8,
Agility: u8,
Constitution: u8,		
Charisma: u8,

}

Ce qui s'affichent sont des CSV (Comma Separated Values, des données séparées par des virgules), l'une au-dessous de l'autre. Pensez-y comme des champs dans un tableur Excel ou Calc.

So we define our struct character creation sheet, but how do we actually use it? Well, to use it, you need to remember to use all the fields that you created. So for demonstration purposes, I am not going to type all those fields we listed above, but a subsection of them. We will encounter an error, but the program will run. (I do not use all the fields, that’s all). You may have noticed an odd semicolon after the player definition. I was like, why is that there? I say it is because it is an assignment statement, even if it doesn’t look that way at first. However, here is more opinions: https://users.rust-lang.org/t/why-is-a-semicolon-required-at-the-end-of-a-tuple-struct-definition/25589 The important take-away here is the how. How to use a struct. We can step through the code:

Ainsi, nous définissons la feuille de création du personnage, mais comment l'utiliser réellement ? Eh bien, pour l'utiliser, vous devez vous souvenir d'utiliser tous les champs que vous avez créés. Pour les besoins d'une démonstration, je ne vais pas saisir tous les champs que nous avons listés plus haut, mais une sous-section d'entre eux. Nous rencontrerons une erreur, mais le programme tournera. (Je n'utilise pas tous les champs, c'est tout.)

Vous avez peut-être noté un point-virgule bizarrement placé après la définition du joueur. Moi aussi ; pourquoi est-il là ? Je dis que c'est parce que c'est une déclaration d'affectation, même si ça n'y ressemble pas d'emblée. Cependant, voici plus d'avis : https://users.rust-lang.org/t/why-is-a-semicolon-required-at-the-end-of-a-tuple-struct-definition/25589

Le point important ici est « comment ». Comment utiliser un struct. Nous pouvons passer le code en revue.

We define our variable “player” as assigned to the struct name, “PlayerCharacter”. Just a reminder, variables are not variable in Rust unless you use the mut keyword. So if you plan on changing these variables, say strength or agility as your character levels up, you need mut after let. We then fill all the defined fields, if we plan on using them immediately or not. (You will notice that I did not use them and I got compiler errors. If you follow along, you can ignore these for now and you will see the desired output). We end our assignment statement with a semicolon. Think of it as a struct instance.

Nous définissons notre variable « player » (joueur) comme affectée au nom de struct « PlayerCharacter ».

Pour mémoire, les variables ne sont pas des variables dans Rust, à moins d'utiliser le mot-clé mut. Aussi, si vous prévoyez de modifier ces variables - disons la force ou l'agilité pendant que votre personnage monte les niveaux -, vous avez besoin de mut derrière let.

Ensuite, nous remplissons tous les champs définis, que nous prévoyions de les utiliser immédiatement ou non. (Vous noterez que je ne les utilise pas et que j'ai eu des erreurs de compilation. Si vous poursuivez, vous pouvez les ignorer pour le moment et vous verrez la sortie désirée.) Nous terminons notre déclaration d'affectation avec un point-virgule. Pensez à lui comme à une instance de struct.

So what is happening in the println? When you reference the field you want, you need “variablename.fieldname” . The reason for this is that you may have multiple PlayerCharacters, and referring to each may be player1.name, player2.name (instead of my lame character.name). See where this is going? I have to point out that structs with named fields are not the only type. The first is a tuple struct. In a tuple struct the fields are immutable, so they do not need naming. Okay I just watched this: https://www.youtube.com/watch?v=wh4aWZRtTwU - this morning, so don’t judge my example. It is actually HARD coming up with simple examples! (top right)

Alors, qu'est-ce qui se passe dans le println ? Quand vous faites référence au champ que vous voulez, vous avez besoin de « nomdevariable.nomduchamp ». La raison pour cela vient de ce que vous pouvez peut-être avoir plusieurs « PlayerCharacters » et vous ferez référence à chacun d'eux comme player1.name ou player2.name (à la place de mon pauvre character.name). Voyez-vous où ça nous mène ?

Je dois insister sur le fait que les structs avec des champs nommés ne sont pas le seul type. Le premier est un struct de tuple. Dans un struct de tuple, les champs sont invariables ; ils n'ont donc pas besoin d'être nommés.

Bon, d'accord, je viens de regarder ceci ce matin : https://www.youtube.com/watch?v=wh4aWZRtTwU. Aussi, ne condamnez pas mon exemple. C'est vraiment DUR de trouver des exemples simples ! (En haut à droite.)

We simply refer to the position of the tuple’s contents. A tuple struct is not the same type as a tuple! I can’t imagine a real-world use case, but my day job is not a programmer, so if anyone wants to jump in here, please feel free!!! A unit struct is the other type. This is a struct without any fields. I cannot say what use they would be, but we can discuss that in the next issue when we look at enums. If I made a mistake, fix it and send it to: misc@fullcirclemagazine.org

Nous faisons simplement référence à la position des contenus du tuple.

Un struct de tuple, ce n'est pas pareil qu'un tuple !

Je n'arrive pas pas à trouver un cas d'utilisation dans la vraie vie, mais la programmation n'est pas mon travail quotidien ; aussi, si quelqu'un veut participer, qu'il se sente libre !!!

Un struct unit est un autre type. C'est un struct sans aucun champ. Je ne sais pas dire quel est son usage, mais nous pen parlerons dans le prochain numéro quand nous regarderons les enums.

Si j'ai fait une erreur, corrigez-la en m'envoyant un mail à : misc@fullcirclemagazine.org

issue160/c_c.txt · Dernière modification : 2020/09/03 11:37 de auntiee