Ruby: Primeira Aula

Ok! Tomei coragem e deixei a preguiça de lado! Quando comecei a escrever este post eu estava meio gripado e de saco cheio de ficar ouvindo minha mãe falando que estou perdendo meu tempo com a internet, que isso não me leva a nada, que eu deveria pensar no mercado de trabalho e estudar a matéria (chata e retrógrada) da faculdade, que eu preciso crescer e blá blá blá! Mas tudo bem! Não quero nem saber quem pintou a zebra! Eis que apresento-lhes… A primeira aula de Ruby deste blog:

Interactive Ruby Shel (irb)

Vamos começar as aulas usando o irb. Um shell interativo no mesmo estilo do shell do Python. Ele vai ser útil para podermos testar os comandos e códigos para irmos aprendendo de forma mais fácil e divertida ;)

No livro do Ruby – Conhecendo a Linguagem, do TaQ (que eu estou seguindo para fazer essas aulas), ele recomenda que edite o arquivo .irbrc, que pode ser encontrado no diretório home (no Linux), e insira a seguinte linha:

require 'irb/completion'

Feito isso, vamos executar o irb, digitando (tcham, tcham, tcham, tcham….) irb no terminal (ou em um prompt do DOS -.-):

[saibot@upson saibot]$ irb

E com isso seremos recebidos com uma tela onde estará escrito o seguinte:

irb(main):001:0>

Certinho… Vou botar um pequeno codigozinho aqui como exemplo para explicar um pouco sobre a estrutura do irb:

irb(main):001:0> x = 5
=> 5
irb(main):002:0> if x != 5
irb(main):003:1>        puts “Diferente de 5″
irb(main):004:1> else
irb(main):005:1*        puts “Igual a 5″
irb(main):006:1> end
Igual a 5=> nil
irb(main):007:0>

Como pode ser visto, o prompt é separado por dois pontos (:). Com isso, temos o seguinte:

  1. Nome do programa (main)
  2. Número de linhas que digitamos (e estamos) no irb.
  3. Nível de profundidade

Sobre a profundidade, podemos dizer que é a que estamos quando abrimos ou fechamos uma expressão. Isso pode ser observado no próprio exemplo. Na linha 002, estamos começando a usar o if e o nível de profundidade é 0. Já na linha 003, uma linha depois do if, já entramos no nível de profundidade 1 ;D Na linha 006, fechamos o if com o end, por isso na linha 007 voltamos ao nível 0 de profundidade. Entendido?

Mais uma coisa, observe a linha 005 e perceberá um asterisco (*). Isso ocorre porque o irb “sabe” que o if precisa ser fechado com um end ;)

“Olá Mundo!” no irb

Vamos agora começar fazendo o mais básico que existe em qualquer linguagem (exceto em, digamos…. …Java! Ahueahuaehuaeuae!!!!!!!). O “Hello World!” ou “Olá Mundo!”

Dentro do irb (óbvio O.o) digite:

irb(main):001:0> puts “Olá Mundo!”
Olá Mundo!
=> nil
irb(main):002:0>

Como pode ver, a frase “Olá Mundo!” foi escrita na tela ;) O puts é o comando (um dos) para imprimir coisas na tela…

Da mesma forma que usamos o puts para isso, podemos também usar o print:

irb(main):002:0> print “Olá Mundo!”
Olá Mundo!=> nil
irb(main):003:0>

Como podemos ver, apesar de parecer fazer exatamente o mesmo que o puts, o print apenas imprime na tela e não pula linha nenhuma, enquanto o puts pula uma linha cada vez que é usado.

Variáveis

Apesar de dizerem que tudo em Ruby é um objeto, as variáveis são excessões, sendo apenas referências para estes.

São bem simples de serem utilizadas em Ruby pelo fato de usarem duck typing (uma forma como é chamada a tipagem dinâmica do Ruby).

Exemplo:

[saibot@upson saibot]$ irb
irb(main):001:0> x = “terramel”
=> “terramel”
irb(main):002:0> x.class
=> String
irb(main):003:0> x = 1
=> 1
irb(main):004:0> x.class
=> Fixnum
irb(main):005:0> x = 1.2
=> 1.2
irb(main):006:0> x.class
=> Float
irb(main):007:0>

Ruby também tem tipagem forte, como pode ser observado a seguir:

