Học lua trong 30 phút

26 42 0
Học lua trong 30 phút

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

ddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddvddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddv

Học Lua 30 phút tháng 7, 2018   lua learning Lua gì? Ngơn ngữ lập trình kịch bậc cao với đặc điểm: kiểu động, nhẹ, nhanh, đa hình, đa tính mã nguồn mở Nhẹ chỗ nào?  Lua viết C với hai chục nghìn dịng code!  Trình thơng dịch Lua có kích thước vài trăm KB  Bộ nhớ mà Lua sử dụng chạy Nhanh Python không?  Bộ xử lý Lua bao gồm trình biên dịch, dịch code thành bytecode máy ảo để thực thi code  Kiến trúc máy ảo Lua từ v5.x trở sử dụng mơ hình ghi theo kiến trúc x86 (trước sử dụng mơ hình ngăn xếp)  Tất nhiên nhanh Python nhiều (có thể nói nhanh họ ngôn ngữ kịch phổ biến) Lua có phiên tên LuaJIT, thay dịch bytecode dịch mã máy Khơng so sánh với CPython, PyPy mà có gán mác JIT vào thua LuaJIT, chấp V8 Ngôn ngữ kịch gắn liền với từ thông dịch, Lua cho code vào chạy Xuất thêm từ biên dịch Lua dịch code sang bytecode rước cho vào máy ảo Đa hình sao?  Lua hỗ trợ lập trình hàm hướng đối tượng  OOP chủ yếu thông qua prototype, tựa tựa JS Làm mà đa tính năng?    Lua dùng để viết ứng dụng, game, web (backend) hệ thống Lua xuất nhiều lập trình nhúng, kèm với ngôn ngữ nhanh C/C+ +, Rust để dễ dàng triển khai, tái sử dụng API Có thể tham khảo project Lua đây, Nhúng lập trình mạch mà Lua hỗ trợ CAPI để nhúng vào ngôn ngữ khác Một số game engine hay tools hack game hỗ trợ script Lua hình thức nhúng Cài đặt Lua Lua không kén thằng C compiler cả, hỗ trợ nhiều kiến trúc khác Phiên release 5.3.5, ổn định sử dụng nhiều 5.1.5 $ curl https://www.lua.org/ftp/lua-5.1.5.tar.gz -o lua.tar.gz $ tar -xvf lua.tar.gz $ cd lua-5.1.5 $ make && make install Chọn editor Muốn đa tảng quất Sublime Text, có số package hỗ trợ autocomplete just-intime syntax checker VS Code ngon (có nhiều extension hỗ trợ Lua debug) Ngoài cịn có IDE viết hồn tồn Lua (sử dụng wxWidget UI) vơ nhanh nhẹ, ZeroBrane Studio, hỗ trợ chủ yếu code Lua game engine có Lua built-in, có live-coding ngon Trên Windows, ta sử dụng Lua Studio, trọn gói cài đặt giao diện Lua có package manager tên LuaRocks, tựa tựa vcpkg, conan hỗ trợ cài đặt thư viện ngồi nhanh chóng Hello Lua $ echo print("Hello, world!") > test.lua Hoặc tạo file gõ code sau vào: print("Hello, world!") Trên số code editor/IDE cần nhấn Ctrl + B chạy lệnh sau: $ lua /test.lua Chú pháp biến Note: Các hướng dẫn viết code block, bạn copy chúng chạy Hãy cẩn thận có tiếng Việt, khơng nên set file test với encoding UTF8 with BOM Hai dấu trừ đánh dấu comment dịng [[ Thêm hai cặp ngoặc vng vào để comment nhiều dòng ]] local a local từ khóa Khai báo biến a, khơng gán nil nil hiểu chưa định nghĩa, khơng mang giá trị a=4 Gán giá trị cho biến Số Lua số thực double, biến a hiểu số nguyên A = 4.0 Số thực Trong Lua phân biệt chữ in hoa chữ thường Khơng dùng local A biến toàn cục print(a, b) print để in giá trị console Biến b chưa khai báo nil, không lỗi đâu hiểu biến global a=5b=6 Viết dòng, cách khoảng trắng Lua không cần chấm phẩy, phải biểu thức b = 11; print(b) Có chấm phẩy local x, y, z = 1, 2, 3, Khai báo & gán giá trị cho nhiều biến Tất nhiên thừa Khai báo chuỗi s = 'dấu nháy đơn' n = "dấu nháy kép được" u = [[ chuỗi nhiều dòng hai hai cặp ngoặc vuông]] Nối hai chuỗi hai dấu chấm x = 'abc' 'def' print(x '789') p = print Tuy print hàm, kiểu liệu print = 20 Tất biến thay đổi giá trị p(print) In 20 print = p Trả lại cũ Rẻ nhánh câu điều kiện b = true Kiểu đúng/sai boolean if b then print('yes') else print('no') end In yes Kết thúc statement end x = 123 if x == 456 then print('false') elseif x ~= 789 then Dấu khác print('true') else print('otherwise') end In true Trong Lua, false khác Nếu cho vào if, đúng, false nil sai Logic or, and print(false and nil) print(0 and nil) > false > nil print(true and nil) > nil print(false and 0) > false print(true and false) > false print(1 and 0) > if dòng print(1 > and or 3) > In print(0 and 'true' or 'false') > In true, mà Vịng lặp for i = 1, 10 Từ đến Có thằng khơng kết thúc end Hàm Khai báo hàm function foo() print('Hello World!') end Gọi hàm foo() In Hello World! Khai báo kiểu lambda fib = function(n) if n < then return end return fib(n - 2) + fib(n - 1) end Hàm trả nhiều kết function mulret(a, b, c) print(a, b, c) return 4, 5, 6, 7, end x, y, z = mulret(5) > nil nil ; tham số b, c nil Hàm trả gán 4, 5, vào x, y, z; thừa print(x, y, z) Kiểm tra, in Thêm local vào trước hàm cục local function g(x) print(x) end local g; g = function (x) print(x) end Hai thằng g((((((1)))))) g 'qwerty' In qwerty Trường hợp gọi hàm khơng cần cặp ngoặc trịn tham số cách tên hàm kí tự cú pháp như: ngoặc nhọn { (table), dấu nháy " ' (chuỗi) Lua hỗ trợ function vargs( ) print( ) end vargs(11, 'a', 4+5) > In 11 a Bảng (table) Đây kiểu cấu trúc phức hợp Lua, tương tự array PHP hay object JS t = {key1 = 'value1', key2 = false} Sử dụng dấu chấm để tham chiếu đến phần tử print(t.key1) In value1 t.newKey = {} Thêm newKey, giá trị table t.key2 = nil Xóa key2 Sử dụng giá trị để đánh dấu phần tử u = {['@!#'] = 'qbert', [{}] = 1729, [6.0 + 0.28] = 'concho'} Sử dụng cặp ngoặc [ ] cho biểu thức vào end foreach với key for k,v in pairs(b) print(k,v) end Metatable, metamethod (prototype) Một table có metatable, nhận nạp chồng table khác f1 = {x = 1, y = 2} f2 = {x = 5, y = 6} Sẽ sinh lỗi nếu: s = f1 + f2 Vì khơng thể cộng hai table Tạo metatable my_meta = {} function my_meta. add(a, b) local ret = {} ret.x = a.x + b.y ret.y = a.x - b.y return ret end Set protptype cho hai setmetatable(f1, my_meta) setmetatable(f2, my_meta) r1 = f1 + f2 Gọi add(f1, f2) metatable f1 r2 = f2 + f1 Tương tự luôn, metatable f2 print(r1.x, r1.y) > -5 print(r2.x, r2.y) > Hiểu đơn giản table bình thường, để chứa liệu mà thôi, metatable thêm vào tiền xử lý cho Thêm table vào table thông qua key index defaultFavs = {animal = 'dog', food = 'donuts'} myFavs = {food = 'pizza'} setmetatable(myFavs, { index = defaultFavs}) eatenBy = myFavs.animal > 'dog' Giá trị index, add, gọi metamethod Full list, a table với metamethod [[ add(a, b) cho a + b sub(a, b) cho a - b mul(a, b) cho a * b div(a, b) cho a / b mod(a, b) cho a % b pow(a, b) cho a ^ b unm(a) cho -a concat(a, b) len(a) eq(a, b) cho a b cho #a cho a == b lt(a, b) cho a < b le(a, b) cho a 'I say woof' Dog giống class, thực chất table Hàm tablename:func( ) hiểu hàm tablename.func(self, ) dấu hai chấm : thêm self vào thành tham số thứ Đọc & bên để hiểu thêm newObj instance cho class Dog self = class tạo Thông thường self = Dog, phần kế thừa thay đổi newObj get hàm từ set metatable newObj index vào (Dog) Nên nhớ: setmetatable return tham số đầu Dấu hai chấm : mục 2, self sử dụng cho lớp kế thừa thông qua Dog.new() Giống Dog.new(Dog), self = Dog new() Giống mrDog.makeSound(mrDog); self = mrDog - Ví dụ kế thừa LoudDog = Dog:new() function LoudDog:makeSound() s = self.sound ' ' print(s s) end seymour = LoudDog:new() seymour:makeSound() > 'woof woof' LoudDog lấy method & property từ Dog Bản thân có key 'sound' từ hàm new() Giống LoudDog.new(LoudDog), chuyển thành Dog.new(LoudDog), LoudDog khơng có key 'new', có index = Dog metatable (LoudDog) Kết quả: metatable seymour LoudDog, LoudDog. index = LoudDog Nên seymour.key = seymour.key, LoudDog.key, Dog.key, table với key nhận Key 'makeSound' có sẵn LoudDog, seymour kế thừa, giống LoudDog.makeSound(seymour) Nếu cần tạo thêm class mới, cấu trúc sau: function LoudDog:new() newObj = {} tạo newObj self. index = self return setmetatable(newObj, self) end Tạo module Module giống thư viện riêng, người dùng sử dụng thơng qua: local mod = require('module_name') Có loại module bao gồm:   Lua module: viết Lua, xem hàm C module: thường viết C ngôn ngữ nào, biên dịch dạng thư viện liên kết động Đầu tiên, tạo file làm module: Khởi tạo table M Đây biến cục bộ, sử dụng file local M = {} Thêm mộ số giá trị vào table M: local M = {} M.a = M.b = true M.c = 'Hello' M.foo = function(self) print(self.c) end Và trả M cuối file: print(self.c) end return M Tiếp tục tạo file để chạy code: local mod = require('module') Load module trên, lưu ý tên file Nếu file module.lua nằm thư mục require('folder.module') thay '.' thành '/' '\\' print(mod.a) > print(mod.b) > true mod:foo() > 'Hello' Hoặc mod.foo(mod) Nên nhớ, biến local main.lua không dùng module.lua Nếu quy hàm sử dụng cho file này: local function module() local M = {} return M end mod = module() Ngồi chạy file Lua khác chương trình dofile('abc.lua') Chạy abc.lua, tất nhiên không lưu biến từ file đó, khơng giống require đâu local f = loadfile('abc.lua') loadfile load file không chạy mà lưu vào hàm Sử dụng f() để chạy file Các module chuẩn Lua cung cấp số module chuẩn dành cho nhu cầu bản, tất nhiên không cần dùng require đâu, trừ biến thư viện bạn gán cho giá trị  io  math  os  string  table io.write("Hello\n") Tương tự print()

Ngày đăng: 22/08/2023, 21:44

Tài liệu cùng người dùng

Tài liệu liên quan