Spisie treści
Lua Jest to język dynamiczny, jeśli chodzi o typy danych i ich wartości, to znaczy nie ma definicji żadnego typu podczas tworzenia zmiennej i określania, że jest to ciąg, liczba, a nawet Boolean.Wyrażenia idą w parze z wartościami, które pozwalają nam wykonywać na nich operacje, które mogą obejmować operacje arytmetyczne, relacyjne, a nawet warunkowe, aby nadać dynamikę naszym programom, ale zanim przejdziemy do wyrażeń, zobaczmy rodzaje wartości, które posiadamy w Lua i jak działają w języku.
w Lua Każda wartość ładuje swój własny typ, w którym możemy znaleźć osiem różnych typów: zero, wartość logiczna, liczba, ciąg, dane użytkownika, funkcja, wątek i tabela, gdzie z funkcją rodzaj () możemy poznać nazwę typu danej wartości. Zobaczmy prosty przykład tego, jak Lua zinterpretuj to zgodnie z rodzaj ():
ZeroJest to typ wartości, którego główną właściwością ma być różna od innych wartości. Jak widzieliśmy w poprzednim samouczku, zmienna globalna ma domyślnie wartość zero a jeśli chcemy go wyeliminować, przypisujemy tę wartość, możemy nawet użyć jej do reprezentowania braku wartości użytecznej.
Boole'aWartości logiczne, podobnie jak w pozostałych językach programowania, mają dwie wartości, prawda i fałsz, ale w przeciwieństwie do innych języków, ten typ danych nie ma całkowitej domeny nad warunkami, ponieważ dowolna może reprezentować warunek.
NumerTen typ danych reprezentuje zarówno liczby całkowite, jak i dziesiętne. Lua nie ma typu wartości całkowitej i nie potrzebuje jej, ponieważ Lua może reprezentować dowolną 32-bitową liczbę całkowitą bez problemów z zaokrąglaniem, ale najciekawszą rzeczą w języku jest to, że możemy go skompilować do użycia innego typu, takiego jak długie liczby całkowite lub zmiennoprzecinkowe, co jest całkiem przydatne w przypadkach, gdy sprzęt nie ma obsługa ułamków dziesiętnych.
StrunowyStruny w Lua Są ciągiem znaków, są wartościami niezmiennymi, czyli nie możemy zmienić znaku w ciągu. Są one obsługiwane przez automatyczną pamięć języka, podobnie jak reszta obiektów, a przypisanie ciągu może odbywać się za pomocą podwójnych lub pojedynczych cudzysłowów.
StółTyp danych table implementuje tablicę asocjacyjną, która jest tablicą, która może być indeksowana nie tylko liczbami, ale także łańcuchami lub dowolną inną wartością językową, z wyjątkiem nil. Tabele nie mają ustalonego rozmiaru, więc możemy zawierać tyle elementów, ile chcemy, a za ich pomocą możemy zarówno reprezentować moduły, pakiety, jak i obiekty. Wreszcie, jego stworzenie jest tak proste, jak użycie nawiasów {} przy inicjalizacji tabeli.
CechyFunkcje w Lua zachowują się dość osobliwie, możemy je zapisywać w zmiennych, przekazywać jako argumenty do innych funkcji i zwracać nawet jako wyniki, gdzie Lua możesz wywołać te funkcje napisane zarówno w samym języku, jak i w C.
Dane użytkownikaRodzaj danych dane użytkownika pozwala przechowywać w zmiennych z Lua dowolne informacje z C. Nie ma predefiniowanych operacji na Lua, z wyjątkiem testów przypisania i równości, gdzie główną funkcją tego typu jest reprezentowanie nowych typów jako takich utworzonych przez aplikację lub bibliotekę napisaną w C.
Jak widać typy nie różnią się zbytnio od tego, co możemy znaleźć w obecnych językach, ale pewne jest to, że prostota, jaką mamy do ich przedstawienia, jest znacznie większa, wtedy zobaczmy rolę wyrażeń i jak możemy ich używać z naszymi wartościami.
Operacje arytmetyczne są niezwykle ważne dla każdego programu i ważne jest, aby wiedzieć, jak je obsługiwać i jakie ograniczenia mogą istnieć w używanym przez nas języku. Lua obsługuje konwencjonalne operatory, do których jesteśmy przyzwyczajeni: dodawanie, odejmowanie, mnożenie, dzielenie, wykładnictwo, procent i negację.
Zobaczmy więc prosty kod, w którym zademonstrujemy użycie niektórych operatorów Lua:
x = 8 + 5 y = 9 - 2 drukuj (x * y% 0,01)Używamy dodawania, odejmowania i dzielenia przez 2 na wyniku operacji mnożenia, zobaczmy jak zareaguje interpreter, gdy uruchamiamy nasz kod przez konsolę:
POWIĘKSZAĆ
Lua podobnie jak inne języki, daje nam operatory relacyjne, takie jak większe niż>, mniejsze niż <, mniejsze lub równe =, równe równe == i negacja ~ =. Widzimy, że jedyną, która może się różnić, jest odmowa, ale po przyzwyczajeniu się do niej nie będzie problemów z jej użyciem.
Wszystkie te operatory mogą zwrócić prawdę lub fałsz, przy czym możemy nawet zastosować zarówno operator równości, jak i operator negacji do dwóch wartości. Te porównania Lua robi je na podstawie typu oprócz innych czynników, zobaczmy w poniższym kodzie, gdzie porównanie jest dokonywane na podstawie tego samego obiektu:
a = {}; ax = 1; a.y = 0 b = {}; bx = 1; b.y = 0 c = aJeśli porównamy to samo, wynik operacji daje nam, że a jest równe c, ale że a jest różne od b, wynika to z faktu, że są tym samym obiektem. Dodatkowo musimy być bardzo ostrożni przy porównywaniu różnych typów, ponieważ na przykład 6 jest różne od "6" i jeśli zrobimy coś takiego jak "3" <"8" Lua spowoduje to błąd, ponieważ mieszamy struny.
Operatory logiczne w Lua są i, lub i nie. Gdy dokonujemy porównania przy użyciu tych operatorów, pierwszy argument zostanie zwrócony, jeśli jest fałszywy, w przeciwnym razie zostanie zwrócony drugi. Zobaczmy serię przykładów w interaktywnej konsoli, aby zademonstrować powyższe.
POWIĘKSZAĆ
POWIĘKSZAĆ
Wreszcie mamy konstruktory, które są wyrażeniami, które pozwalają nam tworzyć i inicjować tabele, ta funkcja jest unikalna dla Lua i jest to jeden z najbardziej wszechstronnych i potężnych mechanizmów. Możemy bez problemu użyć pustego konstruktora z samymi nawiasami {} co stworzy pustą tabelę jako taką. Mogą one również inicjować tablice lub listy, zobaczmy przykład:
dni = {"Niedziela", "Poniedziałek", "Wtorek", "Środa", "Czwartek", "Piątek", "Sobota"}Tutaj tworzymy listę z dniami tygodnia i jeśli chcemy uzyskać dostęp do jej elementów podając indeks tego samego, który mamy, na przykład aby uzyskać czwartek byłby to indeks 5 lub niedziela byłby to numer 1, od Lua Nie inicjalizuje się do zera jak pozostałe języki, zobaczmy, jak to wygląda, gdy uruchomimy go w naszej konsoli:
tablica = {x = 26, y = 67}
Ważne jest jednak, że aby uzyskać dostęp do jego wartości zrobimy odwołanie do indeksu z podwójnymi cudzysłowami, uzyskamy wartość nil, widzimy naszą operację w interaktywnej konsoli: