{"id":915907,"date":"2026-10-29T16:31:07","date_gmt":"2026-10-29T16:31:07","guid":{"rendered":"https:\/\/www.ninjaone.com\/blog\/linguaggio-programmazione-lua\/"},"modified":"2026-10-29T16:31:08","modified_gmt":"2026-10-29T16:31:08","slug":"linguaggio-programmazione-lua","status":"publish","type":"post","link":"https:\/\/www.ninjaone.com\/it\/blog\/linguaggio-programmazione-lua\/","title":{"rendered":"Linguaggio di programmazione Lua: una guida per principianti"},"content":{"rendered":"<div class=\"in-context-cta\"><h2>Punti chiave<\/h2>\n<ul>\n<li>Perch\u00e9 imparare Lua? Lua \u00e8 leggero, veloce e facile da integrare in altre applicazioni: \u00e8 quindi ideale per lo sviluppo di videogiochi, IoT, scripting e automazione.<\/li>\n<li>Primi passi: installa Lua su Windows, macOS o Linux, configura l\u2019ambiente di sviluppo con un qualsiasi editor di testo ed esegui il tuo primo programma con \u201clua hello.lua\u201d.<\/li>\n<li>Concetti fondamentali: scopri la sintassi pulita di Lua, le tabelle flessibili, le funzioni riutilizzabili e il supporto alla programmazione procedurale, orientata agli oggetti e funzionale.<\/li>\n<li>Competenze avanzate: esplora moduli, gestione degli errori, metatabelle, coroutine e integrazione con C\/C++ per creare sistemi basati su Lua scalabili, personalizzabili ed efficienti.<\/li>\n<\/ul>\n<\/div>\n<p><strong>Lua<\/strong>, che in portoghese significa \u201cluna\u201d, \u00e8 un linguaggio di programmazione leggero e versatile, perfetto sia per chi inizia sia per chi programma da anni.<\/p>\n<p>Oltre a essere compatto, efficiente e in grado di svolgere compiti molto diversi tra loro, Lua \u00e8 noto per la sua semplicit\u00e0 e per la facilit\u00e0 di integrazione con altri linguaggi di programmazione, in particolare C e C++.<\/p>\n<p>Se preferisci una guida pi\u00f9 visiva, guarda il nostro video sullo stesso argomento: \u201c<a href=\"https:\/\/www.ninjaone.com\/videos\/it-ops\/lua-programming-language-a-beginners-guide\/\">Linguaggio di programmazione Lua: una guida per principianti<\/a>.\u201d<\/p>\n<div style=\"padding: 56.25% 0 0 0; position: relative;\"><iframe data-mce-fragment=\"1\" frameborder=\"0\" height=\"350\" src=\"\/\/player.vimeo.com\/video\/1081796115?title=0&amp;byline=0\" style=\"position: absolute; top: 0; left: 0; width: 100%; height: 100%;\" title=\"Linguaggio di programmazione Lua: una guida per principianti\" width=\"425\"><\/iframe><\/div>\n<p><script src=\"https:\/\/player.vimeo.com\/api\/player.js\"><\/script><\/p>\n<h2>Primi passi con Lua<\/h2>\n<h3>Perch\u00e9 usare Lua?<\/h3>\n<ul>\n<li><strong>Leggero e veloce:<\/strong> Lua \u00e8 progettato per essere piccolo ed efficiente, il che lo rende ideale per i sistemi embedded e per le applicazioni in cui le prestazioni sono fondamentali. Occupa pochissima memoria e viene eseguito molto rapidamente.<\/li>\n<li><strong>Facile da imparare:<\/strong> la sintassi lineare e il design minimalista di Lua permettono a chi inizia di imparare in fretta e cominciare subito a scrivere codice.<\/li>\n<li><strong>Estensibile:<\/strong> Lua pu\u00f2 essere integrato facilmente con altri linguaggi di programmazione, soprattutto C e C++. Questo lo rende uno strumento potente per aggiungere funzionalit\u00e0 di scripting alle applicazioni esistenti.<\/li>\n<li><strong>Versatile<\/strong>: Lua supporta diversi paradigmi di programmazione, tra cui quello procedurale, orientato agli oggetti e funzionale. Questa versatilit\u00e0 permette a chi sviluppa di adottare lo stile pi\u00f9 adatto alle proprie esigenze.<\/li>\n<li><strong>Lo scripting in Lua nello sviluppo di videogiochi: <\/strong>Lua \u00e8 ampiamente utilizzato nell\u2019industria dei videogiochi per creare la logica di gioco, grazie alla sua velocit\u00e0 e flessibilit\u00e0. Piattaforme molto diffuse come Roblox (che usa Luau, un superset tipizzato di Lua), L\u00d6VE 2D, Defold e World of Warcraft usano Lua o linguaggi di scripting basati su Lua per la logica di gioco e il modding.<\/li>\n<li><strong>Luau (il dialetto Lua di Roblox<\/strong><strong>)<\/strong>: restando in ambito videoludico, con decine di milioni di utenti attivi ogni giorno su Roblox, <a href=\"https:\/\/mobidev.github.io\/luau\/\" target=\"_blank\" rel=\"noopener\">Luau<\/a> \u2013 un superset tipizzato e ottimizzato per le prestazioni di Lua 5.1 \u2013 \u00e8 uno degli ambienti di scripting pi\u00f9 usati al mondo: le competenze in Lua sono quindi direttamente applicabili a una delle pi\u00f9 grandi piattaforme di gaming.<\/li>\n<li><strong>Community e risorse attive: <\/strong>Lua ha una community attiva e disponibile, che mette a disposizione un\u2019ampia gamma di librerie, strumenti e documentazione. Per chi sviluppa \u00e8 quindi pi\u00f9 semplice trovare aiuto e risorse mentre impara e lavora con il linguaggio.<\/li>\n<\/ul>\n<h2>Come installare Lua<\/h2>\n<h3>Windows<\/h3>\n<ol>\n<li>Scarica i binari di Lua dal sito ufficiale di Lua.<\/li>\n<li>Estrai i file in una directory a tua scelta.<\/li>\n<li>Aggiungi la directory di Lua alla variabile d\u2019ambiente PATH del sistema.<\/li>\n<li>Apri il Prompt dei comandi e digita \u201clua -v\u201d per verificare se l\u2019installazione \u00e8 andata a buon fine.<\/li>\n<\/ol>\n<h3>macOS<\/h3>\n<ol>\n<li>Apri il Terminale.<\/li>\n<li>Se non l\u2019hai ancora fatto, installa Homebrew con questo comando:<br \/>\n\/bin\/bash -c \u201c$(curl -fsSL https:\/\/raw.githubusercontent.com\/Homebrew\/install\/HEAD\/install.sh)\u201d<\/li>\n<li>Usa Homebrew per installare Lua: \u201cbrew install lua\u201d.<\/li>\n<li>Verifica l\u2019installazione digitando \u201clua -v\u201d nel Terminale.<\/li>\n<\/ol>\n<h3>Linux<\/h3>\n<ol>\n<li>Apri il Terminale.<\/li>\n<li>Usa il gestore di pacchetti per installare Lua. Sui sistemi basati su Debian, digita questo: \u201csudo apt-get install lua5.5\u201d.<\/li>\n<li>Verifica l\u2019installazione con \u201clua -v\u201d.<\/li>\n<\/ol>\n<p>Questa guida usa <a href=\"https:\/\/www.lua.org\/versions.html\" target=\"_blank\" rel=\"noopener\">Lua 5.5<\/a>, la versione stabile attuale, le cui principali novit\u00e0 includono \u201cdichiarazioni per le variabili globali, tabelle vararg con nome, array pi\u00f9 compatti e garbage collection principali eseguite in modo incrementale\u201d.<\/p>\n<h3>Configurazione dell\u2019ambiente di sviluppo<\/h3>\n<p>Configurare l\u2019ambiente di sviluppo \u00e8 un po\u2019 come sistemare la scrivania prima di iniziare un nuovo progetto: un setup pulito ed efficiente rende la scrittura del codice pi\u00f9 produttiva.<\/p>\n<p>Per sviluppare in Lua puoi usare qualsiasi editor di testo o IDE (Integrated Development Environment). Tra le scelte pi\u00f9 diffuse ci sono Visual Studio Code, Sublime Text e Neovim (che usa Lua come linguaggio di configurazione nativo). Ricordati di installare un\u2019estensione o un plugin per Lua, cos\u00ec da avere l\u2019evidenziazione della sintassi e altre funzionalit\u00e0.<\/p>\n<h3>Scrivere ed eseguire il tuo primo programma in Lua<\/h3>\n<p>Iniziamo con un semplice programma &#8220;Hello, World!&#8221;:<\/p>\n<p><em>print(&#8220;Hello, World!&#8221;)<\/em><\/p>\n<p>Per eseguire il programma, salvalo come \u201chello.lua\u201d e lancialo dalla riga di comando:<\/p>\n<p><em>lua hello.lua<\/em><\/p>\n<h2>Sintassi di Lua e concetti di base<\/h2>\n<p>La sintassi di Lua \u00e8 lineare e facile da assimilare. Ecco alcuni concetti fondamentali.<\/p>\n<h3>Variabili e tipi di dati<\/h3>\n<p>In Lua le variabili sono come contenitori che custodiscono dati. Lua \u00e8 tipizzato dinamicamente: non devi dichiarare il tipo di una variabile.<\/p>\n<p><em>local num = 42 &#8212; number<\/em><br \/>\n<em>local str = &#8220;Hello&#8221; &#8212; string<\/em><br \/>\n<em>local bool = true &#8212; boolean<\/em><\/p>\n<h3>Operatori ed espressioni<\/h3>\n<p>Gli operatori sono gli strumenti con cui esegui operazioni sulle variabili:<\/p>\n<p><em>local sum = 10 + 5 &#8212; arithmetic<\/em><br \/>\n<em>local isEqual = (10 == 5) &#8212; comparison<\/em><br \/>\n<em>local andOp = (true and false) &#8212; logical<\/em><\/p>\n<h3>Strutture di controllo<\/h3>\n<p>Le strutture di controllo guidano il flusso del programma:<\/p>\n<p><em>if num &gt; 40 then<\/em><br \/>\n<em>print(&#8220;Number is greater than 40&#8221;)<\/em><br \/>\n<em>else<\/em><br \/>\n<em>print(&#8220;Number is 40 or less&#8221;)<\/em><br \/>\n<em>end<\/em><br \/>\n<em>for i = 1, 5 do<\/em><br \/>\n<em>print(i)<\/em><br \/>\n<em>end<\/em><br \/>\n<em>while num &gt; 0 do<\/em><br \/>\n<em>print(num)<\/em><br \/>\n<em>num = num &#8211; 1<\/em><br \/>\n<em>end<\/em><\/p>\n<h2>Le funzioni in Lua<\/h2>\n<p>Le funzioni definiscono un insieme di istruzioni che puoi riutilizzare pi\u00f9 volte.<\/p>\n<h3>Definire e richiamare le funzioni in Lua<\/h3>\n<p>Ecco come si definisce una funzione semplice:<\/p>\n<p><em>function greet(name)<\/em><br \/>\n<em>print(&#8220;Hello, &#8221; .. name)<\/em><br \/>\n<em>end<\/em><br \/>\n<em>greet(&#8220;Alice&#8221;)<\/em><\/p>\n<h3>Ambito e ciclo di vita delle funzioni<\/h3>\n<p>Le variabili dichiarate all\u2019interno di una funzione sono locali a quella funzione e smettono di esistere quando la funzione termina.<\/p>\n<p><em>function add(a, b)<\/em><br \/>\n<em>local sum = a + b<\/em><br \/>\n<em>return sum<\/em><br \/>\n<em>end<\/em><\/p>\n<h3>Funzioni di ordine superiore e closure<\/h3>\n<p>Le funzioni di ordine superiore e le closure sono tecniche avanzate. Permettono di trattare le funzioni come variabili e di creare comportamenti complessi.<\/p>\n<p><em>function makeAdder(x)<\/em><br \/>\n<em>return function(y)<\/em><br \/>\n<em>return x + y<\/em><br \/>\n<em>end<\/em><br \/>\n<em>end<\/em><br \/>\n<em>local addFive = makeAdder(5)<\/em><br \/>\n<em>print(addFive(10)) &#8212; Output: 15<\/em><\/p>\n<h2>Le tabelle: il cuore di Lua<\/h2>\n<p>Le tabelle sono la struttura dati principale di Lua e sono essenziali per molte operazioni. Le tabelle di Lua sono versatili e possono essere usate come array, dizionari o persino oggetti.<\/p>\n<h3>Creare e manipolare le tabelle<\/h3>\n<p>Creare una tabella \u00e8 semplice:<\/p>\n<p><em>local fruits = {&#8220;apple&#8221;, &#8220;banana&#8221;, &#8220;cherry&#8221;}<\/em><br \/>\n<em>local person = {name = &#8220;John&#8221;, age = 30}<\/em><\/p>\n<p>E manipolarle \u00e8 altrettanto facile:<\/p>\n<p><em>table.insert(fruits, &#8220;orange&#8221;)<\/em><br \/>\n<em>print(fruits[4]) &#8212; Output: orange<\/em><br \/>\n<em>person.job = &#8220;developer&#8221;<\/em><br \/>\n<em>print(person.name) &#8212; Output: John<\/em><\/p>\n<h3>Usare le tabelle come array e dizionari<\/h3>\n<p>Le tabelle possono funzionare sia da array sia da dizionari:<\/p>\n<ul>\n<li><em>Tabella simile a un array<\/em><\/li>\n<\/ul>\n<p style=\"padding-left: 40px;\"><em>local numbers = {1, 2, 3, 4, 5}<\/em><\/p>\n<ul>\n<li><em>Tabella simile a un dizionario<\/em><\/li>\n<\/ul>\n<p style=\"padding-left: 40px;\"><em>local capitals = {USA = &#8220;Washington, D.C.&#8221;, France = &#8220;Paris&#8221;}<\/em><\/p>\n<p style=\"padding-left: 40px;\"><em>print(capitals[&#8220;USA&#8221;]) &#8212; Output: Washington, D.C.<\/em><\/p>\n<h2>Gestione degli errori e debugging<\/h2>\n<p>La gestione degli errori in Lua \u00e8 come avere una cassetta di pronto soccorso a portata di mano: speri di non doverla mai usare, ma quando serve \u00e8 fondamentale.<\/p>\n<h3>Tipi di errore pi\u00f9 comuni e come gestirli<\/h3>\n<p>Gli errori possono verificarsi per diverse ragioni: errori di sintassi, errori di esecuzione o errori di logica. Lua mette a disposizione meccanismi per gestirli in modo controllato tramite pcall (protected call).<\/p>\n<p><em>local status, err = pcall(function()<\/em><br \/>\n<em>&#8212; code that might fail<\/em><br \/>\n<em>end)<\/em><br \/>\n<em>if not status then<\/em><br \/>\n<em>print(&#8220;Error: &#8221; .. err)<\/em><br \/>\n<em>end<\/em><\/p>\n<h3>Tecniche e strumenti di debugging<\/h3>\n<p>Il debugging serve quando devi individuare e risolvere i problemi in modo sistematico. Lua include una libreria debug integrata che rende questo lavoro piuttosto semplice.<\/p>\n<p><em>function debug.traceback([message[, level]])<\/em><br \/>\n<em>&#8212; usage<\/em><br \/>\n<em>end<\/em><br \/>\n<em>debug.sethook(function(event, line)<\/em><br \/>\n<em>local s = debug.getinfo(2).short_src<\/em><br \/>\n<em>print(s .. &#8220;:&#8221; .. line)<\/em><br \/>\n<em>end, &#8220;l&#8221;)<\/em><\/p>\n<h3>Best practice per scrivere codice Lua robusto<\/h3>\n<p>L\u2019attenzione ai dettagli e l\u2019uso delle best practice fanno la differenza.<\/p>\n<ul>\n<li>Usa nomi di variabili significativi.<\/li>\n<li>Suddividi il codice in moduli.<\/li>\n<li>Evita le variabili globali, cos\u00ec il codice resta manutenibile e meno soggetto a errori.<\/li>\n<\/ul>\n<h2>Lavorare con moduli e librerie Lua<\/h2>\n<p>Le librerie e i moduli in Lua sono strumenti specializzati: aggiungono funzionalit\u00e0 e semplificano le attivit\u00e0 complesse.<\/p>\n<h3>Le librerie standard di Lua<\/h3>\n<p>Lua include diverse librerie integrate che offrono un\u2019ampia gamma di funzionalit\u00e0, come la manipolazione delle stringhe, le operazioni matematiche e l\u2019I\/O sui file.<\/p>\n<p><em>local str = &#8220;Hello, World!&#8221;<\/em><br \/>\n<em>print(string.lower(str)) &#8212; Output: hello, world!<\/em><br \/>\n<em>local sum = math.max(1, 2, 3, 4, 5)<\/em><br \/>\n<em>print(sum) &#8212; Output: 5<\/em><\/p>\n<h3>Come usare e creare i moduli<\/h3>\n<p>I moduli in Lua ti permettono di organizzare il codice in componenti riutilizzabili.<\/p>\n<h3>Creare un modulo<\/h3>\n<p><em>&#8212; mymodule.lua<\/em><br \/>\n<em>local M = {}<\/em><br \/>\n<em>function M.greet(name)<\/em><br \/>\n<em>print(&#8220;Hello, &#8221; .. name)<\/em><br \/>\n<em>end<\/em><br \/>\n<em>return M<\/em><\/p>\n<h3>Usare un modulo<\/h3>\n<p><em>local mymodule = require(&#8220;mymodule&#8221;)<\/em><br \/>\n<em>mymodule.greet(&#8220;Alice&#8221;)<\/em><\/p>\n<h3>Librerie di terze parti pi\u00f9 diffuse<\/h3>\n<p>Lua ha un ricco ecosistema di librerie di terze parti che ne ampliano le capacit\u00e0. Tra le pi\u00f9 diffuse ci sono:<\/p>\n<ul>\n<li><strong>LuaSocket <\/strong>per la comunicazione di rete<\/li>\n<li><strong>LuaFileSystem <\/strong>per le operazioni sul filesystem<\/li>\n<li><strong>Penlight <\/strong>per le funzioni di utilit\u00e0<\/li>\n<\/ul>\n<h2>Applicazioni pratiche di Lua<\/h2>\n<p>Le applicazioni di Lua spaziano dai sistemi embedded allo sviluppo di videogiochi e oltre.<\/p>\n<ul>\n<li><strong>Sistemi embedded e IoT:<\/strong><br \/>\nla natura leggera di Lua lo rende ideale per i sistemi embedded e i <a href=\"https:\/\/www.ninjaone.com\/it\/blog\/gestione-dei-dispositivi-iot-di-cosa-si-tratta\/\">dispositivi IoT<\/a>. Offre potenti funzionalit\u00e0 di scripting senza consumare molta memoria o potenza di calcolo.<\/li>\n<li><strong>Scripting e automazione:<\/strong><br \/>\nLua \u00e8 spesso usato per lo scripting e l\u2019<a href=\"https:\/\/www.ninjaone.com\/it\/blog\/tutto-quello-che-bisogna-sapere-sull-automazione-it\/\">automazione IT<\/a>, permettendo di automatizzare le attivit\u00e0 ripetitive e di estendere le funzionalit\u00e0 delle applicazioni.<\/li>\n<\/ul>\n<h2>Argomenti avanzati<\/h2>\n<p>Per chi vuole approfondire, Lua offre funzionalit\u00e0 avanzate come metatabelle, metametodi, coroutine e integrazione con codice C\/C++.<\/p>\n<ul>\n<li><strong>Metatabelle e metametodi:<\/strong><br \/>\nle metatabelle e i metametodi sono il modo in cui Lua permette di personalizzare il comportamento delle tabelle.<\/li>\n<li><strong>Coroutine e concorrenza:<\/strong><br \/>\nle coroutine offrono un modo efficace di gestire le attivit\u00e0 asincrone, consentendo il multitasking cooperativo senza la complessit\u00e0 dei thread.<\/li>\n<li><strong>Integrazione con codice C\/C++:<\/strong><br \/>\nLua pu\u00f2 essere integrato nelle applicazioni C\/C++, fornendo un\u2019interfaccia di scripting flessibile.<\/li>\n<\/ul>\n\n<h2>In sintesi<\/h2>\n<p>Lua \u00e8 un linguaggio di programmazione versatile e potente, facile da imparare e piacevole da usare. Comprendendone i concetti di base, la sintassi e le applicazioni, puoi iniziare il tuo percorso nella programmazione in Lua con sicurezza.<\/p>\n<p>Ricorda che imparare un nuovo linguaggio di programmazione richiede pratica e pazienza. Se vuoi continuare a imparare, dai un\u2019occhiata a \u201c<a href=\"https:\/\/tylerneylon.com\/a\/learn-lua\/\" target=\"_blank\" rel=\"noopener\">Impara Lua in 15 minuti<\/a>\u201d, un tutorial su Lua pensato per chi inizia: \u00e8 anche un\u2019applicazione Lua che puoi davvero eseguire.<\/p>\n<p>Continua a sperimentare, a costruire progetti e a esplorare le tante risorse disponibili per approfondire.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Lua, che in portoghese significa \u201cluna\u201d, \u00e8 un linguaggio di programmazione leggero e versatile, perfetto sia per chi inizia sia per chi programma da anni. Oltre a essere compatto, efficiente e in grado di svolgere compiti molto diversi tra loro, Lua \u00e8 noto per la sua semplicit\u00e0 e per la facilit\u00e0 di integrazione con altri [&hellip;]<\/p>\n","protected":false},"author":35,"featured_media":292699,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"_relevanssi_hide_post":"","_relevanssi_hide_content":"","_relevanssi_pin_for_all":"","_relevanssi_pin_keywords":"","_relevanssi_unpin_keywords":"","_relevanssi_related_keywords":"","_relevanssi_related_include_ids":"","_relevanssi_related_exclude_ids":"","_relevanssi_related_no_append":"","_relevanssi_related_not_related":"","_relevanssi_related_posts":"","_relevanssi_noindex_reason":"","_lmt_disableupdate":"","_lmt_disable":"","footnotes":""},"categories":[3025],"tags":[],"class_list":["post-915907","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-it-ops"],"acf":[],"modified_by":null,"_links":{"self":[{"href":"https:\/\/www.ninjaone.com\/it\/wp-json\/wp\/v2\/posts\/915907","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.ninjaone.com\/it\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.ninjaone.com\/it\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.ninjaone.com\/it\/wp-json\/wp\/v2\/users\/35"}],"replies":[{"embeddable":true,"href":"https:\/\/www.ninjaone.com\/it\/wp-json\/wp\/v2\/comments?post=915907"}],"version-history":[{"count":1,"href":"https:\/\/www.ninjaone.com\/it\/wp-json\/wp\/v2\/posts\/915907\/revisions"}],"predecessor-version":[{"id":915908,"href":"https:\/\/www.ninjaone.com\/it\/wp-json\/wp\/v2\/posts\/915907\/revisions\/915908"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.ninjaone.com\/it\/wp-json\/wp\/v2\/media\/292699"}],"wp:attachment":[{"href":"https:\/\/www.ninjaone.com\/it\/wp-json\/wp\/v2\/media?parent=915907"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.ninjaone.com\/it\/wp-json\/wp\/v2\/categories?post=915907"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.ninjaone.com\/it\/wp-json\/wp\/v2\/tags?post=915907"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}