<< Retour au sommaire

 

La fonction « Use »

 

 

 

Table des matières

  1. Qu’est-ce que c’est ?
  2. Un exemple ;
  3. Davantage de précisions sur les fonctions

3.1        Les fonctions internes ;

3.2        Les fonctions externes ;

3.3        Les fonctions évènementielles ;

3.4        Un appel de fonction ;

3.5        Du côté de la fonction maintenant…

 

Qu’est-ce que c’est ?

 

La fonction « Use » permet d’insérer un fichier « source » de type « JSS » dans un autre fichier source.

Pourquoi ?

·       Eh bien tout simplement pour que les scripts et les fonctions écrits dans le fichier « JSS » inséré, soient utilisables depuis le fichier « source » contenant l’insertion par l’intermédiaire de la fonction « Use ».

 

La syntaxe :

Use "Fichier.JSS"

 

La Description :

·       Use est donc la fonction d'insertion, et "Fichier.JSS" est le fichier source à insérer.

Cette ligne de commande doit être écrite en haut du fichier source.

 

Par exemple, dans le fichier "Travail.JSS", si vous souhaitez utiliser les fonctions définies dans le fichier "MesFonctions.JSS", eh bien en haut du fichier "Travail.JSS", vous devrez écrire :

Use "MesFonctions.JSS"

 

Au moment de la compilation du fichier de base, donc ici dans notre exemple, « Travail.JSS », le contenu de « MesFonctions.JSS » sera inséré et compilé également, et ce, à l’endroit exact où se trouve la fonction « Use ».

Toutefois, si un jour on doit modifier le contenu de « MesFonctions.JSS », il faudra recompiler « Travail.JSS » afin que les modifications soient prises en compte également dans ce dernier…

 

Remarque :

·       « MesFonctions.JSS » est un nom que j’ai choisi ici pour tenter de rendre mes explications plus parlantes !

 

 

Un exemple

 

Pour commencer, nous allons créer un fichier de fonctions que nous allons appeler « Fonctions.JSS ».

Dans ce fichier, nous allons créer 4 fonctions :

  1. LignesPrecedentes, qui permet de réaliser N Lignes Précédentes, dont N est un entier passé en paramètre.
  2. LignesSuivantes, qui permet de réaliser N lignes suivantes, dont N est un entier passé en paramètre.
  3. MotsPrecedents, qui permet de réaliser N mots précédents, dont N est un entier passé en paramètre.
  4. MotsSuivants, qui permet de réaliser N mots suivants, dont N est un entier passé en paramètre.

 

En résumé, ce sont des fonctions qui permettent de se déplacer dans un texte…

 

Ensuite, il faudra créer un script dans le « bloc notes » afin que nous puissions utiliser ces 4 fonctions !

 

Voici comment créer le fichier de fonctions.

Activez l’éditeur script-Manager depuis n’importe où, donc Insère +0 du pavé alphanumérique.

 

Ensuite, dans l’éditeur, activez l’option de menu :

ALT, « Fichier|Nouveau », ou le raccourci clavier CTRL +N.

 

Une boîte de dialogue apparaît à l’écran…

Vous êtes automatiquement dans une liste proposant des types de fichiers, choisissez :

« Fichier source .JSS », puis faites tabulation jusqu’au bouton « Ok » et pressez la touche « Entrée ».

 

Vous atterrissez alors dans le fichier qui est encore vierge…

 

Voici le code des 4 fonctions :

 

; Fichier de fonctions personnelles

 

Void Function LignesSuivantes (int NombreLignes)

; Fonction qui permet de réaliser des NextLine

; Déclaration de la variable qui va jouer le rôle de compteur dans la boucle While

Var Int Compteur

; Initialisation du compteur à 0

Let Compteur = 0

 

; Réalisation de la boucle

While (Compteur<NombreLignes)

 ; Réalise une ligne suivante

 NextLine ()

 ; Incrémentation du compteur

 Let Compteur = Compteur +1

EndWhile

 

EndFunction

 

 

Void Function LignesPrecedentes (int NombreLignes)

 

; Fonction qui permet de réaliser des PriorLine

; Déclaration de la variable qui va jouer le rôle de compteur dans la boucle While

Var Int Compteur

; Initialisation du compteur à 0

Let Compteur = 0

 

; Réalisation de la boucle

While (Compteur<NombreLignes)

 ; Réalise une ligne précédente

 PriorLine ()

 ; Incrémentation du compteur

 Let Compteur = Compteur +1

EndWhile

 

EndFunction

 

 

Void Function MotsSuivants (int NombreMots)

 

; Fonction qui permet de réaliser des NextWord

; Déclaration de la variable qui va jouer le rôle de compteur dans la boucle While

Var Int Compteur

; Initialisation du compteur à 0

Let Compteur = 0

 

; Réalisation de la boucle

While (Compteur<NombreMots)

 ; Réalise un mot suivant

 NextWord ()

 ; Incrémentation du compteur

 Let Compteur = Compteur +1

EndWhile

 

EndFunction

 

Void Function MotsPrecedents (int NombreMots)

 

; Fonction qui permet de réaliser des PriorWord

; Déclaration de la variable qui va jouer le rôle de compteur dans la boucle While

Var Int Compteur

; Initialisation du compteur à 0

Let Compteur = 0

 

; Réalisation de la boucle

While (Compteur<NombreMots)

 ; Réalise un mot précédent

 PriorWord ()

 ; Incrémentation du compteur

 Let Compteur = Compteur +1

EndWhile

 

EndFunction

 

Maintenant enregistrez ce fichier !

Activez l’option de menu :

ALT, « Fichier|Enregistrer », ou le raccourci clavier CTRL +S.

 

Dans l’explorateur de documents qui apparaît à l’écran, saisissez le nom du fichier, donc « fonctions ».

Faites tabulation jusqu’au bouton « Enregistrer » et pressez la touche « Entrée ».

Fermez l’éditeur, ALT +F4.

 

Voilà, maintenant faisons un script par exemple dans le bloc notes, un script qui va introduire « fonctions.JSS » et par conséquent, utiliser les 4 fonctions y figurant…

 

Le script, par l’intermédiaire d’un DLGSelectItemInList, demande à l’utilisateur de choisir un type de déplacements, puis, par l’intermédiaire cette fois d’un InputBox, il demande un entier qui définira le nombre de lignes ou de mots à se déplacer.

 

Voici le script :

 

; Fichier scripts du bloc notes

 

; Inclusion des constantes

Include "HJCONST.JSH"

 

; Insertion des fonctions personnelles

Use "fonctions.jss"

 

 

Script Deplacement ()

 

; Script qui demande à l'utilisateur dans quelle direction il désire se déplacer

  ; Déclaration de la variable qui contiendra la direction du déplacement

Var Int Direction,

  ; Déclaration de la variable qui contiendra le nombre de mots ou de lignes

String ChaineNombre,

Int Nombre

 

; Affichage de la liste des directions disponibles

Let Direction = DLGSelectItemInList ("Lignes précédentes|Lignes suivantes|Mots précédents|Mots suivants","Choisissez le sens du déplacement",FALSE)

 

; Traitement de la réponse

If (Direction==1)||(Direction==2) Then

 ; Le déplacement concerne les lignes

 ; Demande le nombre de lignes

 If InputBox ("Saisissez le nombre de lignes :","Lignes",ChaineNombre) Then

  ; L'utilisateur a réalisé une saisie, traitement du choix de la fonction à exécuter

 ; Conversion du format du nombre de lignes

 Let Nombre = StringToInt (ChaineNombre)

  If Direction==1 Then

   LignesPrecedentes (Nombre)

  Else

   LignesSuivantes (Nombre)

  EndIf

 EndIf

EndIf

If (Direction==3)||(Direction==4) Then

 ; Le déplacement concerne les mots

 ; Demande le nombre de mots

 If InputBox ("Saisissez le nombre de mots :","Mots",ChaineNombre) Then

  ; L'utilisateur a réalisé une saisie, traitement du choix de la fonction à exécuter

 ; Conversion du format du nombre de mots

 Let Nombre = StringToInt (ChaineNombre)

  If Direction==3 Then

   MotsPrecedents (Nombre)

  Else

   MotsSuivants (Nombre)

  EndIf

 EndIf

