juillet
2012
Représentation
Une chaîne de caractères en dodo peut simplement s’écrire entre double guillemets.
"Bonjour"
Par défaut, le programme utilise le même encodage de caractères que le fichier source. Le compilateur détermine l’encodage du fichier à sa lecture. Cependant la détection d’encodage de fichier n’est pas une science exacte et dépend souvent de la configuration du système. Le compilateur doit permettre de fournir le nom d’un encodage de caractères au moment de la compilation.
Pour choisir l’encodage des caractères d’une chaîne pour le programme il est possible de précéder les guillemets ouvrants avec un code. Par exemple, « x » est le code qui indique un encodage de caractères en UTF-16.
Le compilateur traduit de l’encodage du fichier en celui spécifié pour la chaîne de caractères.
Contenu
En fonction de l’encodage sélectionné, les caractères qui composent la chaîne peuvent occuper un octet ou plus. Par exemple en BIG5 les caractères chinois occupent deux octets et les caractères latins n’en occupent qu’un.
En Unicode il est même possible d’utiliser plusieurs caractères – ou codepoints – pour écrire une lettre, par exemple un accent aigu et « e » font un « é ».
Au vu de ces considérations, on ne peut pas toujours faire correspondre une position absolue dans la chaîne avec un caractère. Cela signifie que pour obtenir, par exemple, le cinquième caractère de la chaîne il faut soit partir du premier caractère et avancer caractère par caractère, ou il faut utiliser une représentation interne différente pour les caractères.
Dodo considère que le choix d’encodage du programmeur prend précédence, et n’impose pas sa propre représentation interne des chaînes de caractères.
En cela dodo est différent de Java et autres langages qui sont standardisés avec UTF-16 ou un autre encodage de caractères. Pour les opérations telles qu’obtenir le cinquième caractère, une chaîne de caractères peut être convertie en un tableau de caractères de façon efficace.
Caractères spéciaux
En dodo il n’y a pas de caractère d’échappement prédéfini. Donc les caractères spéciaux peuvent simplement être insérés dans la chaîne, sans les précéder d’un caractère d’échappement. Cela implique aussi qu’une chaîne de caractères ne peut pas contenir de double guillemet.
"antislash: \, dollar: $, apostrophe: ', pourcent: %"
Pour exprimer le double guillemet, les caractères de contrôle et les caractères qui ne peuvent pas être représentés à l’aide de l’encodage de caractères courant, dodo a une syntaxe pour un seul caractère:
\" \n \u2030
Un tel caractère peut être ajouté à une chaîne de caractères par concaténation. De plus, rien n’empêche les fonctions comme sprintf() d’interpréter certaines séquences de caractères comme des caractères échappés.
Texte multi-ligne
Dodo aide le programmeur à se rappeler de fermer une chaîne de caractères en rejetant une ligne qui a des guillemets ouvrants mais pas de guillemets fermants. A moins que la ligne suivante commence avec des guillemets.
Si la ligne suivante commence avec des guillemets alors la chaîne de caractères continue à la ligne suivante, et ainsi de suite jusqu’à une ligne qui contient des guillemets fermants.
"ligne 1 "ligne 2"
L’inconvénient est que cela fait un nombre impair de double-guillemets sur une ligne, ce qui ne plaît pas aux éditeurs de texte. Pour pallier à cela, on peut utiliser trois double-guillemets pour indiquer que la chaîne continue sur la ligne suivante.
"ligne 1""" "ligne 2"
Cette syntaxe a aussi l’avantage de révéler s’il y a des espaces en fin de ligne.
Conclusion
En attribuant un encodage à chaque chaîne de caractères et en convertissant automatiquement de l’encodage système vers l’encodage spécifié, dodo permet un grand contrôle sur la représentation des chaînes de caractères dans le programme.
La gestion des chaînes de caractères dans dodo s’efforce d’apporter des réponses aux problèmes courants. Par exemple, les opérations sur les caractères et les opérations sur les codes sont clairement séparées.
Si certains choix de syntaxe peuvent porter à débat (notamment l’absence de caractère d’échappement) ils ont leurs avantages et ne sont pas difficiles à s’habituer.
A propos de la syntaxe, je vais refermer ce chapitre avec une proposition de syntaxe pour la concaténation de chaînes de caractères.
Si une expression est une chaîne de caractères entre double guillemets, elle peut être suivie d’une expression entre parenthèses et du reste de la chaîne de caractères. Il n’est pas nécessaire de spécifier l’encodage pour le reste de la chaîne.
x"Utilisateur = "(\")(nom)(\")(\n)"Age = "(age)(\n)
Qu’en dites-vous?