Funktionen

In Lua können wir Funktionen definieren


--[[ 
das Kartesische Produkt in Lua

das kartesische Produkt zweier Mengen ist definiert als die Menge aller Tupel (a,b),
wobei a ein Element aus A und b ein Element aus B ist
A x B := { (a,b) | a ∈ A und b ∈ B }

der euklidische Raum ℝ³ beispielsweise besteht aus dem dreifachen kartesischen Produkt
der reellen Zahlen ℝ (Dreier-Tupel)
ℝ x ℝ x ℝ = ℝ³ {(x,y,z) | x ∈ ℝ, y ∈ ℝ, z ∈ ℝ}

in Python existiert die Methode:
list(itertools.product((1,2), (3,4)))
]]--

-- load inspect (e.g. install with luarocks)
local inspect = require('inspect') 

-- create cartestian product of two tupels (implemented as lua tables)
-- @param t1 table, first tupel
-- @param t2 table, second tupel
-- @return table cartesian product
local function buildProduct(t1, t2)
	local p = {}
	for x,v1 in pairs(t1) do
		 for z,v2 in pairs(t2) do 
			t = {v1,v2}
			table.insert(p, t)
		 end
	end
	return p
end


-- build cartesian product of two tupels 1,3 1,4 2,3 2,4
a = {1,2,3}
b = {4,5,6}
result = buildProduct(a,b)

-- dump result
print(inspect(result))

--[[ 
Ergebnis:
{ { 1, 3 }, { 1, 4 }, { 1, 8 }, { 2, 3 }, { 2, 4 }, { 2, 8 }, 
{ 6, 3 }, { 6, 4 }, { 6, 8 } }
]]--

Lua ist eine imperative Skriptsprache, die 1993 von der Computer Graphics Technology Group der Päpstlichen Katholischen Universität von Rio de Janeiro in Brasilien entwickelt wurde. Sie wird gerne als embedded-Sprache genutzt, es ist aber auch durchaus möglich, eigenständige Programme mit Lua zu schreiben. Durch eine API lassen sich zur Laufzeit C-Programme einbinden, was sie durchaus für hochperformante Arbeiten nützlich macht.

In dieser Einführung zeigen wir die allgemeine Syntax der Sprache anhand von Beispielen. Wie immer in den Ninja-Lessons verweisen wir für tieferes Verständnis auf die offizielle Lua-Doku. Im nächsten Lua-Beitrag behandeln wir Funktionen und Kontrollstrukturen. In den folgendne Beiträgen wird es um Tables, Errorhandlung und um das Entwickeln und Einbinden von einem einfachen C-Modul gehen.

Für die ersten Schritte reicht der offizielle interaktive Online-Interpreter aus. Für komplexere Aufaben lohnt es sich, Lua lokal zu installieren. Im Web finden sich zahllose Tutorials, die dieses Thema behandeln.

 

Allgemeine Merkmale

  • dynamische Typisierung
  • plattformunabhängig (Bytecode)
  • theoretisch objektorientiert
  • Garbage Collection
  • unterstützt einen interactive Mode
  • Paketmanager Luarocks
  • no batteries included

 

Datentypen

  • nil
  • boolean
  • number (integer, float)
  • string
  • function
  • userdata
  • thread
  • table (Datenstruktur)

 

Einführung in die Sprache

Kommentare

Wir unterscheiden zwischen einzeiligen und mehrzeiligen Kommentaren.


-- das ist einzeiliger Kommentar

--[[So erzeugt man einen mehrstelligen Kommentar. Sehr einfach, aber ungewöhnlich.--]]

Variablenzuweisung

Lua typisiert dynamisch, unterstützt also das Duck-Typing-Konzept. In Lua ist alles ein Wert, kann also einer Variablen zugewiesen werden. So kann  zum Beispiel auch eine Funktion einer Variablen zugewiesen  werden. Variablen sind in Lua global, es sei denn, sie werden mit dem Schlüsselwort local deklariert. In diesem Falle sind sie nur in dem Block verfügbar, in dem sie deklariert worden sind, z.b. einer Funktion.

Wie die meisten Skriptsprachen referenziert die Variable nicht direkt auf den Speicher, sondern in eine Art Objekt (Lua ist intern table-orientiert).

 

 

-- einfache Zuweisungen

a = 3 --wir weisen der Variablen a den Wert 3 zu
print( type(a) ) -- Datentyp prüfen: number

country = "Germany" -- einfache Strinzuweisung

p = a / 2 -- zwei Integer dividiert: 1.5

local c = "orange" -- Variable c hat den Stringwert "orange"
local c = 'orange' -- geht auch mit einfachen Anführungszeichen
local c = 3 -- c ist jetzt drei dank dynamischer Typisierung

