Camila Bandeira Olivares
2 Por que Ruby? Sintaxe limpa e intuitiva:
3 Por que Ruby? Fortemente orientada à objetos Note que não temos os tipos primitivos, até mesmo um inteiro é um objeto e possui métodos.
4 Por que Ruby? Ruby é dinâmica A tipagem das variáveis é dinâmica, determinada em tempo de execução pelo interpretador.
5 Por que Ruby? Ruby é mais dinâmica Até mesmo as classes do core do Ruby são abertas e podemos modificá-las em tempo de execução.
6 Por que Ruby? DRY Don t Repeat Yourself Ruby favorece código pequeno e elegante.
7 Por que Ruby? Comunidade Existe uma grande comunidade de Ruby na internet, é muito fácil achar informações, exemplos de código, projetos open-source e mais. Durante o curso sugeriremos sites que podem ser de interesse para o programador Ruby ;)
8 Por que Ruby? A sintaxe fácil e a filosofia da linguagem favorecem um desenvolvimento mais ágil. O framework Ruby on Rails, que ganha cada vez mais espaço atualmente, é um exemplo dos resultados que se pode obter. Convention over Configuration Don t Repeat Yourself
9 Começando... É bom saber que a instalação de Ruby inclui o irb (Interactive Ruby Shell), um interpretador que nos permite escrever código e receber imediatamente o retorno. Também vem incluso o RI (documentação) e o fxri, que possui a documentação mais um interpretador.
10 Começando... Hello World! Observamos aqui: usamos o método print para imprimir a string Hello World no console. Notem que a delimitação dos comandos é uma nova linha.
11 Começando... Continuando:
12 Escopo das Variáveis Como em Ruby só declaramos as variáveis no momento estritamente necessário precisamos ficar atentos para o escopo das mesmas. Temos os seguintes escopos de variaveis: Local - declaradas normalmente com letra minúscula ou começando com o caracter _ Global - declaradas com '$' na frente do nome Classe - declaradas com na frente do nome
13 Escopo das Variáveis Exemplificando...
14 Operadores Em Ruby temos operadores aritméticos e booleanos muito semelhantes aos de outras linguagens. Observem a tabela a seguir:
15 Operadores Operador Descrição + - Soma e subtração * / % Multiplicação, divisão e módulo da divisão ** Exponenciação <= < > => ==!= Operadores de comparação && and E lógico (precedências diferentes) or Ou lógico (precedências diferentes)! not Negação lógica
16 Operadores Existem duas coisas dignas de atenção na última tabela. O operador ** de exponenciação, e a duplicidade dos operadores lógicos.
17 Operadores Vamos tentar abrir o irb e testar alguns desses operadores. Sugestões: , 3/2, 3/2.0, 10**10 3!= 5 && 5!= 3, 10 >= 0 10 <= 0
19 Constantes Um aspecto interessante em Ruby é que nós podemos mudar o valor de constantes sem culpa. O interpretador reclama mas consente. Tente você mesmo! Veremos mais sobre constantes mais tarde.
20 Tipagem Dinâmica e Forte Ruby é dinamica e estaticamente tipada. Isso quer dizer que as variáveis são do tipo do objeto que elas referenciam em determinado momento no programa. Porém ela também é forte, ou seja, não podemos fazer algumas gracinhas, como demonstramos a seguir...
21 Tipagem Dinâmica e Forte O operador += não está definido para a soma de um Fixnum com uma String, portanto foi gerado um erro. Ruby evita fazer conversões implícitas.
22 Métodos Em linguagens como C ou C++ temos funções, mas em Ruby nosso trabalho será feito por métodos, o que faz sentido já que tudo é um objeto.
23 Métodos Cada método é um novo escopo, portanto podemos ter variáveis locais. Não é possível declarar constantes dentro de métodos.
24 Métodos O último valor executado no método, será retornado.
25 Métodos Em Ruby é possível utilizar os carcteres? e! no nome dos métodos. Como convenção informal podemos usar esses caracteres para deixar nossos métodos mais intuitivos.? em métodos query (fazem uma pergunta)! em métodos destrutivos (modificam o objeto)
26 Métodos Métodos query, uma pergunta que geralmente é respondida com um boolean.
27 Métodos Métodos destrutivos
28 Exercícios 1. Sabendo que a distância da Terra até a Lua é km, faça um método que, dado o número de viagens da Terra até a Lua (ida e volta), calcule a distância total percorrida. 2. Escreva um programa que diga quantos anos tem uma pessoa que já viveu segundos.
29 Respostas 1. 2.
30 Recolhendo input Em nossos programas usaremos o método gets para receber o input. Ele nos retorna uma string com o texto digitado até que ENTER seja apertado. Importante saber que o \n (line feed) vai estar presente na string recolhida.
31 Recolhendo input Como podemos usá-lo? Outro exemplo...
32 Conversão do input to_i: converte para integer; to_s: converte para string; to_f: converte para float. Por enquanto não vamos nos preocupar com a consistência do que é digitado.
33 Estruturas de Controle Como estruturas de controle, temos: IF ELSIF UNLESS CASE
34 Estruturas de Controle Observemos o uso do if Somente FALSE (duh) e nil avaliam para false em um teste
35 Estruturas de Controle Também temos o operador IF ternário, semelhante ao que existe em outras linguagens. Podemos optar por usar o if após a expressão de resposta, para deixar o código mais legível
36 Estruturas de Controle Aqui demonstrado o uso do ELSIF
37 Estruturas de Controle Outra alternativa é a versão negada do IF, o UNLESS
38 Estruturas de Controle Para termos a mesma funcionalidade do SWITCH de outras linguagens, existe a construção CASE... WHEN.
39 Estruturas de Repetição Como estruturas de repetição, temos: WHILE FOR UNTIL BEGIN LOOP
40 Estruturas de Repetição - While
41 Estruturas de Repetição - For
42 Estruturas de Repetição - For
43 Estruturas de Repetição - For
44 Estruturas de Repetição - Until
45 Estruturas de Repetição - Begin
46 Estruturas de Repetição - Begin
47 Estruturas de Repetição - Loop
48 Classes nativas de Ruby Ruby já vem com muitas classes embutidas que facilitam a vida do programador e o impedem de reinventar a roda. Vamos dar uma olhada agora em: Fixnum e Bignum; Arrays;
49 fonte:
50 Fixnum e Bignum Herdando da classe Integer, os dois representam números inteiros, com a diferença na magnitude do mesmo; Fixnum trata de números até 31 bits e Bignum trata de números maiores; Ruby cuida das conversões entre eles para você.
51 Arrays Arrays em Ruby são um pouco diferentes do que vocês podem estar acostumados e incluem vários métodos interessantes. É preciso saber que aqui os arrays podem conter objetos de mais de uma classe ao mesmo tempo.
52 Arrays Observem:
53 Arrays Aqui também:
54 Arrays Temos algumas opções...
55 Arrays O método each é um exemplo de um iterator. O essencial em Ruby é evitar usar os loops da maneira como estamos acostumados em outras linguagens. A estrutura do próprio objeto deve nos permitir iterar sobre ele.
56 Blocos de Código Uma das grandes features de Ruby são os blocos de código. Eles funcionam como as funções anônimas (closures) presentes em outras linguagens. Nós já usamos eles várias vezes...
57 Blocos de Código Observe aqui que, blocos de código são como funções que são definidas e usadas imediatamente. Note que se tornam muito poderosos combinados com os outros aspectos de Ruby.
58 Blocos de Código Agora vamos lembrar dos métodos each e times que usamos várias vezes. Eles recebem um bloco de código e o executam sob algumas circunstâncias. O core do Ruby está cheio deles, mas também podemos escrever nossos próprios.
59 Blocos de Código O comando yield executa o bloco de código que foi recebido.
60 Blocos de Código Blocos de código, são outra coisa em Ruby que não é um objeto, porém eles podem ser convertidos para um objeto da classe Proc, que pode ser usado da seguinte maneira.
61 Exercícios 3. Crie um método que receba um array como parâmetro e o preencha com strings inseridas pelo usuário até ser digitada a palavra 'pare'. Use esse método para preencher dois arrays e imprima a intersecção dos dois. 4. Abra o fxri e experimente os métodos das classes Array e String. Use o método.methods. Ex.: String.methods
62 Respostas 3.
63 Métodos para Arrays sort: [5, 1, 6, 2].sort => [1, 2, 5, 6] include? : [ um, dois ].include?( um ) => true all?: [1, 15, 20].all? { x x>0} => true [1, 15, 20].all? { x x>1} => false any?: [1, 15, 20].any? { x x>10} => true [1, 15, 20].any? { x x>30} => false fetch: [ a, b, c, x ].fetch(0) => a [ a, b, c, x ].fetch(5, -1) => -1 length: [ p, e, t ].length => 3 empty?: [ ].empty? => true
64 Métodos para strings capitalize: ruby.capitalize => Ruby reverse: ruby.reverse => ybur upcase: ruby.upcase => RUBY downcase: RUBY.downcase => ruby length: ruby.length => 4 swapcase: RuBy.swapcase => ruby next: ruby.next => rubz empty?: ruby.empty? => false chop: ruby.chop => rub include? string : ruby.include? ub => true