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
(http://img69.imageshack.us/img69/8928/6el2.png)
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 Melhorclass 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 promptcd 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
ResultadoExecutou 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 RapidaO 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 nomeclass 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 :(http://img706.imageshack.us/img706/6669/upcv.png)
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:
(http://img27.imageshack.us/img27/2858/cdbz.png)
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 Globais1. 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
(http://img829.imageshack.us/img829/4949/29wz.png)
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 programaConstantes1. 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 AulaCondicionais
: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:
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