{}const=>[]async()letfn</>var
LuaDéveloppement

Lua sans douleur : nous analysons les bases du langage à l'aide d'exemples simples qui sont vraiment compréhensibles

Comprendre Lua à partir de zéro : variables, tableaux, fonctions, programmation orientée objet via des métatables. Tout est basé sur des exemples de code en direct, sans ennui académique. Vous apprendrez pourquoi Lua est utilisé dans Roblox, Neovim, Redis et NGINX, et comment commencer à écrire en Lua dès aujourd'hui.

К

Kodik

Auteur

7 min de lecture

Vous avez joué à Roblox, World of Warcraft, Garry's Mod ou vous avez bidouillé avec nginx, sans même vous douter que pendant tout ce temps vous utilisiez Lua. Il est temps de se connaître normalement.

Lua est le langage dont tout le monde dit « ah, c'est pour les jeux », puis il s'avère qu'il vit dans Redis, NGINX (OpenResty), Wireshark, Neovim et dans un tas d'autres endroits où vous avez besoin d'un moteur de script rapide et facile à intégrer.

L'interpréteur Lua pèse moins de 300 Ko. En même temps, Lua est régulièrement inclus dans le top des langages de script les plus rapides (LuaJIT vole généralement au niveau C dans certains benchmarks).

Variables : tout est simple, mais il y a une nuance

Variables par défaut dans Lua mondiaux. Oui, tout comme dans JavaScript jusqu'à "use strict". Et oui, c'est un piège.

-- Это глобальная переменная. Она видна ОТОВСЮДУ.
name = "Code"

-- А вот так — локальная. Используй local ВСЕГДА.
local age = 25
local is_cool = true

Règle numéro un : écrivez toujours local. Si vous avez oublié, la variable fuit dans la portée globale, et ensuite vous déboguerez pendant deux heures, pourquoi counter est réinitialisé dans des endroits aléatoires.

🔥 100 000+ étudiants déjà avec nous

Marre de lire la théorie ?
Il est temps de coder !

Kodik — une appli où tu apprends à coder par la pratique. Mentor IA, leçons interactives, projets réels.

🤖 IA 24/7
🎓 Certificats
💰 Gratuit
🚀 Commencer
Ont rejoint aujourd'hui

Types de données : le minimalisme dans toute sa splendeur

Dans Lua, au total 8 types. Huit. Pour comparaison, dans TypeScript, vous avez plus de types que d'amis sur LinkedIn.

local a = 42            -- number (и int, и float — всё number)
local b = "hello"       -- string
local c = true          -- boolean
local d = nil           -- nil (отсутствие значения)
local e = {}            -- table (массив, объект, словарь — всё в одном)
local f = print         -- function (да, функции — это значения)

Le plus important : table est la seule structure de données. Tableau ? Table. Objet ? Table. Dictionnaire ? Table aussi. HashMap ? Devinez.

Tableaux : un type pour tous les gouverner

Table en Lua est un couteau suisse. Voir :

-- Как массив (индексация с 1, а не с 0!)
local fruits = {"apple", "banana", "mango"}
print(fruits[1])  -- "apple"  (не fruits[0]!)

-- Как словарь
local user = {
    name = "Alexey",
    level = "senior",
    stack = {"Vue", "Nuxt", "Lua"}
}
print(user.name)       -- "Alexey"
print(user["level"])   -- "senior"

-- Как и то, и другое одновременно (но лучше так не делай)
local chaos = {
    "first",
    name = "Chaos",
    "second",
    power = 9000
}

Indexation à partir de l'unité - c'est la raison pour laquelle les développeurs C, Python et JS ont une tête de pierre pendant les 30 premières minutes. Mais ensuite, vous vous y habituez. Je vous le promets.

Conditions et cycles : les classiques du genre

Pas de guillemets. Pas de elif. Juste if, elseif, then et end :

local hp = 75

if hp <= 0 then
    print("Game Over")
elseif hp < 30 then
    print("Critically low HP!")
else
    print("Everything is fine, we live")
end

Les cycles sont également sans surprise :

-- Числовой for
for i = 1, 5 do
    print("Iteration:", i)
end

-- While
local count = 0
while count < 3 do
    print(count)
    count = count + 1  -- Да, в Lua нет ++ и +=
end

-- Перебор таблицы
local heroes = {"Geralt", "Link", "Mario"}
for index, hero in ipairs(heroes) do
    print(index .. ". " .. hero)
end

Moment de douleur : pas de Lua +=, -=, ++. Chaque fois que vous écrivez count = count + 1 comme en 2003. Il y a une proposition d'ajouter des opérateurs composés, mais pour l'instant, il faut s'y faire.

Fonctions : citoyens de première classe

Les fonctions dans Lua sont des valeurs à part entière. Elles peuvent être stockées dans des variables, transmises comme arguments, renvoyées à partir d'autres fonctions :

-- Обычная функция
local function greet(name)
    return "Hi, " .. name .. "!"
end

print(greet("World"))  -- "Hello, World!"

-- Функция, которая возвращает функцию (замыкание!)
local function create_counter()
    local count = 0
    return function()
        count = count + 1
        return count
    end
end

local counter = create_counter()
print(counter())  -- 1
print(counter())  -- 2
print(counter())  -- 3

Lua prend en charge valeurs de retour multiples — sans aucun emballage dans des tableaux ou des objets :

local function get_user()
    return "Alexey", 25, "frontend"
end

local name, age, role = get_user()
print(name)  -- "Alexey"
print(role)  -- "frontend"

Lignes : concaténation via ..

Oubliez + pour les lignes. Dans Lua, la concaténation est .. :

local first = "Hello"
local second = "World"
print(first .. " " .. second)  -- "Hello World"

-- Длина строки
print(# "Kodik") - 10 (octets UTF-8, pas de caractères !)
-- string.format — как printf, только в Lua
local msg = string.format("%s %d HP", "hero", 100)
print(msg)  -- "The hero has 100 HP"

Important : l'opérateur # renvoie la longueur en octets, et non en caractères. Pour le cyrillique, c'est un piège : chaque lettre prend 2 octets en UTF-8.

OOPS : collecte à partir de tableaux et de métatables

Dans Lua, il n'y a pas de classes prédéfinies. Mais il y a métatables — mécanisme par lequel on peut réaliser l'héritage, la surcharge des opérateurs et, en général, tout modèle objet :

-- "Class" через таблицу
local Player = {}
Player.__index = Player

function Player.new(name, hp)
    local self = setmetatable({}, Player)
    self.name = name
    self.hp = hp
    return self
end

function Player:take_damage(amount)
    self.hp = self.hp - amount
    if self.hp <= 0 then
        print(self.name .. " defeated!")
    else
        print(self.name .. ": remaining " .. self.hp .. " HP")
    end
end

-- Использование
local hero = Player.new("Geralt", 100)
hero:take_damage(30)   -- "Geralt: 70 HP left"
hero:take_damage(80)   -- "Geralt is defeated!"

Faites attention à deux-points (:) est un sucre syntaxique. hero:take_damage(30) équivaut à hero.take_damage(hero, 30). Les deux-points transmettent automatiquement self.

Des jetons qui surprennent

Affectation multiple :

local a, b = 10, 20
a, b = b, a  -- swap без временной переменной!
print(a, b)  -- 20, 10

Ternaire via and/or :

-- В Lua нет ternary operator, но есть хак:
local status = (hp > 0) and "alive" or "dead"

Varargs — nombre variable d'arguments :

local function sum(...)
    local total = 0
    for _, v in ipairs({...}) do
        total = total + v
    end
    return total
end

print(sum(1, 2, 3, 4, 5))  -- 15

Où Lua est-il utilisé en ce moment ?

Lua n'est pas une pièce de musée. Il fonctionne dans le produit pour des milliards d'utilisateurs :

  • Roblox - tous les scripts de jeu sur Luau (fork Lua)

  • Neovim — les configurations et les plugins sont écrits en Lua, pas en VimScript

  • Redis — scripts pour les opérations atomiques

  • NGINX/OpenResty — passerelles API à forte charge

  • World of Warcraft - des addons écrits par des millions de joueurs

  • Systèmes embarqués — Appareils IoT où chaque kilo-octet compte

Vous voulez consolider vos connaissances ? Pratiquez !

La théorie sans pratique est oubliée en une semaine, c'est un fait. Si vous voulez vraiment comprendre la programmation, et pas seulement lire l'article et fermer l'onglet, essayez Code.

Code est une application pour apprendre la programmation en mettant l'accent sur la pratique. Ici, vous ne vous contentez pas de lire la théorie : vous résolvez des problèmes, écrivez du code et voyez immédiatement le résultat. Les cours de Python, JavaScript, HTML, CSS et autres technologies sont conçus pour que vous puissiez apprendre à votre propre rythme, depuis votre téléphone ou votre ordinateur.

Et nous avons aussi Communauté Telegram avec plus de 2000 développeurs, où des articles utiles sur la programmation sont régulièrement publiés. C'est un excellent moyen de réviser la matière dans un format pratique : vous faites défiler le fil d'actualité et en même temps vous approfondissez vos connaissances. Abonnez-vous et apprenez avec nous.

Total

Lua est un langage qui prouve qu'il n'est pas nécessaire d'être complexe pour être puissant. 8 types de données, une structure de données, une syntaxe minimaliste - et pourtant il fonctionne dans les game devs, les serveurs Web, les bases de données et les systèmes embarqués.

Si vous avez déjà rêvé d'écrire un mod pour votre jeu préféré, de créer un plugin pour Neovim ou si vous voulez simplement apprendre une langue en un week-end, Lua est un excellent choix. La barrière à l'entrée est minime et les possibilités sont assez sérieuses.

print("Good luck learning Lua!")

🎯Arrête de reporter

Tu as aimé l'article ?
Place à la pratique !

Avec Kodik, tu ne lis pas seulement — tu codes immédiatement. Théorie + pratique = vraies compétences.

Pratique instantanée
🧠L'IA explique le code
🏆Certificat

Sans inscription • Sans carte