Outils pour utilisateurs

Outils du site


issue157:c_c

https://doc.rust-lang.org/book/ Okay rustafarians, we head back to Rust development as @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. In this issue, we will quickly go over data types, as each programming language has its own way of dealing with things like booleans, etcetera.

https://doc.rust-lang.org/book/

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 ci-dessus. 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.

Dans ce numéro, nous passerons rapidement sur les types de données, car chaque langage de programmation a sa propre façon de traiter les choses comme des booléens, etc.

Let’s start with those while we are at it? Booleans in Rust are called ‘bool’. As in other programming languages, it is used in things like loops. However, if you have been following Greg’s excellent Python tutorial, you will know Python uses a capital T for True and a capital F for False. This is not the case with rust. You simply refer to them as ‘true’ or ‘false’. Characters are referenced by ‘char’. A character is always in single quotes and strings are in double quotes. This is a common newbie error as “a” and ‘a’ are NOT the same type. For numbers you need to know integers and floats. I have no doubt that if you have been following Greg, that you know what they are. I must point out, as we learned in the first part, there are ways to refer to them. Obviously, we have signed and unsigned integers, to represent negative numbers. This affects the size of the number you can use, as they take up a certain amount of space in bytes. You refer to signed with an ‘i’ and unsigned with a ‘u’. For example i32 or u64 as demonstrated in the last issue. For those of you not familiar with the terminology, signed (i) just means one of the bits is used for a sign. An easy way to remember which is which, is getting the Ace of Base song in your head. “I saw the sign…” or even “I store the sign…” (Yes, we use cheesy song references in our tutorials here at FCM, don’t judge.)

Commençons avec eux pendant que nous y sommes ! Les Booléens dans Rust sont appelés « bool ». Comme dans les autres langages de programmation, ils sont utilisés dans des choses comme les boucles. Cependant, si vous suivez l'excellent tutoriel de Greg sur Python, vous savez que Python utilise un T majuscule pour True (Vrai) et un F majuscule pour False (Faux). Ce n'est pas le cas dans rust. Nous y faisons référence comme « true » ou « false ». La référence pour les caractères est « char » (character). Un caractère est toujours entre des apostrophes (') et les chaînes de caractères entre des apostrophes doubles (“). Une erreur courante des débutants est de confondre les types DIFFÉRENTS “a” et 'a'. Pour les nombres, vous devez connaître les entiers (integer) et les nombres flottants (float). Si vous suivez Greg depuis un certain temps, vous savez sans aucun doute ce qu'ils sont. Je dois préciser, comme nous l'avons appris dans la première partie, qu'il y a différentes manières d'y faire référence. Évidemment, nous avons des entiers signés et non signés, pour représenter les nombres négatifs. Ça a un impact sur la taille du nombre utilisable, car ça prend de la place dans les octets. Un « i » indique les nombres signés et un « u » les non signés. Par exemple, i32 ou u64, comme montré dans le numéro précédent. Pour ceux d'entre vous qui ne sont pas à l'aise avec la terminologie, l'indication (i) signifie simplement qu'un des bits est utilisé pour le signe. Une façon aisée de se rappeler qui est qui, c'est de chanter la chanson « The sign » d'Ace of Base dans votre tête. « I saw the sign… » ou même « I store the sign… » (Oui, nous faisons référence à des chansons mielleuses dans nos tutoriels, ici au FCM ; pas de commentaires).

The way the numbering works is for example, i8 refers to; one byte for the sign, plus seven (7) bytes for the number. 1,2,4,8,16,32,64 = 127 (If you have used binary before, you would know that a row of each of the previous numbers add up to the next one minus one. The next number is 128, so I know that the sequence adds up to 127) If you had 8 bits, like with a unsigned number, (u8), you would move to the next bit, which is 256… (minus one), thus 255. Why? Because we can now use that bit we used for the sign in the signed integer. By default, if you use an integer like we did in the last issue, Rust will make it i32, which is seen as a ‘sane’ default. The same with floats or floating point numbers. It’s ‘sane’ default is f64.Just keep it in mind when you are on a 32-bit machine, like a raspberry pi. Now let us ramp it up one. Why did the programmer quit his job? …. He didn’t get arrays (a raise - geddit?) OK, I’ll see myself out…

La numération fonctionne par exemple de cette façon : i8 fait référence à un octet pour le signe plus 7 (sept) octets pour le nombre. 1,2,4,8,16,32,64 = 127 (si vous avez déjà utilisé le binaire, vous devez savoir que la somme d'une série de chacun des nombres précédents égale le suivant moins un. Le nombre suivant est 128, donc je sais que la série vaut 127). Si vous avez 8 bits, cas d'un nombre non signé, (U8), vous passerez à la valeur suivante, soit 256… (moins un), soit 255. Pourquoi ? Parce que vous pouvez maintenant utiliser le bit qui était précédemment pris pour le signe dans l'entier signé. Par défaut, si vous utilisez un entier comme nous l'avons fait dans l'article précédent, Rust en fera un i32, qui est vu comme une valeur par défaut « sûre ».

Même chose avec les « floats » ou nombres décimaux. La valeur par défaut « sûre » est f64. Gardez-le juste à l'esprit si vous êtes sur une machine 32-bit, comme un raspberry pi.

Maintenant, un peu plus compliqué.

Pourquoi le programmeur a quitté son boulot ?… Il n'a pas compris les tableaux (arrays) (il n'a pas reçu une augmentation, a raise - compris ? - la prononciation est la même, bref !)

Bon, d'accord, je suis à l'ouest…

What is an array? This is a ‘list’ of things, that are all the same type, grouped together. What I mean by this, is that an array does not mix say, strings and numbers. You can not have an array with a key, sword, a shield and the number 250 that represents your gold. If you want to have your salad mixed, you use a tuple. (We will get to it now.) The format for an array in rust is: let <variablename> = [item1, item2, item3]; To access an item in an array, the format is: let <variablename> = <nameofthearray>[position]; This sort of tells us how we can edit an array also. <nameofarray>[position] = newvalue; NOTE: I use the word “position” here, but feel free to substitute it with “index” as newbies find it easier to make the connection that way.

Qu'est-ce qu'un tableau (array) ? C'est une « liste » de regroupement de choses qui sont toutes du même type. Ce que j'entends par là, c'est qu'un tableau ne mélange pas, disons, des chaînes et des nombres. Vous ne pouvez pas avoir un tableau avec une clé, un sabre, un bouclier et le nombre 250 qui représente votre fortune. Si vous voulez avoir une salade composée, vous utilisez un tuple (nous y arrivons tout de suite). Le format d'un tableau dans rust est : let <nomdevariable> = [élément1, élément2, élément3];

Pour accéder à un des éléments d'un tableau, le format est : let <nomdevariable> = <nomdutableau>[position];

Ce qui suit nous montre aussi comment modifier un tableau : <nomdutableau>[position] = nouvellevaleur;

NOTE : j'utilise ici le mot « position », mais n'hésitez pas à le remplacer par « index » ; c'est juste pour que les débutants fassent plus facilement le rapprochement.

A word on this, make sure of your position or index before changing it, as it overwrites the previous value. To change an array, like the previous issue, we need the ‘mut’ keyword otherwise they are immutable. This ‘mut’ keyword may take some getting used to. Like integers, arrays start with a fixed size when you declare them. Let’s try it on for size? Navigate to your rust projects folder and open a terminal there. Type: cargo new –bin lesson2 Again, this will make what you need.

Un mot à ce sujet : vérifiez la position ou l'index avant de faire la modification, car la valeur précédente sera remplacée.

Pour modifier un tableau, comme dans le numéro précédent, nous avons besoin du mot-clé « mut », sinon il est invariable. Il faut sans doute un certain temps pour s'habituer à ce mot-clé « mut ».

Comme pour les entiers, les tableaux possèdent une taille fixe quand il sont créés.

Essayons-le !

Naviguez jusqu'à votre dossier des projets rust et ouvrez un terminal à cet endroit.

saisissez :

cargo new –bin lesson2

Une fois encore, ce dont vous avez besoin sera fait.

Remove the “hello world” and replace it with the code shown top right. Type: cargo build What happened? How now, brown cow? Rust suggests we use a vec. With vec’s we push and pop our elements. (More on this later.) By-the-way, at any time you want to know more about something, you can look it up by searching the phrase on doc.rustlang.org – try it: https://doc.rust-lang.org/std/vec/struct.Vec.html

Enlevez le « hello world » et remplacez-le avec le code présenté en haut à droite.

Saisissez :

cargo build

Que s'est-il passé ?

Et maintenant, mon vieux ?

Rust suggère d'utiliser un « vec ». Avec des vec, nous rangeons et reprenons nos éléments. (On en parlera plus tard.) Pendant que j'y suis, chaque fois que vous voulez en savoir plus sur quelque chose, vous pouvez chercher la phrase dans doc.rustlang.org - essayez : https://doc.rust-lang.org/std/vec/struct.Vec.html

During the quick once-over on arrays, I mentioned tuples. Again, if you have been following Greg’s Python tutorial, you may know where this is going. A tuple is a collection of things, like an array, but they do not have to be of the same type. (Like an array, indexing starts at 0) The following code is valid: Let mytuple = (donkey, true, 99); When referring to an item in a tuple, we use slightly different syntax to that of an array. The format is: let <variablename> = tuplename.position; In the case above, to get 99, you would say: let x = mytuple.2; You can even grab the lot at once, simply by: let (weapon,armour,gold) = mytuple;

Pendant le rapide passage sur les tableaux j'ai mentionné les tuples. Là encore, si vous suivez les tutoriels de Greg sur Python, vous pouvez savoir ce qu'il en est. Un tuple est une collection de choses, comme un tableau, mais qui n'ont pas l'obligation d'être du même type. (Comme pour un tableau, l'indexation commence à 0.) Le code suivant est valable :

let montuple = (âne, true, 99);

Pour faire référence à un élément d'un tuple, nous utilisons une syntaxe légèrement différente de celle d'un tableau. Le format est :

let <nomdevariable> = nomdutuple.position;

Dans le cas du dessus, pour obtenir 99, nous aurions dit :

let x = montuple.2;

nous pouvons même traiter l'ensemble en une fois, simplement avec :

let (arme,armure,fortune) = montuple;

Rust is smart enough to plug in donkey to weapon, true to armour and 99 to gold. Now you can keep your gold in your inventory with that extra shield and sword! (or donkey, *wink* it is your inventory after all) Go ahead and try the guessing game in the book: https://doc.rust-lang.org/book/ch02-00-guessing-game-tutorial.html Yes, I know it’s a boring example that sucks the marrow from your bones, but it teaches important concepts!

Rust est assez fûté pour mettre âne dans arme, true dans armure et 99 dans fortune. Maintenant, vous pouvez garder votre or dans vos biens avec cette protection et cette épée supplémentaires ! (ou votre âne ; *clin d'œil*, après tout, ce sont vos possessions !)

Allez plus avant et essayez le jeu de devinettes dans le livre : https://doc.rust-lang.org/book/ch02-00-guessing-game-tutorial.html

Oui, je sais, c'est un exemple ennuyeux qui suce la moelle des os, mais il vous apprend des concepts importants !

The reason I am using Geany as my IDE is it comes with Ubuntu and we don’t need to add things to it to make it work with Rust and it will gladly work with toml-files without complaint. It even sports it’s own terminal! All nicely in one place. If you have any questions or comments, e-mail us: misc@fullcirclemagazine.org

La raison pour laquelle j'utilise Geany comme IDE est qu'il est livré dans Ubuntu et que je n'ai pas besoin de lui ajouter des choses pour qu'il marche avec Rust ; de plus, il fonctionnera bien avec des fichiers toml sans se plaindre. Il a même son propre terminal. Tout se trouve joliment au même endroit.

Si vous avez des questions ou des commentaires, envoyez-moi un mail à : misc@fullcirclemagazine.org

issue157/c_c.txt · Dernière modification : 2020/06/05 14:20 de andre_domenech