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''4 b dis c }
>     \score {
>       {
>         \hornNotes
>       }
>     }

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

>     fragmentA = \relative { a'4 a8. b16 }
>     fragmentB = \relative { a'8. 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 }

>     centreText = { \once \override TextScript.self-alignment-X = #CENTER }

>     fthenp =_\markup {
>       \dynamic f \italic \small { 2nd } \hspace #0.1 \dynamic p
>     }

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

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

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 {
>       \repeat volta 2 {
>         c''4._\markup { \italic \bold dolce } b8 a8 g a b |
>         \once \override TextScript.self-alignment-X = #CENTER
>         c4.^"hi there!" d8 e' f g d |
>         c,4.\markup {
>           \dynamic f \italic \small { 2nd } \hspace #0.1 \dynamic p
>         }
>         b8 c4 c-. |
>       }
>     }

Ricordi i ‘post-eventi’? Articolazioni, diteggiature, qualsiasi cosa che deve essere aggiunta dopo una nota (vedi Struttura dell’inserimento note), spesso preceduta da un trattino o da un modificatore della direzione. In realtà anche questi eventi possono essere salvati in una variabile – e in questo caso non c’è bisogno delle abituali parentesi graffe, dato che non si usano tra una nota e le sue articolazioni.

Se tale definizione comprende un prefisso, allora la variabile può essere usata subito dopo la nota – a meno che non si voglia cambiare la direzione, nel qual caso si può inserire un modificatore che avrà la precedenza:

>     articulationVar = -^-!

>     artEsprVar = \articulationVar ^\espressivo

>     \relative c' {
>       c\articulationVar d e2^\articulationVar
>       d2\artEsprVar c_\artEsprVar
>     }

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

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

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

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 Fogli di stile), allora se la sintassi cambia bisogna aggiornare soltanto la singola definizione `\dolce`, invece di dover modificare tutti i file ‘`.ly`’.

#### LilyPond — Manuale di apprendimento v2.22.2 (ramo stabile).