Forums » RGSS

[Básico] Aula 7: Boas Práticas Parte 1

    • 683 posts
    4 de junho de 2015 13h32min40s ART

    Aula 7: Boas Práticas Parte 1

     

    Imagem Postada
    www.mundorpgmaker.com
    This work is licensed under a Creative Commons Atribuição-Uso não-comercial-Compartilhamento pela mesma licença 3.0 Unported License.

     

    Índice
    • 7.0 - Os recuos
    • 7.1 - Os comentários
    • 7.2 - Estruturas de repetição e arrays
    • 7.3 - Conclusão
    • 7.4 - Dever de casa

     

    7.0 - Os recuos

     

          Nas aulas passadas, eu estava falando superficialmente das coisas.Quando se é scripter, existem boas práticas que podemos tomar.Essas práticas podem facilitar uma posterior modificação de um script seu, pode ajudar na correção de bugs e na próprio entendimento de um código.Não considero obrigatório executar essas práticas, porém é MUITO recomendável.Começarei falando então dos recuos.


          Quando falo dos recuos, me refiro a usar espaços e tabulações no código: nós scripters podemos utilizar recuos para diferenciar definições, diferenciar estruturas de repetição e estruturar de decisão.Normamelmente para recuos usamos tabulações.Por exemplo, veja esse código com recuos ruins:


    def somar soma =5+6       p soma     end

          Uma regra muito importante: subimos um recuo toda vez que começamos um "def" e um "class" ou toda vez que usamos "if", "case", e todas aquelas estruturas.Em geral, subimos um recuo quando começamos qualquer coisa que usa o "end", e deixamos o "end" com a mesma quantidade de recuos dessa coisa. Quando digo recuos no RMXP, quero dizer uma tabulação, para usar o recuo pressione TAB uma vez.Se bem que, quando você começa uma nova linha, o editor de scripts já faz um recuo de uma tabulação para você.Vamos melhorar o código passado aos poucos.Primeiro, vamos deixar "soma = 5 + 6" com um recuo apenas, pois ele vem logo após o nosso "def":


    def somar   soma =5+6       p soma     end

          Deixemos agora o "p soma" com um recuo apenas também:


    def somar   soma =5+6   p soma     end

          Agora falta deixar o "end" com a mesma quantidade de recuos que "def somar".Nosso código ficará assim:


    def somar   soma =5+6   p soma end

    Affes, para que usar recuos Thiago, nem percebi diferença na hora de executar o código?!

          Usar recuos enfatiza o fato de um código estar dentro de um def/classe/if/etc.No caso passado, para olhar o que estava dentro do "def somar", bastaria apenas observar os recuos, ou seja, os recuos facilitam na pesquisa dentro de um código, caso queira modificá-lo.Além disso,eles deixam nosso código muito mais bonito =D.


    Mais um exemplo
    def decisao       num1 =5   num2 =5if num1 == num2     if num1 ==5 p "Que coisa Idiota"endendend

          Cons bons recuos, esse código ficaria assim:


    def decisao   num1 =5   num2 =5   if num1 == num2     if num1 ==5       p "Que coisa Idiota"     end   endend

          Observe que subimos um recuo ao chegarmos em "def decisao", "if num1 == num2", "if num1 == 5", e depois voltamos um recuo para cada "end" que digitamos.

     

    7.1 - Os comentários

     

          Os comentários são recursos muito úteis ao se fazer scripts.Com eles, você pode deixar instruções no seu script, documentar ele, e muito mais. Eu já havia falado sobre eles na aula 4: aqui irei demonstrar como os comentários podem ser úteis.Lembrando, os comentários so servem para documentar um script, e eles não executam nenhuma ação.


          Um comentário é a parte verde dos scripts.Podemos usar os comentários para explicar o que um método/classe faz, assim como nesse código da Window_Base:


    #--------------------------------------------------------------------------   # Desenhar Gráfico   #   #    actor : Herói   #    x    : Desenhar a partir da coordenada x   #    y    : Desenhar a partir da coordenada y   #--------------------------------------------------------------------------     def draw_actor_graphic(actor, x, y)     bitmap = RPG::Cache.character(actor.character_name, actor.character_hue)     cw = bitmap.width /4     ch = bitmap.height /4     src_rect =Rect.new(0,0, cw, ch)     self.contents.blt(x - cw /2, y - ch, bitmap, src_rect)   end

          Observe que comentário interessante! Ele explica exatamente o que o método draw_actor_graphic faz, e explica também o que é necessário passar ao método ao executá-lo: o actor, a coordenada x e a coordenada y.Eu aprovo esse tipo de comentário, se bem que eu nem uso kkkkkkk, isso porque geralmente não quero explicar esse tipo de coisa para quem usa meus scripts.O que não justifica, já que esse tipo de comentário ajuda até você mesmo a se lembrar o que um método que você fez faz.Legal não é?O melhor de tudo é que os scripts do RPG Maker estão quase todos bem comentados, o que facilita até mesmo você aprender sozinho algumas coisa desses scripts.


          Outro comentário interessante é esse que usei em um dos meus scripts:


    # TSDA Cancel# Última atualização: 29/05/2010# ----Créditos#    thiago_d_d - por fazer o TSDA Cancel##--------------------------------------------------------------# * Características#--------------------------------------------------------------# + Adiciona a possibilidade do cancelamento de habilidades,ou#  seja,certas habilidades,dependendo da sorte,poderão não#  funcionar caso o alvo da habilidade tenha uma#  inteligência menor que o usuário da habilidade.##--------------------------------------------------------------# * Instalação#--------------------------------------------------------------# Cole esse script acima de Main##--------------------------------------------------------------# * Configuração#--------------------------------------------------------------# Para deixar mais maleável,é deve-se especificar as# habilidades que podem ser canceladas,mudando a linha# na qual está escrito CANCEL_IDS,no module TSDA. As IDS# das habilidades que podem ser canceladas devem ser separadas# com vírgula e devem estar entre [].#==============================================================

          Observe que coloquei esse comentário no começo do meu script, pois ele contém as intruções do tal script.Essa é uma ÓTIMA prática e eu recomendo.

     

    7.2 - Estruturas de repetição e arrays

     

          Às vezes, podemos fazer códigos repetitivos, que poderiam ser resumidos em uma estrutura de repetição.Usar estruturas de repetição deixa o código mais modificável e legível.Talvez o único problema é pensar em como usar estruturas de repetição.Para ficar mais fácil, darei aqui um pequeno exemplo.Aqui vai um código repetitivo:


    def somar   soma =0   soma +=1   soma +=5   soma +=10   soma +=16   soma +=20   soma +=30   soma +=40   p soma end

          Observe como o código ficou repetitivo!Somamos números várias vezes a variável soma, quando poderíamos ter resumido tudo isso em poucas linhas.O código melhor poderia ficar assim(há várias outras formas):


    def somar   soma =0   for i in[1,5,10,16,20,30,40]     soma += i   end   p soma end

          Usando uma array, ficaria melhor ainda, inclusive de modificar:


    def somar   array =[1,5,10,16,20,30,40]   soma =0   for i in array     soma += i   end   p soma end

     

    7.3 - Conclusão

     

          Creio eu que essa aula foi bem simples, porém com ela creio que você poderá se tornar um/uma scripter bem melhor. Essa é apenas a primeira parte de "Boa Práticas", haverá mais aulas desse tipo.Na próxima aula iremos falar mais sobre scenes, talvez podemos fazer um script completo e útil pela primeira vez!Aguardem...Espero que tenham gostado!Não esqueçam do dever =D.

     

    7.4 - Dever de Casa

     

          É um dever bem chatinho, realmente. Peço que me entreguem esse dever por Mensagem Pessoal, pois não quero cola!É o seguinte, modifique os seguinte script corrigindo os recuos:


    class TSDA       FISH_ITENS=[31,32,33]           def fish if@pesca==nil   @pesca=false       endreturn@pesca     end     def start_fishing         @pesca=true     @phase=0   $game_temp.fish_time =500@is_fishing_now=false         @to_finish=false         @fish_string="Esperando um peixe"         end     def set_fish_string(f)       @fish_string= f     enddef is_fishing_now  if@is_fishing_now==nil         @is_fishing_now=false       end   return@is_fishing_now         end   def set_fishing(f)     @is_fishing_now= f   end       def to_finish=(f)         @to_finish= f         end           end
    [center]  :mrm: :mrm: :mrm: