Lua: Unterschied zwischen den Versionen
Dirk (Diskussion | Beiträge) K →Syntax |
Dirk (Diskussion | Beiträge) K →Syntax |
||
Zeile 35: | Zeile 35: | ||
=== Syntax === | === Syntax === | ||
Die Lua-Syntax ist gezielt sehr minimalistisch gehalten. Es gibt daher in Lua 5.4, der aktuellen Version zum Zeitpunkt der Erstellung des Artikels, nur 22 vordefinierte Schlüsselwörter (zur Einordnung Python hat 35, PHP 58, und C++ zum Beispiel hat 60 Schlüsselwörter). | Die Lua-Syntax ist gezielt sehr minimalistisch gehalten. | ||
==== Schlüsselwörter ==== | |||
Es gibt daher in Lua 5.4, der aktuellen Version zum Zeitpunkt der Erstellung des Artikels, nur 22 vordefinierte Schlüsselwörter (zur Einordnung Python hat 35, PHP 58, und C++ zum Beispiel hat 60 Schlüsselwörter). | |||
and break do else elseif end | |||
false for function goto if in | |||
local nil not or repeat return | |||
then true until while | |||
Die Schlüsselwörter sind schreibungsabhängig. Das reservierte Schlüsselwort {{ic|or}} und ein anderweitig frei vergebenes oder genutztes {{ic|OR}} zum Beispiel sind zwei verschiedene Dinge. Es wird dazu geraten, Keine Namen (Variablen, Funktionen, etc.) zu verwenden, die mit einem Unterstrich beginnen, und nur aus Großbuchstaben bestehen ({{ic|_FOOBAR}}). | |||
Lua verwendet bis auf den Doppelpunkt praktisch keine Zeichen zur Steuerung des Programmablaufs, jegliche Abläufe werden durch verschiedene Schlüsselwörter definiert. | Lua verwendet bis auf den Doppelpunkt praktisch keine Zeichen zur Steuerung des Programmablaufs, jegliche Abläufe werden durch verschiedene Schlüsselwörter definiert. | ||
==== Kommentare ==== | |||
Kommentare werden mittels {{ic|--}} eingeleitet, und gelten bis zum Ende der Zeile. Mehrzeilige Kommentare können mittels {{ic|--<nowiki>[[ ... ]]</nowiki>--}} umfasst werden. | Kommentare werden mittels {{ic|--}} eingeleitet, und gelten bis zum Ende der Zeile. Mehrzeilige Kommentare können mittels {{ic|--<nowiki>[[ ... ]]</nowiki>--}} umfasst werden. | ||
Zeile 53: | Zeile 65: | ||
]]-- | ]]-- | ||
Bei Lua handelt es sich um eine dynamisch typisierte Sprache, das Bedeutet, dass der Typ einer Variable über dessen Wert bestimmt wird, und nicht vordefiniert werden kann, welchen Wert eine Variable annehmen soll. Insgesamt besitzt Lua lediglich 8 Datentypen | ==== Typen ==== | ||
Bei Lua handelt es sich um eine dynamisch typisierte Sprache, das Bedeutet, dass der Typ einer Variable über dessen Wert bestimmt wird, und nicht vordefiniert werden kann, welchen Wert eine Variable annehmen soll. Insgesamt besitzt Lua lediglich 8 Datentypen. … | |||
* {{ic|string}} -> Zeichenketten mit bis zu 2<sup>64</sup>-1 Zeichen | * {{ic|string}} -> Zeichenketten mit bis zu 2<sup>64</sup>-1 Zeichen | ||
Zeile 59: | Zeile 72: | ||
* {{ic|table}} -> Der einzige Datenstrukturiermechanismus in Lua, siehe Abschnitt [[#Tables|Tables]] | * {{ic|table}} -> Der einzige Datenstrukturiermechanismus in Lua, siehe Abschnitt [[#Tables|Tables]] | ||
* {{ic|function}} -> In sich geschlossener ''Chunk'' mit Code, der „als ganzes“ ausgeführt werden kann | * {{ic|function}} -> In sich geschlossener ''Chunk'' mit Code, der „als ganzes“ ausgeführt werden kann | ||
* {{ic|nil}} -> Zur Unterscheidung von allen anderen Datentypen (kein Wert, aber nicht ''leer'') | |||
* {{ic|boolean}} -> Die Wahrheitswerte {{ic|true}} und {{ic|false}} | |||
* {{ic|userdata}} -> Ein Block beliebiger roher C-Speicherdaten, der nicht durch Lua verändert werden kann | |||
* {{ic|thread}} -> Repräsentationen von Co-Routinen (kollaboratives Multithreading), nicht Betriebssystemthreads | |||
==== Variablen ==== | ==== Variablen ==== |
Version vom 4. Februar 2025, 22:49 Uhr
„Lua“ wurde von Dirk (Diskussion) als in Bearbeitung markiert. Um Bearbeitungskonflikte zu vermeiden, kontaktiere Dirk (Diskussion) bitte, bevor du den Artikel bearbeitest.
Dieser Artikel oder Artikelabschnitt ist noch nicht vollständig!
Lua ist eine sehr schnelle, leicht erlernbare, gut integrierbare, und durch Module sehr umfangreich erweiterbare Scriptsprache. Die offizielle Implementation ist in ANSI C geschrieben. Da sich Lua problemlos in andere Programme integrieren lässt, wird es häufig als Programmiersprache für Plugins und Mods, oder zur Konfiguration benutzt.
Installation
Die aktuellste Version von
Lua ist als
lua
in extra
verfügbar, und kann von dort
mittels Pacman
installiert werden.
pacman -S lua
# Just-In-Time-Compiler für Lua-5.1-Scripts
pacman -S luajit
Zusätzlich zur aktuellen Version sind noch die Versionen 5.1, 5.2, und 5.3 als Pakete verfügbar. LuaJIT unterstützt alle Bibliotheksfunktionen und das komplette Set der Lua/C-API-Funktionen bis zu Version 5.1.
Funktionsweise
Natürlich kann hier kein vollständiges Lua-Tutorial erfolgen. Es können daher lediglich einige Aspekte Beleuchtet werden und es sei für tiefer gehende Beschäftigung mit der Programmierung in Lua auf die Weblinks verwiesen.
Scripts ausführen
Um ein alleinstehendes Lua-Script auszuführen, übergibt man dies einfach dem Interpreter.
lua mein_script.lua lua5.2 mein_script.lua parameter1 parameter2 ... luajit mein_script.lua
Zuerst wird das Script mit der aktuellen Version so ausgeführt, wie es ist. Danach wird das Script mit Version 5.2 des Lua-Interpreters ausgeführt, dabei werden auch parameter übergeben, auf die innerhalb des Scripts im Programmablauf zugegriffen werden kann. Am Schluss wird das Script an LuaJIT übergeben, dieses kompiliert das Script und führt es direkt aus.
Mittels der Parameterkombination -be
kann man sich den Bytecode anzeigen lassen. Mittels luajit -bX script.lua script
erstellt man eine Binary, die man dann mittels luajit script
ausführen kann. Bei sehr umfangreichen Scripts ist das Ausführen der Binary schneller.
Alternativ kann man den Interpreter wie von anderen Scriptsprachen gewöhnt auch am Anfang der Datei angeben.
#!/usr/bin/lua [hier der Code]
Alle Beispiele hier im Wiki gehen davon aus, dass der Interpreter in der Datei angegeben wird – sofern nicht anderweitig beschrieben.
Syntax
Die Lua-Syntax ist gezielt sehr minimalistisch gehalten.
Schlüsselwörter
Es gibt daher in Lua 5.4, der aktuellen Version zum Zeitpunkt der Erstellung des Artikels, nur 22 vordefinierte Schlüsselwörter (zur Einordnung Python hat 35, PHP 58, und C++ zum Beispiel hat 60 Schlüsselwörter).
and break do else elseif end false for function goto if in local nil not or repeat return then true until while
Die Schlüsselwörter sind schreibungsabhängig. Das reservierte Schlüsselwort or
und ein anderweitig frei vergebenes oder genutztes OR
zum Beispiel sind zwei verschiedene Dinge. Es wird dazu geraten, Keine Namen (Variablen, Funktionen, etc.) zu verwenden, die mit einem Unterstrich beginnen, und nur aus Großbuchstaben bestehen (_FOOBAR
).
Lua verwendet bis auf den Doppelpunkt praktisch keine Zeichen zur Steuerung des Programmablaufs, jegliche Abläufe werden durch verschiedene Schlüsselwörter definiert.
Kommentare
Kommentare werden mittels --
eingeleitet, und gelten bis zum Ende der Zeile. Mehrzeilige Kommentare können mittels --[[ ... ]]--
umfasst werden.
-- Ich bin ein Kommentar!
… bzw …
--[[ Ich bin ein … … mehrzeiliger … … Kommentar! ]]--
Typen
Bei Lua handelt es sich um eine dynamisch typisierte Sprache, das Bedeutet, dass der Typ einer Variable über dessen Wert bestimmt wird, und nicht vordefiniert werden kann, welchen Wert eine Variable annehmen soll. Insgesamt besitzt Lua lediglich 8 Datentypen. …
string
-> Zeichenketten mit bis zu 264-1 Zeichennumber
-> Positive und Negative Integer, Fließkommazahlen, und Dezimalzahlen mit 64 Bit Längetable
-> Der einzige Datenstrukturiermechanismus in Lua, siehe Abschnitt Tablesfunction
-> In sich geschlossener Chunk mit Code, der „als ganzes“ ausgeführt werden kannnil
-> Zur Unterscheidung von allen anderen Datentypen (kein Wert, aber nicht leer)boolean
-> Die Wahrheitswertetrue
undfalse
userdata
-> Ein Block beliebiger roher C-Speicherdaten, der nicht durch Lua verändert werden kannthread
-> Repräsentationen von Co-Routinen (kollaboratives Multithreading), nicht Betriebssystemthreads
Variablen
Alle Datentypen in Lua können in Variablen gespeichert werden, durch Funktionen zurückgegeben werden, in Tables strukturiert werden, oder sonstwie innerhalb eines Sripts benutzt werden. Variablen können mittels ..
verkettet werden.
Variablen sind standardmäßig global. Mittels des Keywords local
kann man sie auf den Chunk beschränken, in dem sie definiert sind.
bar = 'globale Variable' -- Global definiert local foo = 'lokale Variable' -- Lokal definiert -- In diesem Beispiel hier macht es keinen Unterschied: Beide Variablen werden ausgegeben. print(foo..'\n'..bar)
lokale Variable globale Variable
Globale Variablen werden im globalen Table abgelegt, und könnten auch aus diesem heraus abgerufen werden.
bar = 'globale Variable' print(_G['bar'])
globale Variable
Es wird jedoch empfohlen, wenn möglich lokale Variablen zu benutzen. In einem Chunk definierte Variablen sind in Chunks die innerhalb dieses Chunks erstellt werden ebenfalls verfügbar.
Funktionen
Eine Funktion ist ein einer Variablen zugewiesener Chunk, der über den Variablennamen aufrufbar ist. In neueren Versionen von Lua gibt es „syntaktischen Zucker“, der die Funktionsdefinition hinter dem Schlüsselwort function
versteckt.
function sag_was (text) print(text) end local sag_was_anderes = function (text) print(text) end sag_was('Hallo') sag_was_anderes('Tschüß')
Hallo Tschüß
Die beiden Definitionen sind technisch identisch. Beide definieren eine aufrufbare Funktion.
Tables
Module
Implementationsbeispiele
Da Lua als Script- oder Konfigurationssprache sehr weit verbreitet ist, seien hier nur einige wenige Beispiele genannt.
- Die Voxel-Spieleengine Luanti stellt basierend auf LuaJIT eine API für in Lua geschriebene Modifikationen bereit
- Der Editor Neovim benutzt Lua als Plugin- und Konfigurationssprache
- Mediawiki benutzt Lua als Template-Engine
- Der XMPP-Server Prosody ist in Lua geschrieben
- Der Fenstermanager Awesome ist teilweise in Lua geschrieben und wird mit Lua konfiguriert
- Conky kann Lua zur Definition von Anzeigescripts interpretieren
- Lua wird innerhalb von mpv als Scriptsprache benutzt
In der englsichen Wikipedia gibt es (sicherlich unvollständige) Listen von Anwendungen und Spielen
die auf die eine oder andere Art und Weise Lua nutzen.
Siehe auch
- Der Lua-Paketmanager Luarocks
- Diverse Module in dem Repos und im AUR
Weblinks
- Offizielle Website
- Das hervorragende Reference Manual
- Deutsche Anleitung für Lua 5.1