Mehrzeilige Strings

 
q = [[ das ist ein 
mehrzeiliger 
string ]]

boolsche Werte, nil

 
isTrue = true -- isTrue ist jetzt true
isTrue = soWhat -- nicht existente Varialbe soWhat ergibt nil
print(isTrue) --nil

i = 3 -- i is true
i = 0 -- i is true
if i then print("i ist wahr") end

Inkrement, Dekrement

i = 1
i++ -- gibt es in Lua nicht
i-- --gibt es in Lua auch nicht
i = i+1 -- ist der richtige Weg

Table

t = {"Blaubeere", "Waldbeere", "Superbeere"} --table t mit vordefinierten werten
print t[2] -- wie in vielen Sprachen greifen wir so auf den index zu

pets = {} --Zuweisen eines leeren Tables an die Variable pets
pets[0] = "Maus" --index 0 referenziert auf String "Maus"
pets[1] = "Ziege" --index 1 referenziert auf String "Maus"

Table Indizies

pets = {}
pets = {"Maus", "Ziege", "Fisch"}
print( pets[0] ) -- nil, da in der Lua der Index im Gegensatz zu vielen anderen Sprachen bei 1 anfängt

pets = {}
pets["fische"] = {"Forelle", "Hai", "Goldfisch"} -- verschachtelte Tabelle
print( pets["fische"][1] ) --Forelle

 

 

 

 

 

https://www.heise.de/newsticker/meldung/WWW-Schoepfer-Tim-Berners-Lee-will-das-Web-den-Konzernen-entreissen-4179127.html

Ein wichtiges Tool für den alltäglichen Gebrauch eines Programmierers ist die freie Programmbibliothek cURL (Curl URL Request Library). Das Kommandozeilenprogramm dient im Grunde zur Übertragung von Dateien in Rechnernetzen. cURL kann Dateien im Gegensatz zu dem älteren wget nicht nur herunter- sondern auch hochladen. Typischer und einfachster Anwendungsfall für den Einsatz von cURL ist der Dateidownload. Wir können damit aber noch eine Menge anderer Dinge machen.

Weiterlesen

Studierter Theologe, Indienreisender, Rancher, Song-Texter von Grateful Dead und Gründer der Electronic Frontier Foundation: John Berry Barlow stirbt mit 70 Jahren an Herzversagen. International bekannt wurde der Internetpionier für seine Unabhängigkeitserklärung des Cyberspace, die er 1996 auf dem Weltwirtschafsforum in Davos vortrug.

Schöner Artikel bei Heise über Barlow

Nach knapp fünf Jahren gibt wieder mal ein Update der Top 10 der Sicherheitsrisiken in der Webentwicklung des Open Web Application Security Projects (OWASP). Hier geht’s zum PDF:

https://www.owasp.org/images/7/72/OWASP_Top_10-2017_%28en%29.pdf.pdf

gs -sDEVICE=pdfwrite -dNOPAUSE -dBATCH -sOutputFile=output_file.pdf input_file.pdf

http://www.faz.net/aktuell/feuilleton/medien/netzneutralitaet-wie-internet-firmen-amerika-erpressen-15344404.html

Die Federal Communications Commission (FCC) in den Vereinigten Staaten hat diesen Grundsatz – bisher niedergelegt in der Open Internet Order – in einem heftig umstrittenen und knappen Beschluss gekippt. Internetprovider sollen nun „Informationsdienste“ sein, vergleichbar mit Nachrichtenportalen oder Fernsehsendern, die frei entscheiden können, welche Inhalte sie in welcher Qualität übertragen wollen – oder auch nicht.

Auf Shop- und Seitenbetreiber kommen 2018 einige wichtige Änderungen zu. Der folgende Artikel von eRecht24 fasst alle Änderungen übersichtlich zusammen:
eRecht24 – Gesetzesänderungen 2018

Insbesondere sollten Sie sich -vor allem als Shopbetreiber- mit der neuen Datenschutzgrundverordnung DSGVO vertraut machen:
Was sich 2018 im Datenschutz ändert. Und warum das für Sie wichtig ist.

Bei eRecht24.de finden Sie übrigens auch den genialen Impressumsgenerator für Ihre Webseite bzw. für Ihnen Facebook-Account.

Responsive Webdesign ist in aller Munde, jeder will es haben, aber was ist das eigentlich genau? Responsive heisst auf deutsch in etwa „reagierend“. Die Webseite reagiert also auf etwas, und zwar -im engeren Sinne- auf die Größe und Auflösung des Endgerätes. Weiterlesen