×

Langue

Fermer
Atelier 801
  • Forums
  • Dev Tracker
  • Connexion
    • English Français
      Português do Brasil Español
      Türkçe Polski
      Magyar Română
      العربية Skandinavisk
      Nederlands Deutsch
      Bahasa Indonesia Русский
      中文 Filipino
      Lietuvių kalba 日本語
      Suomi עברית
      Italiano Česky
      Hrvatski Slovensky
      Български Latviešu
      Estonian
  • Langue
  • Forums
  • /
  • Transformice
  • /
  • Modules
  • /
  • [Tutorial] Aprenda Lua em 15 minutos (Não é para baixinhos!)
1 / 3 › »
[Tutorial] Aprenda Lua em 15 minutos (Não é para baixinhos!)
Ikke
« Sénateur »
1493253900000
    • Ikke#0020
    • Profil
    • Derniers messages
    • Tribu
#1
  14
Code Lua

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
-- Dois hifens começam um comentário de uma linha.

--[[
Adicionando dois "[" e "]" cria um
comentário de múltiplas linhas
--]]

----------------------------------------------------
-- 1. Variáveis e controle de fluxo.
----------------------------------------------------

num = 42 -- Todos os números são Double.
-- Não se espante, 64-bit Doubles têm 52 bits para armazenar valores inteiros exatos;
-- precisão da máquina não é um problema para inteiros que precisam de menos de 52 bits.

s = 'aspas simples' -- Strings imutáveis, como Python
t = "aspas duplas também funcionam"
u = [[ Chaves duplas
começam e terminam
uma string de múltiplas linhas. ]]
t = nil -- Indefine t; Lua tem coleta de lixo.

-- Blocos são denotados com palavras-chave como do/end:
while num < 50 do
num = num + 1 -- Não há os operadores ++ ou +=.
end

-- Condições If
if num > 40 then
print('acima de 40')
elseif s ~= 'aspas simples' then -- ~= significa diferente (não igual).
-- Igualdade é ==, como em Python; ok para strings.
io.write('não é maior que 40\n') -- Padrão de saída (stdout).
else
-- Variáveis são globais por padrão.
istoEhGlobal = 5 -- Camel Case é comum.

-- Como fazer uma variável local
local linha = io.read() -- Lê a próxima linha de entrada (stdin).

-- Concatenação de string usa o operador ..
print('O inverno está chegando, ' .. linha)
end

-- Variáveis indefinidas retornam nil.
-- Isto não é um erro:
nada = valorDesconhecido -- Agora nada = nil.

valorBooleano = false

-- Apenas nil e false são falsos; 0 e "" são true (verdadeiros)!
if not valorBooleano then print('falso') end

-- 'or' e 'and' funcionam em sistema de short-circuiting.
-- É semelhante ao operador a?b:c em C/JS:
resposta = valorBooleano and 'sim' or 'não' --> não

minhaSoma = 0
for i = 1, 100 do -- O alcance/raio/intervalo inclui ambos os fins [1-100]
minhaSoma = minhaSoma + 1
end

-- Use "100, 1, -1" como um alcance/raio/intervalo em ordem decrescente:
suaSoma = 0
for j = 100, 1, -1 do suaSoma = suaSoma + j end

-- Em geral, o alcance/raio/intervalo é Começo, Final[, Etapa].

-- Outra construção de loop:
repeat
print("Para o alto e avante")
num = num - 1
until num == 0

----------------------------------------------------
-- 2. Funções.
----------------------------------------------------

function Fibonacci(n)
if n < 2 then return 1 end
return Fibonacci(n - 2) + Fibonacci(n - 1)
end

-- Funções anônimas e "Closures" funcionam:
function adicionador(x)
-- A função retornada é criada quando adicionar é chamado
-- e lembra o valor de x
return function(y) return x + y end
end
a1 = adicionador(9)
a2 = adicionador(36)
print(a1(16)) --> 25
print(a2(64)) --> 100

-- Todos os retornos, chamadas de função e atribuições funcionam
-- como listas que talvez possam estar incompatíveis em comprimento/tamanho.
-- Variáveis incompatíveis são nil;
-- Valores incompatíveis são descartadas.

x, y, z = 1, 2, 3, 4
-- Agora x = 1, y = 2, z = 3, e 4 foi jogado fora.

function barra(a, b, c)
print(a, b, c)
return 4, 8, 16, 23, 42
end

x, y = barra("teste") --> Imprime "teste nil nil"
-- Agora x = 4, y = 8, valores de 15 até 42 são descartados.

-- Funções são primeira classe, podem ser locais ou globais.
-- Ambas são as mesmas:
function f(x) return x * x end
f = function(x) return x * x end

-- E também:
local function g(x) return math.sin(x) end
local g; g = function(x) return math.sin(x) end
-- A declaração 'local g' cria uma referência de/em g.

-- A propósito, funções trigonométricas trabalham em radiano.

-- Chamadas com um parâmetro não precisam de parênteses:
print 'hello' -- Funciona

----------------------------------------------------
-- 3. Tabelas.
----------------------------------------------------

-- Tabelas = Única estrutura de dados compostos em Lua; São arrays associativas.
-- Similar às arrays de PHP ou objetos de JS.
-- São como dicts (dicionários) em Python que podem ser usados, também, como listas.

-- Usando tabelas como dicionários / mapas:

-- Têm chaves de tipo string como padrão:
t = {chave1 = 'valor1', chave2 = false}

-- Chaves de tipo string usam notação com um ponto '.'
print(t.chave1) -- Imprime 'valor1'.
t.novaChave = {} -- Adiciona um novo par de chave/valor
t.chave2 = nil -- Remove chave2 da tabela.

-- Notação literal para qualquer valor não nulo como chave:
u = {["@!#"] = 'Brasil', [{}] = 1729, [1.41] = 'Órion'}
print(u[1.41]) -- Imprime 'Órion'.

-- Correspondência de chave é basicamente de valor para números e strings, mas por identidade por tabelas.
a = u["@!#"] -- Agora a = 'Brasil'
b = u[{}] -- Espera-se 1729, mas é nil:
-- b = nil porque a pesquisa falhou.
-- Falhou porque a chave usada não é o mesmo objeto que a usada para armazenar o valor original.
-- Então strings e números são chaves mais portáveis.

-- A chamada de uma função que contém apenas um parâmetro, tal sendo uma tabela, não precisa de parênteses:
function h(x) print(x.chave1) end
h{chave1 = 'Teste1234'} -- Imprime 'Teste1234'.

for chave, valor in pairs(u) do -- Iteração/Repetição de tabela
print(chave, valor)
end

-- _G é uma tabela especial que armazena todas as variáveis globais.
print(_G['_G'] == _G) -- Imprime 'true'.

-- Usando tabelas como listas / arrays:

-- Têm chaves de tipo inteiro como padrão:
v = {'valor1', 'valor2', 1.244, 'internet'}
for i = 1, #v do -- #v é o tamanho de v
print(v[i]) -- Índices começam em 1, não 0.
end
-- Uma 'lista' não é um tipo real. v é apenas uma tabela com
-- consecutivos índices inteiros, tratados como uma lista.

----------------------------------------------------
-- 3.1 Metatabelas e Metamétodos.
----------------------------------------------------

-- Uma tabela pode ter uma metatabela que fornece um comportamento de "operador de sobrecarga".
-- Depois veremos como metatabelas suportam comportamentos como os prototipados em JS.

f1 = {a = 1, b = 2} -- Representa a fração a/b .
f2 = {a = 2, b = 3}

-- Isso daria errado:
-- s = f1 + f2

metaFracao = {}
function metaFracao.__add(f1, f2)
soma = {}
soma.b = f1.b * f2.b
soma.a = f1.a * f2.b + f2.a * f1.b
return soma
end

setmetatable(f1, metaFracao)
setmetatable(f2, metaFracao)

s = f1 + f2 -- Chama __add(f1, f2) na metatabela de f1

