fbpx

2. Les principes fondamentaux du Dart

1. La fonction main()

En Dart, comme dans d’autres langages (C++, Objective C, C#) tout votre code passera par une fonction principale appelée main.

Le code Dart qui s’exécutera dans votre application ou votre page sera celui placé à l’intérieur de cette fonction.

void main() {
  print('Hello, World!');
}

Bien sûr, nous ne placerons pas directement tout notre code à l’intérieur, nous utiliserons des fonctions, classes et par la suite des widgets Flutter pour développer nos applications.

Nous ferons donc appel à nos autres fonctions en passant par cette fonction dite « haute » dans notre code Dart, par exemple:

// On definit une fonction
void printInteger(int aNumber) {
  print('The number is $aNumber.'); // On affiche le résultat dans la console
}

// C'est ici que notre script va s'exécuter
void main() {
  var number = 42; // On déclare et on initialise notre variable nombre
  printInteger(number); // On appelle la fonction
} 

Voilà tout ce qu’il y a à savoir à propos de la fonction main(), que nous utiliserons dans Flutter.

2. La Programmation Orientée Objet

Le langage Dart utilise la Programmation Orientée Objet (POO) comme d'autres langages plus anciens comme le C++, le Swift ou encore le PHP.

La POO représente en fait un ensemble de principes sur lesquels plusieurs langages sont basés pour fonctionner.

Parmi les concepts fondamentaux de la POO, je me suis permis de sélectionner ceux que j'estime les plus importants:

  • Classe: une classe comporte des méthodes ou propriétés qui permettent d’interagir avec les données. C’est à partir d'une classe que seront créés les différents objets.
  • Objet: un objet est une structure informatique qui permet de regrouper un ensemble de données ou de champs.
  • Instance: on parle d'un objet en tant qu’instance d'une classe lorsque l’objet est créé avec les propriétés de sa classe.
  • Héritage: Cela représente le fait qu’une classe Enfant hérite de la classe Parent, autrement dit la classe Enfant hérite des attributs et méthodes de la classe Parent.

3. Les classes en Dart

Dans le Dart, la notion de classe est omniprésente, elle nous permettra par la suite de mieux comprendre le fonctionnement des widgets dans Flutter.

Nous allons voir des exemples simples de classes Dart pour vous faire comprendre leur utilité et leur fonctionnement.

Contrairement à d'autres langages d'ailleurs, en Dart il est possible de définir plusieurs classes dans un même fichier.

Voilà par exemple une première classe qui permet de représenter un entrepreneur:

class Startuper {
  String name = '';
  String company = '';
  
  String createSentence() {
    return '$name a créé $company';
  }
}

On peut ainsi nommer chaque partie de notre classe de la manière suivante:

  • Startuper: Le nom de ma classe (avec le mot class devant)
  • name et company: mes deux champs de type chaîne de caractère
  • createSentence(): une méthode qui créé une phrase avec le nom de l'entrepreneur et l'entreprise qu'il a fondé

L'intérêt des classes est de pouvoir créer des méthodes qui permettent de manipuler les données.

On déclare une classe à chaque fois qu'un processus de déclaration et de manipulation de données se répète.

Par exemple, on peut déclarer une nouvelle instance de la classe Startuper avec la syntaxe suivante:

Startuper person = new Startuper(); // instance

On peut également accéder aux champs de cette classe avec la syntaxe suivante:

person.name;

Ainsi qu'au résultat de nos méthodes avec la syntaxe:

person.createSentence();

Voilà par exemple notre script Dart complet pour afficher dans la console la phrase ("Elon Musk a créé SpaceX"):

void main() {
  Startuper person = new Startuper();
  person.name = 'Elon Musk';
  person.company = 'SpaceX';
  print(person.createSentence());
}

class Startuper {
  String name = '';
  String company = '';
  
  String createSentence() {
    return '$name a créé $company';
  }
}

4. Principe d'héritage

Je vous ai parlé dans l'introduction à la Programmation Orientée Objet du principe d'héritage.

Celui-ci s'applique aux classes Dart, ce qui va nous permettre de faire hériter certaines propriétés à nos classes.

Voilà par exemple un schéma qui vous explique comment différentes classes peuvent hériter d'une même classe dite parente:

On distingue donc deux types de classes:

  • Classe parente - La classe dont les propriétés sont héritées par la classe enfant est appelée Classe parente. La classe parente est également appelée classe de base ou super classe .
  • Classe enfant - La classe qui hérite des propriétés d'une autre classe est appelée classe enfant. La classe enfant est également appelée classe dérivée ou classe de base .

Nous pouvons par exemple créer première classe Vehicule qui sera notre classe parente:

class Vehicle {
  String carCompany = '';
  String carModel = '';
  
  String getCompanyAndModel() {
    return 'La $carModel de chez $carCompany';
  }
}

On peut de cette manière faire appel à elle avec le script suivant pour déclarer un nouveau véhicule:

void main() {
  Vehicle vehicule = new Vehicle();
  vehicule.carCompany = 'Renault';
  vehicule.carModel = 'Clio';
  print(vehicule.getCompanyAndModel());
}

Mais nous pouvons également déclarer une nouvelle classe Car qui va hériter de toutes les propriétés de la classe Vehicule.

Voilà la syntaxe à utiliser pour créer cette classe enfant:

class Car extends Vehicle {
  int seatNumber = 0;

  String getSeatNumber() {
    return '${getCompanyAndModel()} a $seatNumber sièges';
  }
}

De cette manière, je peux créer une nouvelle instance de la classe Car() avec directement les mêmes propriétés que ma classe Vehicule():

void main() {
  Car myCar = new Car();
  myCar.carCompany = 'Renault';
  myCar.carModel = 'Clio';
  myCar.seatNumber = 5;
  print(myCar.getSeatNumber());
}

Je vous laisse le code complet de tout le fichier Dart:

void main() {
  Car myCar = Car();
  myCar.carCompagny = 'Renault';
  myCar.carModel = 'Clio';
  myCar.seatNumber = 5;
  print(myCar.getSeatNumber());
}

class Vehicle {
  String carCompagny = '';
  String carModel = '';
  
  String getCompanyAndModel() {
    return 'La $carModel de chez $carCompagny';
  }
}

class Car extends Vehicle {
  int seatNumber = 0;
  
  String getSeatNumber() {
    return '${getCompanyAndModel()} a $seatNumber sièges';
  }
}

Voilà pour cette petite introduction aux principes fondamentaux du Dart et à la Programmation Orientée Objet.