[saibot@upson saibot]$ irb
irb(main):001:0> x = 1
=> 1
irb(main):002:0> y = “oi”
=> “oi”
irb(main):003:0> z = x + y  
TypeError: String can’t be coerced into Fixnum
        from (irb):3:in `+’
        from (irb):3
        from :0
irb(main):004:0>

Quando tentamos somar um número com uma string recebemos um erro (óbvio), já que não  é possível somar essas dois coisas diferentes…

Claro que podemos converter o x para String (usando o método .to_s) para concatenarmos os valores das duas variáveis:

irb(main):004:0> z = x.to_s + y
=> “1oi”
irb(main):005:0>

Mais para frente veremos um pouco mais sobre este e outros métodos. Por enquanto, lembrando o que Matz disse que tudo é objeto em Ruby, dê uma olhada nisso:

[saibot@upson saibot]$ irbirb(main):001:0> x = 1
=> 1
irb(main):002:0> x.methods
=> ["to_a", "%", "<<", "respond_to?", ">>", "divmod", "&", "type", "integer?", "chr", "protected_methods", "eql?", "to_sym", "*", "instance_variable_set", "+", "is_a?", "truncate", "hash", "send", "to_s", "-", "between?", "modulo", "singleton_method_added", "prec", "zero?", "/", "size", "class", "tainted?", "private_methods", "__send__", "next", "|", "untaint", "~", "id", "step", "to_i", "inspect", "instance_eval", "prec_i", "remainder", "clone", "nonzero?", "public_methods", "^", "+@", "floor", "extend", "freeze", "-@", "display", "**", "quo", "__id__", "<=>", "downto", "to_f", "<", "methods", "method", "==", "===", "prec_f", "abs", ">", "to_int", "nil?", "dup", "instance_variables", "coerce", ">=", "instance_of?", "ceil", "<=", "upto", "div", "times", "object_id", "=~", "singleton_methods", "equal?", "succ", "taint", "id2name", "[]“, “frozen?”, “instance_variable_get”, “kind_of?”, “round”]
irb(main):003:0>

Esses são os métodos públicos da instância da classe. Teriamos o mesmo resultado usando x.public_methods.

Podemos ver os métodos privados da instância da classe usando x.private_methods:

irb(main):003:0> x.private_methods
=> ["select", "lambda", "local_variables", "chomp", "raise", "print", "sub!", "Array", "method_missing", "format", "trap", "at_exit", "exit!", "readlines", "autoload", "system", "set_trace_func", "getc", "initialize_copy", "split", "fail", "putc", "gsub!", "iterator?", "catch", "p", "remove_instance_variable", "sub", "sleep", "syscall", "callcc", "Integer", "fork", "srand", "singleton_method_removed", "caller", "puts", "chop!", "irb_binding", "scan", "block_given?", "autoload?", "binding", "throw", "warn", "`", "gsub", "loop", "open", "Float", "singleton_method_undefined", "rand", "exit", "chomp!", "gets", "load", "exec", "trace_var", "global_variables", "proc", "initialize", "chop", "printf", "String", "test", "sprintf", "abort", "readline", "untrace_var", "require", "eval"]
irb(main):004:0>

Por enquanto é só… Sei que demorei para postar essa primeira aula, mas com paciência e sempre em frente vamos andando ;D Na próxima aula explicarei um pouco mais sobre varíaveis, os tipos, variáveis públicas, blocos etc. Aguardem! Vou ver se começo a postar as aulas com mais freqüência ;D

Leia Também:

