MaXwEllDeN 13 #1 Posted October 6, 2011 (edited) Olá Galera, hoje vou postar um tutorial que ensina você a deixar seu código mais bonito, legível e organizado. Vamos lá. Em primeiro lugar vamos aprender oque é indentação ou identação. Identação ou Indentação é básicamente a organização de um código, usando tabulações e organizando os blocos de um código por tabulações diferentes. Exemplo de um código com indentação: function doPlayerCompleteQuest(uid, quest) doPlayerAddItem(uid, quest[1], quest[2]) setPlayerStorageValue(uid, quest[3], 1) doTeleportThing(uid, getTownPosition(getPlayerTown(uid))) doPlayerSendTextMessage(uid, 27, "Você completou a quest ".. quest[4] ..".") if (getPlayerStorageValue(uid, quest[5]) > 0) then doPlayerSendTextMessage(uid, 27, "E recebeu um bônus por ter completado outra quest.") end return true end Este mesmo código, mas agora sem indentação: function doPlayerCompleteQuest(uid,quest) doPlayerAddItem(uid,quest[1],quest[2]) setPlayerStorageValue(uid,quest[3],1) doTeleportThing(uid,getTownPosition(getPlayerTown(uid))) doPlayerSendTextMessage(uid,27,"Você completou a quest "..quest[4]..".") if (getPlayerStorageValue(uid,quest[5])>0) then doPlayerSendTextMessage(uid,27,"E recebeu um bônus por ter completado outra quest.") end return true end Um código com indentação, a primeira vista pode não ser nada de mais. Porém se você fizer um código grande, com muitas funções, condições e declarações, uma boa indentação deixa seu código muito mais fácil de ser lido por outros programadores e até por você mesmo e ser modificado também. Enquanto eu lia um livro sobre C++, encontrei uma lista de algumas boas práticas para programar que eu já conhecia e outras que aprendí. Listarei algumas delas aqui. Escreva seus códigos de uma maneira simples e direta. Isto é, às vezes chamado de KIS (“mantenha-o simples” - Keep It Simple). Não “force” a linguagem usando códigos grandes quando poderia ser feito de um modo pequeno. Por exemplo, um código poderia ser feito desse modo: function addLifeWithInterval(uid, life, interval) function add() if (isCreature(uid)) then doCreatureAddHealth(uid, life) end end add() addEvent(add, 2*interval) addEvent(add, 3*interval) addEvent(add, 4*interval) addEvent(add, 5*interval) addEvent(add, 6*interval) addEvent(add, 7*interval) addEvent(add, 8*interval) addEvent(add, 9*interval) addEvent(add, 10*interval) addEvent(add, 11*interval) addEvent(add, 12*interval) addEvent(add, 13*interval) addEvent(add, 14*interval) addEvent(add, 15*interval) addEvent(add, 16*interval) addEvent(add, 17*interval) addEvent(add, 18*interval) addEvent(add, 19*interval) return true end Quando poderia ser feito usando menos linhas, desse outro modo: function addLifeWithInterval(uid, life, interval) function add() if (isCreature(uid)) then doCreatureAddHealth(uid, life) end end add() for a = 1, 19 do addEvent(add, a*interval) end return true end Leia os manuais para a versão de LUA que você está usando. Consulte estes manuais com freqüência, para certificar-se de que esteja ciente da rica relação de recursos que LUA apresenta e de que está usando estes recursos corretamente. Recue o corpo inteiro de cada função um nível de indentação nas marcas de tabulação que definem o corpo da função. Isto faz com que a estrutura funcional de um programa se destaque e ajuda a tornar os programas mais fáceis de ler. Estabeleça uma convenção para o tamanho dos recuos de indentação que você prefere; então, aplique uniformemente essa convenção. A tecla de tabulação pode ser usada para criar recuos, mas pontos de tabulação podem variar Recomendamos usar espaços entre tabulações de 1/4 de polegada ou (preferível) três espaços para criar o recuo para um nível de indentação. Alguns programadores preferem declarar cada variável em uma linha separada. Este formato permite a fácil inserção de um comentário descritivo após cada declaração. Coloque um espaço após cada vírgula ( , ) para tornar os programas mais legíveis. Escolher nomes de variáveis significativos ajuda um programa a ser “autodocumentado “, isto é, torna mais fácil de entender o programa simplesmente lendo-o, em vez de ter que ler manuais ou usar comentários em excesso. Sempre coloque uma linha em branco entre uma declaração e comandos executáveis adjacentes. Isto faz com que as declarações se destaquem no programa, contribuindo para a clareza do mesmo. Se você preferir colocar declarações no início de uma função, separe essas declarações dos comandos executáveis da função com uma linha em branco, para destacar onde as declarações terminam e os comandos executáveis começam. Coloque espaços dos dois lados de um operador binário. Isto faz com que o operador se destaque, tornando o programa mais legível. Exemplo: print(1 + 1) Como na álgebra, é aceitável se colocar parênteses desnecessários em uma expressão para torná-la mais clara. Estes parênteses são chamados de redundantes. Parênteses redundantes são usados comumente para agrupar subexpressões de uma expressão grande, para tornar a expressão mais clara. Quebrar um comando longo em uma seqüência de comandos mais curtos e mais simples também aumenta a clareza. Indente o comando que compõe o corpo de uma estrutura if para fazer com que o corpo da estrutura se destaque, melhorando desta forma a legibilidade. Em um código não deve haver mais que um comando por linha. Exemplo: function addLifeWithInterval(uid, life, interval) function add() if (isCreature(uid)) then doCreatureAddHealth(uid, life) end end add() for a = 1, 19 do addEvent(add, a*interval)end return true end Para tabelas com muitos parâmetros tecle enter e dê um "tab". Exemplo: config = { life = {max = 150, min = 250}, vocations = {1, 2, 3, 4}, premmy = true, levelmin = 150, flags = { ["blue"] = {pos = {x = 160, y = 54, z = 7}, flagid = 2175}, ["red"] = {pos = {x = 220, y = 75, z = 7}, flagid = 2170}, } } Sempre que puder use variáveis locais, isso garante que não haja nenhum conflito com outros scripts. Bem, com essas dicas ai eu acho que muitas pessoas podem melhorar o estilo de programar , Falous galera. Abraço. Edited October 10, 2011 by MaXwEllDeN Share this post Link to post
Majesty 1,758 #2 Posted October 7, 2011 Obrigado por sua contribuição, Aprovado. Share this post Link to post
vyctor17 35 #3 Posted October 7, 2011 @topic muito bom indentaçao é uma coisa que parece complicada mais é facil facil é so treinar o skyen me ajudo muito nisso Share this post Link to post
Lwkass 1 #4 Posted October 10, 2011 Ótimo tutorial, todo iniciante deveria ler um tópico desse, são boas práticas que aumentam até a qualidade do script e com certeza isso ajuda mais pra frente ! Te remunerei com mais 25v$ do meu bolso pelo tutorial Share this post Link to post
Mock 32 #5 Posted October 10, 2011 (edited) Pequeno erro no tutorial detected. function addLifeWithInterval(uid, life, interval) function add() if (isCreature(uid)) then doCreatureAddHealth(uid, life) end end add() addEvent(add, interval) addEvent(add, interval) addEvent(add, interval) addEvent(add, interval) addEvent(add, interval) addEvent(add, interval) addEvent(add, interval) addEvent(add, interval) addEvent(add, interval) addEvent(add, interval) addEvent(add, interval) addEvent(add, interval) addEvent(add, interval) addEvent(add, interval) addEvent(add, interval) addEvent(add, interval) addEvent(add, interval) addEvent(add, interval) addEvent(add, interval) return true end Você nesse code vai adcionar hp depois de um intervalo, porem todos estao iguais ou seja o intervalo será igual a todos, quando passar o tempo a função executara 19 vezes seguidas porem ao mesmo tempo. Ja no segundo code você pois for a = 1, 19 do addEvent(add, a*interval) end com o A multiplicando o intervalo, ai sim a cada X de tmepo ele vai adcionar e nao tudo de uma vez. Ajeite isso ai, eu falo isso nao para trollar seu topico mais por que ja tive problemas com algo bem parecido quando fui aprender loops. Edited October 10, 2011 by Mock Share this post Link to post
MaXwEllDeN 13 #6 Posted October 10, 2011 (edited) @Lwkass Muito Obrigado Lwkass. @Mock Erro bobo Mock, obrigado por avisar . Edited October 10, 2011 by MaXwEllDeN Share this post Link to post
vamppuncker 2 #7 Posted October 18, 2011 Com certeza, indentação é 50% do script Share this post Link to post
Guiminhah 0 #8 Posted October 20, 2011 Li tudo, e absorvi bastante coisa desse tutorial, já to pondo em prática! (: Abraaços! Share this post Link to post
the_labrax 0 #9 Posted December 20, 2011 (edited) . Edited November 1, 2014 by the_labrax Share this post Link to post