Skip to content
Browse files

First commit

  • Loading branch information...
0 parents commit a439a43ca6c9bdac22c1231d3e1424a1a211ea14 Elomar França committed Apr 24, 2009
Showing with 750 additions and 0 deletions.
  1. +108 −0 10_blocos_procs.rb
  2. +46 −0 11_simbolos.rb
  3. +29 −0 1_numeros.rb
  4. +40 −0 2_letras.rb
  5. +57 −0 3_variaveis_atribuicoes.rb
  6. +11 −0 4_entrada.rb
  7. +90 −0 5_decisao.rb
  8. +20 −0 6_repeticao.rb
  9. +62 −0 7_arrays.rb
  10. +121 −0 8_metodos.rb
  11. +166 −0 9_classes.rb
108 10_blocos_procs.rb
@@ -0,0 +1,108 @@
+# uma proc é como um método guardado num objeto
+# o legal é que você pode passar ele de um lugar pro outro
+
+saudacao = Proc.new do
+ puts 'Olá!'
+end
+
+saudacao.call
+saudacao.call
+saudacao.call
+
+# parâmetros
+
+voceGostade = Proc.new do |umaBoaCoisa|
+ puts 'Eu *realmente* gosto de '+umaBoaCoisa+'!'
+end
+
+voceGostade.call 'chocolate'
+voceGostade.call 'ruby'
+
+# métodos que recebem procs
+
+def facaUmaCoisaImportante umaProc
+ puts 'Todo mundo apenas ESPERE! Eu tenho uma coisa a fazer...'
+ umaProc.call
+ puts 'Certo pessoal, Eu terminei. Voltem a fazer o que estavam fazendo.'
+end
+
+digaOla = Proc.new do
+ puts 'olá'
+end
+
+digaTchau = Proc.new do
+ puts 'tchau'
+end
+
+facaUmaCoisaImportante digaOla
+facaUmaCoisaImportante digaTchau
+
+# Métodos que retornam procs
+
+def compor proc1, proc2
+ Proc.new do |x|
+ proc2.call(proc1.call(x))
+ end
+end
+
+quadrado = Proc.new do |x|
+ x * x
+end
+
+dobre = Proc.new do |x|
+ x + x
+end
+
+dobreeEleve = compor dobre, quadrado
+eleveeDobre = compor quadrado, dobre
+
+puts dobreeEleve.call(5)
+puts eleveeDobre.call(5)
+
+# Métodos recebem blocos
+
+def sumario descricaoDoBloco, &bloco
+ tempoInicial = Time.now
+ bloco.call
+ duracao = Time.now - tempoInicial
+ puts descricaoDoBloco+': '+duracao.to_s+' segundos'
+end
+
+sumario 'dobrando 25000 vezes' do
+ numero = 1
+ 25000.times do
+ numero += numero
+ end
+ puts numero.to_s.length.to_s+' dígitos'
+end
+
+sumario 'contando até um milhão' do
+ numero = 0
+ 1000000.times do
+ numero = numero + 1
+ end
+end
+
+# yield
+
+def sumario descricaoDoBloco
+ tempoInicial = Time.now
+ yield
+ duracao = Time.now - tempoInicial
+ puts descricaoDoBloco+': '+duracao.to_s+' segundos'
+end
+
+sumario 'dobrando 25000 vezes' do
+ numero = 1
+ 25000.times do
+ numero += numero
+ end
+ puts numero.to_s.length.to_s+' dígitos'
+end
+
+sumario 'contando até um milhão' do
+ numero = 0
+ 1000000.times do
+ numero = numero + 1
+ end
+end
46 11_simbolos.rb
@@ -0,0 +1,46 @@
+# lembra das constantes?
+
+NORTE = 1
+SUL = 2
+LESTE = 3
+OESTE = 4
+
+def caminhar(direcao)
+ case direcao
+ when NORTE
+ puts 'caminhando pro norte'
+ when SUL
+ puts 'caminhando pro sul'
+ when LESTE
+ puts 'caminhando pro leste'
+ when OESTE
+ puts 'caminhando pro oeste'
+ end
+end
+
+caminhar NORTE
+
+# não precisa mais delas
+
+def caminhar(direcao)
+ case direcao
+ when :norte
+ puts 'caminhando pro norte'
+ when :sul
+ puts 'caminhando pro sul'
+ when :leste
+ puts 'caminhando pro leste'
+ when :oeste
+ puts 'caminhando pro oeste'
+ end
+end
+
+caminhar :norte
+
+# geralmente usados como chaves em hashes
+
+monstros = {
+ :facil => Criatura.new('gato', 10, 10),
+ :normal => Criatura.new('urso', 50, 50),
+ :normal => Criatura.new('dragao', 150, 150)
+}
29 1_numeros.rb
@@ -0,0 +1,29 @@
+#1
+puts 1+2
+
+#2 -> Inteiros e floats
+5
+-205
+9999999999999999999999999
+0
+
+54.321
+0.001
+-205.3884
+0.0
+
+#3 -> Aritmética simples
+
+puts 1.0 + 2.0
+puts 2.0 * 3.0
+puts 5.0 - 8.0
+puts 9.0 / 2.0
+
+puts 1+2
+puts 2*3
+puts 5-8
+puts 9/2 # Divisões com inteiros sempre retorna inteiro
+
+puts 5 * (12-8) + -15
+puts 98 + (59872 / (13*8)) * -52
+
40 2_letras.rb
@@ -0,0 +1,40 @@
+#1
+
+'Hello.'
+'Ruby rocks.'
+'5 is my favorite number... what is yours?'
+'Snoopy says #%^?&*@! when he stubs his toe.'
+' '
+''
+
+puts 'Hello, world!'
+puts ''
+puts 'Good-bye.'
+
+#2 -> Aritmética com strings
+
+puts 'I like' + 'apple pie.'
+puts 'I like ' + 'apple pie.'
+puts 'I like' + ' apple pie.'
+puts 'blink ' * 4
+
+#3 -> 12 vs '12'
+
+puts 12 + 12
+puts '12' + '12'
+puts '12 + 12'
+
+#4 -> Coisas que não funcionam
+
+puts '12' + 12
+puts '2' * '5'
+
+#5 -> Escapando e interpolando
+
+puts 'You\'re swell!'
+puts 'backslash at the end of a string: \\'
+puts 'up\\down'
+puts 'up\down'
+
+puts "1 + 2 = #{1 + 2}"
+puts '1 + 2 = #{1 + 2}'
57 3_variaveis_atribuicoes.rb
@@ -0,0 +1,57 @@
+#1 -> Atribuições
+puts '...you can say that again...'
+puts '...you can say that again...'
+
+myString = '...you can say that again...' # declarar? tipo? =p
+puts myString
+puts myString
+
+name = 'Patricia Rosanna Jessica Mildred Oppenheimer'
+puts 'My name is ' + name + '.'
+puts 'Wow! ' + name + ' is a really long name!'
+
+#2 -> Reatribuição
+composer = 'Mozart'
+puts composer + ' was "da bomb", in his day.'
+
+composer = 'Beethoven'
+puts 'But I prefer ' + composer + ', personally.'
+
+#3 -> Tipagem dinâmica
+var = 'just another ' + 'string'
+puts var
+
+var = 5 * (1+2)
+puts var
+
+#4 -> Tipagem forte
+var = '12' + 12
+
+#5 -> Apontam pra um valor, não referência
+var1 = 8
+var2 = var1
+puts var1
+puts var2
+
+puts ''
+
+var1 = 'eight'
+puts var1
+puts var2
+
+#6 -> Conversões
+var1 = 2
+var2 = '5'
+
+puts var1.to_s + var2
+
+puts '15'.to_f
+puts '99.999'.to_f
+puts '99.999'.to_i #Arredonda pra baixo, sempre
+puts ''
+puts '5 is my favorite number!'.to_i #Se começa com numérico, converte
+puts 'Who asked you about 5 or whatever?'.to_i
+puts 'Your momma did.'.to_f
+puts ''
+puts 'stringy'.to_s
+puts 3.to_i
11 4_entrada.rb
@@ -0,0 +1,11 @@
+#1 -> gets
+puts 'Hello there, and what\'s your name?'
+name = gets
+puts 'Your name is ' + name + '? What a lovely name!'
+puts 'Pleased to meet you, ' + name + '. :)'
+
+#2 -> chomp
+puts 'Hello there, and what\'s your name?'
+name = gets.chomp
+puts 'Your name is ' + name + '? What a lovely name!'
+puts 'Pleased to meet you, ' + name + '. :)'
90 5_decisao.rb
@@ -0,0 +1,90 @@
+#1
+puts 1 > 2
+puts 1 < 2
+
+puts 5 >= 5
+puts 5 <= 4
+
+puts 1 == 1
+puts 2 != 1
+
+puts 'cat' < 'dog'
+
+puts 'cat' == 'dog'
+puts 'cat' == 'cat' #java não deixa
+
+#2 if
+
+vida = gets.to_i
+puts"Você tem #{vida} pontos de vida."
+if vida <= 0
+ puts "Você está muito cansado pra lutar"
+end
+
+#3 else
+
+vida = gets.to_i
+puts"Você tem #{vida} pontos de vida."
+if vida <= 0
+ puts "Você está muito cansado pra lutar"
+else
+ puts "Você está pronto pra lutar!"
+end
+
+#if aninhado
+
+puts 'Olá, e bem vindo a 7a série de português.'
+puts 'Meu nome é profa. Mafalda. E você é...?'
+name = gets.chomp
+
+if name == name.capitalize
+ puts 'Por favor se sente, ' + name + '.'
+else
+ puts name + '? Você quis dizer ' + name.capitalize + ', certo?'
+ puts 'Você pelo menos sabe soletrar seu nome??'
+ reply = gets.chomp
+
+ if reply.downcase == 'sim'
+ puts 'Hmmph! Bem, se sente!'
+ else
+ puts 'CAI FORA!!'
+ end
+end
+
+#3 unless
+
+vida = gets.to_i
+puts "Você tem #{vida} pontos de vida."
+unless vida > 5
+ puts "Se eu fosse você não ia lutar, o dragão é muito forte."
+end
+
+
+#4 lógica
+
+vida = gets.to_i
+if vida >= 0 and vida <= 5
+ puts "Você está muito cansado pra lutar."
+end
+
+if vida > 5 and vida <= 10
+ puts "Você está pronto pra enfrentar o dragão!"
+end
+
+if vida < 0 or vida > 10
+ puts "Hum... você não pode ter #{vida} pontos de vida."
+end
+
+#5 case
+
+vida = gets.to_i
+case vida
+ when 0..3
+ puts "Você está muito cansado pra lutar."
+ when 4..7
+ puts "Você não está em sua melhor forma, cuidado com o dragão"
+ when 8..10
+ puts "Você está pronto pra enfrentar o dragão!"
+ else
+ puts "Hum... você não pode ter #{vida} pontos de vida."
+end
20 6_repeticao.rb
@@ -0,0 +1,20 @@
+#1 while
+
+coelho = rand 50
+dragao = rand 1000
+
+while coelho > 0 && dragao > 0
+ puts 'Atacar o dragão com quanta força?'
+ forca = gets.to_i
+ pontos_coelho = rand forca
+ dragao -= pontos_coelho
+ puts "Você tirou #{pontos} do dragão!"
+ pontos_dragao = rand(forca * 10)
+ coelho -= pontos_dragao
+ puts "O dragão tirou #{pontos} de você!"
+end
+
+puts "Você perdeu! =(" if coelho <= 0
+puts "Você venceu! =)" if dragao <= 0
+
+#7 Tem outros jeitos melhores, que a gente vé já já :D
62 7_arrays.rb
@@ -0,0 +1,62 @@
+#1
+
+[]
+[5]
+['Olá', 'Tchau']
+
+sabor = "Baunilha" # isso não é um array
+[89.9, sabor, [true, false]] # isso é
+
+#2
+
+nomes = ['Ada', 'Belle', 'Chris']
+
+puts nomes
+puts nomes[0]
+puts nomes[1]
+puts nomes[2]
+puts nomes[3] # Esse está fora do intervalo.
+
+#3 each
+
+monstros = ['sapos', 'lagartos', 'dragões']
+
+monstros.each do |nome|
+ puts "Cuidado! Tem #{nome} espalhados por aqui!"
+end
+
+#4 times
+
+3.times do
+ puts 'Hip-Hip-Hurra!'
+end
+
+# puts
+
+comidas = ['chocolate', 'brigadeiro', 'meio amargo']
+
+puts comidas
+puts
+puts comidas.to_s
+puts
+puts comidas.join(', ')
+puts
+puts comidas.join(' :) ') + ' 8)'
+
+200.times do
+ puts []
+end
+
+# pop, push, last
+
+favoritos = []
+favoritos.push 'gotas de chuva em rosas'
+favoritos.push 'whisky em gatinhos'
+
+puts favoritos[0]
+puts favoritos.last
+puts favoritos.length
+
+puts favoritos.pop
+puts favoritos
+puts favoritos.length
121 8_metodos.rb
@@ -0,0 +1,121 @@
+# 3 métodos em 1 :D
+puts gets.chomp
+
+# tudo é método
+
+puts 'hello '.+ 'world'
+puts (10.* 9).+ 9
+
+# métodos legais
+
+puts 'Hello World!'.reverse
+
+letras = 'aAbBcCdDeE'
+puts letras.upcase
+puts letras.downcase
+puts letras.swapcase
+puts letras.capitalize
+puts ' a'.capitalize
+puts letras
+
+# criando seus métodos
+# muita repetição
+
+gato = 30
+urso = 100
+dragao = 500
+
+while gato > 0
+ puts 'Com quanta força você quer atacar o gato?'
+ forca = gets.to_i
+ pontos = rand forca
+ gato -= pontos
+ puts "Você tirou #{pontos} de vida do gato!"
+end
+
+while urso > 0
+ puts 'Com quanta força você quer atacar o urso?'
+ forca = gets.to_i
+ pontos = rand forca
+ urso -= pontos
+ puts "Você tirou #{pontos} de vida do urso!"
+end
+
+while dragao > 0
+ puts 'Com quanta força você quer atacar o dragão?'
+ forca = gets.to_i
+ pontos = rand forca
+ dragao -= pontos
+ puts "Você tirou #{pontos} de vida do dragao!"
+end
+
+# def
+
+def digaMoo
+ puts 'mooooooo...'
+end
+
+digaMoo
+digaMoo
+puts 'coin-coin'
+digaMoo
+digaMoo
+
+# parâmetros
+
+def digaMoo(numeroDeMoos)
+ puts 'mooooooo...'*numeroDeMoos
+end
+
+digaMoo 3
+puts 'oink-oink'
+digaMoo # Isso vai dar erro
+
+# variáveis locais
+
+def dobreEste num
+ numVezes2 = num*2
+ puts 'O dobro de '+num.to_s+' é '+numVezes2.to_s
+end
+
+dobreEste 44
+puts numVezes2.to_s
+
+# retorno
+
+valorRetorno = puts 'Este puts retornou:'
+puts valorRetorno
+
+def digaMoo numeroDeMoos
+ puts 'mooooooo...'*numeroDeMoos
+ 'yellow submarine'
+end
+
+x = digaMoo 2
+puts x
+
+# voltando ao nosso primeiro exemplo
+
+gato = 30
+urso = 100
+dragao = 500
+
+def atacar(monstro)
+ puts 'Com quanta força você quer atacar o #{monstro}?'
+ forca = gets.to_i
+ pontos = rand forca
+ puts "Você tirou #{pontos} de vida do monstro!"
+ pontos
+end
+
+while gato > 0
+ gato -= atacar('gato')
+end
+
+while urso > 0
+ urso -= atacar('urso')
+end
+
+while dragao > 0
+ dragao -= atacar('dragão')
+end
166 9_classes.rb
@@ -0,0 +1,166 @@
+# tudo tem uma classe
+
+nil.class
+true.class
+false.class
+
+# objetos são criados com new
+
+String.new == ''
+Array.new == []
+
+# classe Time
+
+agora = Time.new
+depois = agora + 60
+
+puts agora
+puts depois
+
+# classe Hash
+
+monstrosArray = [] # o mesmo que Array.new
+monstrosHash = {} # o mesmo que Hash.new
+
+monstrosArray[0] = 'coelho'
+monstrosArray[1] = 'urso'
+monstrosArray[2] = 'dragão'
+monstrosHash['fraco'] = 'coelho'
+monstrosHash['normal'] = 'urso'
+monstrosHash['forte'] = 'dragão'
+
+monstrosArray.each do |nome|
+ puts nome
+end
+monstrosHash.each do |forca, nome|
+ puts forca + ': ' + nome
+end
+
+# criando suas classes
+
+class Dado
+ def rolar
+ 1 + rand(6)
+ end
+end
+
+# Vamos fazer dois dados...
+dados = [Dado.new, Dado.new]
+
+# ...e rolar cada um deles.
+dados.each do |dado|
+ puts dado.rolar
+end
+
+# variáveis de instância
+
+class Dado
+ def rolar
+ @numeroMostrado = 1 + rand(6)
+ end
+
+ def mostrado
+ @numeroMostrado
+ end
+end
+
+dado = Dado.new
+dado.rolar
+puts dado.mostrado
+dado.rolar
+puts dado.mostrado
+
+# Já que eu não vou mais usar esse dado,
+# eu não preciso salvá-lo em uma variável.
+puts Dado.new.mostrado
+
+# initialize
+
+class Dado
+ def initialize
+ rolar
+ end
+
+ def rolar
+ @numeroMostrado = 1 + rand(6)
+ end
+
+ def mostrado
+ @numeroMostrado
+ end
+end
+
+puts Dado.new.mostrado
+
+# avançando
+
+class Criatura
+ def initialize(nome, vida, forca)
+ @nome = nome
+ @vida = vida
+ @forca = forca
+ end
+
+ def morto?
+ @vida <= 0
+ end
+
+ def perde_vida(pontos)
+ @vida -= pontos
+ puts "#{nome} agora está morto." if morto?
+ end
+
+ def atacar(oponente)
+ if morto?
+ puts "Você está morto demais pra atacar #{oponente.nome}."
+ return
+ end
+ if oponente.morto?
+ puts "#{oponente.nome} está morto. Procure outra pessoa pra brigar."
+ return
+ end
+
+ pontos = rand @forca
+ puts "Você tirou #{pontos} pontos de vida de #{oponente.nome}!"
+ oponente.perde_vida(pontos)
+ end
+end
+
+coelho = Criatura.new 'coelho', 30, 30
+dragao = Criatura.new 'dragao', 150, 150
+
+coelho.atacar dragao #vai dar erro! não existe método nome!
+
+class Criatura
+ def nome
+ @nome
+ end
+end
+
+coelho.atacar dragao #agora vai!
+
+# extendendo classes
+
+class Coelho < Criatura
+ def initialize
+ super('coelho', 30, 30)
+ puts 'Bravo coelho acaba de nascer!'
+ end
+
+ def perde_vida(pontos)
+ puts 'coelhos são muito resistentes!'
+ super(pontos - rand(5))
+ end
+end
+
+class Dragao < Criatura
+ def initialize
+ super('dragao', 150, 150)
+ puts 'Dragão furioso acordou!'
+ end
+end
+
+coelho = Coelho.new
+dragao = Dragao.new
+
+coelho.atacar dragao

0 comments on commit a439a43

Please sign in to comment.
Something went wrong with that request. Please try again.