Les chaînes de caractères en Rust

Introduction

Les chaînes de caractères en Rust offrent une approche unique par rapport aux langages de programmation conventionnels, en raison de l'orientation système de son design. Rust possède deux types de chaînes, chacun présentant des caractéristiques distinctes en termes de modification, de performance et de règles de propriété.

Types de chaînes en Rust

Rust se compose principalement de deux types de chaînes, chacune ayant un rôle spécifique.

String : - Description : Type de chaîne mutable, allouée sur le tas et extensible. - Utilisation : Idéale pour les manipulations dynamiques de chaînes nécessitant un transfert de propriété.

let mut dynamic_string = String::from("Bonjour, Rust!");

&str (Slice de chaîne) :
- Description : Référence à une séquence d'octets UTF-8, souvent utilisée pour visualiser une String ou une chaîne littérale.
- Utilisation : Pratique pour les références de chaînes sans propriété, ou lors de la manipulation de parties d'une chaîne.

let string_literal: &str = "Bonjour, Rust!";

Note : Lors de la sélection du type de chaîne, il est primordial de considérer les exigences spécifiques et les caractéristiques des données.

Création de chaînes

Pour créer une chaîne vide, vous pouvez utiliser la méthode suivante :

let mut empty_string = String::new();

Manipulation des chaînes

Concaténation :
Rust propose plusieurs méthodes pour concaténer les chaînes. Voici quelques opérateurs de concaténation :
- + Opérateur :
- Utilisation : Pour concaténer deux chaînes.
- Propriété : Consomme l'opérande gauche.
```rust let hello = String::from("Bonjour, ");
let world = String::from("Monde!");
let hello_world = hello + &world; // La propriété de 'hello' est déplacée, 'world' est empruntée


- **+= Opérateur :**  
  - **Utilisation :** Opération de concaténation sur place.  
  - **Propriété :** Consomme la chaîne existante à gauche et y ajoute le contenu.  
  ```rust
let mut hello = String::from("Bonjour, ");  
let world = String::from("Monde!");  
hello += &world;  // Ajoute 'Monde!' à 'Bonjour, '
  • macro format! :
  • Utilisation : Crée une nouvelle chaîne en formatant du texte, permettant l'interpolation de chaînes.
  • Propriété : Ne nécessite pas de transfert de propriété.
    ```rust let hello = String::from("Bonjour, ");
    let world = String::from("Monde!");
    let hello_world = format!("{}{}", hello, world); // Crée une nouvelle chaîne sans problèmes de propriété

Il est crucial de faire attention aux sémantiques de propriété et d'emprunt lors de l'utilisation des opérateurs de concaténation, en particulier avec **+** et **+=**.

## Slicing et ajout avec push_str et push

Voici un exemple d'utilisation de `push_str` et `push` :  

let mut message = String::from("Rust");
message.push_str(" Programmation");
message.push('!');
let part_of_message = &message[0..5];

Dans cet exemple, `push_str` permet d'ajouter une tranche de chaîne à la chaîne existante, et `push` ajoute le caractère '!' à la fin.

## Référencement des chaînes

Pour référencer une partie d'une chaîne sans prendre la propriété, vous pouvez utiliser `&str` de cette manière :  

let full_string = String::from("Bonjour, Monde!");
let slice = &full_string[0..5];

Ici, `&full_string[0..5]` crée une référence aux cinq premiers caractères.

## Conclusion

Avoir une bonne connaissance des méthodes et des opérateurs décrits, ainsi que du concept de tranches de chaînes, est essentiel pour travailler efficacement avec les chaînes en Rust.