fbpx
วิกิพีเดีย

ลูอา (ภาษาโปรแกรม)

ลูอา (/ˈlə/ loo; จากโปรตุเกส: lua [ˈlu.(w)ɐ] แปลว่า ดวงจันทร์) เป็นภาษาโปรแกรมระดับสูง น้ำหนักเบา หลายกระบวนทัศน์ ออกแบบมาสำหรับการฝังตัวในแอพพลิเคชัน ลูอาเป็นภาษาแบบข้ามแพลตฟอร์มเนื่องจากตัวแปลรหัสไบต์ที่คอมไพล์ถูกเขียนด้วย ANSI C และลูอามี C API ที่แบบง่ายสำหรับฝังลงในแอปพลิเคชัน

Lua
นามสกุลของไฟล์.lua
กระบวนทัศน์หลายกระบวนทัศน์: สคริปต์, เชิงคำสั่ง (procedural, prototype-based, เชิงวัตถุ), เชิงฟังก์ชัน
เริ่มเมื่อ1993; 28 ปีที่แล้ว (1993)
ออกแบบโดยRoberto Ierusalimschy
Waldemar Celes
Luiz Henrique de Figueiredo
รุ่นเสถียร5.4.2 (3 ธันวาคม 2020; 8 เดือนก่อน (2020-12-03))
ระบบชนิดตัวแปรDynamic, strong, duck
ตัวแปลภาษาหลักLua, LuaJIT, LuaVela
ภาษาย่อยMetalua, Idle, GSL Shell, Luau
ได้รับอิทธิพลจากC++, CLU, Modula, Scheme, SNOBOL
ส่งอิทธิพลต่อGameMonkey, Io, JavaScript, Julia, MiniD, Red, Ring, Ruby, Squirrel, MoonScript, C--
ภาษาโปรแกรมANSI C
ระบบปฏิบัติการข้ามแพลตฟอร์ม
สัญญาอนุญาตสัญญาอนุญาต MIT
เว็บไซต์www.lua.org

ลูอาได้รับการออกแบบในปี 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 

การควบคุมการไหล

ลูอามีการทำซ้ำอยู่สี่แบบ: while loop, repeat loop (คล้ายกับ do while loop), for 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 

ฟังก์ชัน

การที่ลูอาใช้ฟังก์ชันแบบค่า first-class แสดงให้เห็นในตัวอย่าง โดยที่ฟังก์ชัน print ถูกแก้ไข:

do local oldprint = print -- เก็บฟังก์ชั้น print ปัจจุบันเป็น oldprint function print(s) --[[ ตั้งฟังก์ชัน print ใหม่. print เดิมยังสามารถใช้งานได้ผ่าน oldprint   อันใหม่มีแค่ argument เดียว]] oldprint(s == "foo" and "bar" or s) end end 

การเรียกใช้ print ต่อจากนี้จะย้ายไปยังฟังก์ชันใหม่ และเพราะ lexical scoping ของลูอา ฟังก์ชัน 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

ยังมีการใช้งานที่ไม่ใช่เกมจำนวนมากที่ใช้ลูอาสำหรับการขยายเช่น LuaTeX ซึ่งมาจากภาษาเรียงพิมพ์ TeX, Redis, ฐานข้อมูลคีย์-ค่า, Neovim, โปรแกรมแก้ไขข้อความ และเว็บเซิร์ฟเวอร์ Nginx

ผ่านส่วนขยาย Scribunto ลูอายังใช้เป็นภาษาสคริปต์ฝั่งเซิร์ฟเวอร์ในซอฟต์แวร์มีเดียวิกิที่ใช้ที่ขับเคลื่อนวิกิพีเดียและวิกิอื่น ๆ ตัวอย่างการใช้งานเช่นเป็นตัวช่วยให้สามารถรวมข้อมูลจากวิกิสนเทศลงในบทความได้ และทำให้ใช้ระบบตารางจำแนกพันธุ์อัตโนมัติได้

