Comme déjà vu dans l'activité 1, les variables ne contiennent pas forcément des nombres, elles peuvent aussi "abriter" des suites de caractères, on parle alors de chaîne de caractères.
Saisissez, analysez et testez ce programme
String a;
a="hello world !";
println(a);
L'utilisation du signe + ne se limite pas à l'addition. Il est aussi utilisé pour la concaténation.
D'après Wikipédia :
Le terme concaténation (substantif féminin), du latin cum (« avec ») et catena (« chaîne, liaison »), désigne l'action de mettre bout à bout au moins deux chaînes.
Comme vous avez pu le deviner en lisant la définition ci-dessus, la concaténation va concerner les chaines de caractères.
D'après vous, que fait ce programme ?
String a;
String b;
a="hello ";
b="world !";
String res=a+b;
println(res);
Vérifier votre réponse en l'exécutant à l'aide de Processing.
Il est tout à fait possible d'utiliser la concaténation dans d'autres situations :
String a;
String b;
a="hello ";
b="world !";
println(a+b);
ou encore :
String a;
a="hello ";
println(a+"world !");
Un peu plus complexe :
Saisissez, analysez et testez ce programme
String a;
int b;
a="hello ";
b=42;
println(a+b);
Nous avons a et b qui sont de types différents (int et String), le signe "+" correspond donc ici au signe de l'addition ou de la concaténation ?
Additionner une chaine et un nombre n'a aucun sens. En revanche, concaténer une chaine et un nombre peut avoir un sens à condition de transformer le nombre en chaine de caractères (ce qui est toujours possible). C'est exactement ce qui se passe ici, le système transforme le nombre 42 en chaine de caractères "42" automatiquement (on parle alors de transtypage automatique) afin d'effectuer une concaténation.
Le transtypage automatique peut aussi être possible entre entier et nombre à virgule :
Saisissez, analysez et testez ce programme
int a;
float b;
a=24;
b=a;
println (b);
Comme vous pouvez le constater, aucune erreur n'est signalée ici, Processing effectue un transtypage automatique en passant de 24 à 24.0
Attention cependant, le programme :
float a;
int b;
a=24.0;
b=a;
println (b);
vous retournera une erreur (cannot convert from float to int), le transtypage automatique float vers integer n'est donc pas autorisé.
Il est possible d'effectuer cette conversion, mais il faut le préciser dans le programme :
Saisissez, analysez et testez ce programme
float a;
int b;
a=24.7;
b=int(a);
println (b);
Comme vous pouvez le constater int(a) supprime la partie décimale, nous n'avons pas ici un arrondi, mais une troncature à l'unité.
Dans toutes circonstances, il convient de rester prudent avec tout ce qui touche le transtypage automatique, vous pouvez vite vous retrouver dans des situations délicates.
Pour que vous ne soyez pas surpris si vous les rencontrez, Processing gère d'autres types de variable :
Je ne reviens pas sur les types que nous avons déjà étudiés : int, float et String.
Saisissez, analysez et testez ce programme
char a;
int b;
int c;
byte d;
a='z';
b=125;
println(a);
println(b);
c=int(a);
d=byte(b);
println(c);
println(d);
Comme vous pouvez le constater, il faut utiliser les guillemets simples ' pour le type char (alors qu'il faut utiliser les guillemets doubles " pour le type String).
Il est possible de convertir un int en byte à condition que votre int soit compris entre -128 et 128. Si votre int n'est pas dans cet encadrement et que vous tentez tout de même la conversion int vers byte, vous n'aurez pas de message d'erreur, mais un résultat "étrange", prudence donc (faites le test en modifiant le programme du "À faire vous-même 4.6").
La conversion char vers int (ou byte) est possible, dans l'exemple ci-dessus, la variable c contient le code ascii du caractère z, c'est-à-dire 122 (pour en savoir plus sur le code ascii : voir ici). Si vous remplacez le caractère z par le caractère é, vous allez vous rendre compte que ce n'est pas la norme ascii (qui ne gère pas les caractères accentués) mais la norme utf-8 ( voir ici pour plus de précision sur l'utf-8).