mercredi 21 mars 2007

Propriétés et Méthodes Statiques en LotusScript


En Java et JavaScript les propriétés et méthodes statiques sont partagés par toutes les instances d'une classe donnée. Les membres non statiques sont liés aux objets d'une classe, ils appartiennent à l'instance d'une classe ainsi les instances de la classe File partagent la propriété statique pathSeparator qui dépend du système d'exploitation, alors que les propriétés getAbsolutePath( ) et canWrite( ) diffèrent d'un objet à un autre et que la méthode delete( ) produit un résultat différent selon l'objet qui l'exécute. Il est inutile d'instancier des objets pour utiliser les membres statiques et la propriété pathSeparator de la classe java.io.File est référençable en codant File.pathSeparator ou bien java.io.File.pathSeparator.

Il peut être utile de créer en LotusScript des méthodes ou des propriétés de classe. Considérez une classe Platform et ses deux propriétés Newline et supportsCOM. Bien que ces propriétés varient selon le système d'exploitation, elles sont constantes pour toutes les instances de la classe Platform pour un client Notes ou serveur Domino donné. Imaginez la classe Trigo d'un paquetage LotusScript.math ses méthodes sin(), cos() et une propriété statique Pi aux précisions décimales supérieures à celles offertes nativement en LotusScript par la constante Pi et les fonctions trigonométriques.

Bien que le langage LotusScript ne dispose pas de membres statiques au niveau où Java et JavaScript les proposent, vous pouvez les implémenter de façon similaire avec une syntaxe très proche. La propriété Release de la classe LotusScript.lang.Interpreter disponible dans le projet libre OpenDOM sur le site www.openntf.org permet d'illustrer celà.

Private Release As String
Release = lsi_info( 6 )

Alors que ces deux lignes initialisent très simplement la version de l'interpréteur LotusScript, je leur préfère le codage défensif suivant destiné à protéger la variable globale Release de toute modification :

Static Private Property Get INTERPRETER_RELEASE As String
Static this As String
If this = "" Then this = Lsi_info( 6 )
INTERPRETER_RELEASE = this
End Property ' LotusScript.lang.Interpreter.RELEASE property

La version LotusScript réduite de la classe publique Interpreter s'écrit comme suit :

Public Class Interpreter '
Property Get RELEASE As String '
Me.RELEASE = INTERPRETER_RELEASE
End Property ' LotusScript.lang.Interpreter.RELEASE
End Class ' LotusScript.lang.Interpreter Class

De cette façon tous les objets instanciés de la classe Interpreter partagent une propriété RELEASE qualifiable de statique comme en Java ou JavaScript. La syntaxe Interpreter.RELEASE est implémentable dans la bibliothèque "LotusScript.lang" de la manière suivante :

Static Public Property Get Interpreter As Interpreter
Static this As Interpreter
If this Is Nothing Then Set this = New Interpreter
Set Interpreter = this
End Property ' LotusScript.lang.Interpreter class

Deux courtes classes et deux propriétés supplémentaires suffisent à mentionner le chemin pleinement qualifié d'une classe comme dans LotusScript.lang.Interpreter.RELEASE :

Public Class lang '
Public Property Get Interpreter '
Set Me.Interpreter = LANG_INTERPRETER
End Property ' LotusScript.lang.Interpreter
End Class ' LotusScript.lang.* Package
Public Class LotusScript '
Public Property Get lang As lang '
Set Me.lang = LOTUSSCRIPT_LANG
End Property ' LotusScript.lang.* Package
Public io As Variant ' As io__ '
Public net As Variant ' As net__ '
End Class ' LotusScript.* Package

Static Private Property Get LOTUSSCRIPT_LANG As lang
Static this As lang
If this Is Nothing Then Set this = New lang
Set LOTUSSCRIPT_LANG = this
End Property ' LotusScript.lang.* package
Static Public Property Get LotusScript As LotusScript
Static this As LotusScript
If this Is Nothing Then
Set this = New LotusScript
End If
Set LotusScript = this
End Property ' LotusScript.* package

Réutiliser complètement la bibliothèque "LotusScript.lang" dans un agent, un masque ou une vue se résume à :

Use "LotusScript.lang"
Msgbox LotusScript.lang.Interpreter.RELEASE,, _
"LotusScript.lang.Interpreter.RELEASE"
' OU BIEN
With LotusScript.lang
Msgbox Interpreter.RELEASE,, _
"Interpreter.RELEASE"
End With

1 commentaire:

Jim Fricker a dit…

LANG_INTERPRETER does not seem to be defined anywhere. Am I missing something?

Locations of visitors to this page