edis, skrypty w języku Lua 1/15 Redis, skrypty w języku Lua Technologie Zarządzania Treścią dr inż. Robert Perliński rperlinski@icis.pcz.pl Politechnika Częstochowska Instytut Informatyki Teoretycznej i Stosowanej 24 października 2017
Redis, skrypty w języku Lua 2/15 Język programowania Lua I Cechy: Język programowania Lua - wersja 5.3.4 potężny, efektywny i lekki język skryptowy możliwy do uruchomienia na urządzeniach mobilnych, wspiera programowanie: proceduralne, zorientowane obiektowo, funkcyjne, sterowane danymi, wspiera również opis danych, jest dynamicznie typowany, wykorzystuje maszynę wirtualną interpretującą pośredni kod binarny (ang. bytecode), dostarcza automatyczne zarządzanie pamięcią z mechanizmem odśmiecania pamięci (ang. garbage collection), świetnie nadaje się do problemów związanych z konfiguracją, pisania skryptów czy szybkiego prototypowania.
Redis, skrypty w języku Lua 3/15 Język programowania Lua II Cechy: Dokumentacja: https://www.lua.org/manual/5.3/ zaprojektowany i zarządzany w Papieskim Katolickim Uniwersytecie w Rio de Janeiro w Brazyli, Lua to księżyc po portugalsku, czyta się LOO-ah. używany w wielu technicznych aplikacjach ze szczególnym uwzględnieniem systemów wbudowanych i gier, obecnie jest wiodącym językiem skryptowym dla gier, posiada solidną dokumentację i napisano o nim kilka książek, działa bardzo szybko, najszybciej ze wszystkich języków skryptowych, jest przenośna (małą paczkę łatwo wszędzie zainstalować).
Redis, skrypty w języku Lua 4/15 Język programowania Lua III Cechy: Dokumentacja: https://www.lua.org/manual/5.3/ darmowy, działa na licencji MIT, zajmuje tylko 1.1MB po rozpakowaniu. dostarcza meta-mechanizmy, pozwalające na implementację różnych cech języka programowania, nie ma tych cech bezpośrednio w samym Lua, nie jest typowo obiektowy ale dostarcza meta-mechanizmy do implementowania klas i dziedziczenia, meta-mechanizmy pozwalają na utrzmymanie małego języka z dużymi możliwościami, semantyka może być rozszerzana w niekonwencjonalny sposób.
Redis, skrypty w języku Lua 5/15 Składnia języka Lua - instrukcja warunkowa Hello World print("hello World!") Instrukcja warunkowa wiek = 18 -- zmienna globalna --[[ Przykład instrukcji warunkowej if z wielowierszowym komentarzem ]] if ( wiek >= 18 ) then print( "osiagnales pelnoletniosc" ) else print( "jetes niepelnoletni" )
Redis, skrypty w języku Lua 6/15 Składnia języka Lua - pętla for, konkatenacja pętla for pierwszy = 7 ostatni = 14 krok = 2.2 for i = pierwszy, ostatni, krok do -- polecenia... print( "i wynosi ".. i ) --krok może być ujemy-iteracja w dół i wynosi 7.0 i wynosi 9.2 i wynosi 11.4 i wynosi 13.6
Redis, skrypty w języku Lua 7/15 Składnia języka Lua - pętla while pętla while -- lokalna zmienna l, globalniej nie można konkatenować local l = 10 -- while działa jeśli warunek = true while l>0 do -- polecenia... l = l - 3.14159 print("l wynosi ".. l) l wynosi 6.85841 l wynosi 3.71682 l wynosi 0.57523 l wynosi -2.56636
Redis, skrypty w języku Lua 8/15 Składnia języka Lua - pętla repeat pętla repeat local k = 7 -- repeat działa jeśli warunek = false -- wpisujemy warunek na przerwanie petli repeat repeat -- polecenia... print("k wynosi ".. k) k = k + 9.81 until k>50 -- until not (k<=50) k wynosi 7 k wynosi 16.81 k wynosi 26.62 k wynosi 36.43 k wynosi 46.24
Redis, skrypty w języku Lua 9/15 Składnia języka Lua - funkcje prosta funkcja function iloczyn( par1, par2 ) -- deklaracja funkcji return par1 * par2 -- słowo kluczowe "return" - zwrócenie wartości print( tostring( iloczyn( 123, 456 ) ) ) -- 56088 prosta funkcja function silnia(n) local x = 1 for i = 2, n do x = x * i return x sil = silnia(7) print( 7!=, sil, zapis blokowy, parametrów funkcji print ) 7!= 5040 zapis blokowy parametrów funkcji print
Redis, skrypty w języku Lua 10/15 Składnia języka Lua - tablice tab = {} -- pusta tablica tab[ a ] = 123 tab[ b ] = 456 print(tab) -- drukuje adres tablcy tabb = tab -- przy okazji, rozróżnia duże i małe litery print(tabb) -- wskazuje ten sam adres co tab print(tab[ a ], tab[ b ]) -- 123 456 print(tab.a, tab.b) -- 123 456 tab[1] = 7 tab[3] = 8 tab[44] = 9 print(tab[1], tab[2], tab[3], tab[44]) -- 7 nil 8 9 tabc = { 11, 22, Wojtek, d = "Danuta" } tabc[0] = 999 print(tabc[0], tabc[1], tabc[2], tabc[3], tabc[ d ], tabc.d) table: 0x128e1f0 table: 0x128e1f0 123 456 123 456 7 nil 8 9 999 11 22 Wojtek Danuta Danuta
Redis, skrypty w języku Lua 11/15 Składnia języka Lua - przechowywanie funkcji zmienne i tabele przechowujące funkcje fun = function(m) print( Liczba m=.. m) fun(888) function zwroc_funkcje() return function(n) print( Liczba n=.. n) fun00 = zwroc_funkcje() fun00(9999) Liczba m=888 Liczba n=9999
Redis, skrypty w języku Lua 12/15 Składnia języka Lua - przestrzenie nazw tabela jako własna przestrzeń nazw MojaPrzestrzen = {} -- coś jakby konstruktor MojaPrzestrzen.new = function (imie, wiek) return { imie = imie, wiek = wiek } jan = MojaPrzestrzen.new( Jan, 23) print(mojaprzestrzen.new, jan) print(jan.imie, jan.wiek) function: 0x10ade50 Jan 23 table: 0x10ae090
Redis, skrypty w języku Lua 13/15 Składnia języka Lua - interakcja z użytkownikiem, napisy interakcja z użytkownikiem, napisy print( "Czesc, jak masz na imie?\n" ) --\n to oznaczenie nowej linii --Funkcja io.read( ) oczekuje na wprowadzenie danych local imie = io.read( ) print( "Czesc, ".. imie.. "." ) print(string.len(imie)) print(string.byte(imie, 1)) print( Ostatnia litera:.. imie:sub(string.len(imie))) Czesc, jak masz na imie? Adam Czesc, Adam. 4 65 Ostatnia litera: m
Redis, skrypty w języku Lua 14/15 Wykorzystanie skryptów Lua w Redis I prosty odczyt danych return redis.call( get, napis ) > set napis "Ala ma kota" $ redis-cli --eval redis.lua "Ala ma kota" odczyt listy return redis.call( lrange, imiona, 0, -1) > RPUSH imiona "Jan" "Marek" "Halina" "Wojtek" "Martyna" $ redis-cli --eval redis.lua 1) "Jan" 2) "Marek" 3) "Halina" 4) "Wojtek" 5) "Martyna"
Redis, skrypty w języku Lua 15/15 Wykorzystanie skryptów Lua w Redis II prosty odczyt danych local imiona = redis.call( lrange, imiona, 0, -1) local zenskie = {} for key, value in pairs(imiona) do if ( value:sub( string.len(value) ) == a ) then table.insert(zenskie, value) return zenskie > RPUSH imiona "Jan" "Marek" "Halina" "Wojtek" "Martyna" $ redis-cli --eval redis.lua 1) "Halina" 2) "Martyna"