Èçäàòåëüñêèé äîì ÎÎÎ "Ãåéì Ëýíä"ÑÏÅÖÂÛÏÓÑÊ ÆÓÐÍÀËÀ ÕÀÊÅÐ #64, ÌÀÐÒ 2006 ã.

ðåöåïòû lua

ÀËÅÊÑÀÍÄÐ ÃËÀÄÛØ

Ñïåöâûïóñê: Õàêåð, íîìåð #064, ñòð. 064-042-5


îáðàáîòêà îøèáîê

Âàæíî ïîìíèòü, ÷òî ïðè íåáðåæíîì îòíîøåíèè ê îáðàáîòêå îøèáîê â Lua, ïîñëå âîçâðàòà îøèáêè èç lua_pcall(), ñêðèïòîâàÿ ñèñòåìà ìîæåò îêàçàòüñÿ â íåâàëèäíîì ñîñòîÿíèè.

Áåçîïàñíåå âñåãî (ïî êðàéíåé ìåðå, â ñòàäèè àêòèâíîé ðàçðàáîòêè) ïðåêðàùàòü âûïîëíåíèå ïðîãðàììû ïðè âîçíèêíîâåíèè îøèáîê â ñêðèïòå. Åñòåñòâåííî, ýòî íå îòíîñèòñÿ ê êîíñîëüíîìó èíòåðïðåòàòîðó, â êîòîðîì äëÿ êîìôîðòíîé ðàáîòû íóæíî îáåñïå÷èâàòü òîëåðàíòíîñòü ê âîçìîæíûì îøèáêàì è îïå÷àòêàì. Òåì íå ìåíåå æåëàòåëüíî ïðèíèìàòü ìåðû ê òîìó, ÷òîáû îøèáêè â êîäå, âûïîëíÿåìîì ñ êîíñîëè, íå ïðèâîäèëè ê íåÿâíîé «ïîð÷å» èãðîâîãî ìèðà.

? ÏÐÈ ÂÎÇÍÈÊÍÎÂÅÍÈÈ ÎØÈÁÊÈ Â ÔÓÍÊÖÈßÕ ÍÀ LUA ÂÌÅÑÒÎ ÂÛÇÎÂÀ ÁÈÁËÈÎÒÅ×ÍÎÉ ÔÓÍÊÖÈÈ ERROR() ÂÎÇÂÐÀÙÀÉ NIL È ÒÅÊÑÒ ÑÎÎÁÙÅÍÈß ÎÁ ÎØÈÁÊÅ.

? ÔÓÍÊÖÈÈ, ÊÎÒÎÐÛÅ ÌÎÃÓÒ ÂÛÇÂÀÒÜ ERROR(), ÂÛÇÛÂÀÉ (ÃÄÅ ÂÎÇÌÎÆÍÎ) ×ÅÐÅÇ ÁÈÁËÈÎÒÅ×ÍÓÞ ÔÓÍÊÖÈÞ PCALL(), ÄËß ×ÅÃÎ ËÓ×ØÅ ÈÑÏÎËÜÇÎÂÀÒÜ ÈÄÈÎÌÓ PROTECT, ÎÏÈÑÀÍÍÓÞ Â ÑÒÀÒÜÅ ÄÈÅÃÎ ÍÅÕÀÁÀ (DIEGO NEHAB) FINALIZED EXCEPTIONS (www.lua-users.org/wiki/FinalizedExceptions). ÒÀÊÆÅ ÏÎËÅÇÍÎ ÏÎËÜÇÎÂÀÒÜÑß ÈÄÈÎÌÎÉ NEWTRY (ÑÌ. ÒÓ ÆÅ ÑÒÀÒÜÞ).