15 Comentários

  • Ruby: Primeira Aula « Terramel

    Ok! Tomei coragem e deixei a preguiça de lado, mas tudo bem… Não quero nem saber quem pintou a zebra! Eis que apresento-lhes%6 A primeira aula de Ruby deste blog:

  • [...] por Terramel (leonardo·saibotΘgmail·com) – referência [...]

  • Parabéns Terrinha pela iniciativa, eu conheço de leve o Ruby, até jah criei alguns scripts, e vou seguir seu tutorial para pescar qq detalhe que eu nao tenha visto…
    Ruby é muito bom …

    Um abraço..

  • Olá Leonardo, ou Terrinha, como devo chamá-lo?, é muito oportuno e interessante essa sua iniciativa de postar aqui o que você vai aprendendo nos livros e com seus professores.
    Explique para a mamãe que esse exercício funciona como recordação prática do que você aprendeu na teoria e permite uma melhor fixação do assunto no cérebro, além de estar oferecendo a oportunidade para que outras pessoas também aprendam, de maneira simpática e gratuita.
    Seu desabafo em relação às observações maternais, com certeza muitos de nós já ouvimos as nossas mães dizerem algo parecido, preocupadas com o nosso futuro.
    Conte também para ela um exemplo prático: tenho parentes jovens que trabalham em casa, pela internet, realizando projetos para clientes de vários lugares, no Brasil e no exterior. Ganham dinheiro, se sustentam e ajudam no sustento de suas famílias, não têm de enfrentar o trânsito infernal das grandes cidades, sol e chuva, e o tempo que sobra eles aproveitam para estudar, se exercitar, namorar, enfim curtir um pouco a vida.
    As vezes, pelo fato de se estar trabalhando em casa, no computador, pode dar a impressão de que estamos apenas “matando o tempo”, “brincando”, sem produzir nada de útil, o que não é verdadeiro.
    Mas é assim mesmo, vá em frente com os seus objetivos, em breve os resultados virão à tona.
    Abraços do Donato

  • [...] Ruby: Primeira Aula Ok! Tomei coragem e deixei a preguiça de lado! Quando comecei a escrever este post eu estava meio gripado e de saco […] [...]

  • Æ!!

    Legal terramel!
    Eu estou aprendendo ruby faz umas 5 semanas e estou gostando bastante…Como estou utilizando Windows ( infelizmente…Ta difícil de tirar um tempo para instalar meu Slack denovo ), estou usando o Scite e não usei o Irb ainda, portanto foi legal conhecer o seu tutorial!

    Espero que seja bom para outras pessoas tambem!

    Parabens pela iniciativa!

    Há braços

  • Fala grande! Ruby é mto bacana! Descobri a linguagem criando scripts para teste automatizado, hj sou apaixonado. Ruby rulez!

  • Grande Terramel e suas pesquisas no mundo das mais diversas linguagens.

    Grande artigo, apesar de eu não saber nada de Ruby.

    []‘s

    PopolonY2k
    PlanetaMessenger.org

  • [...] Visite o blog, e acompanhe os posts. [...]

  • kehr cer meo ameog?

    é bomba, infelizmente aqui em rio preto, por mais que vc saiba alguma coisa, a visão dos empresários é a de que vc nao faz porra nenhuma… já que fica o dia inteiro na frente de um computador com internet ¬¬

  • Blz Leonardo?
    Legal o post sobre Ruby, parabéns…comprei um livro ontem mesmo sobre a linguagem pra entender melhor.
    Grande abraço!

  • Douglas escreveu:

    Aff meu,entendi poha nenhuma,mais vlw a intenção…

  • Douglas escreveu:

    Meu,num entendi nada,poha nenhuma msm…mais vlw a intensão…

    • Tipow, agora que analisei de novo, após quase 1 ano e meio que escrevi, percebi que está meio técnico demais. Vou ver se reescrevo assim que tiver tempo e explico de forma mais básica para quem não é programador também entender melhor. O livro que me baseei é excelente, mas voltado para quem já programa em alguma outra linguagem e conhece grande parte desses conceitos.

      Abraços
      do Terrinha

  • Fernando Fernandes escreveu:

    Olá amigo, POR FAVOR!!!
    Meu nome é Fernando, percebi que está cursando na fatece o “informatica para gestão de negocios” e fiz minha inscrição nele… mas confesso que não entendi muito a grade curricular.!
    Sou técnico em informatica e telecom. manjo de hardware , windows, telecom, redes, cisco… isso eu manjo completamente.

    mas gostaria de me aprofundar em banco de dados e web.. tipo html css, php, java.. essas coisas porque nisso eu tenho conhecimento bem basico..! “não manjo nada de linux” só windows…

    eu fiz a inscrição porque é o unico curso em informatica que tem proximo a mim “resido na zona leste de são paulo” e o unico que mexe com banco de dados pelomenos que preciso aprender.
    liguei lá na fatec e não me explicaram nada ..rs

    queria que por favor , se puder explicar oq engloba informatica para gestão de negocios, se tem html, css, php, java .. essas coisas.. oq tem nesse curso em materia de banco de dados, e qual o mercado pra ele e se é bom fazer pra um cara nas minhas condições.
    pretendo sair um pouco da parte tecnica, e fazer site, programação, software .. essas coisas que tem mais mercado entende?

    se puder me envie um e-mail por favor > experience@terra.com.br
    Grato .
    Fernando Fernandes.

Deixe uma resposta

Seu email nunca é divulgado.Campos obrigatórios são marcados *