EndIf

 

EndScript

 

Davantage de précisions sur les fonctions

 

Les fonctions internes

 

La fonction interne peut être une fonction classique que le programmeur élabore lui-même.

 

Toutefois, il peut insérer une fonction toute prête !

D’ailleurs, ces fonctions toutes Prêtes sont dites « fonctions intégrée »....

 

Par conséquent, le programmeur peut exploiter des fonctions intégrées dans le cadre du développement de ses scripts, mais si aucune des fonctions proposées ne lui convient, il peut élaborer la fonction lui-même.

« Ce concept est de toute manière vraie pour tous les langages de programmation… »

Une fonction est un paragraphe de programmation autonome qui remplit une tâche précise.

C’est en quelle que sorte comme un script, excepté que le script, lui, est associé à un raccourci clavier qui permet de déclencher son exécution.

La fonction quant à elle, n’est pas rattachée à un raccourci clavier, elle n’est pas directement accessible par l’utilisateur de JAWS.

Elle est seulement accessible au programmeur qui en la nommant, en saisissant son nom dans un script ou dans une autre fonction, en d’éclanche l’exécution. Il s’agit d’un « appel de fonction ».

Quant au rôle qu’elle joue, aucune importance, la fonction peut réaliser les mêmes tâches qu’un script puisqu’elle utilise le même langage de programmation…

De plus, le programmeur, tout comme les fonctions, peut utiliser un script dans le contenu de ses scripts et de ses fonctions, et ce, sans que l’utilisateur le sache !

La seule différence, c’est que dans l’écriture du programme, le nom du script doit être précédé d’une instruction de type « mot clé », il s’agit du mot clé intitulé « PerformScript ».

Encore un point commun, lorsque l’on nomme une fonction ou un script, il faut les faire suivre de parenthèses…

Par contre, la grande différence, c’est que le script s’exécute sans que nous ayons à lui fournir des informations complémentaires, et il ne retourne aucune information en retour. Il exécute une tâche, point barre.

La fonction est plus complète, elle peut parfois exiger que l’on lui fournisse des informations et peut même nous retourner une réponse !

Imaginez que je dispose d’un robot qui s’appelle R2D2.

Ce robot exécute des tâches dans mon domicile, et j’en suis bien content…

Pour lui donner des ordres, j’utilise des fonctions !

Voici une première fonction.

« Va te coucher ».

Résultat, R2D2 va se coucher…

Je n’ai pas eu besoin de fournir des informations particulières pour exécuter la fonction, et il ne me retourne aucune réponse.

Voici une deuxième fonction.

« Réveille moi à 6 heures ».

Résultat :

R2D2 sait qu’il faut me réveiller, mais il a fallu que je lui indique à quelle heure !

·       « Réveille-moi » est donc le nom de la fonction.

·       « à 6 heure » est une information indispensable pour que la fonction puisse être exécutée, cette information est dite « paramètre » dans le langage script, et « argument » dans d’autres langages.

 

Voici une troisième fonction.

« Quelle-heure est-il ? ».

Résultat :

Cette fois, je n’ai pas eu besoin de fournir d’information pour exécuter la fonction intitulée « Quelle-heure est-il », mais R2D2 va devoir me renvoyer un résultat !

Oui, enfin une réponse ! Il doit me dire l’heure qu’il est à l’instant même où je lui envoie la fonction…

La fonction n’a donc pas de paramètres, ses parenthèses sont vides, mais elle retourne un résultat qu’il va falloir récupérer d’une manière ou d’une autre.

Par exemple, on peut faire lire directement le résultat par l’intermédiaire de la fonction « SayString ».

Regardez bien…

SayString (Quelle-Heure-Est-Il ())

D’ailleurs, « SayString » est elle-même une fonction, mais une fonction intégrée, c’est-à-dire qu’elle existe déjà, le programmeur n’a pas eu besoin de la développer.

