Mẫu hình | lập trình thủ tục, lập trình hàm |
---|---|
Thiết kế bởi | Roberto Ierusalimschy, Waldermar Celes, L.H. Figueiredo |
Xuất hiện lần đầu | 1993 |
Kiểm tra kiểu | động |
Hệ điều hành | đa nền tảng |
Giấy phép | giấy phép MIT |
Trang mạng | www |
Các bản triển khai lớn | |
Lua, murgaLua, | |
Ảnh hưởng từ | |
Scheme, ALGOL |
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 gia 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 triển từ nhu cầu cấu hình phần mềm trong ngành dầu khí, tác giả đã xem xét ngôn ngữ hiện tại 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ố điểm mạnh đáng chú ý như 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ữ hướng tới lập trình thủ tục. Tuy nhiên, trong Lua, hàm được coi là biến cơ bản (first-class variable), giống như lập trình hàm. Ngoài ra, Lua còn có khả năng mô phỏng lập trình hướng đối tượng một cách khéo léo.
Lua có cấu trúc dữ liệu rất đơn giản. Chỉ có 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 tạp nhất là table
, tức là bảng băm, mảng kết hợp hoặc từ điển theo nhiều cách gọi khác nhau.
Từ kiểu dữ liệu table
, có thể linh hoạt biểu diễn các kiểu dữ liệu khác. Ví dụ, nếu table
có dạng tổng quát là {key1: value1, key2: value2,... }
và sử dụng các số tự nhiên làm key1
, key2
, ta có thể tạo thành một mảng một chiều. Bên cạnh đó, với metatable
, có thể định nghĩa các phương thức bằng cách gán tên hàm vào vai trò các khóa.
Cú pháp
Các khối lệnh (chunk)
Mặc dù nên viết từng câu lệnh trên một dòng, Lua có khái niệm khối lệnh cho phép viết nhiều câu lệnh trên cùng một dòng mà không cần dấu phân cách như ;
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, vòng lặp đều được kết thúc bằng từ khóa 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 ()
như thông thường.
print(2+3) print('Xin chào thế giới')
Ngoài ra, có cú pháp đặc biệt cho phép bỏ cặp ngoặc đơn trong trường hợp tham số là chuỗi hoặc bảng (table).
print 'Xin chào thế giới'
Hàm là một 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, ta có thể 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 loại bảng số liệu in(tuoi['Britney'], tuoi['Andy']) in(tuoi.Britney, tuoi.Andy) -- ngôn ngữ tổng hợp -- dãy số hoàn hảo day = {[1] = 1, [2] = 4} -- tương đương với dòng lệnh bên dưới... day = {1, 4} -- tự động gán các khóa là số nguyên day[3] = 9 cho i = 4,10 làm day[i] = i * i end in(day) -- mã của bảng day in(khởi chạy(day)) -- các thành phần trong bảng day
- Tạo các khóa trong bảng rất đơn giản
- Thay đổi cấu trúc và chỉ mục của bảng đã được tạo trước.
- Có thể sử dụng bảng như một mảng
- Sử dụng vòng lặp trong bảng
- Viết chương trình hướng đối tượng với bảng.
- Xây dựng những cấu trúc dữ liệu từ bảng.
- Các phương thức có sẵn trên bảng:
o Table.insert: thêm một phần tử vào bảng Ví dụ:
T = {} bảng.chèn(T, 'a') bảng.chèn(T, 'b') bảng.chèn(T, 'c') in(Ngăn cách bằng dấu phẩy(T)) a, b, c
o Table.sort: sắp xếp các phần tử trong một bảng Ví dụ sử dụng chức năng sắp xếp:
Tên = {'Scarlatti', 'Telemann', 'Corelli', Purcell, Vivaldi, Handel, Bach} bảng.sắp xếp(Tên) cho I, Tên trong danh sách(Tên) làm in(I, Tên) end Trích: 1 Bach 2 Corelli 3 Handel 4 Purcell 5 Scarlatti 6 Telemann 7 Vivaldi
o Bảng.gộp: nối các thành phần trong bảng thành một chuỗi. Ví dụ:
in(Bảng.gộp({'a', 'bc', 'd'})) Abcd
o Bảng.xoá: Loại bỏ một thành phần trong bảng. Ví dụ:
T = {} bảng.chèn(T, 'a') bảng.chèn(T, 'b') bảng.chèn(T, 'c') in(Ngăn cách bằng dấu phẩy(T)) a, b, c in(bảng.xoá(T)) c in(Ngăn cách bằng dấu phẩy(T)) a, b in(bảng.xoá(T)) b in(Ngăn cách bằng dấu phẩy(T)) a in(bảng.xoá(T)) a -- T giờ sẽ rỗng: in(#T)
o Bảng.maxn: tìm key tương ứng với giá trị lớn nhất trong mỗi cặp key – value trong bảng và trả về key đó, hoặc trả về 0 nếu giá trị không phải số dương. Ví dụ:
in(Bảng.maxn({'a', nil, nil, 'c'})) 4 in(Bảng.maxn({[1.5] = true})) 1.5 in(Bảng.maxn({[ì1.5î] = true})) 0
Phát triển
Lua hiện đang có sự phát triển trên cơ sở mở rộng tính năng của các hệ thống có sẵn:
- Plua: Lua dành cho các thiết bị Palm.
- LuaTeX: tích hợp hệ thống LaTeX với ngôn ngữ Lua.
Các ứng dụng
Lua được sử dụng phổ biến trong ngành công nghệ game. Một số trò chơi nổi tiếng bao gồm: World of Warcraft III, Heroes of Might and Magic V, Warhammer Online, Angry Birds, Roblox. Lua thường được dùng để cấu hình các tệp thông số hoặc lập trình trí tuệ nhân tạo trong các trò chơi.
Ngoài lĩnh vực game, Lua cũng được sử dụng trong một số phần mềm khác như Adobe Lightroom. Hệ điều hành Damn Small Linux cũng tận dụng lợi ích của Lua với kích thước nhỏ gọn.
Indigorose sử dụng Lua làm ngôn ngữ chính cho Autoplay Media Studio, một công cụ phát triển phần mềm trên hệ điều hành Windows.
Liên kết ngoài
- Trang chủ của Lua
- Cuốn sách Programming in Lua của tác giả R. Ierusalimschy
- MurgaLua, một phiên bản thực thi của Lua Lưu trữ 2009-02-28 tại Wayback Machine
- Trang chủ một IDE sử dụng ngôn ngữ lua để viết phần mềm trên Windows
- Zerobrane, môi trường phát triển tích hợp lua phổ biến để lập trình trên Linux, Mac, Windows