Dans le livre d'Ali Çehreli, traduit par Raphaël Jakse et plus particulièrement dans le chapitre "Chaînes de caractères" (http://dlang-fr.org/cours/programmer-en-d/chaines.html), il est écrit "string, wstring, et dstring sont immuables".
Si je teste de la sorte :
La compilation se passe bien et le résultat obtenu est bon :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 import std.stdio; void main (){ string name = "arnaud"; dstring dname = "jean"; wstring wname = "kleber"; writeln ("name : " , name, " dname : " , dname, " wname : " , wname); name = "aurélie"; dname = "gabriel"; wname = "arthur"; writeln ("name : " , name, " dname : " , dname, " wname : " , wname); }
name : arnaud dname : jean wname : kleber
name : aurélie dname : gabriel wname : arthur
Si je ne m'abuse, l'immutabilité, c'est une valeur de variable qui ne change pas.
Cependant l'approche faite par Çehreli, semble plus lié aux char, dchar et wchar.
Puisque l'exemple d'immutabilité qu'il nous fourni est le suivant :
On est d'accord que le code suivant :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 string nePeutEtreMutée = "salut"; nePeutEtreMutée[0] = 'S'; // ERREUR DE COMPILATION
donnera le même résultat que ce code :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 void main (){ char[] name = ['a','r','n','a','u','d']; writeln (name); }
Et si je veux faire mettre des strings en immutable, j'écris le code suivant, j'obtiens une erreur de compilation (ce qui me parait normal) :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 void main (){ string name = "arnaud"; writeln (name); }
Du coup, je me demande si les strings, dstrings et wstrings sont bien immutables, et que ce ne sont pas plutôt le tableau char, dchar et wchar qui sont immutables au sein de string.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 import std.stdio; void main (){ immutable string name = "arnaud"; dstring dname = "jean"; wstring wname = "kleber"; writeln ("name : " , name, " dname : " , dname, " wname : " , wname); name = "aurélie"; // ERREUR DE COMPILATION : cannot modify immutable expression name dname = "gabriel"; wname = "arthur"; writeln ("name : " , name, " dname : " , dname, " wname : " , wname);
Qu'en pensez-vous ?
Partager