|
Les bases de la programmation - Partie 2
|
|
par sky
, le Jeudi 02 septembre 2004 |
|
|
1.3 Les fonctions dédiées La seule concaténation ne permet pas de manipuler des chaînes de manière efficace. Pour cela, de nombreuses fonctions sont dédiées au traitement des chaînes. Nous ne verons ici qu'un petit nombre de ces fonctions, les plus basiques et les plus usitées. Le site DevEdge de Netscape est une excellente source pour le javascript, cette page vous donne la liste des fonctions attribuées aux objets "chaîne de caractère". Vous trouverez facilement sur internet d'autres sites spécialisés dans le javascript. Les chaines possèdent aussi des propriétés auquelles on accéde de la même manière que les fonctions : la notation pointée. Le bout de code qui suit n'est pas fonctionnel, il ne sert que d'exemple pour cette notation pointée :
|
// exemple de fonction
chaine.fonction( parametres );
// exemple de propriete
chaine.propriete;
|
|
1.3.1 La longueur Il est souvent pratique de connaitre la longueur d'une chaîne. Cela se fait par la propriété length qui renvoie un résultat numérique :
|
// j initialise une chaine
var welcome = "bienvenue";
// je calcule la longueur et l attribue dans une nouvelle variable
var welc_long = welcome.length;
// j affiche de maniere smart le resultat
alert ( 'La longueur de la chaine est : ' + welc_long + '.' );
|
|
1.3.2 Construction d'une sous chaîne Il est possible de récupérer une partie d'une chaîne avec la fonction substring. Cette fonction prend en charge deux paramètres numériques positifs et renvoie une chaîne de caractères. Les deux numériques sont les positions de début et de fin, la fonction prend comme paramètre de début le plus petit numérique donné et donc logiquement le paramètre fin est le plus grand. Alors que le premier caractère ( à la position définie par le paramètre le plus petit ) est inclus, le dernier ( à la position définie par l'autre paramètre ) ne l'est pas. De plus une chaîne a comme index du premier caractère 0 et comme index du dernier, la longueur de la chaîne à laquelle on soustrait 1.
Mais les exemples seront certainement plus parlants. Dans ce premier exemple nous allons juste récupérer un bout d'une chaîne.
|
// initialisation
var chaine = "Coucou";
// creation d une nouvelle chaine avec un morceau de la chaine initiale
var sub_chaine = chaine.substring( 2, 4 );
// affiche le resultat
alert ( sub_chaine );
|
N'hésitez pas à tester avec plusieurs valeurs pour voir le comportement de la fonction.
Un seul exemple semble léger pour voir les capacités de cette fonction. Nous allons tester certains exemples "limites" pour voir comment le Javascript réagit :
|
// initialisation d une variable
var chaine = "coucou";
// tests en inversant les parametres
alert ( chaine.substring( 4,2 ) );
|
|
Comme vous pouvez encore le voir, le javascript est assez permissif, et permet ce genre de choses sans que cela ne le gène.
|
// initialisation d une variable
var chaine = "coucou";
// en mettant des valeurs negatives
alert ( chaine.substring( -4,-2 ) );
// en mettant des valeurs negatives et positives
alert ( chaine.substring( -1,2 ) );
|
|
Le javascript exécute réellement ces commandes sans renvoyer d'erreur, il cherche bien les caractères avant l'index 0, mais n'en trouvant pas il retourne une chaîne vide. Dans le second exemple, on a en fait comme résultat l'équivalent de :
|
// initialisation d une variable
var chaine = "coucou";
// affiche le resultat qui est le meme qu avec les parametres -1 et 2
alert ( chaine.substring( 0,2 ) );
|
Voyons maintenant comment utiliser de manière plus efficace les deux premières fonctions. On commence ici à chercher des astuces, certes simples mais qui sont en fait les prémices de l'apprentissage de la logique de la programmation.
Le but de l'exemple suivant est de découper le mot d'une manière simple et qui ne changera pas selon la longeur de la chaîne dans la variable. Nous allons découper une variable de la manière suivante : 3 lettres d'un coté, et tout le reste de l'autre.
|
// initialisation
var welcome = 'Bonjour';
// recuperation des 3 premieres lettres
var debut = welcome.substring( 0,3 );
// recuperation de la longueur de la chaine
var longueur = welcome.length;
// recuperation de la fin du texte
var fin = welcome.substring ( 3, longueur );
// affichages
alert ( 'Debut: ' + debut + '.' );
alert ( 'Fin: ' + fin + '.' );
|
|
1.3.3 Récupération d'un seul caractère Il est possible de récupérer juste un caractère d'une chaîne, la fonction charAt prend en paramètre un numérique et renvoie donc le caractère voulu.
|
// initialisation
var chaine = "Tests";
// on affiche le 4eme caractere
alert ( chaine.charAt( 3 ) );
|
|
1.3.4 Recherche de caractère ou d'un bout de chaîne La fonction indexOf permet de récupérer la position de la première occurrence d'une chaîne ou d'un caractère ( un caractère étant une courte chaîne ) dans une chaîne donnée. Cette fonction prend en paramètre la chaîne à rechercher et renvoie la position sous forme numérique.
|
// initialisation
var chaine = 'Bonjour, ceci est une chaîne de test.';
// on cherche ceci
var position = chaine.indexOf ('ceci');
// affichage
alert ( 'La position de la chaine "ceci" est ' + position + '.');
|
|
On peut réécrire la même chose avec la chaîne "ceci" en tant que variable et sans passer par une variable intermédiaire.
|
// initialisation
var chaine = 'Bonjour, ceci est une chaîne de test.';
var cherche = 'ceci';
// recherche et affichage
alert ( 'La position de la chaine "' + cherche + '" est ' + chaine.indexOf ( cherche ) + '.');
|
Il est indispensable de bien comprendre comment marche l'imbrication des fonctions les unes dans les autres et l'ordre dans lesquel elles sont exécutées pour comprendre précisement le dernier exemple.
Comme la fonction indexOf cherche la première occurence, la fonction lastIndexOf cherche la dernière.
|
// initialisation d un chaine qui comporte 2 fois la sous chaine un
var chaine = 'Ceci est un exemple sur une chaîne.';
var cherche = 'un';
// on affiche la premiere position
alert ( 'La premiere position de la chaine "' + cherche + '" est ' + chaine.indexOf ( cherche ) + '.');
// on affiche la derniere position
alert ( 'La derniere position de la chaine "' + cherche + '" est ' + chaine.lastIndexOf ( cherche ) + '.');
|
|
Comme vous pouvez le remarquer, les fonctions ci-dessus ne recherchent pas les chaînes en temps que mot, et bien en temps que morceau de chaîne, si l'on avait voulu chercher le mot "un", on aurait, par exemple, ajouter un espace devant et un espace derrière. Ces espaces prouveraient bien qu'il s'agit d'un mot en lui même.
|
// initialisation d un chaine qui comporte 2 fois la sous chaine un entouree d espace
var chaine = 'Ceci est un exemple sur une chaine.';
var cherche = ' un ';
// on affiche la première position
alert ( 'La premiere position de la chaine "' + cherche + '" est ' + chaine.indexOf ( cherche ) + '.');
// on affiche la derniere position
alert ( 'La derniere position de la chaine "' + cherche + '" est ' + chaine.lastIndexOf ( cherche ) + '.');
|
|
Les chaînes " un " trouvées ici sont deux fois les mêmes puisqu'une seule occurence de " un " se trouve dans la phrase, en partant du début ou de la fin, on tombe forcément sur la même occurence.
Bien sûr, cette technique a aussi ses limites, puisque si le mot que l'on recherche est en début de phrase, il n'y a aucun espace avant le premier mot de chaque phrase. De même si le mot est proche d'un caractère de ponctuation, l'espace de fin serait de trop. Pour résoudre ce genre de problème, une bonne réflexion sera nécessire pour exactement évaluer les parties à rechercher. 1.3.5 Conversion majuscule/minuscule
Sur les chaînes nous avons la possibilité de passer tout les caractères en majuscule ou minuscule. Ces fonctions sont principalement utilisées pour améliorer l'affichage des phrases.
Les fonctions toUpperCase ( en majuscule ) et toLowerCase ( en minuscule ) ne prennent pas de paramètre et renvoient une chaîne de caractères.
|
// initialisation d une chaine avec majuscules et minuscules.
var chaine = "TeXt";
// transformation du texte en minuscule et affichage de celui-ci
alert ( chaine.toLowerCase() );
// transformation du texte en majuscule et affichage de celui-ci
alert ( chaine.toUpperCase() );
|
|
Par exemple, pour respecter la syntaxe d'une phrase, on peut faire une petite fonction qui renvoie la chaîne qu'on lui donne avec tous les caractères en minuscule exceptée la première lettre.
|
// la fonction qui calcule la phrase
function enPhrase ( str ) { // calcule la phrase
str = str.substring(0,1).toUpperCase() + str.substring(1,str.length).toLowerCase();
// revoie la phrase calculee
return str;
}
// initialisation
var chaine = "ceci EST une PHRASE.";
// utilisation de la fonction
chaine = enPhrase( chaine );
alert ( chaine );
|
Ce petit aperçu de l'utilisation des objets chaînes de caractères est terminé. Beaucoup d'autres fonctions et propriétés sont disponibles. Vous êtes désormais capable de les tester et d'imaginer à quoi elles pourraient vous servir.
|