Manual de aprendizaje de GNU LilyPond: 3.4.4 Ahorrar tecleo mediante variables y funciones

### 3.4.4 Ahorrar tecleo mediante variables y funciones

Llegado a este punto, usted ha visto cosas de este tipo:

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

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

Incluso se dará cuenta de que esto puede ser útil en música minimalista:

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

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

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

Sin embargo también puede usar estos identificadores (que también se conocen como variables, macros o instrucciones definidas por el usuario) para hacer trucos:

>     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 }
>     }

Obviamente estos identificadores son útiles para ahorrar tecleo. Pero son dignos de tener en cuenta incluso si se van a utilizar una sola vez: reducen la complejidad. Examinemos el ejemplo anterior reescrito sin ningún identificador. Encontrará que es mucho más difícil de leer, sobre todo la última línea.

>     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-. |
>       }
>     }

Hasta ahora hemos contemplado la sustitución estática: cuando LilyPond se encuentra con `\padText`, lo sustituye con aquello que hemos definido que sea (es decir, todo lo que está a la derecha de `padtext=`).

LilyPond también puede manejar sustituciones no estáticas (piense en ellas como en funciones).

>     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 |
>     }

La utilización de identificadores también es una buena forma de reducir el trabajo si la sintaxis de entrada de LilyPond cambia (véase Actualizar ficheros con convert-ly). Si tiene una sola definición (como p.ej. `\dolce`) para todos sus archivos (ver Hojas de estilo), y después la sintaxis se modifica, sólo tendrá que actualizar su definición `\dolce` única, en lugar de tener que hacer cambios en cada uno de los archivos ‘`.ly`’.

Otros idiomas: English, česky, deutsch, français, magyar, italiano, 日本語, nederlands.

#### LilyPond — Manual de aprendizaje