Czy Lua nadaje się do nauki algorytmów i struktur danych?
Do nauki zaskakująco dobrze: skoro budujesz tylko z tabel, każda struktura jest jawna, a kod pozostaje krótki. Haczyk w tym, że tabele po cichu wybaczają błędy: tablice zwyczajowo zaczynają się od 1, brakujący klucz zwraca nil zamiast błędu, a operator długości #t jest wiarygodny tylko dla sekwencji bez dziur z nil. Niewiele rozmów rekrutacyjnych odbywa się w Lua, więc jeśli taka rozmowa jest twoim celem, pakiety rekrutacyjne są dostępne także w języku, którego tam użyjesz.
Jak zbudować stos i kolejkę z tabeli w Lua?
Stos to część tablicowa używana od jednego końca: table.insert(t, x) wkłada, a table.remove(t) zdejmuje. Kolejka wymaga więcej uwagi, bo table.remove(t, 1) przesuwa każdy pozostały element o jedno miejsce w dół, więc każde zdjęcie z kolejki to O(n). Zamiast tego trzymaj dwa indeksy, first i last: dodawaj pod last + 1, czytaj pod first, ustaw to miejsce na nil i przesuń indeks, a zdejmowanie z kolejki staje się operacją o stałym czasie. W kroku pierwszym budujesz oba.
Dlaczego #t w Lua czasem podaje złą długość?
Bo # zwraca granicę tabeli: indeks n, dla którego t[n] nie jest nil, a t[n + 1] jest. Prawidłowa sekwencja ma dokładnie jedną granicę, swoją długość. Wstaw nil w środek, a granic może być kilka i # może zwrócić dowolną z nich. Dlatego nigdy nie przechowuj nil w tablicy, którą mierzysz przez #, a w strukturach z lukami, takich jak kolejka z dwoma indeksami, śledź rozmiar samodzielnie.
Czy struktury danych mają znaczenie przy skryptach w Roblox?
Tak, gdy gra rozrośnie się ponad garstkę obiektów. Ekwipunek to tablica mieszająca, kolejność pojawiania się albo tur to kolejka, lista czasów odnowienia może być kolejką priorytetową, a znalezienie drogi przez mapę to przeszukiwanie grafu. Luau, język skryptów w Roblox, wywodzi się z Lua 5.1 i zachowuje jej tabele, tablice indeksowane od 1 i operator #, więc to, co tu budujesz, przenosi się wprost.
Które kursy z tej ścieżki nie są prowadzone w Lua?
Trzy: programowanie dynamiczne i seria rekrutacyjna w Pythonie, prowadzone w Pythonie, oraz operacje na bitach, prowadzone w C++. Są wymienione po krokach, każdy z linkiem, który otwiera go w jego własnym języku. Memoizacja w Lua to tabela. Operatory bitowe pojawiły się dopiero w Lua 5.3, która ma te same &, |, << i >> co C++, a zarówno XOR, jak i NOT zapisuje jako ~.
Czy muszę znać Lua, zanim zacznę tę ścieżkę?
Przynajmniej tabele, funkcje, pętle i zmienne lokalne. Metatabele pomagają, jeśli chcesz struktur zachowujących się jak obiekty. Jeśli to dla ciebie nowość, kurs Lua w Coddy omawia je najpierw, za darmo, a ta ścieżka zaczyna się tam, gdzie on się kończy.