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

Aula 4: Variáveis, Arrays, Estruturas

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

[box class=catbg]
Aula 4: Variáveis, Arrays, Estruturas[/box]
Índice

  • 4.0 - Detalhando variáveis
  • 4.1 - Condicionais
  • 4.2 - Estruturas de repetição
  • 4.3 - Arrays
  • 4.4 - O for
  • 4.5 - Ufa!!Última teoria!!
  • 4.6 - Conclusão
  • 4.7 - Dever de casa
[box class=titlebg]
4.0 - Detalhando variáveis
[/box]
       Então, até o presente momento eu havia falado superficialmente de variáveis, tipo:"devemos sempre atribuir um objeto a uma variável", etc. Porém, até agora eu não havia dado detalhes. Agora irei dar. Primeiro: o que são variáveis? Variáveis de RGSS2 são idênticas a variáveis dos eventos. Elas guardam coisas, como números, objetos, textos e, sem elas, muitos dados seriam perdidos no meio dos scripts.Não há muito sobre o que falar.
       Só há um grande detalhe:as variáveis de evento não armazenam tantas coisas diferentes quanto as do RGSS2. Além disso, as variáveis RGSS2 possuem vários tipos, assunto do qual falarei agora.
Tipos de variáveis quanto ao escopo(visão)
       O escopo seria de onde que essa variável é acessível. Por exemplo. Nas variáveis dos eventos, temos as variáveis locais: cada evento tem a sua, e a variável local de cada evento só é acessível a ele.Todas as variáveis são nulas(tem valor nil;não é o mesmo que zero), até que você atribua um valor a cada uma delas.Quanto ao escopo, no RGSS2 temos:
Variáveis Globais
       São acessíveis em qualquer lugar de qualquer script, assim como as variáveis comuns do evento. Para indicar que uma variável é global e é acessível em qualquer local, colocamos o cifrão no início do seu nome.Exemplo:
$texto = "Oi"

Variáveis Locais
       São variáveis acessíveis apenas na sua classe respectiva, assim como as variáveis locais dos eventos são acessíveis apenas para seu evento.Para indicar que uma variável é local e é acessível apenas em sua classe, colocamos um arroba no início do nome. Exemplo
class Exemplo
  def algo
    @texto = "Oi"
  end
end

Variáveis comuns
       Não sei o verdadeiro nome delas, mas as chamo assim.Elas são acessíveis apenas onde atribuídas. Exemplo:
def algo
  texto = "Oi"
end

       Como a variável no caso foi atribuída dentro de um método, ela só é utilizável nesse método.
Tipos de variáveis quanto ao que elas guardam
Variáveis númericas
       Guardam números. Exemplo:
num1 = 2
num2 = 3.4

Variáveis booleanas
      Guardam valores booleanos, ou seja, true ou false.Exemplo:
b = true
b2 = false

Variáveis string
       Guardam texto(que são chamados de string).
Variáveis objeto
       Guardam qualquer outra coisa.
[box class=titlebg]
4.1 - Condicionais
[/box]
       No RGSS2, existem as condicionais. Elas servem para que determinadas ações ocorram somente se algumas condições e aplicarem.É, por exemplo, o "Se...Senão" dos eventos.Irei ensinar agora todas as condicionais que o RGSS2 tem.São elas:
Se(If)
       Analiza uma certa expressão, se essa expressão for true, o que estiver dentro do if é executado.Se for false, a expressão não é executada.Exemplo:
if algo
  executar algo
end

       Esquecer o end ao terminar um if é um erro de sintaxe. Sendo um erro de sintaxe, o RGSS2 irá acusar o erro imediatamente quando o jogo rodar.Para não esquecer o end, aconselho sempre a colocá-lo quando começar a escrever o if, e logo depois ir digitando as ações dentro dele.
       A expressão de checagem do if pode ser composta.No caso, a expressão de checagem foi uma variável chamada "algo", que com certeza deve ser booleana.Nas expressões compostas, podemos testar se um valor é igual, maior ou igual, e todas essas coisas.Os sinais das espressões compostas são:== ,  >= ,  > ,  <= ,  < e !=, que checam se a tal coisa é igual, maior ou igual, maior, menor ou igual, menor e diferente de outra coisa.Exemplo:
if var1 == var2
  p "Var1 é igual a Var2"
end
       No caso, o if testa se as duas variáveis do caso são iguais.Se elas são,  "Var1 é igual a Var2" é  mostrado.
