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

Ruby/RGSS3 Por Mepps | Aula 2 Variaveis e Constantes Parte II

Iniciado por Mepps, 31/07/2013 às 18:50


Variável de Instancia de Classe

Bom dando continuação a Aula passada.
vamos falar Da variável de instancia de Classe , sobre elas eu tenho a declarar

1. Não São Publicas
2. cada objeto pode ter uma com valor diferente
3. fora da classe elas não são vistas ou sequer alteradas
4. para altera-las e preciso de um método publico
5. toda variável de instancia de classe e declarada com @ em seu inicio

Vou dar a Vocês algum exemplos que que eu tenho pronto aqui.
Apartir dessa aula iremos usar bastante o Notepad++ ou qualquer editor
que você tenha Baixado ,se você não baixou nenhum use o bloco de notas
e não se esqueça de salvar seus scripts com .rb




Bom vamos Analisar
Eu criei uma Classe Com o nome Linguagem
class Linguagem


e defini um metodo pra ela usando , => def
tal como no phyton . utilizei o initialize que seria como o contruct do java ou PHP
e lhe passei (n) como argumento, criei uma variável de instancia de classe
@nome que carrega (n) como seu valor
usei end para delimitar o termino da classe

1 end no final delimita o termino de um metodo(construtor)
2 end no delimita o termino do método e de uma classe


Nota


Se você usar Palavras reservadas em seu script será necessário o uso de  demais
end para fecha-lo



Vamos analizar Melhor

class Linguagem  # Nome da Classe ,
def initialize(n)    # define o método (def) com nome do construtor(initialize) que recebe o Argumento(n)
@nome = n        # Cria uma Variável de Instancia de Classe (@nome) com o valor de (n)
end                   # Delimita o Fim do Metodo
end                   # Delimita o Fim da Classe

Bom aqui eu criei alguns Objetos e passei pra eles o Acesso a classe
Linguagem e usei o .new que acessa o construtor initialize e defini ruby como
argumento no lugar de (n)

#Objeto  #Classe linguagem #(.new) Acessa o construtor Initialize #Define o Argumento("")
ruby = Linguagem.new("Ruby")
java = Linguagem.new("Java")
csharp = Linguagem.new("CSharp")
boo = Linguagem.new("Boo")

ruby.nome;java.nome;csharp.nome;boo.nome;



Ótimo Vamos Rodar o Script

Abra o prompt de Comando e vá até onde você os Salvou (Recomendo Salvar na Area de Trabalho )
normalmente o prompt de comamdo vai abri na pasta C:\user\(nomedousuario)

apenas use comando no prompt

cd desktop


Agora estamos no Desktop
para abrir o Seu Script apenas digite no Prompt de Comando
(nome do seu script).rb no meu caso é Change.rb

caso não abra no c:\user\(nomedousuario)
você pode usar esses comandos no DOS para chegar a te lá
lembrando que se você já tiver iniciado o irb não vai funcionar.


cd (nome_da_pasta)                       # entra na pasta
cd..                                     # Volta uma pasta
dir                                      # mostra todas as pastas dentro do diretorio


Resultado

Executou o Script? Resultou em um Erro Certo?  :XD:
Erro : Undefined method 'nome'

Ou seja esse  método nome indefinido, mais porque isso ocorreu? por causa desse comando aqui
ruby.nome; java.nome; csharp.nome; boo.nome;

ou seja esse comando acessa o nome do objeto .o nome do metodo
deu erro porque ele não foi definido no escopo do programa

Explicando melhor
# nome do Objeto.methodo;
ruby.nome;


Nota Rapida
O símbolo ; delimita o fim de uma linha de código assim eu posso simplificar isso 
ruby.nome
java.nome
csharp.nome
boo.nome

por isso
ruby.nome; java.nome; csharp.nome; boo.nome;


Vamos definir o método nome
class Linguagem  # Nome da Classe ,
def initialize(n)    # define o método (def) com nome do construtor(initialize) que recebe o Argumento(n)
@nome = n         # Cria uma Variável de Instancia de Classe (@nome) com o valor de (n)
end                    # Delimita o Fim do 1 Método(initialize)
def nome      # define o método (def) com nome do construtor(nome)
puts @nome    # Escreve a Variável @nome
end                   # Delimita o Fim do metodo2(nome)
end                   # Delimita o Fim da Classe


ruby.nome; java.nome; csharp.nome; boo.nome;

Seu código deve estar Assim :



agora  e só executar o Script
Wow Ruby te Retornou isso certo? :)


Ruby
Java
Cshap
Boo


Vamos a Proxima Variável =]


Variável de Classe

1. Não São Publicas
2. São estáticas e pertencem somente a classe
3. Toda instancia aponta prá ela
4. Ela tem o mesmo valor em qualquer instancia
5. E preciso de um método publico para lê-las
6. toda variável  de classe e declarada com @@ em seu inicio

Vamos Ao Nosso Exemplo:



Bom vamos analisar , isso e bem simples
Eu iniciei uma variável de classe @@resultado , volto a repetir
a vocês toda Variável deve ser iniciada com @@


