Manual d'aprenentatge del GNU LilyPond: 4.4.4 Estalvi de tecleig mitjançant variables i funcions

### 4.4.4 Estalvi de tecleig mitjançant variables i funcions

Arribats a aquest punt, heu vist coses d’aquest tipus:

>     hornNotes = \relative { c''4 b dis c }

>     \score {
>       {
>         \hornNotes
>       }
>     }

Fins i tot us adonareu que això pot ser útil en música minimalista:

>     fragmentA = \relative { a'4 a8. b16 }
>     fragmentB = \relative { a'8. gis16 ees4 }

>     violí = \new Staff {
>       \fragmentA \fragmentA |
>       \fragmentB \fragmentA |
>     }

>     \score {
>       {
>         \violí
>       }
>     }

Tot i així també es pot fer servir aquests identificadors (que també es coneixen com a variables, macros o instruccions definides per l’usuari) per fer trucs:

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

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

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

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

Òbviament aquests identificadors són útils per estalviar tecleig. Però són dignes de tenir en compte fins i tot si s’utilitzaran un sol cop: redueixen la complexitat. Examinem l’exemple anterior reescrit sense cap identificador. Trobareu que és molt més difícil de llegir, sobretot l’última línia.

>     violí = \relative {
>       \repeat volta 2 {
>         c''4._\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-. |
>       }
>     }

Fins ara hem contemplat la substitució estàtica: quan el LilyPond es troba amb `\padText`, el substitueix amb allò que hem definit que sigui (és a dir, tot el que està a la dreta de `padtext=`).

El LilyPond també pot gestionar substitucions no estàtiques (penseu en elles com funcions).

>     padText =
>     #(define-music-function
>          (padding)
>          (number?)
>        #{
>          \once \override TextScript.padding = #padding
>        #})

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

La utilització d’identificadors també és una bona forma de reduir el treball si la sintaxis d’entrada del LilyPond canvia (vegeu Actualització de fitxers amb convert-ly). Si teniu una sola definició (com ara `\dolce`) per a tots els fitxers (vegeu Fulls d’estil), i després la sintaxis es modifica, sols haurà d’actualitzar la seva definició `\dolce` única, enlloc de haver de fer canvis a cadascú dels fitxers ‘`.ly`’.

#### LilyPond — Manual d’aprenentatge v2.24.4 (branca estable).