Médiaforma

All posts tagged types de données

Plusieurs types de données peuvent être utilisés en PHP :

  • Booléen : c’est le type le plus simple. Il peut valoir TRUE ou FALSE (ces deux mots sont insensibles à la casse).
  • Entier : un nombre entier peut être spécifié en décimal (1234), en octal (0123) ou en hexadécimal (0x1F).
  • Décimal : un nombre décimal peut être spécifié sous une forme traditionnelle (1.46) ou en virgule flottante (1.2e3 ou 6E-9).
  • Chaîne : elle peut être délimitée par des guillemets ou par des apostrophes. Utilisez le caractère d’échappement antislash (\) pour insérer un guillemet ou une apostrophe dans une chaîne délimitée (respectivement) par des guillemets ou des apostrophes.
  • Tableau : il peut être constitué d’une suite de valeurs individuelles ou d’une suite de couples clé=>valeur. Nous y reviendrons par la suite.
  • Objet : pour définir un objet, vous devez instancier une classe en utilisant le mot-clé new. Les fonctions membres sont accédées avec l’opérateur -> et les variables membres avec l’expression $this->var_membre. Nous y reviendrons par la suite.
  • Ressource : il s’agit d’un type particulier qui fait référence à une ressource externe. Consultez cette page pour en savoir plus : http://www.php.net/manual/fr/resource.php. Nous y reviendrons par la suite.
  • NULL : ce type représente une variable sans valeur. Une variable est de type NULL si :
    • On lui a affecté la constante NULL ;
    • Elle n’a pas encore reçu de valeur ;
    • Elle a été effacée avec la fonction unset().

Pour tester si une donnée est d’un certain type (ou peut être convertie dans ce type), vous utiliserez des fonctions PHP prédéfinies :

Fonction Effet
is_array() Teste si l’argument est un tableau
is_bool() Teste si l’argument est un booléen
is_float() Teste si l’argument est un nombre réel
is_int() Teste si l’argument est un nombre entier
is_null() Teste si l’argument est nul
is_numeric() Teste si l’argument est numérique
is_object() Teste si l’argument est un objet
is_string() Teste si l’argument est une chaîne

 

Voici quelques exemples :

$ch="ceci est une chaîne"; // La fonction is_string($ch) retourne true

$i = 12; // La fonction is_int($i) retourne la valeur true

$r = 16.34; // La fonction is_float($r) retourne la valeur true


Les codes ASCII

Le petit programme ci-après affiche les caractères dont le code ASCII est compris entre 32 et 256 :

public class ASCII{

  public static void main (String args[]) throws java.io.IOException {
    // Illustration des caractères ASCII
    int i, j;
    char ch;

    System.out.println("Les caractères ASCII de 32 à 255");
    for (i=32; i<256; i++) {
      for (j=0; j<11; j++) {
        if ((i+j)<100)
          System.out.print("0");
        ch = (char) (i+j);
        if ((i+j)<257)
          System.out.print(i+j + " " + ch + "  ");
      }
      System.out.println("");
      i=i+10;
    }
  }
}

Chaînes de caractères

Pour manipuler des chaînes de caractères, vous utiliserez des objets non pas de type String, mais de classe String. Comme nous le verrons dans la suite de la formation, la syntaxe à utiliser pour ces différents objets est très similaire. Bien que les possibilités offertes par la classe String soient la plupart du temps suffisantes, vous pouvez également utiliser un tableau de char pour manipuler vos chaînes de caractères.

A titre d’exemple, l’instruction ci-après définit un objet String et lui affecte une valeur :

String s = new String("Ceci est une chaîne");

Pour faciliter l’écriture, on préfèrera cette syntaxe :

String s = "Ceci est une chaîne";

Les variables de classe String peuvent également contenir des caractères d’échappement :

Code Caractère Equivalent hexadécimal
\b Backspace \u0008
\t Tabulation horizontale \u0009
\n Line feed \u000a
\f Form feed \u000c
\r Carriage return \u000d
\” Guillemet \u0022
\’ Apostrophe \u0027
\\ Antislash \u005c
\xdd Valeur hexadécimale  
\ddd Valeur octale  
\u00xx Valeur hexadécimale représentant un caractère Unicode (où xx est compris entre 00 et ff)  

Exemples :

