✨Lua

Lua

Lua là một ngôn ngữ lập trình thông dịch với đặc điểm nhỏ gọn, đa nền tảng. Lua được phát triển từ C và hệ thống các API theo hướng đơn giản hóa.

Lịch sử

Lua được nhóm chuyên viên khoa học máy tính gồm Roberto Ierusalimschy, Waldermar Celes, L.H. Figueiredo, tại đại học PUC-RIO, Brasil phát triển vào năm 1993. Phát sinh từ nhu cầu có một ngôn ngữ thích hợp để viết những tập tin cấu hình cho các phần mềm chuyên dụng trong ngành dầu khí, các tác giả đã xem xét ngôn ngữ hiện dùng lúc bấy giờ là SOL (Simple Object Language - ngôn ngữ đối tượng đơn giản), để tạo ra một ngôn ngữ có tính năng diễn đạt tốt hơn. Ngôn ngữ này được đặt tên là Lua, có nghĩa là Mặt Trăng theo tiếng Bồ Đào Nha (SOL có nghĩa là Mặt trời).

Tính năng

Lua có một số ưu điểm nổi bật sau:

  • Dễ đọc, dễ học.
  • Nhỏ gọn: Toàn bộ phần mềm thông dịch Lua cùng mã nguồn, tài liệu hướng dẫn và các ví dụ chỉ gói gọn trong dung lượng 860 KB (phiên bản 5.1.4, không nén).
  • Nhanh: Tốc độ của Lua thuộc vào loại nhanh nhất trong số các ngôn ngữ thông dịch.
  • Kết hợp tốt với các ngôn ngữ khác, chẳng hạn C.
  • Đa nền tảng: Chạy trên Windows, Unix, Linux, Mac OS X cùng nhiều hệ điều hành khác.
  • Thư viện chương trình có một số tính năng tốt: xử lý chuỗi, coroutine.
  • Là một trong những ngôn ngữ đang phát triển mạnh

Đặc điểm kĩ thuật

Lua là ngôn ngữ kiểu động. Các biến được sử dụng mà không cần khai báo trước. Biến trong Lua được mặc định là biến toàn cục (global).

Lua là ngôn ngữ theo thiên hướng lập trình thủ tục. Tuy nhiên trong Lua hàm được coi là kiểu biến cơ bản (first-class variable), giống như lập trình hàm. Ngoài ra Lua còn có một cách khéo léo mô phỏng lập trình hướng đối tượng.

Lua có cấu trúc dữ liệu rất gọn. Chỉ một kiểu số duy nhất (không phân biệt số nguyên, số thực). Kiểu dữ liệu phức hợp gồm một dạng là table, tức là hash-table, associative array hoặc dictionary theo các cách gọi khác nhau.

Từ một kiểu dữ liệu table có thể sử dụng linh hoạt để biểu diễn các kiểu dữ liệu khác. Thật vậy, nếu như kiểu table có dạng tổng quát là {khóa1: giá_trị1, khóa2: giá_trị2,... } thì khi đặt khóa1, khóa2 bằng các số tự nhiên thì ta có kiểu mảng một chiều (kiểu dãy). Ngoài ra, với việc sử dụng metatable ta có thể hình thành các phương thức bằng việc đưa tên hàm vào đóng vai trò của các khóa.

Cú pháp

Các bó lệnh (chunk)

Mặc dù các câu lệnh nên được viết riêng rẽ trên từng dòng, nhưng thực ra Lua có khái niệm bó câu lệnh theo đó có thể viết nhiều câu lệnh trên cùng một dòng, và không nhất thiết có dấu phân cách (; hoặc ,).

-- đây là dòng chú thích a = 1 b = 2; c = 3 -- phân cách bằng; d = 4, e = 5 -- phân cách bằng, f = 6 g = 7 -- cũng hợp lệ!

Cấu trúc

Các cấu trúc như rẽ nhánh, lặp đều được kết thúc bằng từ khóa dùng chung là end.

for i = 1,10 do s = s + i -- không cần khởi tạo s, mặc định s bằng 0 end

repeat s = s - 1 until s < -10

function gttd(x) if x > 0 then return(x) else return(-x) end end

Hàm

Các hàm trong Lua được gọi với cặp ngoặc () truyền thống.

print(2+3) print("Hello World")

Ngoài ra còn có cú pháp đặc biệt cho phép bỏ cặp ngoặc đơn trong trường hợp tham số có dạng chuỗi hoặc table:

print "Hello World"

Hàm là kiểu dữ liệu cơ bản và có thể gán vào các biến:

