ลูอา (/ˈluːə/ loo-ə; จากโปรตุเกส: lua [ˈlu.(w)ɐ] แปลว่า ดวงจันทร์) เป็นภาษาโปรแกรมระดับสูง น้ำหนักเบา หลายกระบวนทัศน์ ออกแบบมาสำหรับการฝังตัวในแอพพลิเคชัน ลูอาเป็นภาษาแบบข้ามแพลตฟอร์มเนื่องจากตัวแปลรหัสไบต์ที่คอมไพล์ถูกเขียนด้วย และลูอามี C API ที่แบบง่ายสำหรับฝังลงในแอปพลิเคชัน
กระบวนทัศน์ | หลายกระบวนทัศน์: สคริปต์, เชิงคำสั่ง (, prototype-based, เชิงวัตถุ), เชิงฟังก์ชัน |
---|---|
Waldemar Celes Luiz Henrique de Figueiredo | |
เริ่มเมื่อ | 1993 |
รุ่นเสถียร | 5.4.2 / 3 ธันวาคม 2020 |
ระบบชนิดตัวแปร | , , |
ภาษาโปรแกรม | |
ระบบปฏิบัติการ | ข้ามแพลตฟอร์ม |
สัญญาอนุญาต | สัญญาอนุญาต MIT |
นามสกุลของไฟล์ | .lua |
เว็บไซต์ | www |
Lua, LuaJIT, LuaVela | |
ภาษาย่อย | |
Metalua, Idle, GSL Shell, Luau | |
ได้รับอิทธิพลจาก | |
, , , , | |
ส่งอิทธิพลต่อ | |
, , JavaScript, , MiniD, , Ring,Ruby, , MoonScript, |
ลูอาได้รับการออกแบบในปี 1993 เพื่อเป็นภาษาสำหรับการเพิ่มเติมลงในแอพพลิเคชั่นซอฟต์แวร์เพื่อตอบสนองความต้องการสำหรับการปรับแต่งที่เพิ่มขึ้นในเวลานั้น มีสิ่งอำนวยความสะดวกพื้นฐานของภาษาโปรแกรมส่วนใหญ่ แต่ไม่รวมคุณสมบัติที่ซับซ้อนหรือเฉพาะโดเมน แต่มีกลไกในการขยายภาษาทำให้โปรแกรมเมอร์สามารถใช้คุณสมบัติดังกล่าวได้ เนื่องจากลูอาตั้งใจให้เป็นภาษาส่วนขยายที่ฝังได้ทั่วไป นักออกแบบของลูอาจึงมุ่งเน้นไปที่การปรับปรุงความเร็ว การพกพา ความสามารถในการขยาย และความสะดวกในการพัฒนา
คุณสมบัติ
ไวยากรณ์
โปรแกรมเฮลโลเวิลด์สามารถเขียนได้ดังนี้
print("Hello World!")
หรือ:
print 'Hello World!'
เริ่มต้นด้วยสองยัติภังค์ (--
) และสิ้นสุดบนบรรทัดนั้น สำหรับคำอธิบายหลายบรรทัดสามารถใช้ติดกันสองตัว (--[[ ]]--
)
ฟังก์ชันสำหรับแฟกทอเรียลสามารถเขียนได้ดังนี้
function factorial(n) local x = 1 for i = 2, n do x = x * i end return x end
การควบคุมการไหล
ลูอามีการอยู่สี่แบบ: , repeat
loop (คล้ายกับ ), แบบตัวเลข และ for
loop ทั่วไป
--condition = true while condition do --statements end repeat --statements until condition for i = first, last, delta do --delta may be negative, allowing the for loop to count down or up --statements --example: print(i) end
for
loop แบบทั่วไป:
for key, value in pairs(_G) do print(key, value) end
จะวนซ้ำบนตาราง _G
โดยใช้ฟังก์ชันมาตรฐาน pairs
วนซ้ำจนกว่าจะคืนค่า nil
การวนซ้ำยังสามารถใช้ซ้อนทับกันได้
local grid = { { 11, 12, 13 }, { 21, 22, 23 }, { 31, 32, 33 } } for y, row in ipairs(grid) do for x, value in ipairs(row) do print(x, y, grid[y][x]) end end
ฟังก์ชัน
การที่ลูอาใช้ฟังก์ชันแบบค่า แสดงให้เห็นในตัวอย่าง โดยที่ฟังก์ชัน print ถูกแก้ไข:
do local oldprint = print -- เก็บฟังก์ชั้น print ปัจจุบันเป็น oldprint function print(s) --[[ ตั้งฟังก์ชัน print ใหม่. print เดิมยังสามารถใช้งานได้ผ่าน oldprint อันใหม่มีแค่ argument เดียว]] oldprint(s == "foo" and "bar" or s) end end
การเรียกใช้ print
ต่อจากนี้จะย้ายไปยังฟังก์ชันใหม่ และเพราะ ของลูอา ฟังก์ชัน print เก่าจะสามารถเข้าถึงได้เฉพาะฟังก์ชัน print ใหม่ที่ถูกแก้ไขแล้ว
ลูอาสนับสนุนส่วนปิดคลุม ดังตัวอย่างข้างล่าง:
function addto(x) -- ให้ฟังก์ชันใหม่ที่เพิ่ม x ลงใน argument คืน return function(y) --[=[ เมื่อเรียกใช้ตัวแปร x ซึ่งอยู่ข้างนอก scope ปัจจุบันและมีอายุน้อยกว่าฟังก์ชันนี้ ลูอาจะสร้างส่วนปิดคลุม]=] return x + y end end fourplus = addto(4) print(fourplus(3)) -- แสดงผล 7 --นอกจากนั้นยังเรียกใช้ตามนี้ได้: print(addto(4)(3)) --[[ เพราะว่าเราเรียกฟังก์ชันที่ส่งกลับมาจาก ด้วย argument 4 โดยตรง สิ่งนี้ช่วยลดราคาข้อมูลและประสิทธิภาพจากถูกเรียกซ้ำ ๆ ]]
ส่วนปิดคลุมสำหรับตัวแปร x
สร้างขึ้นทุกครั้งที่ addto
ถูกเรียก นั่นทำให้ฟังก์ชันใหม่ที่ถูกคินค่าจะเข้าถึง parameter x
ของตัวเองเสมอ ส่วนปิดคลุมควบคุมด้วยที่เก็บขยะของลูอาคล้ายกับวัตถุอื่น ๆ
ตาราง
การใช้งาน
ในการพัฒนาวิดีโอเกม ลูอาถูกใช้อย่างกว้างขวางในฐานะภาษาสคริปต์โดยโปรแกรมเมอร์ส่วนใหญ่ เนื่องจากความง่ายในการฝัง การดำเนินการที่รวดเร็ว และช่วงการเรียนรู้ที่สั้น
ในปี 2003 การสำรวจความคิดเห็นของ GameDev.net พบว่าลูอาเป็นภาษาสคริปต์ที่ได้รับความนิยมมากที่สุดสำหรับการเขียนโปรแกรมเกม เมื่อวันที่ 12 มกราคม 2012 ลูอาได้รับการประกาศให้เป็นผู้ชนะรางวัล Front Line Award 2011 จากนิตยสาร Game Developer ในหมวด Programming Tools
ยังมีการใช้งานที่ไม่ใช่เกมจำนวนมากที่ใช้ลูอาสำหรับการขยายเช่น ซึ่งมาจากภาษาเรียงพิมพ์ , , , , โปรแกรมแก้ไขข้อความ และเว็บเซิร์ฟเวอร์
ผ่านส่วนขยาย Scribunto ลูอายังใช้เป็นภาษาสคริปต์ฝั่งเซิร์ฟเวอร์ในซอฟต์แวร์มีเดียวิกิที่ใช้ที่ขับเคลื่อนวิกิพีเดียและวิกิอื่น ๆ ตัวอย่างการใช้งานเช่นเป็นตัวช่วยให้สามารถรวมข้อมูลจากวิกิสนเทศลงในบทความได้ และทำให้ใช้ระบบตารางจำแนกพันธุ์อัตโนมัติได้
อ้างอิง
- Ring Team (5 December 2017). . ring-lang.net. . คลังข้อมูลเก่าเก็บจากแหล่งเดิมเมื่อ 2018-12-25. สืบค้นเมื่อ 2021-01-18.
- Ierusalimschy, Roberto; de Figueiredo, Luiz Henrique; Filho, Waldemar Celes (June 1996). "Lua—An Extensible Extension Language". Software: Practice and Experience. 26 (6): 635–652. doi:10.1002/(SICI)1097-024X(199606)26:6<635::AID-SPE26>3.0.CO;2-P. สืบค้นเมื่อ 24 October 2015.
- "About Lua". Lua.org. สืบค้นเมื่อ 2011-08-11.
- Yuri Takhteyev (21 April 2013). "From Brazil to Wikipedia". . สืบค้นเมื่อ 25 April 2013.
- . คลังข้อมูลเก่าเก็บจากแหล่งเดิมเมื่อ 20 August 2013. สืบค้นเมื่อ 2017-04-22.
{{}}
: CS1 maint: bot: original URL status unknown () - . คลังข้อมูลเก่าเก็บจากแหล่งเดิมเมื่อ 7 December 2003. สืบค้นเมื่อ 2017-04-22.
{{}}
: CS1 maint: bot: original URL status unknown () - . คลังข้อมูลเก่าเก็บจากแหล่งเดิมเมื่อ 15 June 2013. สืบค้นเมื่อ 2017-04-22.
{{}}
: CS1 maint: bot: original URL status unknown () - "Extension:Scribunto - MediaWiki". MediaWiki.org. สืบค้นเมื่อ 21 February 2019.
- "Wikipedia:Lua". สืบค้นเมื่อ 2018-12-19.
- "Wikidata:Infobox Tutorial - Wikidata". www.wikidata.org. สืบค้นเมื่อ 2018-12-21.
wikipedia, แบบไทย, วิกิพีเดีย, วิกิ หนังสือ, หนังสือ, ห้องสมุด, บทความ, อ่าน, ดาวน์โหลด, ฟรี, ดาวน์โหลดฟรี, mp3, วิดีโอ, mp4, 3gp, jpg, jpeg, gif, png, รูปภาพ, เพลง, เพลง, หนัง, หนังสือ, เกม, เกม, มือถือ, โทรศัพท์, Android, iOS, Apple, โทรศัพท์โมบิล, Samsung, iPhone, Xiomi, Xiaomi, Redmi, Honor, Oppo, Nokia, Sonya, MI, PC, พีซี, web, เว็บ, คอมพิวเตอร์
luxa ˈ l uː e loo e cakoprtueks lua ˈlu w ɐ aeplwa dwngcnthr epnphasaopraekrmradbsung nahnkeba hlaykrabwnthsn xxkaebbmasahrbkarfngtwinaexphphliekhchn luxaepnphasaaebbkhamaephltfxrmenuxngcaktwaeplrhsibtthikhxmiphlthukekhiyndwy aelaluxami C API thiaebbngaysahrbfnglnginaexpphliekhchnLuakrabwnthsnhlaykrabwnthsn skhript echingkhasng prototype based echingwtthu echingfngkchnWaldemar Celes Luiz Henrique de Figueiredoerimemux1993 31 pithiaelw 1993 runesthiyr5 4 2 3 thnwakhm 2020 3 pikxn 2020 12 03 rabbchnidtwaepr phasaopraekrmrabbptibtikarkhamaephltfxrmsyyaxnuyatsyyaxnuyat MITnamskulkhxngifl luaewbistwww wbr lua wbr orgLua LuaJIT LuaVelaphasayxyMetalua Idle GSL Shell LuauidrbxiththiphlcakC sngxiththiphltx JavaScript MiniD Ring Ruby MoonScript luxaidrbkarxxkaebbinpi 1993 ephuxepnphasasahrbkarephimetimlnginaexphphliekhchnsxftaewrephuxtxbsnxngkhwamtxngkarsahrbkarprbaetngthiephimkhuninewlann misingxanwykhwamsadwkphunthankhxngphasaopraekrmswnihy aetimrwmkhunsmbtithisbsxnhruxechphaaodemn aetmiklikinkarkhyayphasathaihopraekrmemxrsamarthichkhunsmbtidngklawid enuxngcakluxatngicihepnphasaswnkhyaythifngidthwip nkxxkaebbkhxngluxacungmungennipthikarprbprungkhwamerw karphkpha khwamsamarthinkarkhyay aelakhwamsadwkinkarphthnakhunsmbtiiwyakrn opraekrmehlolewildsamarthekhiyniddngni print Hello World hrux print Hello World erimtndwysxngytiphngkh aelasinsudbnbrrthdnn sahrbkhaxthibayhlaybrrthdsamarthichtidknsxngtw fngkchnsahrbaefkthxeriylsamarthekhiyniddngni function factorial n local x 1 for i 2 n do x x i end return x end karkhwbkhumkarihl luxamikarxyusiaebb repeat loop khlaykb aebbtwelkh aela for loop thwip condition true while condition do statements end repeat statements until condition for i first last delta do delta may be negative allowing the for loop to count down or up statements example print i end for loop aebbthwip for key value in pairs G do print key value end cawnsabntarang G odyichfngkchnmatrthan pairs wnsacnkwacakhunkha nil karwnsayngsamarthichsxnthbknid local grid 11 12 13 21 22 23 31 32 33 for y row in ipairs grid do for x value in ipairs row do print x y grid y x end end fngkchn karthiluxaichfngkchnaebbkha aesdngihehnintwxyang odythifngkchn print thukaekikh do local oldprint print ekbfngkchn print pccubnepn oldprint function print s tngfngkchn print ihm print edimyngsamarthichnganidphan oldprint xnihmmiaekh argument ediyw oldprint s foo and bar or s end end kareriykich print txcaknicayayipyngfngkchnihm aelaephraa khxngluxa fngkchn print ekacasamarthekhathungidechphaafngkchn print ihmthithukaekikhaelw luxasnbsnunswnpidkhlum dngtwxyangkhanglang function addto x ihfngkchnihmthiephim x lngin argument khun return function y emuxeriykichtwaepr x sungxyukhangnxk scope pccubnaelamixayunxykwafngkchnni luxacasrangswnpidkhlum return x y end end fourplus addto 4 print fourplus 3 aesdngphl 7 nxkcaknnyngeriykichtamniid print addto 4 3 ephraawaeraeriykfngkchnthisngklbmacak dwy argument 4 odytrng singnichwyldrakhakhxmulaelaprasiththiphaphcakthukeriyksa swnpidkhlumsahrbtwaepr x srangkhunthukkhrngthi addto thukeriyk nnthaihfngkchnihmthithukkhinkhacaekhathung parameter x khxngtwexngesmx swnpidkhlumkhwbkhumdwythiekbkhyakhxngluxakhlaykbwtthuxun tarangkarichnganinkarphthnawidioxekm luxathukichxyangkwangkhwanginthanaphasaskhriptodyopraekrmemxrswnihy enuxngcakkhwamngayinkarfng kardaeninkarthirwderw aelachwngkareriynruthisn inpi 2003 karsarwckhwamkhidehnkhxng GameDev net phbwaluxaepnphasaskhriptthiidrbkhwamniymmakthisudsahrbkarekhiynopraekrmekm emuxwnthi 12 mkrakhm 2012 luxaidrbkarprakasihepnphuchnarangwl Front Line Award 2011 caknitysar Game Developer inhmwd Programming Tools yngmikarichnganthiimichekmcanwnmakthiichluxasahrbkarkhyayechn sungmacakphasaeriyngphimph opraekrmaekikhkhxkhwam aelaewbesirfewxr phanswnkhyay Scribunto luxayngichepnphasaskhriptfngesirfewxrinsxftaewrmiediywikithiichthikhbekhluxnwikiphiediyaelawikixun twxyangkarichnganechnepntwchwyihsamarthrwmkhxmulcakwikisnethslnginbthkhwamid aelathaihichrabbtarangcaaenkphnthuxtonmtiidxangxingRing Team 5 December 2017 ring lang net khlngkhxmulekaekbcakaehlngedimemux 2018 12 25 subkhnemux 2021 01 18 Ierusalimschy Roberto de Figueiredo Luiz Henrique Filho Waldemar Celes June 1996 Lua An Extensible Extension Language Software Practice and Experience 26 6 635 652 doi 10 1002 SICI 1097 024X 199606 26 6 lt 635 AID SPE26 gt 3 0 CO 2 P subkhnemux 24 October 2015 About Lua Lua org subkhnemux 2011 08 11 Yuri Takhteyev 21 April 2013 From Brazil to Wikipedia subkhnemux 25 April 2013 khlngkhxmulekaekbcakaehlngedimemux 20 August 2013 subkhnemux 2017 04 22 a href wiki E0 B9 81 E0 B8 A1 E0 B9 88 E0 B9 81 E0 B8 9A E0 B8 9A Cite web title aemaebb Cite web cite web a CS1 maint bot original URL status unknown lingk khlngkhxmulekaekbcakaehlngedimemux 7 December 2003 subkhnemux 2017 04 22 a href wiki E0 B9 81 E0 B8 A1 E0 B9 88 E0 B9 81 E0 B8 9A E0 B8 9A Cite web title aemaebb Cite web cite web a CS1 maint bot original URL status unknown lingk khlngkhxmulekaekbcakaehlngedimemux 15 June 2013 subkhnemux 2017 04 22 a href wiki E0 B9 81 E0 B8 A1 E0 B9 88 E0 B9 81 E0 B8 9A E0 B8 9A Cite web title aemaebb Cite web cite web a CS1 maint bot original URL status unknown lingk Extension Scribunto MediaWiki MediaWiki org subkhnemux 21 February 2019 Wikipedia Lua subkhnemux 2018 12 19 Wikidata Infobox Tutorial Wikidata www wikidata org subkhnemux 2018 12 21