Autoload => qui se traduit par chargement différé …

           Autoload en Ruby ne veut pas dire chargement automatique

autoload

En regardant micon (post précédant), je suis tomber sur un verbe Ruby que je ne connaissais pas!
On peut faire du Ruby depuis 10 ans et être passé à côté de ça ? et bien oui !
autoload qui d’ailleur est un faux ami,
Vous voyez le AUTOLOAD (démoniaque) de Perl, et bien « ça na rien à voir! »(c) zj, ic, prae(s) et … ça me rajeunit pas tout ça…
il ne s’execute pas comme un pre-hook au require d’un fichier, mais il fait autre chose, « c’est comme Gif-sur-Yvette, c’est différent… » (c) les mêmes, (spéciale dédicace pour Ic, je suis nostalgique moi en ce moment….)

Explication

En fait le autoload Ruby, c’est bien ! surtout quand on code modulaire et que potentiellement certains modules ne sont pas exploités ou rarement mais qu’on veut pas se faire ___ pendant l’initialisation de l’application, je m’explique par l’exemple :

Exemple

Test via irb

Avec require

 Avec autoload

 Observation

On voit bien que le load réel (interprétation) est différé, mais le compilateur n’hurle pas de NameError, car il « s’attend » a trouver un namespace (module,classe) avec comme nom la Constante fournit à autoload.
en gros on enregistre le symbole du namespace :MonModule est on y l’associe à un wrapper qui va faire le require qui va charger le code, détachant le wrapper au profis du module ou de la classe voulue. c’est beau !

Dans l’exemple j’ai fait un include, mais MonModule.test aurait fournit le même résultat, jouer avec un classe aussi en faisant un new.

Laissez un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.