gttd = math.abs print(gttd(-5.7))

Phương thức

Khi gọi một phương thức có thể sử dụng theo cách truyền thống với dấu chấm hoặc dùng dấu hai chấm. Trong trường hợp thứ hai thì ta lược bỏ đối tượng gọi phương thức trong danh sách tham số:

aFile = io.open("tenfile", "r") -- đọc file sử dụng phương thức open -- với read là một phương thức của đối tượng aFile trong lớp io a = io.read(aFile, "*n") -- đọc số a từ file aFile a = aFile:read("*n") -- cách 2

Kiểu table

tuoi = {Britney=27, Andy=26} -- một kiểu datatable print(tuoi["Britney"], tuoi["Andy"]) print(tuoi.Britney, tuoi.Andy) -- syntactic sugar

-- dãy số chính phương day = {[1] = 1, [2] = 4} -- tương đương với dòng lệnh dưới... day = {1, 4} -- tự động gán các khóa là số nguyên day[3] = 9 for i = 4,10 do day[i] = i * i end

print(day) -- mã hiệu của table day print(unpack(day)) -- các phần tử trong table day

  • Tạo các key trong table rất đơn giản
  • Thay đổi cấu trúc và chỉ mục của table đã được tạo trước.
  • Có thể sử dụng table như 1 mảng
  • Sử dụng vòng lặp trong table
  • Viết chương trình hướng đối tượng với table.
  • Xây dựng những cấu trúc dữ liệu từ table.
  • Những phương thức được định nghĩa sẵn trên table:

o Table.insert: thêm một phần tử vào table Ví dụ:

T = {} table.insert(T, "a") table.insert(T, "b") table.insert(T, "c") print(CommaSeparate(T))

a, b, c

o Table.sort: sắp xếp các phần tử trong 1 table Ví dụ sử dụng chức năng sort:

Names = {"Scarlatti", "Telemann", "Corelli", "Purcell", "Vivaldi", "Handel", "Bach"} table.sort(Names) for I, Name in ipairs(Names) do print(I, Name) end
Trích:          

1 Bach 2 Corelli 3 Handel 4 Purcell 5 Scarlatti 6 Telemann 7 Vivaldi

o Table.concat: nối các phần tử trong table thành một chuỗi. Ví dụ:

print(table.concat({"a", "bc", "d"}))

Abcd

o Table.remove: Loại bỏ một phần tử trong table. Ví dụ: T = {} table.insert(T, "a") table.insert(T, "b") table.insert(T, "c") print(CommaSeparate(T)) a, b, c print(table.remove(T)) c print(CommaSeparate(T)) a, b print(table.remove(T)) b print(CommaSeparate(T)) a print(table.remove(T)) a

-- T giờ sẽ rỗng: print(#T)

o Table.maxn: tìm trên mỗi cặp key – value trong một table và trả về key tương ứng với value lớn nhất hoặc trả về 0 nếu value không phải là số dương. Ví dụ: print(table.maxn({"a", nil, nil, "c"})) 4 print(table.maxn({[1.5] = true})) 1.5 print(table.maxn({[ì1.5î] = true})) 0

Phát triển

Lua hiện có một hướng phát triển trên cơ sở mở rộng tính năng của các hệ thống sẵn có:

  • Plua: Lua dành cho các máy Palm.
  • LuaTeX: cấu hình hệ thống LaTeX bằng ngôn ngữ Lua.

Các ứng dụng

Lua được dùng rộng rãi trong công nghệ game. Một số trò chơi có thể kể đến: World of Warcraft III, Heroes of Might and Magic V, Warhammer Online, Angry Birds, Roblox. Lua thường giữ vai trò cấu hình các file thông số, hoặc lập trình trí tuệ nhân tạo trong các game.

Ngoài lĩnh vực trò chơi, một số các phần mềm khác cũng sử dụng Lua, như Adobe Lightroom. Hệ điều hành Damn Small Linux cũng tận dụng ưu điểm nhỏ gọn của Lua.

Indigorose sử dụng ngôn ngữ lập trình Lua là ngôn ngữ chính cho Autoplay Media Studio dùng để viết phần mềm trên hệ điều hành Windows.

👁️ 2 | 🔗 | 💖 | ✨ | 🌍 | ⌚
Tên lửa **R-36** () là một họ tên lửa đạn đạo liên lục địa và tên lửa đẩy (Tsyklon) được thiết kế bởi Phòng thiết kế Yuzhnoye, Liên Xô trong thời kỳ Chiến tranh Lạnh.
nhỏ|phải|Một con lừa hoang, trong một khía cạnh văn hóa, chúng biểu tượng cho sự bướng bỉnh, khó bảo **Hình tượng con lừa** được đề cập đến trong văn hóa, tôn giáo, biếm họa và
nhỏ|Núi lửa [[Sabancaya, Peru năm 2017]] nhỏ|Dãy núi lửa [[Cordillera de Apaneca tại El Salvador. Quốc gia này có 170 núi lửa, 23 đang hoạt động, gồm hai hõm chảo, một trong hai là siêu
thumb|upright=1.35| – chiếc dẫn đầu của lớp tàu ngầm SSBN đầu tiên của [[Hải quân Hoa Kỳ. _George Washington_ cũng là tàu ngầm chạy bằng năng lượng hạt nhân đầu tiên có khả năng răn
phải|nhỏ|So sánh các cấu hình tên lửa, tháng 4 năm 1962, từ trái sang phải là tên lửa Saturn I, Saturn V và "Nova C8". (Mỗi cấu hình đều bao gồm một tầng đẩy bổ
nhỏ|phải|Tên lửa Redstone của [[chương trình Mercury]] alt=|thumb|Tên lửa [[Soyuz TMA-9 được phóng đi ở trung tâm vũ trụ Baykonur, Site 1/5 ở Kazakhstan]] Mô hình tên lửa **Tên lửa** hay **hỏa tiễn** là một
**Lừa đảo tài chính quốc tế** là hình thức lừa đảo nhằm chiếm dụng khoản tiền của nạn nhân. Hình thức cụ thể của lừa đảo tài chính quốc tế thường là "lừa đảo lệ
nhỏ|_[[Triticum aestivum_]] nhỏ|phải|Lúa mì **Lúa mì** hay **tiểu mạch**, tên khoa học: **_Triticum_** spp. là cây lương thực, thuộc một nhóm các loài cỏ đã thuần dưỡng từ khu vực Levant và được gieo trồng
**Lúa** là một trong năm loại cây lương thực chính của thế giới, cùng với bắp (_Zea Mays_ L., tên khác: ngô), lúa mì (_Triticum_ sp, tên khác: tiểu mạch), sắn (_Manihot esculenta_ Crantz, tên
**BGM-109 Tomahawk** là loại tên lửa hành trình với nhiều biến thể, có khả năng mang đầu đạn hạt nhân, được phóng đi từ các hệ thống phóng mặt đất, chiến hạm hoặc tàu ngầm
Sau đây là **danh sách tên lửa** và các loại tên lửa. ## Danh sách tên lửa theo loại * **Tên lửa dẫn hướng thường dùng** ** Tên lửa không đối không ** Tên lửa
Tên lửa đạn đạo liên lục địa MX Peacekeeper của Hoa Kỳ đang được phóng thử nghiệm **Tên lửa đạn đạo** là loại tên lửa có phần lớn quỹ đạo sau khi phóng tuân theo
phải|nhỏ|Tên lửa liên lục địa Hoa Kỳ Atlas-A **Tên lửa liên lục địa**, **tên lửa xuyên lục địa**, **tên lửa vượt đại dương**, còn được biết đến với ký tự tắt **ICBM** (viết tắt của
**Tên lửa chống tên lửa đạn đạo** (_anti-ballistic missile_ - ABM) là một tên lửa được thiết kế để chống lại các tên lửa đạn đạo (một tên lửa dùng để phòng thủ tên lửa).
nhỏ|Lửa từ một ngọn nến nhỏ|Lửa. nhỏ|Thổ dân mài lấy lửa. thumb|Quá trình đốt và dập tắt lửa từ một đống gỗ nhỏ. **Lửa** là quá trình oxy hóa khử nhanh chóng của một vật
Tường lửa làm nhiệm vụ bảo vệ Tường ngăn [[phần mềm gián điệp]] Trong điện toán, **tường lửa** hay **firewall** là một hệ thống bảo mật mạng giám sát và kiểm soát lưu lượng mạng
**Tên lửa chống tàu** (**tên lửa đối hạm**) là một loại tên lửa được thiết kế để chống lại các tàu trên mặt biển của hải quân. Hầu hết các tên lửa chống tàu là
phải|nhỏ|Tên lửa nghiên cứu [[Black Brant (rocket)|Black Brant 12 do Bristol Aerospace sản xuất.]] phải|nhỏ|Động cơ trên tầng 2 của tên lửa [[LGM-30 Minuteman#Minuteman-III (LGM-30G)|Minuteman III ]] **Tên lửa nhiều tầng đẩy** (tiếng Anh: **multistage
thumb|Một nhóm núi lửa bùn ở [[Gobustan Rock Art Cultural Landscape|Gobustan, Azerbaijan]] thumb|Núi lửa bùn ở Htee Pwint Kan Umbrella Pond ([[Myanmar).]] thumb|upright=1.4|Trầm tích chứa hydrat, thường liên quan đến hoạt động núi lửa bùn.
thumb|Trang web lừa đảo hỗ trợ kỹ thuật làm giả một cửa sổ bật lên của trình duyệt|alt=popup giả mạo về hỗ trợ kỹ thuật **Lừa đảo hỗ trợ kỹ thuật** là một hình thức
thumb|Cỏ lúa mì **Mạ lúa mì** (**Wheatgrass**) còn có tên gọi khác là **Tiểu mạch thảo**, **Cỏ mạch**. Mạ lúa mì là thân và rễ cây lúa mì non từ 8-12 ngày tuổi. Trong mạ
**Đầu đạn tên lửa** (phần chiến đấu của tên lửa) là bộ phận trực tiếp sát thương mục tiêu bằng năng lượng nổ và mảnh. Thông thường, phần đầu đạn được bố trí ở phần
**Tên lửa đẩy Vanguard** là loại tên lửa đẩy được dự kiến trở thành tên lửa đẩy phóng vệ tinh đầu tiên của Mỹ lên quỹ đạo. Tuy nhiên, việc Liên Xô phóng vệ tinh
nhỏ|300x300px| [[Space Shuttle|Phi thuyền không gian được phóng đi nhờ 2 tầng đẩy nhiên liệu rắn, hay còn gọi là SRBs]] Một **Tên lửa đẩy nhiên liệu rắn** là tên lửa có động cơ sử
**Tranh lụa** là một trong những loại hình nghệ thuật có từ lâu đời của Trung Quốc, Nhật Bản, Việt Nam, Hàn Quốc. Các loại màu (hạt màu trộn với keo thực vật hoặc keo
**Con Đường Tơ Lụa** (, ) là một hệ thống các con đường buôn bán nổi tiếng đã từ hàng nghìn năm nối châu Á với châu Âu (cách hay nói là giữa phương Đông
phải|Các loại **bật lửa** khác nhau. **Bật lửa** (hay **hộp quẹt**) là một thiết bị được sử dụng để tạo ra ngọn lửa nhằm mục đích tạo nguồn lửa ban đầu cho các loại nhiên
Tên lửa Soyuz-U mang tàu vũ trụ [[Soyuz TM-31 chở theo phi hành đoàn đầu tiên lên Trạm Vũ trụ Quốc tế - [https://en.wikipedia.org/wiki/Expedition_1 Expedition 1] - phóng vào ngày 31 tháng 10 năm 2000.]]
nhỏ|Áo lụa nhỏ|Yếm lụa đào nhỏ|Cà vạt lụa, bày tại phố Hàng Hành, Hà Nội **Lụa** là một loại vải mịn, mỏng được dệt bằng tơ. Loại lụa tốt nhất được dệt từ tơ tằm.
thumb|right|[[Mauna Kea, Hawaii, một núi lửa hình khiên trên đảo Hawaii lớn.]] phải|nhỏ|Núi lửa hình khiên **Núi lửa hình khiên** (tiếng Anh: _shield volcano_) là một núi lửa lớn có các sườn phẳng và độ
**Hệ thống tên lửa Buk** (; - cây sồi) là một dòng các hệ thống tên lửa đất đối không tầm trung, tự hành được phát triển bởi Liên Xô (cũ) và Nga. Hệ thống
Tên lửa hành trình Tomahawk của Hoa Kỳ **Tên lửa hành trình** hay **hỏa tiễn hành trình** (theo thuật ngữ tiếng Anh "_Cruise missile_") hay còn gọi là **tên lửa có cánh** (theo thuật ngữ
Mô hình động cơ tên lửa nhiên liệu rắn **Động cơ tên lửa** là động cơ phản lực trong đó chứa toàn bộ nguồn môi chất làm việc và nguồn năng lượng, trong quá trình
phải| Một tên lửa tầm dài không đối không [[AIM-54 Phoenix của Hải quân Hoa Kỳ phóng từ máy bay chiến đấu F-14 Tomcat.]] **Tên lửa không đối không** (air-to-air missile: **AAM**) là tên lửa
nhỏ|399x399px|Bệ phóng tên lửa Scud-B thuộc biên chế [[Quân đội nhân dân Việt Nam tại Triển lãm Quốc phòng Quốc tế 2022.]] **Scud** là lớp các tên lửa đạn đạo chiến thuật được Liên Xô
**Hệ thống tên lửa Tor** (; ) là một hệ thống tên lửa đất đối không tầm thấp, được thiết kế để tiêu diệt máy bay, trực thăng, tên lửa hành trình, phương tiện bay
phải|Sơ đồ ĐTL hai thành phần nhiên liệu dùng máy bơm **Động cơ tên lửa nhiên liệu lỏng** hay **Động cơ tên lửa lỏng** (ký hiệu ĐTL) là loại động cơ tên lửa sử dụng
thumb|[[Nhà núi lửa học lấy mẫu dung nham bằng búa đá và xô nước]] **Núi lửa học** là ngành khoa học nghiên cứu về núi lửa, dung nham, magma, và các hiện tượng địa chất,
**Núi lửa Taal** () là núi lửa của Philippines, ở vào tỉnh Batangas đảo Luzon, Nhìn từ sườn núi Tagaytay, núi lửa Taal và hồ là một trong những khung cảnh đẹp nhất và hấp
nhỏ|300x300px| Luồng mạt vụn núi lửa của [[núi lửa Mayon ở nước Cộng hoà Philippines, năm 1984. ]] **Luồng mạt vụn núi lửa** (chữ Anh: Pyroclastic flow) là luồng khí hơi tốc độ cao lúc
phải|nhỏ|340x340px| Sỏi núi lửa ở [[Kīlauea|núi lửa Kīlauea. ]] **Sỏi núi lửa** (chữ Anh: Lapilli) là vật mạt vụn núi lửa có đường kính ở vào khoảng giữa 2 - 64 milimét, sỏi núi lửa
nhỏ|Đạn núi lửa hình dạng chuỳ kéo sợi của núi lửa Capelinhos ở đảo Faial, [[Açores|quần đảo Açores, Bồ Đào Nha.]] nhỏ|Đạn núi lửa của [[Nón núi lửa|nón bã núi lửa ở Khu bảo tồn
nhỏ| [[Núi lửa Mayon ở Philippines có nón núi lửa đối xứng. ]] **Nón núi lửa** (chữ Anh: _Volcanic cone_) là gò núi do vật chất phun ra của núi lửa tích tụ và chất
[[Tập_tin:Hawaiian_Eruption-numbers.svg|phải|nhỏ|250x250px|Sơ đồ phun bắn ra kiểu Hawaii: 1. Cột phun bắn ra; 2. Suối phun dung nham; 3. Miệng núi lửa; 4. Hồ dung nham; 5. Lỗ phun khí núi lửa; 6. Dòng dung nham;
nhỏ|350x350px phải|nhỏ|300x300px|Nhà địa chất học của [[Cục Khảo sát Địa chất Hoa Kỳ|Cục Điều tra địa chất Hoa Kỳ kiểm tra khối đá của đá bọt ở cạnh ven của dòng mạt vụn núi lửa
phải|nhỏ|300x300px| Miệng núi lửa của [[Núi St. Helens|núi lửa St. Helens (năm 1980) ]] thế=|nhỏ|300x300px|Miệng núi lửa của núi lửa Cameroon phun bắn ra vào năm 2000. **Miệng núi lửa** (chữ Anh: _crater_) là chỉ
phải|nhỏ|300x300px| Một vật mạt vụn núi lửa (chọn lấy từ bang [[California, Hoa Kỳ). ]] nhỏ|Vật mạt vụn núi lửa ở Bờ biển Brown, [[châu Nam Cực (năm 2016).]] **Vật mạt vụn núi lửa** (chữ
Ảnh [[vệ tinh của Hồ Toba, Indonesia, một trong các hồ miệng núi lửa lớn trên thế giới.]] [[Hồ Pinatubo, Philippines, hình thành sau vụ phun trào năm 1991 của núi Pinatubo.]] nhỏ|Hình ảnh từ
nhỏ|Khí núi lửa xâm nhập vào khí quyển với bụi và mạt vụn trong vụ phun trào núi lửa ở Augustine, 2006. nhỏ| Vụ phun trào [[núi St. Helens ]] **Khí núi lửa** là khí
**Lúa chét** (_Ratoon Rice_), còn gọi là lúa tái sinh, được mọc từ những mầm ngủ ở gốc những cây lúa (gốc rạ) sau khi đã thu hoạch (cắt bỏ một phần thân để lấy