class Linguagem    # Nome da Classe ,
@@resultado = 0   # Variável de Classe com Valor 0
def initialize(n)    # define o método (def) com nome do construtor(initialize) que recebe o Argumento(n)
@nome = n         # Cria uma Variável de Instancia de Classe (@nome) com o valor de (n)
@@resultado += 1  # A Cada vez que o construtor for chamado ele incrementa mais um ao resultado
end                    # Delimita o Fim do 1 Método(initialize)
def nome       # define o método (def) com nome do construtor(nome)
puts @nome    # Escreve a Variável @nome
end                   # Delimita o Fim do metodo2(nome)
def linguagem.info  # define o método (def) com nome do construtor(Linguagem.info)
puts @@resultado # Escreve o Resultado de @@resultado
end                   # Delimita o Fim do metodo3(Linguagem.info)
end                   # Delimita o Fim da Classe


ruby.nome; java.nome; csharp.nome; boo.nome; Linguagem.info

Bom vamos Estudar Aqui esse Script para melhor entendimento
eu criei uma variável local de nome @@resultado com o Valor de 0
@@resultado = 0


e dentro do def initialize eu coloquei o a variável @@resultado += 1
ou seja a cada vez que o construtor initialize for chamado a variável acresenta + 1
em ruby e usado +=(algum_numero). em outras linguagens talvez o ++1

e aqui eu criei uma função(método) a parte observem que eu coloquei o
nome sendo o mesmo nome da classe assim tendo (nome_da_classe).(função)
e dentro desse método eu pedi que ele imprima o @@resultado

Aqui adicionei o método Linguagem.info, para ser executado
ruby.nome;java.nome;csharp.nome;boo.nome; Linguagem.info

Execute o Script
Ele lhe Retornara isso

Como o Construtor nome foi Iniciado 4 Vezes Ruby te retornara isso
Ruby     #1
Java     #2
Csharp #3
Boo     #
4        # numero de vezes que o metodo (nome) foi chamado

Existe outro tipo de variável também.. que é
recomendado  não usar mais eu  vou ter que explicar

Variáveis Globais

1. São Acessadas de Qualquer parte do programa
2. podem ser Alteradas a qualquer momento
3. começam com $ antes de seu nome  ex. $nomedavariavel

Vamos a um Exemplo



Bom vamos Analisar

$num = 1  # Criei a Variável global fora da Classe isso mostra que ela e acessível de qualquer parte do programa
class Linguagem # Classe
def initialize(n) # Método initialize
@nome = n # Variável de instancia de classe
end # Fim do metodo

def num # criei o método num
puts $num # imprimi num
$num = 12 # alterei o valor de $num dentro de um metodo
puts $num # imprimi num novamente
end #fim do metodo
end # fim da classe

def num   # criei um método fora da classe
puts $num =  8.6 # alterei o valor de $num
end # fim do metodo

# objeto # acessa a classe Linguagem #.new(inicia o initialize) #inicia o método num, # escreve num # inicia o método num de fora da classe
ruby = Linguagem.new("Ruby"); ruby.num; puts $num; num

Execute o Script, Elec lhe retornou isso certo?
1
12
12
8.6


Ou seja oque eu estou querendo provar pra vocês e que ela pode ser altera-da
independente de onde você a declarou, sendo em uma classe bloco de notas etc...
eu alterei o seu valor diversas vezes, de 1 pra 12 e novamente para 8.6

o problema de você trabalhar com elas e que você não tem controle sobre elas
se não souber oque esta fazendo esta arriscado a ter diversos Bugs no seu programa


Constantes
1. Começam com Letra Maiuscula

Bom toda Constante começa com letra maiúscula e Seu valor não é imutável
mais e recomendável que quando você crie uma constante a deixe com valor
fixo.

Como Assim Mepps? eu estudei Java e C e la constantes são imutaveis
Re: sim mais no Ruby você pode alterar uma constante

Entre no irb e crie uma constante
ex : Mepps = 1


e agora reescreva seu valor
ex : Mepps = 2


Você Recebeu a seguinte mensagem não foi?
Warning: already initialized constant Mepps
Warning: previous definition fo Mepps was here


Ou seja sempre que você alterar o valor de uma constante ruby
te retornara um aviso. Cuidado Constant (nome) já foi iniciada

Bom pessoal Por hoje e Só Proxima Aula


Condicionais

 :rainbow: Ah as variáveis,se não fossem tão necessárias eu gostaria que não existissem. Sério,sempre me confundo com elas,com todas as suas sub divisões e "nomeclaturas". Mas tudo bem,agradeço por mais esse tutorial,pela primeira vez eu consegui entender a diferença entre variáveis constantes e strings. Pode passar exercícios quando quiser  :wow: . Qualquer coisa,estou usando o NotePad,ele não costuma ser tão generoso como o irb e mostrar seus erros,mas prefiro usar ele,antes de completar os exercícios vou repassar os códigos no irb só para conferir. Espero a próxima. :wow:
Uma visita ao Museu não é interessante quando você faz parte da exposição.

Citação de: faherya online 31/07/2013 às 19:31
:rainbow: Ah as variáveis,se não fossem tão necessárias eu gostaria que não existissem. Sério,sempre me confundo com elas,com todas as suas sub divisões e "nomeclaturas". Mas tudo bem,agradeço por mais esse tutorial,pela primeira vez eu consegui entender a diferença entre variáveis constantes e strings. Pode passar exercícios quando quiser  :wow: . Qualquer coisa,estou usando o NotePad,ele não costuma ser tão generoso como o irb e mostrar seus erros,mas prefiro usar ele,antes de completar os exercícios vou repassar os códigos no irb só para conferir. Espero a próxima. :wow:

Opa de começo e chato mesmo pegar os tipos de variáveis mais depois vai que e uma Beleza
então a respeito de Exercicios eles vão começa na Aula seguinte de condicionais, ehhehehe
obrigado por acompanhar