Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
E
Essentiel Rust
Manage
Activity
Members
Labels
Plan
Issues
0
Issue boards
Milestones
Wiki
Code
Merge requests
0
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Build
Pipelines
Jobs
Pipeline schedules
Artifacts
Deploy
Releases
Package Registry
Model registry
Operate
Environments
Terraform modules
Monitor
Incidents
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
This is an archived project. Repository and other project resources are read-only.
Show more breadcrumbs
v-lafeychine
Essentiel Rust
Commits
4df7a097
Unverified
Commit
4df7a097
authored
3 years ago
by
Vanille-N
Browse files
Options
Downloads
Patches
Plain Diff
intro aux types produits
parent
9c6d7194
No related branches found
Branches containing commit
No related tags found
1 merge request
!1
Master
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
essential_rust.tex
+54
-27
54 additions, 27 deletions
essential_rust.tex
with
54 additions
and
27 deletions
essential_rust.tex
+
54
−
27
View file @
4df7a097
...
...
@@ -444,6 +444,8 @@ fn somme(vect: &Vec<usize>) -> usize {
}
\end{lstlisting}
La forme complète d'une référence est
\texttt
{
\&
'lft Type
}
ou
\texttt
{
\&
'lft mut Type
}
:
voir
\Cref
{
advancedLifetimes
}
pour plus de détails.
...
...
@@ -527,43 +529,68 @@ Il se trouve que les boucles et tests sont des expressions: voir \Cref{expressio
\section
{
Structures, Enums et Pattern matching
}
Dans l'exemple ci-dessous, nous allons créer deux utilisateurs, Anthony et Luc.
\subsection
{
Types produits
}
Chaque utilisateur a :
\begin{itemize}
\item
un identifiant
\item
un prénom
\item
potentiellement, un surnom
\end{itemize}
Il y a trois formes pour déclarer un type qui est la concaténation de
valeurs de plusieurs types.
Tous peuvent être déstructurés similairement.
Ici on veut que le type
\texttt
{
T
}
ait trois valeurs de types
\texttt
{
u8
}
,
\texttt
{
char
}
,
\texttt
{
String
}
.
Tuples:
\begin{lstlisting}
[style=Rust, language=Rust]
enum MaybeNickname
{
// L'enum
\textbf
{
MaybeNickname
}
se compose :
Nickname(String), // - soit d'un élément, qui est la chaîne de caractère.
NoNickname, // - soit d'aucun élément.
type T = (u8, char, String);
fn main()
{
let t = (1, 'a', "un".to
_
string());
let (n, c, s) = t;
let n = t.0;
}
// avantages: peut être créé à la volée
// inconvénients: long à écrire si il y a beaucoup de valeurs, on risque d'oublier des valeurs
// utilisation: pour des types qui n'ont pas particulièrement de signification dans le programme
\end{lstlisting}
~
\\
struct User
{
id: i32,
name: String,
nickname: MaybeNickname,
Tuple struct:
\begin{lstlisting}
[style=Rust, language=Rust]
struct T(u8, char, String);
fn main()
{
let t = T(1, 'a', "un".to
_
string());
let T(n, c, s) = t;
let n = t.0;
}
// avantages: ne peut pas être confondu avec d'autres types qui ont les mêmes éléments
// inconvénients: on peut oublier l'ordre des éléments
// utilisation: pour des types qui contiennent peu de valeurs
\end{lstlisting}
Voir
\Cref
{
patternNewtype
}
pour une utilisation fréquente de cette forme
~
\\
Struct:
\begin{lstlisting}
[style=Rust, language=Rust]
struct T
{
num: u8,
chr: char,
str: String,
}
fn main()
{
let user
_
one: User = User
{
id: 1,
name: "Anthony".to
_
string(),
nickname: MaybeNickname::Nickname("Antho".to
_
string()),
}
;
let user
_
two: User = User
{
id: 2,
name: "Luc".to
_
string(),
nickname: MaybeNickname::NoNickname,
let t = T
{
num: 1,
chr: 'a',
str: "un".to
_
string(),
}
;
print
_
user(user
_
one); // "1: Anthony aka Antho"
print
_
user(user
_
two); // "2: Luc"
let T
{
num: n, chr: c, str: s
}
= t;
let n = t.num;
}
// avantages: on ne risque pas d'oublier la signification de chaque champ
// inconvénients: long à écrire
// utilisation: pour des types qui ont soit beaucoup de valeurs,
// soit plusieurs valeurs qu'on risque de confondre
\end{lstlisting}
fn print
_
user(user: User)
{
// Afin de comparer l'enum, on utilise un pattern matching
...
...
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment