diff --git a/essential_rust.tex b/essential_rust.tex index 1c9665a9f45f79c6e8777939d1321a0f89ef8c06..428eb8820699d764d224c9f681142c0edd5bd6d6 100644 --- a/essential_rust.tex +++ b/essential_rust.tex @@ -244,30 +244,34 @@ fn add(x: i32, y: i32) -> i32 { \newpage -\subsection{Chaînes de caractères} +\subsection{Chaînes de caractères (introduction)} -Les chaînes de caractères en Rust sont toutes encodés en \texttt{UTF-8}, et peuvent être sous trois formats : +Pour une explication plus poussée des différents types de chaînes de caractères, +voir \Cref{advancedStrings}. + +Les chaînes de caractères en Rust sont toutes encodés en \texttt{UTF-8}, et +prennent principalement l'un des deux formats suivants : \begin{itemize} - \item Chaîne de caractères contenue directement dans le binaire (type \texttt{\&str}). - \item Chaîne de caractères alloué dynamiquement (type \texttt{String}). - \item Point de vue non-modifiable d'une chaîne de caractères, nommé slice (type \texttt{\&str}). + \item chaîne de caractères allouée dynamiquement (type \texttt{String}). + \item référence non modifiable, nommée slice (type \texttt{\&str}). \end{itemize} \begin{lstlisting}[style=Rust, language=Rust] -fn main() -{ - // Chaîne de caractères littérale. +fn main() { + // Une chaîne entre "" est une \&str let hello_world: &str = "Hello World"; - // Chaîne de caractères stockée dans le tas. - let hello_world: String = "Hello World".to_string(); + // On peut créer une String à partir d'une \&str + let hello_world_string: String = hello_world.to_string(); + // alternative équivalente : String::from(hello\_world) - // Un slice de l'enitèreté de la chaîne de caractère \textbf{hello\_world}. - let hello_world_slice: &str = &hello_world; + // Réciproquement on peut convertir une String en \&str + // soit tout entière : + let hello_world_slice: &str = &hello_world_string; + + // soit partiellement, ici seulement les caractères 6 à 10 inclus. + let world_slice: &str = &hello_world_string[6..11]; - // Un slice de 6 caractères de la chaîne de caractère \textbf{hello\_world}. - let world_slice: &str = &hello_world[6..11]; - println!("Hi {}", world_slice); // "Hi World" } \end{lstlisting}