Chapter 9 Guide de référence de la génération (GTL)
Les chaînes d'en-tête et de fin sont utiles car elles ne sont générées que lorsque nécessaire, cela est particulièrement utile lorsque vous utilisez de nouvelles lignes '\n'. Elles sont ajoutées respectivement au début et à la fin du code généré, la chaîne d'en-tête et la chaîne de fin n'apparaissant pas dans le code généré.
Vous souhaitez générer le nom d'une classe et ses attributs sous le format suivant (une ligne vide entre les attributs et la classe) :
Attribute 1 attr1 Attribute 2 attr2 Class
Vous pouvez insérer le séparateur "\n" après l'instruction .foreach pour vous assurer que chaque attribut s'affiche dans une ligne séparée. Vous pouvez également ajouter "\n\n " après l'instruction .endfor pour insérer une ligne vide après la liste d'attributs et avant le mot "Class".
.foreach (Attribute) ("\n") Attribute %Code% .endfor ("\n\n") Class
Considérons une classe nommée Nurse, ayant pour code de classe Nurse, et dotée de deux attributs :
Attribut | Type de données | Valeur initiale |
---|---|---|
NurseName | String | __ |
NurseGender | Char | 'F' |
Les templates suivants sont fournis à titre d'exemple, avec le texte généré pour chacune d'entre eux, ainsi qu'une description de chaque résultat :
class "%Code%" { // Attributes .foreach_item(Attributes) %DataType% %Code% .if (%InitialValue%) = %InitialValue% .endif .next // Operations .foreach_item(Operations) %ReturnType% %Code%(...) .next }
class "Nurse" {
// Attributes String nurseName char nurseGender = 'F' // Operations}
Au-dessous du code de classe, le code est généré sur une ligne. Il s'agit d'un exemple d'une macro de bloc (.if, .endif macro).
class "%Code%" { // Attributes .foreach_item(Attributes) %DataType% %Code% .if (%InitialValue%) = %InitialValue% .endif .next(\n) // Operations .foreach_item(Operations) %ReturnType% %Code%(...) .next(\n) }
class "Nurse" {
// Attributes String nurseName
char nurseGender = 'F' // Operations}
String nurseName et char nurseGender se trouvent sur deux lignes distinctes
Dans Template 1, String nurseName et char nurseGender se trouvaient sur la même ligne, alors que dans Template 2, l'ajout de \n à la fin de .next(\n) place String nurseName et char nurseGender sur deux lignes distinctes.
En outre, // Operations est affichée dans le résultat et ce, même en l'absence d'opération (voir Description 3).
class "%Code%" { .foreach_item(Attributes, // Attributes\n,\n) %DataType% %Code% .if (%InitialValue%) = %InitialValue% .endif .next(\n) .foreach_item(Operations, // Operations\n,\n) %ReturnType% %Code%(...) .next(\n) }
class "Nurse" {// Attributes
String nurseName
char nurseGender = 'F'
}
L'espace entre .foreach_item(Attributes, et // Attributes\n,\n) n'est pas généré, comme indiqué dans le résultat suivant : class "Nurse" {// Attributes au lieu de .... { // Attributes
// Operations n'est pas affiché dans le résultat car il est placé dans la macro .foreach_item. Il est placé dans l'en-tête de la macro à cet effet.
class "%Code%" {\n .foreach_item(Attributes," // Attributes\n",\n) %DataType% %Code%[ = %InitialValue%] .next(\n) .foreach_item(Operations," // Operations\n",\n) %ReturnType% %Code%(...) .next(\n) }
class "Nurse" {
// Attributes
String nurseName
char nurseGender = 'F'
}
Le caractères guillemet ("") dans " // Attributes\n" permet d'insérer un espace comme indiqué dans le résultat : // Attributes
Nouvelle ligne précédant la macro
La nouvelle ligne qui précède immédiatement une macro est ignorée, de même que celle qui la suit, comme dans l'exemple suivant :Jack
.set_value(v, John)
Paul
yields: JackPaulinstead of:
Jack
Paul
Copyright (C) 2005. Sybase Inc. All rights reserved. |
![]() |