Aiuto:Moduli

Da Teknopedia, l'enciclopedia libera.
Vai alla navigazione Vai alla ricerca

I moduli sono pagine particolari che contengono programmi scritti con il linguaggio di programmazione Lua, e possono essere richiamate da altre pagine per effettuare varie elaborazioni sul testo, come si fa con le funzioni parser. Sono utili a realizzare template quando è necessaria una logica di funzionamento complessa.

I moduli appartengono al namespace "Modulo", ovvero il titolo delle pagine ha la forma "Modulo:Nome". Possono essere creati e modificati da chiunque, ma occorre rispettare la sintassi di Lua; a tale scopo la pagina di lettura e la casella di modifica di un modulo sono dotate di colorazione della sintassi. Le righe del programma sono numerate e selezionabili e, in modifica, segnalano gli errori generali di sintassi. Si può wikilinkare la n-esima riga di un modulo aggiungendo #L-n al nome.

I moduli sono stati introdotti il 13 marzo 2013 con l'attivazione[1][2] dell'estensione Scribunto su tutti i progetti di Wikimedia Foundation.

Lua è stato creato nel 1993 da alcuni ricercatori dell'università di Rio de Janeiro[3] e pubblicato, a partire dalla versione 5.0, sotto licenza MIT.[4]

Creare un modulo

[modifica | modifica wikitesto]
Lo stesso argomento in dettaglio: Aiuto:Lua.
Una breve presentazione di esempio curata da Brad Jorsch, sulla conversione dei template MediaWiki in moduli Lua.

Lua è un linguaggio di programmazione dinamico, o meglio un linguaggio di scripting utilizzabile per l'analisi di dati, calcolo di espressioni e formattazione dei risultati tramite funzioni o programmazione ad oggetti. Lua permette di realizzare sia script molto semplici che strutture molto complesse, con tabelle, funzioni dinamiche e array associativi. Supporta la ricorsione delle funzioni e la realizzazione di coroutine.

I programmi dei moduli vengono eseguiti solo quando la pagina che li richiama viene "analizzata sintatticamente" (cioè quando essa o una pagina che la incorpora viene modificata o visualizzata in anteprima), non ogni volta che viene visualizzata. Pertanto non è possibile realizzare un modulo Lua che permetta al lettore di Teknopedia, ad esempio, di inserire la temperatura in Fahrenheit e ottenere il valore in Celsius. Solo il contributore di Teknopedia può inserire il valore in Fahrenheit in fase di creazione della voce e ottenere automaticamente il valore in Celsius.

Come per i template, è necessario documentare il funzionamento di un modulo, affinché la comunità possa sfruttarlo. La realizzazione interna può essere spiegata agli esperti tramite commenti nel codice sorgente, mentre per il puro utilizzo è necessario un manuale comprensibile anche a chi non conosce Lua.

Le pagine dei moduli non possono contenere nulla che non sia codice sorgente Lua; la documentazione deve necessariamente trovarsi in una sottopagina chiamata "Modulo:Nome_modulo/man". All'interno della sottopagina va inserito il Template:Man modulo.

Valgono in generale le raccomandazioni fatte per i manuali dei template, ma nel caso di un modulo ci sono più funzioni diverse da documentare.

Creare un modulo di prova

[modifica | modifica wikitesto]

Dato che i moduli vanno creati nell'omonimo namespace esiste la pagina Modulo:Sandbox per le prove (analogamente a Teknopedia:Sandbox per le normali prove di modifica). Se si vuole creare un modulo di prova è possibile farlo in una sottopagina di Modulo:Sandbox creando una sottopagina con il proprio nome utente, per cui basta creare una pagina del tipo: Modulo:Sandbox/IlTuoNomeUtente/NomeModulo.

Richiamare un modulo

[modifica | modifica wikitesto]
Esempio di chiamata di un modulo Lua

Ogni modulo può contenere numerose funzioni, utilizzabili con lo stesso principio delle funzioni parser. I moduli sono richiamati tramite il comando {{#invoke:}}.

La sintassi del comando per richiamare una funzione contenuta in un modulo Lua è la seguente:
{{#invoke:nome_modulo|nome_funzione|parametro1|...|parametro_n}}.

Dove:

  • nome_modulo: nome del modulo da richiamare (titolo della pagina senza "Modulo:")
  • nome_funzione: nome della funzione del modulo da eseguire
  • parametro_1...parametro_n: eventuali parametri da passare alla funzione

La sintassi è quindi molto simile a quella di una normale chiamata di funzione parser o di template, con l'aggiunta del nome della funzione da richiamare, questo perché un modulo Lua può contenere più funzioni, quindi quando viene richiamato si deve specificare quale funzione del modulo si vuole usare.

Come per una chiamata di template i parametri possono essere posizionali o nominati, il manuale del modulo dovrebbe precisare quali parametri accetta ogni sua funzione.

L'effetto dell'esecuzione è simile a quello di una chiamata di template: l'istruzione di invocazione del modulo viene sostituita dal valore restituito dalla funzione (mentre nel caso del template viene sostituito dall'inclusione della pagina del template richiamato).

Da notare infine che anche se non vengono passati parametri a una funzione, questa riceve comunque una serie di informazioni sulla pagina che l'ha richiamata, tra cui i parametri che sono stati passati alla pagina che richiama la funzione, e può usare questi parametri per regolare il suo comportamento.

I moduli possono essere richiamati ovunque, ma per convenzione si preferisce richiamarli solo all'interno dei template, per mantenere il codice delle pagine più semplice possibile e accessibile ai meno esperti. Ad esempio, il Template:Ciccio chiamerà internamente il Modulo:Pippo tramite il comando {{#invoke:Pippo|...}}, ma l'utilizzatore finale non ha bisogno di saperlo, poiché nelle voci si limiterà a chiamare {{Ciccio|...}} (i parametri saranno automaticamente passati anche al modulo).

Lo stesso argomento in dettaglio: Aiuto:Subst.

Come per le funzioni parser e per i normali template, anche i moduli possono essere substati.

Ad esempio, scrivendo: {{subst:#invoke:HelloWorld|hello}} una volta salvata la pagina si visualizzerà "Hello, world!" sia quando si consulta la pagina (com'è normale che sia), sia nel codice sorgente.

Esempi di chiamata

[modifica | modifica wikitesto]

Chiamata senza parametri

[modifica | modifica wikitesto]

Per eseguire la funzione hello del Modulo:HelloWorld si deve usare il comando {{#invoke:HelloWorld|hello}}. In questo caso la funzione non accetta parametri e si limita a resistuire la stringa "Hello, world!" che sostituirà l'invocazione della funzione.

Chiamata con un parametro

[modifica | modifica wikitesto]

Per calcolare la lunghezza della stringa "buongiorno" si può richiamare la funzione len del Modulo:String usando il comando {{#invoke:String|len|buongiorno}}. La funzione restituirà la stringa "10" che andrà a sostituire l'invocazione.

Accesso ai parametri del template chiamante

[modifica | modifica wikitesto]

Per esempio di accesso ai parametri del template che chiama la funzione vedi la funzione missing_image del Modulo:Tassobox che viene richiamata dal template {{Tassobox}} per determinare quale immagine visualizzare nel caso non ne venga fornita una esplicitamente. Il template {{Tassobox}} usa il comando {{#invoke:Tassobox|missing_image}} per richiamare la funzione senza passare alcun parametro, ma al suo interno la funzione accede ai parametri con cui è stato chiamato originariamente il template {{Tassobox}} (cioè i parametri "ordine", "classe", "superclasse", "subphylum", ecc... di quest'ultimo) per decidere in base al valore di questi quale immagine utilizzare.

  1. ^ Sumana Harihareswara, New Lua templates bring faster, more flexible pages to your wiki, su blog.wikimedia.org, Wikimedia Tech Blog, 11 marzo 2013. URL consultato il 16 marzo 2013.
  2. ^ In questa discussione sono presenti alcune argomentazioni sul perché Lua è stato preferito a JavaScript.
  3. ^ (EN) Roberto Ierusalimschy, Luiz Henrique de Figueiredo e Waldemar Celes, The Evolution of Lua (PDF), su lua.org, 2007, p. 1. URL consultato il 4 novembre 2015.
  4. ^ (EN) License, su lua.org, 12 maggio 2015. URL consultato il 4 novembre 2015.

Risorse e documentazione

[modifica | modifica wikitesto]

Pagine correlate

[modifica | modifica wikitesto]