? ÏÐÎÂÅÐßÉ ÏÅÐÅÄÀÍÍÛÅ ÔÓÍÊÖÈÈ ÏÀÐÀÌÅÒÐÛ ÍÀ NIL. ÅÑËÈ, ÍÀÏÐÈÌÅÐ, ÔÓÍÊÖÈß, ÎÁÚßÂËÅÍÍÀß Ñ ÒÐÅÌß ÏÀÐÀÌÅÒÐÀÌÈ, ÂÛÇÛÂÀÅÒÑß Ñ ÄÂÓÌß, ÒÎ ÒÐÅÒÜÅÌÓ ÏÀÐÀÌÅÒÐÓ ÁÓÄÅÒ ÏÐÈÑÂÎÅÍ NIL.

? ÅÑËÈ ÒÂÎß ÔÓÍÊÖÈß ÐÀÁÎÒÀÅÒ Ñ ÃËÎÁÀËÜÍÛÌÈ ÄÀÍÍÛÌÈ, ÎÑÎÁÅÍÍÎ Ñ ÎÏÈÑÀÍÈßÌÈ ÓÐÎÂÍÅÉ, ÒÅÊÑÒÀÌÈ ÄÈÀËÎÃÎÂ È Ò.Ï., ÏÎ ÂÎÇÌÎÆÍÎÑÒÈ ÏÐÎÂÅÐßÉ ÝÒÈ ÄÀÍÍÛÅ ÍÀ NIL.

? Î×ÅÍÜ ×ÀÑÒÎ ÎØÈÁÊÈ ÂÎÇÍÈÊÀÞÒ ÈÇ-ÇÀ ÒÎÃÎ, ×ÒÎ ÏÐÎÃÐÀÌÌÈÑÒ ÇÀÁÛË ÍÀÏÈÑÀÒÜ ÊËÞ×ÅÂÎÅ ÑËÎÂÎ LOCAL ÏÅÐÅÄ ÏÅÐÂÛÌ ÏÐÈÑÂÀÈÂÀÍÈÅÌ ËÎÊÀËÜÍÎÉ ÏÅÐÅÌÅÍÍÎÉ È ÇÀÒÅÐ ÒÀÊÈÌ ÎÁÐÀÇÎÌ ÃËÎÁÀËÜÍÓÞ. ÑËÅÄÈ ÇÀ ÎÁËÀÑÒÜÞ ÂÈÄÈÌÎÑÒÈ ÒÂÎÈÕ ÏÅÐÅÌÅÍÍÛÕ.  ÍÀÇÂÀÍÈßÕ ÃËÎÁÀËÜÍÛÕ ÏÅÐÅÌÅÍÍÛÕ ÈÑÏÎËÜÇÓÉ ÓÍÈÊÀËÜÍÛÉ ÏÐÅÔÈÊÑ, ÍÀÏÐÈÌÅÐ G_. ÏÐÈÌÅÍßÉ ÈÍÑÒÐÓÌÅÍÒÛ ÒÈÏÀ LUA LINT ÄËß ÏÐÎÂÅÐÊÈ ÈÑÏÎËÜÇÎÂÀÍÈß ÃËÎÁÀËÜÍÛÕ ÏÅÐÅÌÅÍÍÛÕ.  ÄÈÑÒÐÈÁÓÒÈ LUA 5.1 ÂÕÎÄÈÒ ÏÐÈÌÅÐ ÍÀ LUA, ÊÎÒÎÐÛÉ ÍÀÑÒÐÀÈÂÀÅÒ ÌÅÒÀÒÀÁËÈÖÓ ÒÀÁËÈÖÛ, ÑÎÄÅÐÆÀÙÅÉ ÃËÎÁÀËÜÍÛÅ ÏÅÐÅÌÅÍÍÛÅ (“_G”), ÒÀÊÈÌ ÎÁÐÀÇÎÌ, ×ÒÎ ÏÐÈ ÄÎÁÀÂËÅÍÈÈ ÈËÈ ×ÒÅÍÈÈ ÍÅÇÀÐÅÃÈÑÒÐÈÐÎÂÀÍÍÛÕ ÃËÎÁÀËÜÍÛÕ ÏÅÐÅÌÅÍÍÛÕ ÂÎ ÂÐÅÌß ÂÛÏÎËÍÅÍÈß ÑÊÐÈÏÒÀ ÂÛÄÀÅÒÑß ÑÎÎÁÙÅÍÈÅ ÎÁ ÎØÈÁÊÅ.

