Manuale di apprendimento di LilyPond: 3.4.4 Ridurre l'input grazie a variabili e funzioni

### 3.4.4 Ridurre l’input grazie a variabili e funzioni

Finora hai visto questo tipo di cose:

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

Potresti anche essere accorto che questo può essere utile nella musica minimalista:

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

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

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

Tuttavia, puoi usare queste variabili (note anche come macro, o comandi definiti dall’utente) anche per le modifiche manuali:

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

Chiaramente queste variabili sono utili per ridurre la quantità di testo da scrivere. Ma vale la pena tenerle in considerazione anche se le usi una volta sola – perché riducono la complessità. Vediamo l’esempio precedente senza alcuna variabile. È molto difficile da leggere, soprattutto l’ultima linea.

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

Finora abbiamo visto la sostituzione statica – quando LilyPond vede `\padText`, lo sostituisce con quel che noi abbiamo definito che sia (ovvero tutto ciò che sta a destra di `padtext=`).

LilyPond può gestire anche la sostituzione non statica (la puoi immaginare come una funzione).

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

L’uso di variabili è anche un buon modo per ridurre il lavoro quando la sintassi di input di LilyPond cambia (vedi Aggiornare i file con convert-ly). Se si ha un’unica definizione (come `\dolce`) per tutti i file di input (vedi Style sheets), allora se la sintassi cambia bisogna aggiornare soltanto la singola definizione `\dolce`, invece di dover modificare tutti i file ‘`.ly`’.

Other languages: English, česky, deutsch, español, français, magyar, 日本語, nederlands.

#### LilyPond — Learning Manual