String c1 = "\f";
String c2 = "\u0084";

Types de données prédéfinis

Les types de données prédéfinis en Java ne sont pas très nombreux. Ils permettent de manipuler des nombres entiers (byte, short, int, long), des nombres réels (float, double), des booléens (boolean) et des caractères (char). Par extension, vous pouvez également utiliser la classe String pour manipuler facilement des chaînes de caractères.

Les divers types de données utilisables en Java vont être passés en revue dans les sections suivantes.

Nombres entiers

Selon la taille des nombres à manipuler, vous utiliserez le format byte, short, int ou long :

  • Les entiers byte sont codés sur 8 bits. Ils permettent de manipuler des nombres compris entre -2^7 et (2^7)- 1, c’est-à-dire entre -128 et 127.
  • Les entiers short sont codés sur 16 bits. Ils permettent de manipuler des nombres compris entre -2^15 et (2^15)-1, c’est-à-dire entre -32768 et 32767.
  • Les entiers int sont codés sur 32 bits. Ils permettent de manipuler des nombres compris entre -2^31 et (2^31)-1, c’est-à-dire entre -2147483648 et 2147483647.
  • Enfin, les entiers long sont codés sur 64 bits. Ils permettent de manipuler des nombres compris entre -2^63 et 2^63, c’est-à-dire entre -9223372036854775808 et 9223372036854775807.

Exemples :

Les nombres entiers peuvent être exprimés en décimal (base 10), en hexadécimal (base 16) ou en octal (base 8) :

byte NombreDécimal = 127;       // Un nombre entier exprimé en décimal
int NombreHexadécimal = 0x5ec;  // Un nombre entier exprimé en hexadécimal
long NombreOctal = 0346;        // Un nombre entier exprimé en octal

Nombres réels

Les nombres réels sont composés d’une partie entière suivie d’un point, d’une partie décimale, de la lettre e (ou E) et d’un exposant, éventuellement précédé d’un signe + ou -.

Voici quelques exemples de nombres réels :

325.707
3.25707E2
.325707E3
-45.567E-5

Le langage Java manipule deux types de réels :

  • Les réels float sont codés en simple précision sur 32 bits (1.40239846e-45 à 3.40282347e38).
  • Les réels double sont codés en double précision sur 64 bits (4.94065645841246544e-324 à 1.79769313486231570e308).

Vous pouvez spécifier le type d’une variable réelle pendant sa création en utilisant les mots clés double et float :

double d = 34.56567;
float f = 123.56;

Attention :

La seconde instruction est incorrecte : Lorsque Java rencontre un point décimal dans une affectation, il suppose qu’il s’agit d’un réel double. En affectant un nombre contenant un point décimal à une variable float, vous obtiendrez un message d’erreur vous indiquant une incompatibilité de type. Pour résoudre ce problème, vous utiliserez l’une des deux syntaxes suivantes :

float f = (float)123.56;
float f = 123.56f;
La lettre "f" à la fin de la seconde instruction indique que la donnée est de type float et non double. De la même façon, vous pouvez utiliser le suffixe "d" pour affecter une valeur double à une variable :
double d = 145.56565d;

Remarque

Les suffixes f et d peuvent être indifféremment utilisés en lettres minuscules ou majuscules.

Booléens

Ils peuvent prendre la valeur true ou la valeur false. Si vous le souhaitez, il est également possible d’utiliser (comme dans de nombreux autres langages) un nombre non nul pour représenter la valeur true et le nombre 0 pour représenter la valeur false.

Dans l’exemple suivant, les instructions définies entre les deux accolades seront exécutées. En effet, la variable Valeur étant non nulle, sa valeur est interprétée comme true.

Valeur = 4;
if Valeur then {
  ...
}

Type char

Une variable de type char peut contenir un (et un seul !) caractère. Java utilise le jeu de caractères 16 bits Unicode qui contient quelque 65 000 caractères! Il est donc possible de manipuler des caractères spécifiques à la langue française (à, é, è, ç, etc.) dans les variables char… et par extension dans les chaînes String.

A titre d’exemple, les deux affectations ci-après sont correctes :

char c1 = 'é';
char c2 = '1';

Par contre, cette troisième affectation produira une erreur lorsqu’elle sera exécutée :

char c3 = 'er';