Aldeia RPG

Gostaria de reagir a esta mensagem? Crie uma conta em poucos cliques ou inicie sessão para continuar.

Suporte ao desenvolvimento de jogos


    Aula 8 - Acesso A Atributos

    MickeyRocknn
    MickeyRocknn
    Iniciante
    Iniciante


    Mensagens : 71
    Créditos : 9

    Aula 8 - Acesso A Atributos Empty Aula 8 - Acesso A Atributos

    Mensagem por MickeyRocknn Sáb Abr 28, 2012 1:28 pm

    Vi Esta Aula No Aprendiz RPG É Vou Disponibilizar Aqui. Criador: Lucaswf1

    Prefácio
    Esta aula será bem rápida, tenho como objetivo "tapar" um buraco no conteúdo para quem esta acompanhando minhas aulas! Hoje iremos aprender sobre a acessibilidade das variáveis!

    Ao olhar nos scripts do seu banco de scripts, nota-se que vários dos objetos iniciam com um @ ou um $, hoje veremos as diferenças.


    Variáveis Locais
    Toda variável local é aquela que não possuem nem $ nem @, elas são variáveis que só "existem" dentro do método em que são instanciadas.
    Exemplo:


    def soma
    a = b + c
    p a.to_s
    end


    Aqui a, b e c são variáveis locais, posso assim usar as mesmas varáriáveis (mesmos nomes) em vários métodos pois não vai fazer diferença! Veja que até agora nós usamos apenas variáveis locais!

    Variáveis de Instância - Atributos
    As variáveis de instância são aquelas que toda a classe pode utilizar, por exemplo, dentro de Scene_Menu, a janela @status_window é utilizada em vários métodos. Seria impossível executar métodos da @status_window em métodos dentro da scene caso não tivesse um @ no nome, vou exemplificar com valores numéricos:


    def soma(m, n)
    @a = m
    @a += n
    p @a.to_s
    end
    #
    def subtracao(m, n)
    @a = 0 if @a.nil?
    @a += m
    @a -= n
    p @a.to_s
    end


    O que vai ocorrer, no 1º método, o cálculo será sempre o mesmo (correto), mas no segundo método vai dar erro caso o 1º método já tenha sido executado, exemplo:
    a = MinhaClasse.new #nome fictício para a classe em questão
    a.soma(2,3)
    >dentro do método
    >> @a = m #m é 2 assim @a = 2
    >> @a += n # n é 3, @a é 2, 3 + 2 = 5
    >> Mostra na tela 5
    a.subtração(6,2)
    >dentro do método
    >> pergunta @a é nil? # não intão passa para a próxima linha
    >> @a += m # @a ja vale 5 pois o método soma foi executado antes, assim 5 + 6 = 11
    >> @a -= n # 6 - 2 = 4

    É óbvio que o exemplo que citei é um tanto pobre, mas você consegue ter uma idéia do que pode acontecer.

    Variáveis Globais
    São as variáveis(objetos) que podem ser acessadas em qualquer parte do programa, vou citar os classicos que nós já utilizamos:
    $game_variables
    $game_switches
    ...
    Todos os objetos com um $ no início do nome são globais, isso significa que não importa a classe ou módulo que eu esteja, eu posso acessá-lo!

    Variáveis de Classe
    Variável de classe começam com @@, e existem apenas uma delas para cada classe. Como não se usam muitas variáveis de classe (@@), ninguém nunca vai ter problemas com isso. (Fonte KJr)


    Acessando atributos
    São 3 possíveis: attr_acessor, attr_reader e attr_writer
    Por exemplo: eu tenho a classe Game_Actor e dentro dela tenho uma variável chamada @str (força) quero fazer com que essa variável possa ser acessada por outras classes uso, assim:
    attr_acessor :str
    Qual a diferença de usar um attr_acessor ou uma variável com $.
    Ao usar o attr posso usar $game_actors[id].str (onde $game_actors[id] é o nome do objeto), assim a cada id, tenho um endereço na array diferente e assim um str diferente, mas se eu usasse $str, eu não poderia usar $game_actors[id], usaria apenas $str e ele seria igual para todos os personagens!!!

    Diferenças entre acessor reader e writer:
    reader: permite apenas a leitura do atributo, posso por exemplo usar um print nesse atributo, mas não posso mudar o valor dele.
    writer: permite alterar, mas não permite ler, não é muito utilizado
    acessor: é o reader + o writer XD

    Relembrando o uso:
    Em geral usamos após o nome da classe:
    class AlgumaCoisa
    #Usamos attr_nome (um dos 3 possíveis) :nomedoatributo
    attr_acessor :var1
    attr_reader :var2
    attr_writer :var3

    Dica
    Você pode usar os attr_ em uma linha só, para exemplificar isso e mostrar como os attr_ são úteis, vejam o exemplo

    Esta é a classe Pessoa


    class Pessoa
    def nome
    @nome
    end

    def nome=(valor)
    @nome = valor
    end

    def nascimento
    @nascimento
    end

    def nascimento=(valor)
    @nascimento = valor
    end

    def cpf
    @cpf
    end

    def cpf=(valor)
    @cpf = valor
    end
    end

    Usando attr, a mesma classe pessoa fica assim:


    class Pessoa
    attr :nome, :nascimento, :cpf
    end


    Notem que é possível usar um attr para 3 instâncias, apenas separando com ,

      Data/hora atual: Qui Mar 28, 2024 8:26 pm