-- f1, f2 não têm chaves para suas metatabelas, ao contrário dos protótipos em JS, então
-- podem ser recuperadas usando getmetatable(f1). A metatabela é uma tabela normal com
-- chaves das quais Lua reconhece, como __add.

-- Mas a próxima linha dá erro, uma vez que s não tem metatabela:
-- t = s + s
-- Padrões de "classes" dadas abaixo consertam isso.

-- Um __index numa metatabela sobrecarrega pesquisas com ponto '.':
favoritos = {animal = "Galinha Galinácea", comida = "Nachos"}
meusFavoritos = {comida = "Batata Frita"}
setmetatable(meusFavoritos,{__index = favoritos})
comidoPor = meusFavoritos.animal -- Funciona!

-- Pesquisas diretas com ponto '.' em tabelas que falharem tentarão novamente usando
-- o valor __index da metatabela e seus recursos.

-- Um valor __index pode ser também uma função, function(tabela, chave) para pesquisas mais customizadas.

-- Valores de __index, add, ... são chamados de metamétodos.
-- Todos os metamétodos estão listados abaixo, onde a é uma tabela com o metamétodo.

-- __add(a, b) --> para a + b
-- __sub(a, b) --> para a - b
-- __mul(a, b) --> para a * b
-- __div(a, b) --> para a / b
-- __mod(a, b) --> para a % b
-- __pow(a, b) --> para a ^ b
-- __unm(a) --> para -a
-- __concat(a, b) --> para a .. b
-- __len(a) --> para #a
-- __eq(a, b) --> para a == b
-- __lt(a, b) --> para a < b
-- __le(a, b) --> para a <= b
-- __index(a, b) --> Função ou tabela --> para a.b
-- __newindex(a, b, c) --> para a.b = c
-- __call(a, ...) --> para a(...)

--------------------------------------------------------
-- 3.2 Tabelas como classes e herança.
--------------------------------------------------------

-- Classes não vem embutidas; há formas diferentes de criá-las
-- usando tabelas e metatabelas.

-- Explicação abaixo do código.

planeta = {} -- 1.

function planeta:new(habitavel, celcius) -- 2.
novoObjeto = {vida = habitavel, temperatura = celcius} -- 3.
self.__index = self -- 4.
return setmetatable(novoObjeto, self) -- 5.
end

function planeta:verificarVida() -- 6.
print((not self.vida and "não " or "") .. "sou habitável! ")
end

marte = planeta:new(true, 30) -- 7.
marte:verificarVida() -- 8.

--[[ 1. planeta agirá como uma classe, mas é uma tabela.
2. function nomedatabela:funcao(...) é o mesmo que function nomedatabela.funcao(self, ...)
o : adiciona um primeiro argumento chamado self.
Leia 7 & 8 para ver como self pega seu valor.
3. novoObjeto será uma instância da classe planeta.
4. self = a classe sendo instanciada. Geralmente self = planeta, mas a herança pode alterar isso.
novoObjeto obtém as funções de self quando definimos as metatabelas de novoObjeto
e o __index de self em self.
5. setmetatable retorna seu primeiro argumento.
6. O : funciona como em 2, mas desta vez self será uma instância ao invés de uma classe.
7. O mesmo que planeta.new(planeta), então self = planeta em new().
8. O mesmo que marte.verificarVida(marte); self = marte. ]]

----------------------------------------------------

-- Exemplo de herança:

estrela = planeta:new(false, 1000) -- 1.

function estrela:calor()
s = self.temperatura .. "°C" -- 2.
print("Minha temperatura é de " .. s)
end

sirius = estrela:new() -- 3.
sirius:calor() -- 4.

--[[ 1. estrela obtém os métodos e variáveis de planeta.
2. self tem uma chave 'temperatura', vinda de new(), veja 3.
3. o mesmo que estrela.new(estrela), e convertido para
planeta.new(estrela) já que estrela não tem nova chave, mas
tem __index = planeta em sua metatabela.
Resultado: a metatabela de sirius é estrela, e estrela.__index = estrela,
então sirius.chave = sirius.chave, estrela.chave, planeta.chave, qualquer tabela
é a primeira com a chave dada.
4. A chave 'calor' se encontra em estrela; é o mesmo que estrela.calor(sirius). ]]

