5

Application

  1. Root
    1. Once
      1. Application

Une classe Application n'a qu'une seule instance. Une instance d'Application peut avoir un nom. Elle peut être associée à un mandataire qui interprétera tous les messages qu'elle reçoit mais qu'elle n'implémente pas.

MÉTHODES D'INSTANCE

  1. import { defclass, sendmsg, supersend } from 'So-o';
  2.  
  3. import 'Once';
  4.  
  5. defclass('Application', Once, 1,
  6.     null,
  7.     ['appName', 'app'],
  8.     null,

La classe Application hérite de la classe Once. Les propriétés d'instance appName et app contiennent le nom d'une instance d'Application et la référence de son mandataire. La classe Application redéfinit les messages d'instance init et doesNotRecognize. Elle ajoute le message d'instance appName.

init
SYNOPSIS

sendmsg(self, 'init', appName = null, app = null)

DESCRIPTION

init initialise le nom et le mandataire de self avec appName et app.

CODE
  1.     {   'init':
  2.             (self, appName = null, app = null) => {
  3.                 supersend(Application, self, 'init');
  4.  
  5.                 if (appName) {
  6.                     sendmsg(self, 'set', 'appName', appName);
  7.                    
  8.                     if (app)
  9.                         sendmsg(self, 'set', 'app', app);
  10.                 }
  11.                
  12.                 return self;
  13.             },

Exécute la méthode init de la superclasse de la classe Application. Initialise les propriétés d'instance appName et app avec les paramètres appName et app.

appName
SYNOPSIS

sendmsg(self, 'appName')

DESCRIPTION

appName retourne le nom de l'instance d'Application self. Si self n'a pas de nom, appName retourne null.

CODE
  1.         'appName':  (self) => sendmsg(self, 'get', 'appName'),

Retourne la propriété appName de self.

doesNotRecognize
SYNOPSIS

sendmsg(self, 'doesNotRecognize', msg[, arg...])

DESCRIPTION

Une instance d'Application intercepte le message doesNotRecognize qui est automatiquement envoyé à une classe ou à une instance lorsqu'elle reçoit un message qu'elle n'implémente pas.

doesNotRecognize retourne le résultat du renvoi de msg et de ses paramètres au mandataire de self, l'instance qui a été passée en paramètre au message new à la création de self.

Si self n'a pas de mandataire, doesNotRecognize exécute le message doesNotRecognize dans le contexte de la superclasse de la classe Application, qui exécutera la méthode doesNotRecognize de la classe Root, qui affiche un message d'erreur.

CODE
  1.         'doesNotRecognize':
  2.             (self, msg, ...args) => {
  3.                 let app = sendmsg(self, 'get', 'app');
  4.  
  5.                 if (!app)
  6.                     return supersend(Application, self, 'doesNotRecognize', msg);
  7.  
  8.                 return sendmsg(app, 'perform', msg, args);
  9.             }
  10.     }
  11. );

Initialise app à la valeur de la propriété app de self. Si app est null, retourne le résultat de l'exécution du message doesNotRecognize par la superclasse de la classe Application. Sinon, si self a un mandataire, retourne le résultat de l'envoi de msg et de ses paramètres à app.

EXEMPLE
  1. import { sendmsg } from 'So-o';
  2.  
  3. import 'Hello';
  4.  
  5. var hello = sendmsg(Hello, 'new');
  6.  
  7. sendmsg(hello, 'hello');

Crée une instance d'Hello et lui envoie le message hello.

  1. import 'Application';
  2.  
  3. var app = sendmsg(Application, 'new', 'Hello', hello);
  4.  
  5. console.log(sendmsg(app, 'appName'));

Crée une instance d'Application appelée Hello avec hello comme mandataire. Affiche son nom.

  1. sendmsg(app, 'hello');

Envoie le message hello à app qui le transmet à hello.

  1. sendmsg(app, 'foobar');

Envoie à app un message inconnu du mandataire.

  1. sendmsg(app, 'set', 'app', null);
  2. sendmsg(app, 'hello');

Supprime le mandataire de app et envoie le message hello à app.

$ ln Hello.js node_modules/Hello.mjs
$ ln testApplication.js testApplication.mjs
$ nodejs --experimental-modules testApplication
Hello from So-o!
Hello
Hello from So-o!
Hello::foobar Invalid instance message
Application::hello Invalid instance message
VOIR AUSSI

Once, Responder

Commentaires

Votre commentaire :
[p] [b] [i] [u] [s] [quote] [pre] [br] [code] [url] [email] strip aide 2000

Entrez un maximum de 2000 caractères.
Améliorez la présentation de votre texte avec les balises de formatage suivantes :
[p]paragraphe[/p], [b]gras[/b], [i]italique[/i], [u]souligné[/u], [s]barré[/s], [quote]citation[/quote], [pre]tel quel[/pre], [br]à la ligne,
[url]http://www.izend.org[/url], [url=http://www.izend.org]site[/url], [email]izend@izend.org[/email], [email=izend@izend.org]izend[/email],
[code]commande[/code], [code=langage]code source en c, java, php, html, javascript, xml, css, sql, bash, dos, make, etc.[/code].