IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

D Discussion :

string, wstring et dstring sont immuables ?


Sujet :

D

  1. #1
    Membre à l'essai
    Homme Profil pro
    amehat
    Inscrit en
    Août 2008
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Eure et Loir (Centre)

    Informations professionnelles :
    Activité : amehat
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Août 2008
    Messages : 19
    Points : 24
    Points
    24
    Par défaut string, wstring et dstring sont immuables ?
    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 :

    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);
    }
    La compilation se passe bien et le résultat obtenu est bon :

    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 :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    string nePeutEtreMutée = "salut";
    nePeutEtreMutée[0] = 'S'; // ERREUR DE COMPILATION
    On est d'accord que le code suivant :

    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);
    }
    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 (){
        string name = "arnaud";
        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
    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);
    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.

    Qu'en pensez-vous ?

  2. #2
    Invité
    Invité(e)
    Par défaut
    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.
    C'est exactement ça.
    Il faut distinguer entre :
    - immutable(char)[] qui est la définition de string. Seuls les caractères sont immutable.
    - immutable(char[]) pour qui à la fois la valeur et les caractères sont immutables. Ce type est équivalent à immutable(string).

  3. #3
    Membre à l'essai
    Homme Profil pro
    amehat
    Inscrit en
    Août 2008
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Eure et Loir (Centre)

    Informations professionnelles :
    Activité : amehat
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Août 2008
    Messages : 19
    Points : 24
    Points
    24
    Par défaut
    Merci Ponce pour ta réponse.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. String comme "\u0643..." ne sont pas reconnues
    Par scholes dans le forum Langage
    Réponses: 8
    Dernier message: 04/01/2015, 20h16
  2. Conversion string <-> wstring problème d'accent.
    Par Neckara dans le forum Débuter
    Réponses: 1
    Dernier message: 12/12/2012, 17h42
  3. Date : recuperer un mois et un jour qui sont en String
    Par blaise_laporte dans le forum Collection et Stream
    Réponses: 4
    Dernier message: 11/10/2006, 11h32
  4. Tri alphabétique d'un TreeMap dont les clés sont des String
    Par Djakisback dans le forum Collection et Stream
    Réponses: 6
    Dernier message: 31/03/2006, 14h33
  5. string et wstring
    Par superspag dans le forum C++
    Réponses: 7
    Dernier message: 20/01/2006, 08h31

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo