Ir para conteúdo
  • Cadastre-se

Duvida básica sobre return


Posts Recomendados

Olá, eu gostária de tirar uma dúvida, ultimamente ando mechendo com scripts, gostaria de saber para que serve a função 

return 1, return 0, return false, return true, etc..

Procurei alguns tutoriais mas eles não explicam o porque.

Des de já, grato.

Deixei um script da obsidian knife para quem puder me explicar baseado nele

function onUse(cid, item, frompos, item2, topos)

if item2.itemid == 0 then
return 0
end


random = math.random(1,15)

if getPlayerLevel(cid) >= 8 then

if item2.itemid == 2881 and random == 1 then
doTransformItem(cid,item2.uid,2660)
doPlayerAddItem(cid,5948,1)

elseif item2.itemid == 2881 and random == 2 then
doTransformItem(item2.uid,2882)
doSendMagicEffect(topos,3)

elseif item2.itemid == 2881 and random == 3 then
doTransformItem(item2.uid,2882)
doSendMagicEffect(topos,3)

elseif item2.itemid == 2881 and random == 4 then
doTransformItem(item2.uid,2882)
doSendMagicEffect(topos,3)

elseif item2.itemid == 2881 and random == 5 then
doTransformItem(item2.uid,2882)
doSendMagicEffect(topos,3)

elseif item2.itemid == 2881 and random == 6 then
doTransformItem(item2.uid,2882)
doSendMagicEffect(topos,3)

elseif item2.itemid == 2881 and random == 7 then
doTransformItem(item2.uid,2882)
doSendMagicEffect(topos,3)

elseif item2.itemid == 2881 and random == 8 then
doTransformItem(item2.uid,2882)
doPlayerAddItem(cid,5948,1)

elseif item2.itemid == 2881 and random == 9 then
doTransformItem(item2.uid,2882)
doSendMagicEffect(topos,3)

elseif item2.itemid == 2881 and random == 10 then
doTransformItem(item2.uid,2882)
doSendMagicEffect(topos,3)

elseif item2.itemid == 2881 and random == 11 then
doTransformItem(item2.uid,2882)
doSendMagicEffect(topos,3)

elseif item2.itemid == 2881 and random == 12 then
doTransformItem(item2.uid,2882)
doSendMagicEffect(topos,3)

elseif item2.itemid == 2881 and random == 13 then
doTransformItem(item2.uid,2882)
doPlayerAddItem(cid,5948,1)

elseif item2.itemid == 2881 and random == 14 then
doTransformItem(item2.uid,2882)
doSendMagicEffect(topos,3)

elseif item2.itemid == 2881 and random == 15 then
doTransformItem(item2.uid,2882)
doSendMagicEffect(topos,3)



end
end
return 1
end

Editado por esnio12 (veja o histórico de edições)
Link para o post
Compartilhar em outros sites

Return é um comando (uma função "disfarçada"). Ele é usado para retornar valores de uma função ou trecho, sempre sendo escrito no fim de um bloco. Em Lua, se você retornar 0, 1 ou qualquer valor, irá retornar 0, 1 ou esse valor.
Para determinar o resultado de um callback, de modo que o mesmo possa ou não ser executado, o correto é fazer uso dos valores booleanos true / false (a menos que a função em questão seja para retornar um valor específico, como uma string/algarismo/tabela/variável/função/qualquer coisa).

The corrupt fear us.

The honest support us.

The heroic join us.

Link para o post
Compartilhar em outros sites

O @Suicide está correto. Mas se ainda sim você não entendeu, vou tentar simplificar.

 

Eu tenho uma função:

function minhaFuncao()
    return "TK"
end

O return atribui um valor á ela.

 

Ou seja:

a = minhaFuncao()
b = "TK"

a tem o mesmo valor de b.

 

O return pode atribuir qualquer tipo de dado válido á uma função, até mesmo nil, que é "nada".

 

Quanto ao uso do true, false, 1, 0. Geralmente é usado para saber se foi feito o esperado.

1 = true

0 = false

 

false = Falso

true = Verdadeiro.

Editado por Gabrielbsales (veja o histórico de edições)

Att. Featzen.

Link para o post
Compartilhar em outros sites
O return pode atribuir qualquer tipo de dado válido á uma função, até mesmo nil, que é "nada".

 

Quanto ao uso do true, false, 1, 0. Geralmente é usado para saber se foi feito o esperado.

1 = true

0 = false

 

false = Falso

true = Verdadeiro.

Calma.

nil significa nulo, é um valor nulo.

Em outras linguagens de programação, 0 e 1 representam false e true (respectivamente), como você disse. Porém, em Lua, o correto é fazer uso dos valores booleanos true e false. O que acontece, é que provavelmente, alguns (ou a maioria) dos servidores de open tibia devem ter algo declarando que true = 1 e false = 0.

Na linguagem Lua (em si), se você retornar 1, irá simplesmente resultar no número 1 (sem alterações provenientes disso).

The corrupt fear us.

The honest support us.

The heroic join us.

Link para o post
Compartilhar em outros sites

Calma.

nil significa nulo, é um valor nulo.

Em outras linguagens de programação, 0 e 1 representam false e true (respectivamente), como você disse. Porém, em Lua, o correto é fazer uso dos valores booleanos true e false. O que acontece, é que provavelmente, alguns (ou a maioria) dos servidores de open tibia devem ter algo declarando que true = 1 e false = 0.

Na linguagem Lua (em si), se você retornar 1, irá simplesmente retornar o número 1 (sem alterações provenientes disso).

 

Sim, mas no caso citado, é apenas o costume de quem programou.

1 - Inteiro.

False - Booleano.

Att. Featzen.

Link para o post
Compartilhar em outros sites
Sim, mas no caso citado, é apenas o costume de quem programou.

 

Certo. Porém, não deixa de ser incorreto em Lua.

The corrupt fear us.

The honest support us.

The heroic join us.

Link para o post
Compartilhar em outros sites

Se for retornar boolean é true ou false, não existe return 1 ou TRUE.. é exatamente oque o suicide disse, mas não é uma função disfarçada e sim um comando da própria função.

Todos os meus trabalhos importantes estão na seção "Sobre mim" no meu perfil; Dá uma passada lá!

"Há três caminhos para o fracasso: não ensinar o que se sabe, não praticar o que se ensina, e não perguntar o que se ignora." - São Beda

I7Pm6ih.png

(obg ao @Beeny por fazer essa linda sign <3)

Link para o post
Compartilhar em outros sites

Agradeço a todos pela explicação, sempre quis saber para o que significava, por que a maioria dos scripts que fiz, não vi nenhum motivo para usa-los.

Link para o post
Compartilhar em outros sites

em lua que você usa no open tibia não faz muito sentido usar return (com excessão de algumas funções que precisam retornar algo ou nos callbacks) mas em java, por exemplo, tem de maneira bem definida o motivo de se usar return.

da mesma forma que vc tem algumas spells feitas dessa maneira aqui:

function onCastSpell(cid, var)
    return doCombat(cid, combat, var)
end

você poderia muito bem apenas fazer isso:

function onCastSpell(cid, var)
   doCombat(cid, combat, var)
return true
end

o motivo principal de você poder colocar return 1 ou return TRUE e dar certo é porque lua tem uma propriedade de considerar como true qualquer variável ou numero existente.


se eu fizer local FALSE = "auhhueuhaiuehu" e por return FALSE ele vai verificar se FALSE existe e já que eu defini anteriormente que ele existe e tem o valor de uma string "auhhueuhaiuehu" então ele vai entender FALSE como true e executar tudo certinho. nil e false PODEM ser interpretados como false dependendo do caso mas eles são coisas diferentes visto que o primeiro representa um valor nulo e o segundo um valor inexistente ou falso.

em java temos classes de funções que retornam coisas e elas são definidas da seguinte maneira:
 

public ____ NomeDaFunção (parametros) {
// oque a função faz aqui
return (algo do mesmo tipo que ____)
}

ali no ____ eu posso colocar int, double, arrayList, array, string, boolean e outros tipos (int são numeros inteiros e double são números com virgula.)

então uma função simples que retorna multiplicação de dois números seria assim:

public int multiplication (int a, int b) {
return a * b
}

e qnd eu usasse a = multiplication(5, 10) iria automaticamente setar a como sendo 50 pois é oque a função retorna.

Analogamente temos funções que não retornam nada, elas só fazem alguma coisa sem retornar nada e por isso são do tipo "void"

public void mandarMensagem() {
print("Insira a mensagem aqui")
}

e se eu fizer a = mandarMensagem() vai setar a como sendo nil pois essa função não retorna nada. Entendeu + ou - agora?

Todos os meus trabalhos importantes estão na seção "Sobre mim" no meu perfil; Dá uma passada lá!

"Há três caminhos para o fracasso: não ensinar o que se sabe, não praticar o que se ensina, e não perguntar o que se ignora." - São Beda

I7Pm6ih.png

(obg ao @Beeny por fazer essa linda sign <3)

Link para o post
Compartilhar em outros sites

Participe da conversa

Você pode postar agora e se cadastrar mais tarde. Se você tem uma conta, faça o login para postar com sua conta.

Visitante
Responder

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emojis são permitidos.

×   Seu link foi automaticamente incorporado.   Mostrar como link

×   Seu conteúdo anterior foi restaurado.   Limpar o editor

×   Não é possível colar imagens diretamente. Carregar ou inserir imagens do URL.

  • Quem Está Navegando   0 membros estão online

    Nenhum usuário registrado visualizando esta página.

×
×
  • Criar Novo...

Informação Importante

Confirmação de Termo