Se...Então(if...else)
       Analiza uma certa expressão, se essa expressão for true, o que estiver dentro do if é executado.Se for false, o que estiver dentro do else é executado.Exemplo:
if sou_maior_de_idade
  p "posso beber"
else
  p "não posso beber"
end

       É um erro comum colocar dois end para o else e o if.O if...else é um só, e só um end é necessário.
Se...Então Se...Então(if...elsif...else)
       Analiza uma certa expressão, se essa expressão for true, o que estiver dentro do if é executado.Se for false, uma nova expressão é analizada no elsif.Se a nova expressão for true, o que estiver no elsif é executado.Se ela for false, o que estiver no else é executado.Exemplo:
if tenho_11_anos
  p "11 anos"
elsif tenho_13_anos
  p "13 anos"
else
  p "idade desconhecida"
end

       É um erro comum colocar vários end para o else, o elsif e o if.O if...elsif...else é um só, e só um end é necessário.
       Num código desse, poderia haver a retirada do else ou do elsif, ou a inclusão de um novo elsif.Exemplo:
if algo
  fazer_algo
elsif algo2
  fazer_algo2
elsif algo3
  fazer_algo3
end
       Observe que há um elsif a mais do que eu tinha demonstrado e o else a menos.Isso pode ocorrer sem problemas. Há variás combinações.
Caso...quando...quando...padrão(case...when...when...else)
       Analiza o valor de uma expressão/variável e executa diferentes ações para cada valor.Se nenhum valor conferir, uma ação padrão pode ser executada no else.Exemplo:
case variavel
when 0
  p "sou zero!"
when 1
  p "sou um!"
when 2
  p "sou dois!"
else
  p "não sei o que sou!"
end

       É um erro comum colocar vários end para o case. Só um end é necessário.
[box class=titlebg]
4.2 - Estruturas de repetição
[/box]
       São estruturas utilizadas para repetir mesmas ações várias vezes.São úteis para não deixar os scripts com muitas operações repetidas, dentre outras coisas.As estruturas de repetição são:
ciclo fazer(loop do)
       Executa as ações infinitamente até que o loop seja quebrado com um break. Funciona como o ciclo dos eventos.Exemplo:
loop do
  if e_para_quebrar_loop
    break
  end
end
Enquanto(while)
       Executa ações até que uma condição seja falsa.O break também pode ser usado para quebrá-lo.Exemplo:
while number < 0
  number += 1
end

       O loop executa enquanto number for menor que zero.Dentro do loop, o number é somado, até que ele seja igual a zero, e o loop pare de executar.
       É um erro comum colocar uma condição que sempre é verdadeira no while.Se isso acontecer, o loop rodará forever, isto é, para sempre, até que você feche o jogo.Às vezes, isso pode ser incômodo e não desejável.
       Para somar um número qualquer a uma variável, ou realizar qualquer operação com ela, podemos usar esses sinais abreviados: +=, -=, *=, /=, %=. Por exemplo, var *= 8 multiplicaria a variável var por 8.
[box class=titlebg]
4.3 - Arrays
[/box]
       Existe um tipo de variável, da qual eu não havia falado até agora: arrays. Antes de começar a falar realmente delas, queria que uma coisa fosse entendida. Que as variáveis são como caixinhas, onde você pode guardar as coisas para não perder. As caixinhas tem nome e tem alguma coisa dentro:quando elas não tem nada, elas na verdade tem dentro delas o valor nil, sobre o qual eu já havia falado.As arrays são variáveis especiais: elas não guardam uma coisa só, como variáveis comuns: elas guardam várias.
       Tomemos como exemplo uma variável interessante,  $game_party.actors. Essa variável é uma array, que guarda todos os personagens que estão no grupo, no jogo.Para acessar os valores que essa variável especial guarda, usamos uma notação diferente.No caso, para acessarmos o primeiro personagem do grupo, teríamos:
$game_party.actors[0]

        Para acessar o segundo...
$game_party.actors[1]

        O que está entre colchetes([0], [1]) é o número chamado índice. Cada valor guardado numa array tem seu índice. Isso torna as arrays bem úteis, caso você queira armazenar muitas coisas do mesmo tipo(no caso, personagens que estão grupo) ou coisas que são ordenadas por números(índices).
       Para criar uma array:
array = []

       No caso, foi criado uma array vazia.Poderíamos criar uma array assim:
