GNU LilyPond – Manuel d'initiation: 3.4.4 Économie de saisie grâce aux identificateurs et fonctions

### 3.4.4 Économie de saisie grâce aux identificateurs et fonctions

Jusqu’à maintenant, vous avez vu ce type de code :

>     hornNotes = \relative c'' { c4 b dis c }
>     \score {
>       {
>         \hornNotes
>       }
>     }

Vous comprendrez combien cela peut être utile pour écrire de la musique minimaliste :

>     fragmentA = \relative c'' { a4 a8. b16 }
>     fragmentB = \relative c'' { a8. gis16 ees4 }

>     violin = \new Staff { \fragmentA \fragmentA \fragmentB \fragmentA }

>     \score {
>       {
>         \violin
>       }
>     }

Néanmoins vous pouvez aussi utiliser ces identificateurs – aussi connus sous le nom de variables, macros, ou commandes (définies par l’utilisateur) – pour des retouches :

>     dolce = \markup { \italic \bold dolce }

>     padText = { \once \override TextScript #'padding = #5.0 }
>     fthenp =_\markup {
>       \dynamic f \italic \small { 2nd } \hspace #0.1 \dynamic p
>     }

>     violin = \relative c'' {
>       \repeat volta 2 {
>         c4._\dolce b8 a8 g a b |
>         \padText
>         c4.^"hi there!" d8 e' f g d |
>         c,4.\fthenp b8 c4 c-. |
>       }
>     }

>     \score {
>       {
>         \violin
>       }
>       \layout { ragged-right = ##t }
>     }

Ces identificateurs sont évidemment utiles pour économiser de la frappe. Mais ils peuvent l’être même si vous ne les utilisez qu’une seule fois : ils réduisent la complexité. Regardons l’exemple précédent sans aucun identificateur. C’est beaucoup plus laborieux à lire, et particulièrement la dernière ligne.

>     violin = \relative c'' {
>       \repeat volta 2 {
>         c4._\markup { \italic \bold dolce } b8 a8 g a b |
>         \once \override TextScript #'padding = #5.0
>         c4.^"hi there!" d8 e' f g d |
>         c,4.\markup {
>           \dynamic f \italic \small { 2nd } \hspace #0.1 \dynamic p
>         }
>         b8 c4 c-. |
>       }
>     }

Jusqu’ici nous avons vu des substitutions statiques : quand LilyPond rencontre `\padText`, il le remplace par le contenu que nous lui avons défini – c’est-à-dire le contenu à droite de `padText=`.

LilyPond gère également des substitutions non-statiques – vous pouvez les voir comme des fonctions.

>     padText =
>     #(define-music-function
>          (parser location padding)
>          (number?)
>        #{
>          \once \override TextScript #'padding = $padding
>        #})

>     \relative c''' {
>       c4^"piu mosso" b a b |
>       \padText #1.8
>       c4^"piu mosso" d e f |
>       \padText #2.6
>       c4^"piu mosso" fis a g |
>     }

Utiliser des identificateurs est aussi un bon moyen pour vous épargner du travail si la syntaxe de LilyPond change un jour – voir Mise à jour avec convert-ly. Si vous avez une seule définition, par exemple `\dolce`, pour tous vos fichiers (voir Feuilles de style) et que la syntaxe change, alors vous n’aurez qu’à mettre à jour votre seule définition `\dolce`, au lieu de devoir modifier chaque fichier ‘`.ly`’.

Autres langues : English, česky, deutsch, español, magyar, italiano, 日本語, nederlands.

#### LilyPond — Manuel d’initiation