Accueil > > > UTILISATION INTELLIGENTE DES VARIABLES GLOBALES ...
UTILISATION INTELLIGENTE DES VARIABLES GLOBALES ...
Information sur la source
Description
Salut à tous, Ce code n'est pas vraiment un code à proprement parlé, mais plutôt une ébauche de tutoriel visant à expliquer l'interêt d'utilisation des variables globales. Je poste ça sur PHPCS parce que c'est un peu le seul langage que je connaisse vraiment bien, mais ce tutoriel est en fait valable pour l'integralité des langages de programmation existant. Les variables globales servent souvent pour enregistrer des variables d'environnement que des classes ou des fonctions pourront récuperer et utiliser, voire modifier. Mais il existe également une autre utilisation de ces variables. Elles peuvent en effet servir à optimiser certaines fonctions basée sur des boucles. Pour exemple, je vais utiliser 3 fonctions qui permettent de calculer le factoriel d'un entier n (rappel : n! = 1 * 2 * 3 * ... (n - 1) * (n). Pour info, ça peut aussi bien servir dans les probabilités que dans l'approximation de Pi ou de l'exponentiel ...). La première fonction (factoriel_1) est récursive : elle s'appelle elle-même. J'ai pas trop la pédagogie nécessaire pour expliquer, alors je vous laisse comprendre .... Désolé. Mais c'est pas compliqué à comprendre ! La seconde fonction (factoriel_2) est barbare (dans le sens de "barbare logiquement"). Elle va calculer le factoriel à l'aide d'une boucle for, en multipliant une variable par elle même, etc ... Pareil, pas très compliqué à comprendre, c'est une fonction intuitive puisqu'elle suit notre pensée. Enfin, la troisième fonction (factoriel_3) utilise les variables globales ...
Source
- <?php
- // La fonction factorielle récursive ...
- function factoriel_1($n)
- {
- if ($n == 0)
- {
- return(1);
- }
- else
- {
- return($n * factoriel_1($n - 1));
- }
- }
- // La fonction factorielle itérative...
- function factoriel_2($n)
- {
- $factoriel = 1;
- for ($i = 1; $i <= $n; $i++)
- {
- $factoriel *= $i;
- }
- return($factoriel);
- }
- // La fonction factorielle optimisée ...
- // On déclare d'abord le tableau qui va devenir global. Il contient en fait le résultat de 0! (factoriel de 0) = 1.
- $_factoriel = array('input' => 0, 'output' => 1);
- function factoriel_3($n)
- {
- // On rend le tableau global ...
- global $_factoriel;
- // On regarde pour voir si la demande est la même que celle du tableau.
- if ($n == $_factoriel['input'])
- {
- // Si oui, on set la variable qui va être retournée avec la valeur du tableau global.
- $factoriel = $_factoriel['output'];
- }
- // On regarde maintenant si on va gagner du temps en utilisant le tableau global.
- elseif (abs($n - $_factoriel['input']) < $n)
- {
- // Si oui, les blocs suivants vont déterminés s'il faut décrémenter ou incrémenter pour acceder au factoriel voulu.
- $factoriel = $_factoriel['output'];
- if ($n - $_factoriel['input'] > 0)
- {
- for ($i = $_factoriel['input'] + 1; $i <= $n; $i++)
- {
- $factoriel = $factoriel * $i;
- }
- }
- else
- {
- for ($i = $_factoriel['input']; $i >= $n + 1; $i--)
- {
- $factoriel = $factoriel / $i;
- }
- }
- }
- // Si ça ne vaut pas le coup, on calcule le factoriel de manière primaire.
- else
- {
- $factoriel = 1;
- for ($i = 1; $i <= $n; $i++)
- {
- $factoriel *= $i;
- }
- }
- // On update les globales pour l'utilsation suivante de la fonction.
- $_factoriel['input'] = $n;
- $_factoriel['output'] = $factoriel;
- return($factoriel);
- }
-
- ?>
<?php
// La fonction factorielle récursive ...
function factoriel_1($n)
{
if ($n == 0)
{
return(1);
}
else
{
return($n * factoriel_1($n - 1));
}
}
// La fonction factorielle itérative...
function factoriel_2($n)
{
$factoriel = 1;
for ($i = 1; $i <= $n; $i++)
{
$factoriel *= $i;
}
return($factoriel);
}
// La fonction factorielle optimisée ...
// On déclare d'abord le tableau qui va devenir global. Il contient en fait le résultat de 0! (factoriel de 0) = 1.
$_factoriel = array('input' => 0, 'output' => 1);
function factoriel_3($n)
{
// On rend le tableau global ...
global $_factoriel;
// On regarde pour voir si la demande est la même que celle du tableau.
if ($n == $_factoriel['input'])
{
// Si oui, on set la variable qui va être retournée avec la valeur du tableau global.
$factoriel = $_factoriel['output'];
}
// On regarde maintenant si on va gagner du temps en utilisant le tableau global.
elseif (abs($n - $_factoriel['input']) < $n)
{
// Si oui, les blocs suivants vont déterminés s'il faut décrémenter ou incrémenter pour acceder au factoriel voulu.
$factoriel = $_factoriel['output'];
if ($n - $_factoriel['input'] > 0)
{
for ($i = $_factoriel['input'] + 1; $i <= $n; $i++)
{
$factoriel = $factoriel * $i;
}
}
else
{
for ($i = $_factoriel['input']; $i >= $n + 1; $i--)
{
$factoriel = $factoriel / $i;
}
}
}
// Si ça ne vaut pas le coup, on calcule le factoriel de manière primaire.
else
{
$factoriel = 1;
for ($i = 1; $i <= $n; $i++)
{
$factoriel *= $i;
}
}
// On update les globales pour l'utilsation suivante de la fonction.
$_factoriel['input'] = $n;
$_factoriel['output'] = $factoriel;
return($factoriel);
}
?>
Conclusion
Bon, comme les fonctions sont mal expliquées, j'explique l'idée. En fait, les variables globales sont utilisées comme point de départ. En effet, dans l'exemple, pour calculer un factoriel, il faut partir de 1, puis executer la boucle jusqu'à n. A l'aide des globales, on peut maintenant partir du de la dernière valeure calculée, c'est à dire de la valeure calculée depuis la dernière fois où la fonction a été appellée ... Pas clair ? On va utiliser une première fois la fonction pour calculer le factoriel de 5. La fonction va faire une boucle, de 1 à 5. Après le calcul, le tableau global va changer, et contenir '5' comme input et '120' dans 'output' (le factoriel de 5 vaut 120). Imaginons ensuite que le script doit ensuite calculer le factoriel de 7. Et bien, grâce au tableau, il n'aura pas à partir de 1, mais de 5 ! D'où un gain de temps et une optimisation non négligeable ! Voilà, j'espère que c'est un peu plus clair ... Pour prouver ce que j'avance, des petits tests. J'ai calculé le factoriel de 12 nombre à la suite, avec chacune des fonctions. Et voilà le resultat : factoriel_1 : 6.853ms factoriel_2 : 9.211ms factoriel_3 : 5.152ms Convaincu ? Il est bien entendu interessant d'utiliser ces variables spéciales uniquement si une fonction est souvent appellée, sinon ... Bon ... On peut s'en passer. @ la prochaine ! ++ ! LocalStone.
Historique
- 16 octobre 2004 14:45:56 :
- Je me suis trompé dans les chiffres, alors c'était plus très très crédible ... :)
- 17 octobre 2004 17:06:23 :
- 2 ou 3 petites corrections ... Merci Kirua !
Sources de la même categorie
Commentaires et avis
|
Derniers Blogs
IMAGINE CUP 2012, MAKE A SIGN EN FINALEIMAGINE CUP 2012, MAKE A SIGN EN FINALE par junarnoalg
Voilà qui est fait, la nouvelle est officielle ! L'équipe belge "Make a Sign" va au pays des kangourous défendre son projet dans la catégorie Software Design. http://www.imaginecup.com/CompetitionsContent/Competition/WorldwideFinalists.aspx V...
Cliquez pour lire la suite de l'article par junarnoalg KINECT 1.5 IS OUT !KINECT 1.5 IS OUT ! par Vko
La version 1.5 du Kinect For Microsoft vient tout juste de sortir ! Plein de nouveautés: Tracking de squelette en Near Mode Détection en position assise Détection faciale avec un SDK dédié Documentation et des guideline (enfin) Un out...
Cliquez pour lire la suite de l'article par Vko LES ACTUALITéS DE LA SEMAINE SUR C2I.FR (14 MAI - 20 MAI) LES ACTUALITéS DE LA SEMAINE SUR C2I.FR (14 MAI - 20 MAI) par richardc
Mise à jour des Web API du 14 Mai
Réservez dès maintenant votre journée du 20 juin pour le Windows Azure Dev Camp 2012 à Paris
Mise à jour de Team Foundation Service
MechCommander 2 sur Windows 8
Entity Framework 5 Release Candidate e...
Cliquez pour lire la suite de l'article par richardc REACTIVE EXTENSIONS : CONSOMMER DES SERVICES AVEC RX PARTIE 3, LES PIèGES à éVITERREACTIVE EXTENSIONS : CONSOMMER DES SERVICES AVEC RX PARTIE 3, LES PIèGES à éVITER par Groc
Une mauvaise utilisation de rx lors de l'écriture d'une couche d'accès à des services peut conduire à des cas embarassants avec des erreurs mal gérées, des appels qui ne partent lorsqu'ils le devraient, et même des résultats incorrects . le tout nuis...
Cliquez pour lire la suite de l'article par Groc SHAREPOINT BLOG SITE, PROBLèME D'ARCHIVESSHAREPOINT BLOG SITE, PROBLèME D'ARCHIVES par junarnoalg
Dernièrement, nous avons migré le site
myTIC
vers un nouveau serveur SharePoint 2010. Dans les contenus que nous vouloins récupérer, nous avions un certain nombre de blogs.
Nous avons utilisé les commandes Power...
Cliquez pour lire la suite de l'article par junarnoalg
Logiciels
sDEVIS-FACTURES vlPRO (8.1.0.3)SDEVIS-FACTURES VLPRO (8.1.0.3)sDEVIS-FACTURES vlPRO a été mis au point pour les particuliers, créateurs, entrepreneurs, artisa... Cliquez pour télécharger sDEVIS-FACTURES vlPRO 974 Application Server (12.2.4.6)974 APPLICATION SERVER (12.2.4.6)Développez de puissantes applications dans un environnement de 'cloud computing', clusterisé, séc... Cliquez pour télécharger 974 Application Server vPicture (1.4.2.1)VPICTURE (1.4.2.1)Avec vPicture, hébergez vos images facilement et rapidement.
vPicture est un utilitaire simple, ... Cliquez pour télécharger vPicture Easy-Planning (2.2.1.6)EASY-PLANNING (2.2.1.6)Easy-Planning permet de créer des plannings sous la représentation de diagrammes et est adapté au... Cliquez pour télécharger Easy-Planning COM-BACKUP (2.0)COM-BACKUP (2.0)
COM-BACKUP est un logiciel de sauvegarde qui permet de planifier les sauvegardes de vos dossiers ...
Cliquez pour télécharger COM-BACKUP
|