array = ["Oi1", "Oi2"]

       Observe que se usassemos , nocaso, array[0], teríamos "Oi1". Se usassemos array[1], teriamos "Oi2".
       Observe que, no caso, a variável exemplo guarda apenas textos. Porém, uma array pode guardar valores de vários tipos.Porém ainda, é melhor usar uma array para guardar valores de apenas um tipo, caso queira usar outro tipo, é recomendado criar outra array diferente(não que não se possa usar vários tipos numa array só).
       Para substituir um valor de uma array:
array[indice] = valor

       Onde "indice" deve ser o número índice.
       Para adicionar um novo valor a uma array e ao final dela, basta fazer isso:
array.push(valor)
       Por exemplo:
array = [1, 2]
array.push(3)
       A array resultante será: [1, 2, 3].
       Um erro comum é esquecer os colchetes na declaração de array, ou ainda esquecer de colocar vírgula entre os valores.
[box class=titlebg]
4.4 - O for
[/box]
       Das estruturas de repetição, eu não havia falado apenas de uma: o for. Por que eu deixei de falar? Porque o for tem uma relação direta com arrays.A estrutura do for padrão é:
for i in array
  fazer_algo
end

       O for é um pouco complicado de se entender. O que acontece é o seguinte: uma variável é criada, (o nome dela é especificada depois do for, no caso, "i"), daí essa variável assume o primeiro valor da array(array[0]), e o que estiver no for é executado. Depois disso, o "i" assume o segundo valor da array, array[1], e o que estiver no for é executado. Isso acontece até que o "i" tenha assumido todos os valores da array, daí o loop termina. Outra estrutura para o for é:
for i in n...n2
  fazer_algo
end

       Dessa forma, em vez de o i assumir valores de uma array, ele assume os valores de n até n2. Por exemplo,  for i in 1...5 fará com que o i assuma valores de 1 a 5, em ordem.
[box class=titlebg]
4.5 - Ufa!!Última teoria!!
[/box]
O método initialize
       Lembra-se de como se cria um objeto através de uma classe?Eu havia falado sobre isso na aula passada: basta escrever NomeDaClasse.new. Às vezes, nós scripters queremos que, logo após que o objeto seja criado, ele execute todas as operações necessárias para que tudo ocorra bem.Por exemplo, uma classe que exibe imagem teria que inicializar(carregar) sua imagens antes de exibi-las. Para isso, exsite o método initialize.
       O método initialize é bem simples: no exato instante que um objeto é criado, ele executa, caso exista um método initialize nesse objeto.Por exemplo:
class Exemplo
  def initialize
    p "Inicializado"
  end
end
exemplo_objeto = Exemplo.new

       Quando esse código for executado,  "Inicializado" será exibido, pois o método initialize é chamado imediatamente depois de o objeto ter sido criado. COOL!
Comentários
       Assim como nos eventos, no RGSS2 temos os comentário e, assim como nos eventos, os comentários não praticam nenhuma ação, servem apenas para facilitar a leitura do seu código. Eu particularmente recomendo o uso de comentários não exageradamente, pois eles facilitam até que você mesmo modifique seu script.Observe que os comentários ficam em verde no editor de scripts.Existem dois tipos de comentários:
De múltiplas linhas
       Tudo o que estiver entre =begin e =end será um comentário de múltiplas linhas.Usado geralmente no início de qualquer script, para explicar como usar e o que ele faz.
De uma única linha
       Tudo o que estiver depos de # na presente linha será um comentário.
[box class=titlebg]
4.6 - Conclusão
[/box]
       Então pessoal, espero que tenham gostado dessa quarta aula, eu mesmo tive muito trabalho para fazer e organizar bem os assuntos para que ficassem preparados para a próxima aula, que vai ser apenas prática, e vamos aprender o que realmente interessa no RGSS2,  a parte gráfica.
[box class=titlebg]
4.7 - Dever de casa
[/box]
[box title=Dever 1]
       Crie um método somar.Esse método deve criar uma array com números.Após criar a array o método deve somar todos os valores da array usando o for. Depos de somar os valores, o método deverá imprimir o valor dessa soma.
[/box]
[box title=Dever 2]
       Crie uma classe Teste que contenha um método initialize. O método initialize deve chamar o método somar do dever anterior.Além disso ele terá que inicializar uma variável local chamada @texto.A classe deve conter também um método imprimir_meu_texto , que será chamado no initialize depois da inicialização da variável @texto, e irá imprimir o valor dela.
:wow: :wow: :wow:
[/box]