Differences

This shows you the differences between two versions of the page.

Link to this comparison view

sde2:laboratoare:02_rust [2023/03/12 12:06]
cristiana.andrei [Le type Result]
sde2:laboratoare:02_rust [2023/03/14 08:07] (current)
cristiana.andrei [Exercises]
Line 1: Line 1:
 ====== TP 02 - Systems de fichiers et le type Result ====== ====== TP 02 - Systems de fichiers et le type Result ======
 +===== Assignment ===== 
 +<note warning>​ 
 +Vous devez **accepter** le assignment d'ici et travailler avec ce repository: [[https://​classroom.github.com/​a/​sNXCQSO0|Lab2]] 
 +</​note>​
 ===== Objectifs ===== ===== Objectifs =====
 Le but de ce TP est d'​apprendre à utiliser ​ Le but de ce TP est d'​apprendre à utiliser ​
Line 115: Line 118:
 } }
 </​code>​ </​code>​
 +
 +=== Raccourcis: unwrap ===
 +La méthode **unwrap** est une méthode raccourcie implémentée tout comme l'​expression de correspondance que nous avons écrite ci-dessus.
 +Si la valeur Result est la variante Ok, unwrap renverra la valeur à l'​intérieur de Ok. Si le résultat est la variante Err, unwrap appellera la panic! macro pour nous. Voici un exemple de déballage en action :
 +
 +<code c>
 +use std::​fs::​File;​
 +
 +fn main() {
 +    let greeting_file = File::​open("​hello.txt"​).unwrap();​
 +}
 +</​code>​
 +
 +De même, la méthode **expect** nous permet également de choisir la panic! Message d'​erreur. Utiliser expect au lieu de déballer et fournir de bons messages d'​erreur peut transmettre votre intention et faciliter la recherche de la source d'une panique. La syntaxe de expect ressemble à ceci :
 +
 +<code c>
 +use std::​fs::​File;​
 +
 +fn main() {
 +    let greeting_file = File::​open("​hello.txt"​)
 +        .expect("​hello.txt should be included in this project"​);​
 +}
 +</​code>​
 +
 +=== L'​operateur '?'​ ===
 +Le **?** placé après la définition d'une valeur de résultat pour fonctionner presque de la même manière que l'​expression de //match// que nous avons définies pour gérer les valeurs de résultat dans l'​exemple pour unwrap.
 +
 +Si la valeur du résultat est un Ok, la valeur à l'​intérieur de l'Ok sera renvoyée à partir de cette expression et le programme continuera. Si la valeur est une Err, l'Err sera renvoyée par toute la fonction comme si nous avions utilisé le mot-clé return afin que la valeur d'​erreur soit propagée au code appelant.
 +
 +<code c>
 +use std::​fs::​File;​
 +use std::​io::​{self,​ Read};
 +
 +fn read_username_from_file() -> Result<​String,​ io::​Error>​ {
 +    let mut username = String::​new();​
 +
 +    File::​open("​hello.txt"​)?​.read_to_string(&​mut username)?;
 +
 +    Ok(username)
 +}
 +</​code>​
 +
 +
 +Dans le contexte ci-dessous, le ? à la fin de l'​appel File::open renverra la valeur à l'​intérieur d'un Ok à la variable username_file. Si une erreur se produit, le ? L'​opérateur reviendra plus tôt de toute la fonction et donnera n'​importe quelle valeur Err au code appelant. La même chose s'​applique au ? à la fin de l'​appel read_to_string.
  
 ===== Sugestions ===== ===== Sugestions =====
Line 153: Line 200:
   * Linux permissions [[https://​en.wikipedia.org/​wiki/​Chmod]]   * Linux permissions [[https://​en.wikipedia.org/​wiki/​Chmod]]
  
-===== Sujets ​===== +===== Exercises ​===== 
-  - Écrivez un programme qui reçoit en paramètre un dossier. Imprimer le contenu du dossier. ​+  - Écrivez un programme qui reçoit en paramètre un dossier. Imprimer le contenu du dossier. ​//Hint: [[https://​doc.rust-lang.org/​std/​fs/​fn.read_dir.html|read_dir]]//​
   - Écrivez un programme qui reçoit en argument de ligne de commande un fichier et une tâche. Mettre en œuvre les tâches :    - Écrivez un programme qui reçoit en argument de ligne de commande un fichier et une tâche. Mettre en œuvre les tâches : 
     - **print** - imprime le contenu du fichier et le file descriptor  ​     - **print** - imprime le contenu du fichier et le file descriptor  ​
Line 163: Line 210:
     - **mode_text** - affiche le mode (permissions) en text (rwx...) du fichier ​     - **mode_text** - affiche le mode (permissions) en text (rwx...) du fichier ​
     - **print_buffer** - imprimez le contenu du fichier à l'aide des fonctions open et read.      - **print_buffer** - imprimez le contenu du fichier à l'aide des fonctions open et read. 
-  ​+<​hidden>​
 ===== Solutions ===== ===== Solutions =====
 [[https://​github.com/​UPB-FILS-SdE2/​Solutions/​tree/​main/​tp3|Solutions]] [[https://​github.com/​UPB-FILS-SdE2/​Solutions/​tree/​main/​tp3|Solutions]]
 +</​hidden>​
sde2/laboratoare/02_rust.1678615562.txt.gz · Last modified: 2023/03/12 12:06 by cristiana.andrei
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0