O TEMA DO FÓRUM ESTÁ EM MANUTENÇÃO. FEEDBACKS AQUI: ACESSAR

Aula 7: Boas Práticas Parte 1

Iniciado por thiago_d_d, 06/12/2012 às 22:38

[box class=catbg]
Aula 7: Boas Práticas Parte 1[/box]
Í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
[box class=titlebg]
7.0 - Os recuos
[/box]
       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 RMVX, 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 = 5
if num1 == num2
     if num1 == 5
p "Que coisa Idiota"
end
end
end

       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
  end
end

       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.
[box class=titlebg]
7.1 - Os comentários
[/box]
       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:
  #--------------------------------------------------------------------------
  # Exibição dos gráficos do herói
  #     actor : herói
  #     x     : exibe na coordenada X
  #     y     : exibe na coordenada Y
  #--------------------------------------------------------------------------
  def draw_actor_graphic(actor, x, y)
    draw_character(actor.character_name, actor.character_index, x, y)
  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, 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.
[box class=titlebg]
7.2 - Estruturas de repetição e arrays
[/box]
       À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
[box class=titlebg]
7.3 - Conclusão
[/box]
       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 scripter completo e útil pela primeira vez!Aguardem...Espero que tenham gostado!Não esqueçam do dever =D.
[box class=titlebg]
7.4 - Dever de Casa
[/box]
       É 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
      end
return @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
     end
def 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

:wow: :wow: :wow: