Pourquoi en Rust il n'est pas recommandé d'accepter &String, &Vec et &Box comme arguments de fonctions ?
Bonjour à tous ! J'ai récemment commencé à apprendre Rust et j'ai remarqué une chose étrange : dans de nombreux tutoriels et sur Stack Overflow, on écrit qu'il ne faut pas écrire de fonctions qui acceptent `&String`, `&Vec` ou `&Box`. Au lieu de cela, on conseille d'utiliser `&str`, `&[T]` et simplement `&T` (ou `&T` pour Box). Mais je ne comprends pas bien quel est le problème.
Voici un exemple simple que j'ai écrit pour travailler avec du texte :
```rust
fn print_length(s: &String) {
println!("Longueur de la chaîne : {}", s.len());
}
fn main() {
let my_string = String::from("Bonjour le monde !");
print_length(&my_string);
}
```
Ce code fonctionne. Pourquoi est-il considéré comme un mauvais style ? En quoi `&String` est-il pire que `&str` ? Et la même chose avec les vecteurs : en quoi `&Vec` est-il pire que `&[i32]` ? Dans les deux cas, je passe une référence, pas la propriété.
Ce qui me trouble, c'est que si j'écris une fonction avec `&str`, lors de l'appel avec une `String`, je dois explicitement convertir le type à chaque fois : `print_length(&my_string[..])` ou `print_length(my_string.as_str())`. Alors qu'avec `&String`, tout fonctionne directement.
No answers yet.
Connectez-vous pour laisser une réponse