diff options
Diffstat (limited to 'pt-br/ruby-pt.html.markdown')
| -rw-r--r-- | pt-br/ruby-pt.html.markdown | 386 | 
1 files changed, 386 insertions, 0 deletions
| diff --git a/pt-br/ruby-pt.html.markdown b/pt-br/ruby-pt.html.markdown new file mode 100644 index 00000000..484bb0dd --- /dev/null +++ b/pt-br/ruby-pt.html.markdown @@ -0,0 +1,386 @@ +--- +language: ruby +lang: br-pt +filename: learnruby.rb +contributors: +  - ["Bruno Henrique - Garu", "http://garulab.com"] +  - ["Katyanna Moura", "https://twitter.com/amelie_kn"] +--- + +```ruby +# Isso é um comentário + +=begin +Isso é um comentário multilinha +Ninguém os usa +Você não deve usar também +=end + +# Primeiro e principal: Tudo é um objeto. + +# Números são objetos + +3.class #=> Fixnum + +3.to_s #=> "3" + + +# Um pouco de aritmética básica + +1 + 1 #=> 2 +8 - 1 #=> 7 +10 * 2 #=> 20 +35 / 5 #=> 7 + +# Aritimética é apenas açúcar sintático +# para chamar um método de um objeto +1.+(3) #=> 4 +10.* 5 #=> 50 + +# Valores especiais são objetos +nil # Nada para ver aqui +true # verdadeiro +false # falso + +nil.class #=> NilClass +true.class #=> TrueClass +false.class #=> FalseClass + +# Igualdade +1 == 1 #=> true +2 == 1 #=> false + +# Desigualdade +1 != 1 #=> false +2 != 1 #=> true +!true  #=> false +!false #=> true + +# além de 'false', 'nil' é o único outro valor falso + +!nil   #=> true +!false #=> true +!0     #=> false + +# Mais comparações +1 < 10 #=> true +1 > 10 #=> false +2 <= 2 #=> true +2 >= 2 #=> true + +# Strings são objects + +'Eu sou uma string'.class #=> String +"Eu também sou uma string".class #=> String + +placeholder = "usar interpolação de string" +"Eu posso #{placeholder} quando estiver usando aspas duplas" +#=> "Eu posso usar insterpolação de string quando estiver usando aspas duplas" + +# imprime para output (saída) +puts "Estou imprimindo" + +# Variáveis +x = 25 #=> 25 +x #=> 25 + +# Note que uma atribuição retorna o valor atribuido +# Isso significa que você pode fazer múltiplas atribuições: + +x = y = 10 #=> 10 +x #=> 10 +y #=> 10 + +# Por convenção, use snake_case para nomes de variáveis +snake_case = true + +# Use nomes de variáveis descritivos +caminho_para_a_raiz_do_projeto = '/bom/nome/' +caminho = '/nome/ruim/' + +# Símbolos (são objetos) +# Símbolos são imutáveis, são constantes reutilizáveis representadadas +# internamente por um valor inteiro. Eles são frequentemente usados no +# lugar de strings para transmitir com eficiência os valores específicos +# e significativos + +:pendente.class #=> Symbol + +status = :pendente + +status == :pendente #=> true + +status == 'pendente' #=> false + +status == :aprovado #=> false + +# Arrays + +# Isso é um array +[1, 2, 3, 4, 5] #=> [1, 2, 3, 4, 5] + +# Arrays podem conter diferentes tipos de itens + +array = [1, "Oi", false] #=> => [1, "Oi", false] + +# Arrays podem ser indexados +# a partir do começo +array[0] #=> 1 +array[12] #=> nil + +# Como aritimética, o acesso via [var] +# é apenas açúcar sintático +# para chamar o método [] de um objeto +array.[] 0 #=> 1 +array.[] 12 #=> nil + +# a partir do final +array[-1] #=> 5 + +# Com um índice de começo e fim +array[2, 4] #=> [3, 4, 5] + +# Ou com um intervalo de valores +array[1..3] #=> [2, 3, 4] + +# Adicionar a um array como este +array << 6 #=> [1, 2, 3, 4, 5, 6] + +# Hashes são o principal dicionário de Ruby com pares de chaves(keys)/valor(value). +# Hashes são simbolizados com chaves "{}" +hash = {'cor' => 'verde', 'numero' => 5} + +hash.keys #=> ['cor', 'numero'] + +# Hashes podem ser rapidamente pesquisados pela chave (key) +hash['cor'] #=> 'verde' +hash['numero'] #=> 5 + +# Procurar em um hash por uma chave que não existe retorna nil: +hash['nada aqui'] #=> nil + +# Interar sobre hashes com o método #each: +hash.each do |k, v| +  puts "#{k} is #{v}" +end + +hash.each do |k, v| +  puts "#{k} é #{v}" +end + +# Desde o Ruby 1.9, temos uma sintaxe especial quando usamos símbolos como chaves (keys) + +novo_hash = { defcon: 3, acao: true} + +novo_hash.keys #=> [:defcon, :acao] + +# Dica: Tanto Arrays quanto Hashes são Enumerable. +# Eles compartilham um monte de métodos úteis como each, map, count e mais + +# Estruturas de controle + +if true +  "Se verdadeiro" +elsif false + "else if, opicional" +else + "else, também é opicional" +end + +for contador in 1..5 +  puts "interação #{contador}" +end +#=> contador 1 +#=> contador 2 +#=> contador 3 +#=> contador 4 +#=> contador 5 + +# PORÉM +# Ninguém usa para loops +# Use "each" em vez, dessa forma: + +(1..5).each do |contador| +  puts "interação #{contador}" +end +#=> contador 1 +#=> contador 2 +#=> contador 3 +#=> contador 4 +#=> contador 5 + +contador = 1 +while contador <= 5 do +  puts "interação #{contador}" +  contador += 1 +end +#=> contador 1 +#=> contador 2 +#=> contador 3 +#=> contador 4 +#=> contador 5 + +grau = 'B' + +case grau +when 'A' +  puts "Um longo caminho a percorrer, pequeno gafanhoto" +when 'B' +  puts "Melhor sorte da próxima vez" +when 'C' +  puts "Você pode fazer melhor" +when 'D' +  puts "Scraping through" +when 'F' +  puts "Você falhou" +else +  puts "Alternative grading system, eh?" +end + +# Funções + +def dobrar(x) +  x * 2 +end + +# Funções (e todos os blocos) retornam implicitamente o valor da última linha +dobrar(2) #=> 4 + +# Parênteses são opicionais onde o resultado é claro +dobrar 3 #=> 6 + +dobrar dobrar 3 #=> 12 + +def somar(x,y) +  x + y +end + +# Argumentos de métodos são separados por uma vírgula +somar 3, 4 #=> 7 + +somar somar(3,4), 5 #=> 12 + +# yield +# Todos os métodos possuem implicitamente um paramêntro opcional que é um bloco +# ele pode ser chamado com a palavra chave 'yield' + +def ao_redor +  puts "{" +  yield +  puts "}" +end + +ao_redor { puts 'Olá mundo' } + +# { +# Olá mundo +# } + + +# Define uma classe com a palavra chave 'class' + +class Humano + +  # Uma variável de classe. Ela é compartilhada por todas as instâncias dessa classe +  @@especies = "H. sapiens" + +  # Inicialização básica (contructor) +  def initialize(nome, idade=0) +    # Atribui o argumento para a variável de instancia "nome" do objeto +    @nome = nome +    # Se a idade não for passada, nós definimos um valor padrão na lista de argumentos +    @idade = idade +  end + +  # Método básico para atribuir valor +  def nome=(nome) +    @nome = nome +  end + +  # Método básico de resgatar valor +  def nome +    @nome +  end + +  # Um método de classe usa a palavra chave self para se defenciar dos métodos de instância. +  # Ele só pode ser chamado na classe, não na instancia +  def self.diz(msg) +    puts "#{msg}" +  end + +  def especies +    @@especies +  end + +end + + +# Instanciando uma classe +jim = Humano.new("Jim Halpert") + +dwight = Humano.new("Dwight K. Schrute") + +# Vamos chamar um par de métodos +jim.especies #=> "H. sapiens" + +jim.nome #=> "Jim Halpert" + +jim.nome = "Jim Halpert II" #=> "Jim Halpert II" + +jim.nome #=> "Jim Halpert II" + +dwight.especies #=> "H. sapiens" + +dwight.nome #=> "Dwight K. Schrute" + +# Chamar o método de classe +Humano.diz("Oi") #=> "Oi" + +# Uma classe também é objeto em Ruby. Então uma classe pode possuir variável de instância +# Variáveis de classe são compartilhadas entre a classe e todos os seus descendentes. + + +# Classe base +class Humano +  @@foo = 0 + +  def self.foo +    @@foo +  end + +  def self.foo=(value) +    @@foo = value +  end +end + +#  classe filha +class Trabalhador < Humano +end + +Humano.foo # 0 +Trabalhador.foo # 0 + +Humano.foo = 2 # 2 +Trabalhador.foo # 2 + +# Uma variável de instância não é compartilhada por suas classes decendentes. + +class Humano +  @bar = 0 + +  def self.bar +    @bar +  end + +  def self.bar=(value) +    @bar = value +  end +end + +class Doutor < Humano +end + +Humano.bar # 0 +Doutor.bar # nil + +``` | 