Quant à ses caractéristiques, « SayString » ne retourne aucune réponse, mais elle a besoin d’une information, elle a besoin qu’on lui passe en paramètre un texte, et comme la fonction « Quelle-heure-est-il » retourne un texte, on peut carrément imbriquer cette dernière comme paramètre à « SayString ».

 

Voici une quatrième fonction.

« Additionne-moi 4 et 6 ».

Résulta :

Pour que la fonction « Additionne-moi » puisse s’exécuter, il lui faut 2 informations, donc 2 paramètres.

Ici dans notre exemple, le 4 et le 6…

Mais voilà, la fonction doit retourner la somme des 2 paramètres !

Nous avons donc affaire ici à une fonction qui encaisse 2 paramètres et qui recrache un résultat de type numérique.

Il faut donc penser à récupérer le résultat ! Enfin, la somme !

Bon, pour ce faire, nous avons une autre fonction intégrée à notre disposition, qui cette fois ne lit pas du texte comme « SayString », mais un numérique. C’est la fonction « SayInteger ».

« SayInteger » ne retourne rien, elle à juste besoin d’un paramètre qui correspond au numérique qu’elle doit lire.

Comme la fonction « Additionne-moi » retourne un numérique, elle peut devenir paramètre de la fonction « SayInteger ».

SayInteger (Additionne-moi (4 et 6))

Attention à ne pas vous embrouiller dans les parenthèses !

« Additionne-moi » contient les 2 nombres à additionner entre parenthèses, et « SayInteger » contient le tout comme paramètre unique entre parenthèses également....

 

Les fonctions externes

 

Alors là, pas grand-chose de plus à dire !

Enfin, ce que je veux dire, c’est que ça ne va pas vraiment compliquer notre affaire…

En effet, la fonction interne est directement écrite dans le fichier source qui l’utilise, sa portée est donc limitée…

Elle est donc généralement accessible uniquement depuis les scripts et les fonctions de ce fichier source.

(Je dis « généralement », car il y a évidemment une astuce pour tricher…)

 

Quant à la fonction externe, elle est écrite dans un fichier source que l’on réserve à l’écriture de fonctions.

Bien sûr, on donne un nom à ce fichier source, par exemple, fonctions.jss

Et puis, depuis n’importe quel fichier sources, lorsque l’on désire utiliser l’une des fonctions externes, il suffit d’intégrer le contenu du fichier source contenant la fonction, et ce, grâce à une fonction intitulée « use ».

 Par exemple :

use "fonctions.jss"

 

Bien sûr, l’intégration ne doit pas être réalisée n’importe où dans le fichier, la fonction « use » doit être écrite dans l’en-tête, avant même le code du premier script.

 

Les fonctions évènementielles

 

Une fonction évènementielle est une fonction qui est intégrée, elle existe déjà.

C’est une fonction qui est déclenchée par un évènement.

Par exemple, la fonction « KeyPressedEvent » est exécutée à chaque fois qu’une touche du clavier est pressée.

Dans le cadre de l’utilisation d’une fonction évènementielle, ce n’est pas le programmeur qui attribut les paramètres à la fonction, mais le système…

 

Un appel de fonction

 

Vous l’avez donc compris, j’en suis sûr maintenant, lorsque l’on écrit le nom d’une fonction afin d’en déclencher son exécution, il faut se poser plusieurs questions.

Tout d’abord, la fonction retourne-t-elle une donnée ?

Si « non », eh bien on peut écrire la fonction directement en début de ligne.

Par contre, si la fonction retourne un résultat, une donnée, il faut penser à la récupération de cette donnée avant même d’écrire le nom de la fonction.

On peut traiter le résultat par le biais d’une affectation, par exemple, en récupérant la donnée dans une variable !

Let Somme = Additionne-moi (4,6)

Vous voyez, la variable « Somme » récupère la somme retournée par la fonction « Additionne-moi ».

Il faudra cependant, dans cet exemple, employer une variable de type « Int » car le résultat sera un entier.

Du coup, on peut imbriquer la fonction « Additionne-moi » dans une fonction qui accepte un entier en tant que paramètre !

Regardez :

SayInteger (Additionne-moi (4,6))

 

En paramètre à la fonction « Additionne-moi », nous avons balancé 2 numériques, 4 et 6, ils doivent être séparés par une virgule.

C’est ainsi que nous séparons les différents paramètres d’une fonction.

 

Souvenez-vous, la fonction « « Quelle-heure-est-il » quant à elle, retournait une donnée de type « texte » mais ne nécessitait pas de paramètre.

 On peut donc :

Var String Heure

Let Heure = Quelle-heure-est-il ()

SayString (heure)

Ici, nous sommes passés par une variable pour récupérer et lire l’heure…

Mais on peut aller plus vite !

SayString (Quelle-heure-est-il ())

 

Voilà…

 

Concernant la fonction « Va-te-coucher », comme elle ne retourne aucune donnée et n’accepte aucun paramètre, on doit l’écrire bêtement de la façon suivante…

Va-te-Coucher ()

 

Du côté de la fonction maintenant

Eh bien oui, il faut bien penser à l’écriture de la fonction !

 

Le mot clé qui permet de créer une fonction est « function », suivi du nom de la fonction.

 

Par exemple :

Function BeauTemps

Si la fonction ne reçoit pas de paramètre, il faut faire suivre le nom de la fonction par des parenthèses vides.

Function BeauTemps ()

Si la fonction ne retourne aucune donnée, il faut précéder le tout par le mot clé « void », qui signifie « vide », ou bien, « Int » pour un numérique et « String » pour un texte.

Void  Function BeauTemps ()

Ou

Int Function BeauTemps ()

Ou

String Function BeauTemps ()

 

Si en plus, la fonction doit récupérer un paramètre, il faut déclarer une variable de passage qui va recevoir ce paramètre !

En considérant que la fonction reçoit 2 paramètres de type « entier » et retourne un résultat de type « entier » également.

Int Function Additionne-moi (Int PremièreValeur,Int DeuxièmeValeur)

Les 2 paramètres se trouvent maintenant dans les variables de passages, « PremièreValeur » et « DeuxièmeValeur ».

(Attention, en réalité, un nom de variable ne doit pas comporter d’accents…)

 

On peut donc faire l’addition !

 

Int Function Additionne-moi (Int PremièreValeur,Int DeuxièmeValeur)

Var Int somme

Let somme = PremièreValeur + DeuxièmeValeur

 

L’addition est faites, la somme est dans la variable « somme », expédions maintenant le résultat !

 

Int Function Additionne-moi (Int PremièreValeur,Int DeuxièmeValeur)

Var Int somme

Let somme = PremièreValeur + DeuxièmeValeur

Return somme

 

On peut maintenant fermer la fonction par le mot clé « EndFunction ».

 

Int Function Additionne-moi (Int PremièreValeur,Int DeuxièmeValeur)

Var Int somme

Let somme = PremièreValeur + DeuxièmeValeur

Return somme

EndFunction

 

Bon, dans le cadre d’une fonction évènementielle, normalement nous ne l’appelons pas en écrivant son nom à l’intérieur d’un script ou d’une fonction.

On doit la définir directement, c’est le système des évènements qui l’appellera lorsque l’évènement associé se manifestera.

 Quant à ses variables de passages, c’est également le système qui se chargera de l’affectation des données !

 

Le nom d’une variable évènementielle comporte toujours le mot « Event », « Event » comme « évènement ».

Par exemple :

AutoStartEvent, AutoFinishEvent, FocusChangedEvent, KeyPressedEvent etc.

 

Important :

Pour créer une fonction, telle qu’elle soit, vous devez impérativement passer par la boîte de dialogue appropriée de l’éditeur :

ALT, « Script|Nouveau Script », ou le raccourci clavier CTRL +E.

Dans cette boîte de dialogue, le fait de ne pas cocher la case à cocher intitulée :

« Peut être assignée à une touche », considèrera cette création comme une fonction et non pas COMME un script.

 

Philippe BOULANGER