อ้างอิง

  1. Ring Team (5 December 2017). "The Ring programming language and other languages". ring-lang.net. ring-lang.
  2. 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.
  3. "About Lua". Lua.org. สืบค้นเมื่อ 2011-08-11.
  4. Yuri Takhteyev (21 April 2013). "From Brazil to Wikipedia". Foreign Affairs. สืบค้นเมื่อ 25 April 2013.
  5. . Archived from the original on 20 August 2013. สืบค้นเมื่อ 2017-04-22.CS1 maint: BOT: original-url status unknown (link)
  6. . Archived from the original on 7 December 2003. สืบค้นเมื่อ 2017-04-22.CS1 maint: BOT: original-url status unknown (link)
  7. . Archived from the original on 15 June 2013. สืบค้นเมื่อ 2017-04-22.CS1 maint: BOT: original-url status unknown (link)
  8. "Extension:Scribunto - MediaWiki". MediaWiki.org. สืบค้นเมื่อ 21 February 2019.
  9. "Wikipedia:Lua". สืบค้นเมื่อ 2018-12-19.
  10. "Wikidata:Infobox Tutorial - Wikidata". www.wikidata.org. สืบค้นเมื่อ 2018-12-21.

อา, ภาษาโปรแกรม, อา, จากโปรต, เกส, ˈlu, แปลว, ดวงจ, นทร, เป, นภาษาโปรแกรมระด, บส, ำหน, กเบา, หลายกระบวนท, ศน, ออกแบบมาสำหร, บการฝ, งต, วในแอพพล, เคช, อาเป, นภาษาแบบข, ามแพลตฟอร, มเน, องจากต, วแปลรห, สไบต, คอมไพล, กเข, ยนด, วย, ansi, และล, อาม, แบบง, ายสำหร, บฝ. luxa ˈ l uː e loo e cakoprtueks lua ˈlu w ɐ aeplwa dwngcnthr epnphasaopraekrmradbsung nahnkeba hlaykrabwnthsn xxkaebbmasahrbkarfngtwinaexphphliekhchn 2 luxaepnphasaaebbkhamaephltfxrmenuxngcaktwaeplrhsibtthikhxmiphlthukekhiyndwy ANSI C 3 aelaluxami C API thiaebbngaysahrbfnglnginaexpphliekhchn 4 Luanamskulkhxngifl luakrabwnthsnhlaykrabwnthsn skhript echingkhasng procedural prototype based echingwtthu echingfngkchnerimemux1993 28 pithiaelw 1993 xxkaebbodyRoberto Ierusalimschy Waldemar Celes Luiz Henrique de Figueiredorunesthiyr5 4 2 3 thnwakhm 2020 8 eduxnkxn 2020 12 03 rabbchnidtwaeprDynamic strong ducktwaeplphasahlkLua LuaJIT LuaVelaphasayxyMetalua Idle GSL Shell LuauidrbxiththiphlcakC CLU Modula Scheme SNOBOLsngxiththiphltxGameMonkey Io JavaScript Julia MiniD Red Ring 1 Ruby Squirrel MoonScript C phasaopraekrmANSI Crabbptibtikarkhamaephltfxrmsyyaxnuyatsyyaxnuyat MITewbistwww wbr lua wbr orgluxaidrbkarxxkaebbinpi 1993 ephuxepnphasasahrbkarephimetimlnginaexphphliekhchnsxftaewrephuxtxbsnxngkhwamtxngkarsahrbkarprbaetngthiephimkhuninewlann misingxanwykhwamsadwkphunthankhxngphasaopraekrmswnihy aetimrwmkhunsmbtithisbsxnhruxechphaaodemn aetmiklikinkarkhyayphasathaihopraekrmemxrsamarthichkhunsmbtidngklawid enuxngcakluxatngicihepnphasaswnkhyaythifngidthwip nkxxkaebbkhxngluxacungmungennipthikarprbprungkhwamerw karphkpha khwamsamarthinkarkhyay aelakhwamsadwkinkarphthna enuxha 1 khunsmbti 1 1 iwyakrn 1 2 karkhwbkhumkarihl 1 3 fngkchn 1 4 tarang 2 karichngan 3 xangxingkhunsmbti aekikhiwyakrn aekikh opraekrmehlolewildsamarthekhiyniddngni print Hello World hrux print Hello World khaxthibayerimtndwysxngytiphngkh aelasinsudbnbrrthdnn sahrbkhaxthibayhlaybrrthdsamarthichwngelbkamputidknsxngtw fngkchnsahrbaefkthxeriylsamarthekhiyniddngni function factorial n local x 1 for i 2 n do x x i end return x end karkhwbkhumkarihl aekikh luxamikarthasaxyusiaebb while loop repeat loop khlaykb do while loop for loop 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 nilkarwnsayngsamarthichsxnthbknid 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 aekikh karthiluxaichfngkchnaebbkha first class 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 lexical scoping khxngluxa fngkchn print ekacasamarthekhathungidechphaafngkchn print ihmthithukaekikhaelwluxasnbsnunswnpidkhlum 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 tarang aekikh bthkhwamniyngepnokhrng khunsamarthchwywikiphiediyidodyephimkhxmulkarichngan aekikhdubthkhwamhlkthi raychuxaexphphliekhchnthiichluxa inkarphthnawidioxekm luxathukichxyangkwangkhwanginthanaphasaskhriptodyopraekrmemxrswnihy enuxngcakkhwamngayinkarfng kardaeninkarthirwderw aelachwngkareriynruthisn 5 inpi 2003 karsarwckhwamkhidehnkhxng GameDev net phbwaluxaepnphasaskhriptthiidrbkhwamniymmakthisudsahrbkarekhiynopraekrmekm 6 emuxwnthi 12 mkrakhm 2012 luxaidrbkarprakasihepnphuchnarangwl Front Line Award 2011 caknitysar Game Developer inhmwd Programming Tools 7 yngmikarichnganthiimichekmcanwnmakthiichluxasahrbkarkhyayechn LuaTeX sungmacakphasaeriyngphimph TeX Redis thankhxmulkhiy kha Neovim opraekrmaekikhkhxkhwam aelaewbesirfewxr Nginxphanswnkhyay Scribunto luxayngichepnphasaskhriptfngesirfewxrinsxftaewrmiediywikithiichthikhbekhluxnwikiphiediyaelawikixun 8 9 twxyangkarichnganechnepntwchwyihsamarthrwmkhxmulcakwikisnethslnginbthkhwamid 10 aelathaihichrabbtarangcaaenkphnthuxtonmtiidxangxing aekikh Ring Team 5 December 2017 The Ring programming language and other languages ring lang net ring lang 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 Foreign Affairs subkhnemux 25 April 2013 Why is Lua considered a game language Archived from the original on 20 August 2013 subkhnemux 2017 04 22 CS1 maint BOT original url status unknown link Poll Results Archived from the original on 7 December 2003 subkhnemux 2017 04 22 CS1 maint BOT original url status unknown link Front Line Award Winners Announced Archived from the original on 15 June 2013 subkhnemux 2017 04 22 CS1 maint BOT original url status unknown link 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 ekhathungcak https th wikipedia org w index php title luxa phasaopraekrm amp oldid 9268780, wikipedia, วิกิ หนังสือ, หนังสือ, ห้องสมุด,

บทความ

, อ่าน, ดาวน์โหลด, ฟรี, ดาวน์โหลดฟรี, mp3, วิดีโอ, mp4, 3gp, jpg, jpeg, gif, png, รูปภาพ, เพลง, เพลง, หนัง, หนังสือ, เกม, เกม