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 :
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 }
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 (macro .if, .endif).
class "%Code%" { // Attributes .foreach_item(Attributes) %DataType% %Code% .if (%InitialValue%) = %InitialValue% .endif .next(\n) // Operations .foreach_item(Operations) %ReturnType% %Code%(...) .next(\n) }
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é 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) }
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) }
Le caractères guillemet ("") dans " // Attributes\n" permet d'insérer un espace comme indiqué dans le résultat : // Attributes
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: JackPaul
instead of: Jack Paul