Auteur: Jérôme Forget. Publié le 8 juillet 2006.
ActionScript 2.0 est un langage beaucoup plus strict que son prédecesseur. Le typage des variables, par exemple, peut sembler alourdir la tâche du programmeur mais, en réalité, cela simplifie le débogage et la gestion des erreurs. Voyons un peu les règles de base de la syntaxe d'ActionScript 2.0 et de la définition de classe.
La classe est au coeur de la POO. ActionScript 2.0 possède une toute nouvelle approche de développement qui encourage les programmeurs à adopter de bonnes pratiques. La définition d'une classe (comme la définition des classes intégrées de Flash) se retrouve dans un fichier ActionScript externe. Il n'est donc pas possible de définir une classe sur l'image 1 du calque 1.
Le fichier ActionScript doit porter l'extension .as. Généralement, on le placera au même niveau que le fichier principal .fla. Il est aussi possible de regrouper les définitions de classes et de les déplacer du répertoire principal. Nous verrons cela plus tard.
Voyons une déclaration de classe simple:
class Etudiant {
var id:Number;
var nom:String;
var programme:String;
function Etudiant (id:Number, nom:String, programme:String) {
this.id = id;
this.nom = nom;
this.programme = programme;
}
}
D'abord, ce code doit être placé dans un fichier nommé Etudiant.as. Le nom du fichier doit être rigoureusement exact au nom donné à la classe. La définition de classe commence par le mot-clé class suivi du nom de la classe. Généralement, les noms de classe commencent toujours par une majuscule. Des accolades regroupent toute la définition de la classe.
Dans l'exemple précédant, trois propriétés sont déclarées pour la classe. Une propriété, c'est un peu comme les qualités d'un objet, ces caractéristiques propres. Ici, l'Etudiant a un numéro d'identification (id), un nom (nom) et un programme (programme).
Toutes les propriétés d'un objet sont déclarées dans la définition de la classe. Il ne sera plus possible après de déclarer une propriété en écrivant simplement Etudiant.groupe. Chaque propriété de l'objet est déclarée au début de la définition de la classe.
Il en va de même des méthodes. Les méthodes sont comme les actions qu'un objet peut effectuer. On utilise souvent des verbes d'action pour les nommer. Les méthodes aussi sont déclarées dans la définition de classe. Nous verrons tout cela plus en détails plus tard.
Autre élément constitutif de la définition de classe est la fonction constructeur. Cette fonction est invoquée au moment de la création d'une instance de l'objet. C'est la fonction qui est déclarée lorsqu'on utilise le mot-clé new comme dans new Sound();. La fonction constructeur doit porter le même nom que la classe elle-même. Cette fonction permet d'initialiser l'instance créée et de lui donner certains comportements de départ.
La fonction constructeur doit porter le même nom que celui de la classe. Notez qu'aucun typage de renvoi n'est nécessaire pour la fonction constructeur. Sa présence provoquera même une erreur.
Remarquez la fonction constructeur de la classe Etudiant décrite à l'exemple précédant:
function Etudiant (id:Number, nom:String, programme:String) {
this.id = id;
this.nom = nom;
this.programme = programme;
}
Cette fonction constructeur passe à l'instance de l'objet nouvellement créé trois paramètres - id, nom et programme - et les assigne aux propriétés correspondantes de l'objet.
Dans l'éditeur ActionScript de Flash, on pourrait écrire ceci pour créé une ouvelle instance de l'objet Etudiant:
var unEtudiant:Etudiant = new Etudiant(254657867, "Jérôme Forget", "multimédia");
Si on la développe un peu, cette classe peut servir à stocker des noms d'étudiants et à accéder à certaines informations.
class Etudiant {
private var id:Number;
private var nom:String;
private var programme:String;
function Etudiant(id:Number, nom:String, programme:String) {
this.id = id;
this.nom = nom;
this.programme = programme;
}
function getProgramme ():String {
return programme;
}
function setProgramme(devise:String):Void {
this.devise = programme;
}
}
Premier changement pour les programmeurs, ActionScript 2.0 est un langage sensible à la casse des caractères. Le code suivant retournera undefined à cause de la casse.
var monServeur = "Serveur central";
trace (monserveur);
La sensibilité à la casse peut devenir un casse-tête si on n'a pas de bonnes habitudes de nomenclature des noms de variables. Ainsi, on n'utilisera jamais le même nom de variable avec des casses différentes pour nommer deux variables différentes. L'exemple suivant est à proscrire:
var monServeur = "Serveur central";
var monserveur = "Serveur secondaire";
Le typage consiste à déclarer pour chaque variable le type de données qu'elle contient. Cette nouveauté dans AS2 permet de mieux gérer les erreurs et d'activer les conseils de code dans l'éditeur du logiciel. Chaque variable doit donc être déclarée avec le mot-clé var et doit comprendre le type de données, comme ceci:
var monObjet :Object = new Object();
Le typage des données vient combler un gros manque d'ActionScript 1.0, où les codes confus permettaient qu'une même variable soit tour à tour un nombre et une chaîne de caractères.
Le typage des données est vérifié au moment de la compilation et si une erreur survient, par exemple un nombre est assigné à une chaîne de caractères, Flash va immédiatement générer un message d'erreur.
**Erreur** Séquence = Séquence 1, calque = Calque 1, image = 1 :Ligne 2 :
Incompatibilité de types dans l'instruction d'affectation : Number détecté
au lieu de String.
Le typage est donc une pratique à adapter afin de réduire les risques d'erreur causées par l'affectation d'une mauvaise valeur à une variable.
Les types de données sont nombreux et correspondent tous à des classes dans Flash. Pensons à Array, MovieClip, Number, String, Sound, etc. On peut consulter la liste complète des classes intégrés à Flash dans la panneau d'Actions.
En plus des variables, les fonctions aussi doivent être typées. On déclarera le type de données pour les paramètres d'une fonction, mais aussi pour la valeur retournée par cette fonction.
function getNomEtudiant () :String {
return this.nomEtudiant;
}
Si une fonction ne retourne aucune valeur, on le spécifiera en utilisant le type Void.
function setNomEtudiant (nomEtudiant:String) :Void {
this.nomEtudiant = nomEtudiant;
}