? ÑÒÀÐÀÉÑß ÌÈÍÈÌÈÇÈÐÎÂÀÒÜ ÈÑÏÎËÜÇÎÂÀÍÈÅ ÃËÎÁÀËÜÍÛÕ ÏÅÐÅÌÅÍÍÛÕ. ÑÎÁËÞÄÀÉ ÌÎÄÓËÜÍÎÑÒÜ ÊÎÄÀ. Ñ×ÈÒÀÅÒÑß ÕÎÐÎØÈÌ ÒÎÍÎÌ, ÅÑËÈ ÎÄÈÍ ÌÎÄÓËÜ ÑÎÇÄÀÅÒ ÒÎËÜÊÎ ÎÄÍÓ ÃËÎÁÀËÜÍÓÞ ÏÅÐÅÌÅÍÍÓÞ. ÏÎÄÐÎÁÍÅÅ Î ÏÎÄÕÎÄÀÕ Ê ÎÐÃÀÍÈÇÀÖÈÈ ÌÎÄÓËÅÉ Â LUA ÌÎÆÍÎ ÏÐÎ×ÈÒÀÒÜ Â LUA TECHNICAL NOTE 7: MODULES & PACKAGES ÐÎÁÅÐÒÎ ÈÅÐÓÑÀËÈÌÑÊÎÃÎ (www.lua.org/notes/ltn007.html).

? ÈÇÁÅÃÀÉ ÑÎÇÄÀÂÀÒÜ ÍÀ ÑÊÐÈÏÒÎÂÎÌ ßÇÛÊÅ ÑËÈØÊÎÌ ÑËÎÆÍÛÅ ÑÈÑÒÅÌÛ. ÄÈÍÀÌÈ×ÅÑÊÀß ÒÈÏÈÇÀÖÈß È ÏÐÎ×ÈÅ ÎÑÎÁÅÍÍÎÑÒÈ, ÏÐÈ ÂÑÅÌ ÑÂÎÅÌ ÓÄÎÁÑÒÂÅ, ÏËÎÕÎ ÂËÈßÞÒ ÍÀ ÑÒÀÁÈËÜÍÎÑÒÜ, ÍÀÄÅÆÍÎÑÒÜ È ÏÐÎÈÇÂÎÄÈÒÅËÜÍÎÑÒÜ ÊÎÄÀ. ÑÊÐÈÏÒÎÂÛÅ ßÇÛÊÈ ÂÎÎÁÙÅ È LUA  ×ÀÑÒÍÎÑÒÈ ÕÎÐÎØÈ ÄËß «ÑÊËÅÉÊÈ» È ÍÀÑÒÐÎÉÊÈ ÔÓÍÊÖÈÎÍÀËÜÍÎÑÒÈ ÈÃÐÎÂÎÃÎ ÄÂÈÆÊÀ. ÅÑËÈ ÒÛ ÂÈÄÈØÜ, ×ÒÎ ÊÀÊÎÉ-ÒÎ ÌÎÄÓËÜ ÍÀ LUA ÑÒÀÍÎÂÈÒÑß ÑËÈØÊÎÌ ÑËÎÆÍÛÌ, ÏÎÑÒÀÐÀÉÑß ÏÅÐÅÍÅÑÒÈ ÅÃÎ ÔÓÍÊÖÈÎÍÀËÜÍÎÑÒÜ ÍÀ C++, ÎÑÒÀÂÈ LUA ÒÎËÜÊÎ ÂÛÑÎÊÎÓÐÎÂÍÅÂÎÅ ÓÏÐÀÂËÅÍÈÅ ÝÒÈÌ ÌÎÄÓËÅÌ.

Íàçàä íà ñòð. 064-042-4  Ñîäåðæàíèå  Âïåðåä íà ñòð. 064-042-6