Jump to content
Sign in to follow this  
Dean

Criando funções

Recommended Posts

Dean    1
Dean

Criando funções

 

Nesse breve tutorial vou tentar explicar da forma mais simples possível como criar funções, principalmente para pessoas que entraram recentemente no universo de Lua.

 

 

Como fazer funções?

 

Quando você cria um script para otserver, uma action por exemplo,geralmente se inicia com uma function onUse(...).

 

Quando se faz isso, você está simplesmente criando uma função em Lua, que será executada pelo software em C++ que roda o servidor, assim executando o script.

 

Na declaração de uma função, usamos a seguinte sintaxe:


function nomeDaFunção()
corpoDaFunção
end

 

Ou a seguinte:


nomeDaFunção = function()
corpoDaFunção
end

 

Em nomeDaFunção, você definirá um nome para ser usado, no corpo da função você colocará tudo que quiser que ela execute, lembrando que para ela retornar alguma coisa terá que ser usado o comando return.

 

Parâmetros

 

São como variáveis,que ao ser executada a função é atribuido um valor e eles, exemplo:

 


function somar(p1,p2)
return p1+p2
end

 

Ele irá retornar a soma dos dois parâmetros aos quais será atribuído um valor quando é executada a função, exemplo:

 


somar(1,2)

 

Nesse exemplo, será atribuído o valor 1 e 2 a p1 e p2, respectivamente, se não declararmos esses argumentos ao executar a função, p1 e p2 se tornarão nulos.

 

Vamos voltar ao exemplo da function onUse(cid,item,topos,item2,frompos).Se quando ela é executada pelo servidor, por exemplo, sejam dados os seguintes valores:


onUse(10,{itemid = 1,actionid = 0,uid = 0},{x,y,z},{itemid = 2,actionid = 0,uid = 0},{x,y,z})

 

Nesse exemplo, os valores cid,item,topos,item2,frompos valerão 10,{itemid = 1,actionid = 0,uid = 0},{x,y,z},{itemid = 2,actionid = 0,uid = 0},{x,y,z}.

 

Outro exemplo, você quer fazer uma função que consiga o nome do player, você fará assim:


function getName([b]cid[/b])
[b] return[/b] getPlayerName([b]cid[/b])
end

 

Observe, que quando for atribuído o valor de cid, ele será usado para outra função, que conseguirá o nome do player, e observe também o return, sem ele a função não iria funcionar, iria retornar nulo.

 

 

 

Exercícios

 

Faça uma função que pegue 2 valores definidos ao executar a função, e insira todos em uma tabela.Depois printe os valores.

 

[spoiler=Resposta]

[spoiler=Certeza?]

[spoiler=Absoluta?]


function inserir(a,B)
t = {}
table.insert(t,a)
table.insert(t,B)
return print(unpack(t))
end

 

 

 

 

 

 

 

Espero que tenham entendido, se tiverem alguma dpuvida por favor perguntem.

Edited by Mickfern

Share this post


Link to post
batman_da_salada    32
batman_da_salada

Gostei do tutorial ^^

ta bem feito e talz

aprovado.

Share this post


Link to post
Socket    0
Socket

Ótimo tutorial para os iniciantes.

Você esqueceu de citar que a seguinte sintaxe:

function nomeDaFunção()
 corpoDaFunção
end

É a famosa Syntax Sugar. E que existe a outra sintaxe:

nomeDaFunção = function()
 corpoDaFunção
end

Edited by Mickfern

Share this post


Link to post
Roku    0
Roku

EDIT: nao vi o post do kra acima

Bom tutorial mais podia fazer uma continuação explicando diferenças como:

print(oqueretornar)

Para:

return oqueretornar

E semelhanças como:

local name = function(a,

Para:

function name(a,

 

Continue compatilhando seu conhecimento:

;)

Edited by Mickfern

Share this post


Link to post
Dean    1
Dean

@Mock

Vlw

@Socket e Roku

Eu ia citar isso, mas como queria fazer um tutorial simplificado decidi não entrar muito em detalhes.Mas agora pensei melhor, acho que vou colocar, obrigado.

Share this post


Link to post
savioeduardo    0
savioeduardo

eu só não entendi o unpack, o que ele significa?

Share this post


Link to post
Roku    0
Roku

oq é unpack?

Share this post


Link to post
Juan Barcena    0
Juan Barcena

por se tratar de uma tabela de valores e depois tem que printar os valores desta, creio que unpack signifique imprimir todos os valores da tabela oras .-.

Share this post


Link to post
Socket    0
Socket

Quanto a perguntas de vários sobre o unpack:

O unpack, que significa literalmente "desempacotar", é usado em tabelas e simplesmente retorna todos os valores da tabela entre vírgulas (",").

 

@Topic

Mais uma coisa que você poderia citar:

Quando será definido apenas um argumento, e esse argumento é uma string ou uma tabela, e simples, ou seja, não for um variável nem uma função que retorne uma string ou uma tabela, não é necessário o uso de parenteses.

Um exemplo disso é o print:

print{1,2,3} -- OK
print "123" -- OK
string = "123"
print string -- NO
print string.format("oi %s", "socket") -- NO

Com isso podemos criar uma função diferente:

function concat(n)
   return print(n.greet .. " " .. n.name)
end

concat{greet = "Oi", name = "Socket"}

Att. Socket

Edited by Socket

Share this post


Link to post
Guest
This topic is now closed to further replies.
Sign in to follow this  
  • Recently Browsing   0 members

    No registered users viewing this page.

×