-- Se necessário, uma subclasse de new() é como a base:
function estrela:new()
novoObjeto = {}
-- configure novoObjeto
self.__index = self
return setmetatable(novoObjeto, self)
end

--[[
Criado pelo usuário do Github Tylerneylon (veja oficial https://gist.github.com/tylerneylon/5853042)
Traduzido por Bolodefchoco e publicado por Rikkeshang.

Poste suas dúvidas no tópico.
Rode o script, ele funciona!

Divirta-se com Lua (:.
]]

Dernière modification le 1493340780000
Malucarr
« Citoyen »
1493254860000
    • Malucarr#0000
    • Profil
    • Derniers messages
#2
  0
Bom tópico
Ametista_1
« Consul »
1493258700000
    • Ametista_1#0000
    • Profil
    • Derniers messages
    • Tribu
#3
  2
Juro que vou ler isso
Ninguem
« Consul »
1493258940000
    • Ninguem#0095
    • Profil
    • Derniers messages
    • Tribu
#4
  1
Muito bom, mas é pra quem já sabe programar mesmo. Seria uma apresentação da sintaxe e particularidades do lua. Fiquei surpreso em saber que você pode chamar uma função sem os ().
Favelada
« Consul »
1493267460000
    • Favelada#6672
    • Profil
    • Derniers messages
    • Tribu
#5
  0
ADOREEEEEEI. Depois vou ler com calma.

Acho que ficará um pouco complicado para quem não tem a lógica de programação.
Dica: Se você não tem a lógica de programação ainda, precisa aprender algoritmos.
Mescouleur
« Citoyen »
1493270340000
    • Mescouleur#0000
    • Profil
    • Derniers messages
#6
  0
Paulmarques a dit :
ADOREEEEEEI. Depois vou ler com calma.

Acho que ficará um pouco complicado para quem não tem a lógica de programação.
Dica: Se você não tem a lógica de programação ainda, precisa aprender algoritmos.
Hydroper
« Citoyen »
1493319600000
    • Hydroper#0528
    • Profil
    • Derniers messages
    • Tribu
#7
  0
Faltou mostrar o formato longo de comentários e strings

Code Lua

1
--[nível[]nível]

Onde nível é = ou nível + =.

Code Lua

1
--[=====[]=====]

E

Code Lua

1
g = function(x) return math.sin(x) end

dá no mesmo que :v

Code Lua

1
function g(x) return math.sin(x) end

Dernière modification le 1499526420000
Ikke
« Sénateur »
1493340960000
    • Ikke#0020
    • Profil
    • Derniers messages
    • Tribu
#8
  0
Paulmarques a dit :
ADOREEEEEEI. Depois vou ler com calma.

Acho que ficará um pouco complicado para quem não tem a lógica de programação.
Dica: Se você não tem a lógica de programação ainda, precisa aprender algoritmos.

Como dito no título, o tópico não é para reais iniciantes em programação, mas em lua. :P

Profiver a dit :
Faltou mostrar a opção de nível dos comentários

Code Lua

1
--[nível[]nível]

Nível seria uma sequência de =, por exemplo:

Code Lua

1
--[=====[]=====]

E

Code Lua

1
g = function(x) return math.sin(x) end

dá no mesmo que :v

Code Lua

1
function g(x) return math.sin(x) end

Sim Sim
Mahilaria
« Consul »
1493380740000
    • Mahilaria#0000
    • Profil
    • Derniers messages
    • Tribu
#9
  0
Ametista_1 a dit :
Juro que vou ler isso
Niko
« Consul »
1493383920000
    • Niko#1775
    • Profil
    • Derniers messages
    • Tribu
#10
  0
Paulmarques a dit :
ADOREEEEEEI. Depois vou ler com calma.

Acho que ficará um pouco complicado para quem não tem a lógica de programação.
Dica: Se você não tem a lógica de programação ainda, precisa aprender algoritmos.
Impressorahp
« Citoyen »
1493479800000
    • Impressorahp#2775
    • Profil
    • Derniers messages
    • Tribu
#11
  1
Muito bom. Interessante levei mais de 15 minutos
Millydc
« Sénateur »
1496016600000
    • Millydc#0000
    • Profil
    • Derniers messages
#12
  0
ótimo tópico.
Zarphis
« Censeur »
1496028780000
    • Zarphis#0000
    • Profil
    • Derniers messages
    • Tribu
#13
  0
Eu até entendi, eu só não vejo, vamos dizer, uma boa aplicação pra editar LUA, com as Highlights que um Visual Studio teria (Costume mesmo).
Bemgotica
« Citoyen »
1496073600000
    • Bemgotica#0000
    • Profil
    • Derniers messages
    • Tribu
#14
  0
Uma pergunta, o que é LUA? rs
Reppam
« Censeur »
1496085000000
    • Reppam#0000
    • Profil
    • Derniers messages
    • Tribu
#15
  0
Bemgotica a dit :
Uma pergunta, o que é LUA? rs

Primeiramente, Lua não é uma sigla, portanto se escreve como um substantivo: "Lua".
Lua é uma linguagem de programação, da qual você tem acesso no jogo por meio do comando /lua

Zarphis a dit :
Eu até entendi, eu só não vejo, vamos dizer, uma boa aplicação pra editar LUA, com as Highlights que um Visual Studio teria (Costume mesmo).

Se você está falando apenas de Highlight, pode usar o Notepad++ mesmo, eu uso o Solarized Dark e acho agradável.
Bemgotica
« Citoyen »
1496100180000
    • Bemgotica#0000
    • Profil
    • Derniers messages
    • Tribu
#16
  0
Reppam a dit :
Bemgotica a dit :
Uma pergunta, o que é LUA? rs

Primeiramente, Lua não é uma sigla, portanto se escreve como um substantivo: "Lua".
Lua é uma linguagem de programação, da qual você tem acesso no jogo por meio do comando /lua

Zarphis a dit :
Eu até entendi, eu só não vejo, vamos dizer, uma boa aplicação pra editar LUA, com as Highlights que um Visual Studio teria (Costume mesmo).

Se você está falando apenas de Highlight, pode usar o Notepad++ mesmo, eu uso o Solarized Dark e acho agradável.

Ah
entendi
Brenower
« Censeur »
1497793560000
    • Brenower#0000
    • Profil
    • Derniers messages
    • Tribu
#17
  0
Zarphis a dit :
Eu até entendi, eu só não vejo, vamos dizer, uma boa aplicação pra editar LUA, com as Highlights que um Visual Studio teria (Costume mesmo).

visual studio code ué
Zezinretardado
« Citoyen »
1497811680000
    • Zezinretardado#2606
    • Profil
    • Derniers messages
#18
  1
what eu tava achando as programações de /lua já criados bem faceis e tava fazendo bem diferente mudando cores textos e algumas coisinhas a mais mas quando fui ver n entendi porra nenhuma
Zezinretardado
« Citoyen »
1497811800000
    • Zezinretardado#2606
    • Profil
    • Derniers messages
#19
  1
só entendi o começo e dps confundi tudo
Ak3m
« Citoyen »
1499466900000
    • Ak3m#4493
    • Profil
    • Derniers messages
    • Tribu
#20
  0
COMO ASSIM N EH PRA BAIXINHOS? SE FOR PQ TEM COISA DE SLA ENSINO MEDIO, E POR ISSO Q N ENTENDI QUASE Q @#@% NENHUMA
  • Forums
  • /
  • Transformice
  • /
  • Modules
  • /
  • [Tutorial] Aprenda Lua em 15 minutos (Não é para baixinhos!)
1 / 3 › »
© Atelier801 2018

Equipe Conditions Générales d'Utilisation Politique de Confidentialité Contact

Version 1.27