SlideShare uma empresa Scribd logo
1 de 86
+




    Aprendendo a programar
    com Ruby
    Sarah Pimentel
+
    Objetivo
    •   Revisão / Consolidação de conceitos básicos de programação
    •   Estímulo para continuar o aprendizado
    •   Highlights sobre revisão de código
    •   Alinhamento de conhecimento da equipe para iniciar discussões
        sobre automação
+
    Dinâmica
    Explicações básicas de programação
    Resolução de desafios
    Identificação de bugs na apresentação
+
    Codeacademy
    O conteúdo baseia-se em sua maioria no site:
    http://www.codecademy.com/pt/tracks/ruby
+
    Ruby

       Ruby
           Linguagem de alto nivel
               Ler e escrever é fácil. Inglês.
           Interpretado
               Não precisa de compilador
           Orientado a objeto
               Tudo no ruby é um objeto
           Fácil de usar
+
    Ruby

       Ruby
           Linguagem de alto nivel
               Ler e escrever é fácil. Inglês.
           Interpretado
               Não precisa de compilador
           Orientado a objeto
               Tudo no ruby é um objeto
           Fácil de usar muito difícil…. Por isso os bugs demoram
+
    Melhores Amigos

       Google

       IRB
+
    Tipos de dados:
    Number, String, Boolean

       Numbers

       Boolean
           True / False
           “true” / “false”

       String
           Palavras ou frases


       Variavel != variavel
+
    IRB

    >> my_num = 25

    => 25

    >> my_boolean = true

    => true

    >> my_string = "Ruby"

    => "Ruby"
+
    Variáveis

       Palavra que guarda um valor



       Convenção:
           Letra minuscula
           Separador de palavras: _
           Evitar iniciar por simbolos ($, @, etc)
+
    Math

    + Adição

    -   Subtração

    * Multiplicação

    / Divisão

    ** Exponenciação

    % Módulo (resto)
+
    IRB

    >> 2**3

    => 8

    >> 3**2

    => 9

    >> 25%7

    => 4
+
    Puts e Print

       Print – joga a informação na tela

       Puts – cria uma nova linha com a informação
+
    IRB

    >> puts "hi"

    hi

    => nil

    >> print ”hello"

    hello=> nil
+
    String Methods

       Objetos possuem métodos

       Tudo em ruby é um objeto
+
    IRB

    >> "Estou aprendendo ruby".length

    => 21

    >> "ruby".reverse

    => "ybur"

    >> "ruby".upcase

    => "RUBY"

    >> "RUBY".downcase

    => "ruby"

    >> "ruby".upcase.reverse

    => "YBUR"
+
    Comentários

       # Comenta uma única linha

       =begin =end Comenta várias linhas
+
    IRB

    >> # 2+2

    ?> 1+1

    => 2

    >> =begin

    2+2

    1+1

    =end

    >> 3+3

    => 6
+
    DESAFIO 1

    Criar um programa que irá ler a entrada de um usuário e corrigir
    sua capitalização. Os dados devem ser lidos um a um.



    Output: Seu nome é Sarah Pimentel e você nasceu em
    Recife/PE.
+
    Desafio 1

       Escrever a pergunta

       Capturar o resultado

       Fazer isso para cada informação

       Exibir o resultado de acordo com o esperado

       Formatar as strings
+ puts ”Qual o seu nome?"
  nome= gets.chomp

  puts ”Qual seu sobrenome?"

  sobrenome= gets.chomp

  puts ”De qual cidade voce e?"

  cidade= gets.chomp

  puts ”De qual estado voce e?"

  estado= gets.chomp

  puts ”Seu nome e#{nome.capitalize!} #{sobrenome.capitalize!} e
  nasci em #{cidade.capitalize!}/#{estado.upcase!}"
+
    Controle de Fluxo

       Proporciona diferentes resultados dependendo da computação
        de informações
+
    IRB

    >> user_num = Integer(gets.chomp)



    >> if user_num < 0

    >> puts "You picked a negative integer!"

    >> elsif user_num > 0

    >> puts "You picked a positive integer!"

    >> else

    >> puts "You picked zero!"

    >> end

    You picked a positive integer!
+
    If

       O comando If avalia uma expressão. Se a expressão é
        verdadeira, executa o bloco de código que se segue. Se é
        falsa, o bloco não é executado e o programa vai para o
        próximo comando.
+
    IRB

    >> if true

    >> puts “Funciona”

    >> end

    Funciona
+
    Else

    Se a expressão for verdadeira, rode esse pedaço de código. Se
    não for, rode esse outro pedaço.
+
    IRB

    >> if 1 > 2

    >>    puts “Nao imprime”

    >> else

    >>    puts “Imprime”

    >> end

    Imprime
+
    Elsif

    E se quiser mais que duas opções?
+
    IRB

    >> if 1 > 2

    >>    puts “Nao imprime”

    >> elsif 2 > 3

    >>    puts “Nao imprime”

    >> else

    >>    puts “Imprime”

    >> end

    Nao Imprime
+
    IRB

    >> if 1 > 2

    >>    puts “Nao imprime”

    >> elsif 2 > 3

    >>    puts “Nao imprime”

    >> else

    >>    puts “Imprime”

    >> end

    Imprime
+
    Unless

       Verifica se algo é falso ao invés de verificar se algo é
        verdadeiro.
+
    If, elsif, else, unless?

    comFome= false



    ___ ___

     puts “Estou escrevendo um programa em Ruby!”

    ___

     puts “Hora de comer!”

    ___
+
    Comparações

       =     operador de atribuição

       ==    “é igual a”

       !=    “é diferente de”

       <     “é menor que”

       <=    “é menor ou igual a”

       >     “é maior que”

       >=    “é maior ou igual a”
+
    True or False?



    A.   77 != 77

    B.   -4 <= -4

    C.   -44 < -33

    D.   100 == 1000
+
    True or False?



    A.   77 != 77      FALSE

    B.   -4 <= -4      TRUE

    C.   -44 < -33     TRUE

    D.   100 == 1000   FALSE

    E.   10 = 100      FALSE
+
    True or False?


    A.   77 != 77          FALSE

    B.   -4 <= -4          TRUE

    C.   -44 < -33         TRUE

    D.   100 == 1000       FALSE

    E.   10 = 100

    SyntaxError: compile error

    syntax error, unexpected '=', expecting $end
+
    Operadores booleanos

       && (e)
           True se todas as expressões forem verdadeiras

       || (ou)
           True se ao menos uma expressão for verdadeira

       !    (não)
           Inverte os valores true e false
+
    True / False

       true && true     TRUE

       true && false    FALSE

       false && true    FALSE

       false && false  FALSE
+
    True / False

       true || true      TRUE

       true || false     TRUE

       false || true     TRUE

       false || false    FALSE
+
    True / False

       !true     FALSE

       !false    TRUE
+
    True or False?

    A.   77 < 78 && 77 < 77

    B.   2**3 == 8 && 3**2 == 9

    C.   (3 < 4 || false) && (false || true)

    D.   !true && (!true || 100 != 5**2)
+
    True or False?

    A.   77 < 78 && 77 < 77

    FALSE

    B.   2**3 == 8 && 3**2 == 9

    TRUE

    C.   (3 < 4 || false) && (false || true)

    TRUE

    D.   !true && (!true || 100 != 5**2)

    FALSE
+
    Desafio 2

    Cebolinha

       Escreva um programa que transforma todos os r de uma frase
        informada pelo usuario em l.

       Caso a frase inserida não contenha nenhum r, exibir a
        mensagem “assim a brincadeira não funciona”

       Caso o usuário não entre nenhuma frase, pedir a frase
        novamente
+
    Desafio 2

       Receber input, até que o usuario entre uma frase qualquer

       Validar se existe “r”.

       Lembrar que pode ter tanto “r” quanto “R” na frase.

       Substituir “r” por “l”

       Exibir “assim a brincadeira nao funciona”
+  puts "Qual o texto?"
      texto = gets.chomp.downcase

      if texto.include? “r"

             texto.gsub!(/r/, ”l")

      else

              puts ”Assim a brincaderia não funciona”

      end

      puts texto
+
    Caso o usuário não entre nenhuma
    frase, pedir a frase novamente
       frase = “”

       while frase.empty?

             frase = gets.chomp

       end
+
    Loops

       WHILE

    Repetir uma ação enquanto uma condição for verdadeira, sem
    saber ao certo quantas vezes isso vai ocorrer.



    frase = “”

    puts “digite uma frase”

    while frase.empty?

     frase = gets.chomp

    end
+
    Loops

    i=0

    while i < 5

     puts i

    end
+
    Loops

       Loops infinitos



    i=0

    while i < 5

     puts i

     i=i+1

    end
+
    Loops

       UNTIL

    Ao contrário do WHILE, executa enquanto a condição for falsa.



    counter = 1

    until counter > 10

     puts counter

     counter = counter + 1

    end
+
    Outros operadores de atribuição

       +=

       -=

       *=

       /=



       ++ e -- não funcionam em ruby
+
    Loops

       FOR

    Quando você sabe quantas vezes quer executar o comando



    for num in 1...10

     puts num

    end
+
    Faixas (ranges)

       for num in 1...10 (exclui o 10)

       for num in 1..10 (inclui o 10)
+
    Iterators e Blocos

       Iterações são repetições de execução de um bloco de comandos

       Iterator (loop infinito)
        loop { print “Olaaaa” }

        { } == do end

        i=0
        loop do
          i += 1
          print “#{i}”
          break if i < 5
        end
+
    Iterators e Blocos

       Iterações são repetições de execução de um bloco de comandos

       Iterator (loop infinito)
        loop { print “Olaaaa” }

        { } == do end

        i=0
        loop do
          i += 1
          print “#{i}”
          break if i > 5
        end
+
    Next

    Pode ser usado para pular passos. O código abaixo imprime os números impares
    entre 0 e 20.



    i = 20

    loop do

     i -= 1

      next if i % 2 == 0

      puts “#{i}”

      break if i <= 0

    end
+
    Next

    Pode ser usado para pular passos. O código abaixo imprime os números impares
    entre 0 e 20.



    i = 20

    loop do

     i -= 1

      next if i % 2 == 0

      puts “#{i}”

      break if i = 0

    end
+
    Next

    Pode ser usado para pular passos. O código abaixo imprime os números impares
    entre 0 e 20.



    i = 20

    loop do

     i -= 1

      next if i % 2 == 0

      puts “#{i}”

      break if i == 0

    end
+
    Next

    Pode ser usado para pular passos. O código abaixo imprime os números impares
    entre 0 e 20.



    i = 20

    loop do

      i -= 1

      break if i == 0

      next if i % 2 == 0

      puts “#{i}”

    end
+
    Array

       Uma forma de armazenar múltiplos valores

       [10,31,10,400]
+
    Iterator

       EACH

    Itera por cada elemento de um objeto. Qual o output?



    array = [1,2,3,4,5]

    array.each do |x|

     x += 10

     puts "#{x}”

    end
+
    Iterator

    array = [1,2,3,4,5]

    array.each do |x|

     x += 10

     puts "#{x}”

    end




    11

    12

    13

    14

    15
+
    Iterator

       TIMES

    É uma forma compacta do loop “for”



    10.times { print “Ola Mundo” }
+
    Exercicio IRB

       Imprima os numeros de 1 a 50 usando:
           WHILE
           UNTIL
           FOR
           LOOP
           TIMES
+
    Estruturas de dados

       ARRAY INDEX



    demo_array = [100, 200, 300, 400, 500]

    print demo_array[2]
+
    Estruturas de dados

       ARRAY INDEX



    demo_array = [100, 200, 300, 400, 500]

    print demo_array[2]

    300
+
    Array de Array

       Um Array pode ser de qualquer coisa, até mesmo de arrays



    multi_array = [[0,0,0,0],[0,0,0,0],[0,0,0,0],[0,0,0,0]]

    multi_array.each { |x| puts "#{x}n" }

    [[0,0,0,0],[0,0,0,0],[0,0,0,0],[0,0,0,0]]
+
    Hash

        Arrays são indexados numerica e sequencialmente. Se quisermos
         organizar de outra forma nossa coleção de dados, devemos usar hashes.

    my_hash = { "name" => ”Sarah",

        "age" => 15,

        "hungry?" => true

    }

    puts my_hash["name"]

    puts my_hash["age"]

    puts my_hash["hungry?"]
+
    Adicionando valores

    pets = Hash.new

    pets["Sarah"] = "dog”



    pets = { “Rafa” => “bird”, “Kaio” => “cat”, “Biro” => “hamster”}
+
    Iterando nos hashes

    secret_identities = { "The Batman" => "Bruce Wayne",

        "Superman" => "Clark Kent",

        "Wonder Woman" => "Diana Prince",

        "Freakazoid" => "Dexter Douglas"

    }



        secret_identities.each do |key, value|

                puts "#{key}: #{value}"

        end
+
    Desafio 3

       Histograma
           O programa recebe uma frase e cria um hash com esse input. Cada chave do
            hash vai ser uma palavra da frase. Cada valor vai ser a quantidade de vezes que
            essa palavra aparece na frase, indicando as palavras que aparecem mais
            emcima.

        Exemplo:
         “The rain in Spain falls mainly on the plain”
           The 2
           Rain 1
           In 1
           Spain 1
           Falls 1
           Mainly 1
           On 1
           Plain 1


                                                                                      …
+



Continua em…:
http://www.codecademy.com/pt/tracks/ruby
(Blocks and Sorting)
+
    Métodos e Blocos

       Um método é uma seção de código reutilizável, escrito para
        executar uma determinada tarefa em um programa.



       Por que usar métodos?
           Se algo der errado é mais fácil de encontrar o problema e resolve-lo
            se cada tarefa tiver seu método.
           Deixa o código mais reutilizavel.
+
    Métodos e Blocos

    def bem_vindo

     puts “Bem vindo ao Ruby”

    end

    bem_vindo
+
    Parâmetros

       Parâmetros são apelidos dados aos argumentos passados
        para os métodos.

    def quadrado(n)

     puts n ** 2

    end

    quadrado(2)
+
    Splat Arguments

    def cumprimentar(cumprimento, *amigos)

            amigos.each { |amigo| puts “#{cumprimento}, #{amigo}”}

    end



    cumprimentar(“Bom
    dia”, “Rafa”, “Beppu”, “Cabelinho”, “Agapito”, “Kaio”, “Diego”)
+
    Return

       Por vezes vamos querer que o método ao invés de imprimir
        algo na tela, retorne um valor que possamos usar em outras
        situações.



    def cube(n)

        return n ** 3

    end
+
    Return

    def cube(n)

     return n ** 3

    end



    output = cube(3)

    output += 11

    puts output

    38
+
    Blocos

       Blocos são estruturas similares aos métodos, mas que não tem
        nome. São definidos por do end ou { }



    1.times do

        puts “Eu sou um bloco de código”

    end



    1.times { puts “Eu também sou” }
+
    Diferenças entre métodos e blocos

       O método pode ser chamado N vezes, o bloco é executado
        apenas uma vez

       O método é executado em qualquer contexto, o bloco é
        executado no contexto em que está definido
+
    Diferenças entre métodos e blocos

    def capitalize(string)
      puts “#{string[0].upcase}#{string[0..-1]}”

    end

    capitalize(“sarah”)

    capitalize(“diego”)



    [“kaio”,”beppu”].each { |string| puts
    “#{string[0].upcase}#{string[0..-1]}”}
+
    Métodos e blocos

       Um método pode receber um bloco como parâmetro. Isso é o
        que .each tem feito todo este tempo:. Tomar um bloco como
        um parâmetro e fazer coisas com ele!

       Passar um bloco a um método é uma ótima maneira de
        abstrair determinadas tarefas a partir do método e definir as
        tarefas quando chamamos o método.

       A abstração é uma idéia. Você pode pensar nisso no sentido
        de "fazer algo mais simples.”
+
    Sort

       Ordenação



    [2,3,4,1,5].sort!

    => [1, 2, 3, 4, 5]
+
    Operador de comparação
    combinada
       <=>



    Retorna 1 se o segundo item é maior que o primeiro,

    Retorna -1 se o primeiro item é maior que o primeiro

    Retorna 0 se os itens são iguais
+
    Operador de comparação
    combinada
       <=>



    livro_1 = “Selenium cookbook”

    livro_2 = “How Google Tests Software”



    livro_1 <=> livro_2

    => 1
+

Mais conteúdo relacionado

Mais procurados

SIMCIT 2013 - Mini-curso PHP
SIMCIT 2013 - Mini-curso PHPSIMCIT 2013 - Mini-curso PHP
SIMCIT 2013 - Mini-curso PHPJonata Weber
 
Introdução a JavaScript
Introdução a JavaScriptIntrodução a JavaScript
Introdução a JavaScriptBruno Catão
 
Introdução PHP + Kohana 3
Introdução PHP + Kohana 3Introdução PHP + Kohana 3
Introdução PHP + Kohana 3Adir Kuhn
 
Manual-de-php
Manual-de-phpManual-de-php
Manual-de-phpdiogoa21
 
M5-Desenvolvimento-Paginas-Web
M5-Desenvolvimento-Paginas-WebM5-Desenvolvimento-Paginas-Web
M5-Desenvolvimento-Paginas-Webdiogoa21
 
TDC2017 | Florianopolis - Trilha DevOps How we figured out we had a SRE team ...
TDC2017 | Florianopolis - Trilha DevOps How we figured out we had a SRE team ...TDC2017 | Florianopolis - Trilha DevOps How we figured out we had a SRE team ...
TDC2017 | Florianopolis - Trilha DevOps How we figured out we had a SRE team ...tdc-globalcode
 
JavaScript: agora é sério
JavaScript: agora é sérioJavaScript: agora é sério
JavaScript: agora é sérioLuciano Ramalho
 
Swift em 45 minutos - TDC Sao Paulo 2014
Swift em 45 minutos - TDC Sao Paulo 2014Swift em 45 minutos - TDC Sao Paulo 2014
Swift em 45 minutos - TDC Sao Paulo 2014Helder da Rocha
 
04 - C# laços de repetição, vetores e matrizes v1.0
04 - C# laços de repetição, vetores e matrizes v1.004 - C# laços de repetição, vetores e matrizes v1.0
04 - C# laços de repetição, vetores e matrizes v1.0César Augusto Pessôa
 
Aula 10 - Comando de Decisão Múltipla e Comandos de Repetição
Aula 10 - Comando de Decisão Múltipla e Comandos de RepetiçãoAula 10 - Comando de Decisão Múltipla e Comandos de Repetição
Aula 10 - Comando de Decisão Múltipla e Comandos de RepetiçãoAndré Constantino da Silva
 
tmn - Introdução ao JavaScript
tmn - Introdução ao JavaScripttmn - Introdução ao JavaScript
tmn - Introdução ao JavaScriptClaudio Gamboa
 

Mais procurados (20)

SIMCIT 2013 - Mini-curso PHP
SIMCIT 2013 - Mini-curso PHPSIMCIT 2013 - Mini-curso PHP
SIMCIT 2013 - Mini-curso PHP
 
Java
JavaJava
Java
 
Introdução a JavaScript
Introdução a JavaScriptIntrodução a JavaScript
Introdução a JavaScript
 
01 variaveis io if
01 variaveis io if01 variaveis io if
01 variaveis io if
 
Introdução PHP + Kohana 3
Introdução PHP + Kohana 3Introdução PHP + Kohana 3
Introdução PHP + Kohana 3
 
Manual-de-php
Manual-de-phpManual-de-php
Manual-de-php
 
M5-Desenvolvimento-Paginas-Web
M5-Desenvolvimento-Paginas-WebM5-Desenvolvimento-Paginas-Web
M5-Desenvolvimento-Paginas-Web
 
TDC2017 | Florianopolis - Trilha DevOps How we figured out we had a SRE team ...
TDC2017 | Florianopolis - Trilha DevOps How we figured out we had a SRE team ...TDC2017 | Florianopolis - Trilha DevOps How we figured out we had a SRE team ...
TDC2017 | Florianopolis - Trilha DevOps How we figured out we had a SRE team ...
 
JavaScript: agora é sério
JavaScript: agora é sérioJavaScript: agora é sério
JavaScript: agora é sério
 
python.comandos
python.comandospython.comandos
python.comandos
 
Swift em 45 minutos - TDC Sao Paulo 2014
Swift em 45 minutos - TDC Sao Paulo 2014Swift em 45 minutos - TDC Sao Paulo 2014
Swift em 45 minutos - TDC Sao Paulo 2014
 
04 - C# laços de repetição, vetores e matrizes v1.0
04 - C# laços de repetição, vetores e matrizes v1.004 - C# laços de repetição, vetores e matrizes v1.0
04 - C# laços de repetição, vetores e matrizes v1.0
 
Aula 13 - Trabalhando com strings
Aula 13 - Trabalhando com stringsAula 13 - Trabalhando com strings
Aula 13 - Trabalhando com strings
 
Aula 10 - Comando de Decisão Múltipla e Comandos de Repetição
Aula 10 - Comando de Decisão Múltipla e Comandos de RepetiçãoAula 10 - Comando de Decisão Múltipla e Comandos de Repetição
Aula 10 - Comando de Decisão Múltipla e Comandos de Repetição
 
Aula 14 - Funções: não duplique seu código
Aula 14 - Funções: não duplique seu códigoAula 14 - Funções: não duplique seu código
Aula 14 - Funções: não duplique seu código
 
Aula 12 - Começando a programar : repetição
Aula 12 - Começando a programar : repetiçãoAula 12 - Começando a programar : repetição
Aula 12 - Começando a programar : repetição
 
Boas Práticas em jQuery
Boas Práticas em jQueryBoas Práticas em jQuery
Boas Práticas em jQuery
 
Java - Primeiros passos
Java - Primeiros passosJava - Primeiros passos
Java - Primeiros passos
 
Ruby aula01
Ruby aula01Ruby aula01
Ruby aula01
 
tmn - Introdução ao JavaScript
tmn - Introdução ao JavaScripttmn - Introdução ao JavaScript
tmn - Introdução ao JavaScript
 

Destaque

Guía del docente sesion 6
Guía del docente sesion 6Guía del docente sesion 6
Guía del docente sesion 6Rocio Balbin
 
How To Tweet Effectively (it’s easier than you think)
How To Tweet Effectively (it’s easier than you think)How To Tweet Effectively (it’s easier than you think)
How To Tweet Effectively (it’s easier than you think)Business Wire
 
Evaluación de un proyecto investigativo
Evaluación de un proyecto investigativoEvaluación de un proyecto investigativo
Evaluación de un proyecto investigativocarlos86a
 
Exploring the environmental reporting practices of islamic banks
Exploring the environmental reporting practices of islamic banksExploring the environmental reporting practices of islamic banks
Exploring the environmental reporting practices of islamic banksAlexander Decker
 
Byllicio en el pais de las maravillas
Byllicio en el pais de las maravillasByllicio en el pais de las maravillas
Byllicio en el pais de las maravillassofiambiental
 
community di consumatori on line: il caso spritz.it
community di consumatori on line: il caso spritz.itcommunity di consumatori on line: il caso spritz.it
community di consumatori on line: il caso spritz.itValeria Sartoretto
 
Apresentação do projeto
Apresentação do projetoApresentação do projeto
Apresentação do projetoRosana Dias
 
Testing Scenario in Brazil
Testing Scenario in BrazilTesting Scenario in Brazil
Testing Scenario in BrazilSarah Pimentel
 
Про землю і про людей Святошинських
Про землю і про людей СвятошинськихПро землю і про людей Святошинських
Про землю і про людей Святошинськихsnizhanagur
 
How to write a press release
How to write a press releaseHow to write a press release
How to write a press releaseCubReporters.org
 

Destaque (17)

Guía del docente sesion 6
Guía del docente sesion 6Guía del docente sesion 6
Guía del docente sesion 6
 
Corferias alimentec
Corferias alimentecCorferias alimentec
Corferias alimentec
 
Oss ad
Oss adOss ad
Oss ad
 
How To Tweet Effectively (it’s easier than you think)
How To Tweet Effectively (it’s easier than you think)How To Tweet Effectively (it’s easier than you think)
How To Tweet Effectively (it’s easier than you think)
 
CV (3) addition
CV (3) additionCV (3) addition
CV (3) addition
 
Dia de la Madre
Dia de la MadreDia de la Madre
Dia de la Madre
 
Imagem 015
Imagem 015Imagem 015
Imagem 015
 
русское
русскоерусское
русское
 
Evaluación de un proyecto investigativo
Evaluación de un proyecto investigativoEvaluación de un proyecto investigativo
Evaluación de un proyecto investigativo
 
Exploring the environmental reporting practices of islamic banks
Exploring the environmental reporting practices of islamic banksExploring the environmental reporting practices of islamic banks
Exploring the environmental reporting practices of islamic banks
 
Byllicio en el pais de las maravillas
Byllicio en el pais de las maravillasByllicio en el pais de las maravillas
Byllicio en el pais de las maravillas
 
TRANSANTIAGO
TRANSANTIAGOTRANSANTIAGO
TRANSANTIAGO
 
community di consumatori on line: il caso spritz.it
community di consumatori on line: il caso spritz.itcommunity di consumatori on line: il caso spritz.it
community di consumatori on line: il caso spritz.it
 
Apresentação do projeto
Apresentação do projetoApresentação do projeto
Apresentação do projeto
 
Testing Scenario in Brazil
Testing Scenario in BrazilTesting Scenario in Brazil
Testing Scenario in Brazil
 
Про землю і про людей Святошинських
Про землю і про людей СвятошинськихПро землю і про людей Святошинських
Про землю і про людей Святошинських
 
How to write a press release
How to write a press releaseHow to write a press release
How to write a press release
 

Semelhante a Ruby learning

Curso de introdução ao ruby
Curso de introdução ao rubyCurso de introdução ao ruby
Curso de introdução ao rubyFrancis Wagner
 
Aula de apresentação Python explicando conceitos e aplicações.
Aula de apresentação Python explicando conceitos e aplicações.Aula de apresentação Python explicando conceitos e aplicações.
Aula de apresentação Python explicando conceitos e aplicações.merciaregina6
 
Ruby - Criando código para máquinas e humanos
Ruby - Criando código para máquinas e humanosRuby - Criando código para máquinas e humanos
Ruby - Criando código para máquinas e humanosGregorio Kusowski
 
Lógica de Programação - Unimep/Pronatec - Aula 07
Lógica de Programação - Unimep/Pronatec - Aula 07Lógica de Programação - Unimep/Pronatec - Aula 07
Lógica de Programação - Unimep/Pronatec - Aula 07André Phillip Bertoletti
 
10 Boas Práticas de Programação
10 Boas Práticas de Programação10 Boas Práticas de Programação
10 Boas Práticas de ProgramaçãoCarlos Schults
 
Crash Course Ruby & Rails
Crash Course Ruby & RailsCrash Course Ruby & Rails
Crash Course Ruby & RailsFrevo on Rails
 
Ruby para programadores PHP
Ruby para programadores PHPRuby para programadores PHP
Ruby para programadores PHPJuan Maiz
 
LabMM4 (T11 - 12/13) - PHP - Tipos de dados e variáveis
LabMM4 (T11 - 12/13) - PHP - Tipos de dados e variáveisLabMM4 (T11 - 12/13) - PHP - Tipos de dados e variáveis
LabMM4 (T11 - 12/13) - PHP - Tipos de dados e variáveisCarlos Santos
 
Ruby para-programadores-php
Ruby para-programadores-phpRuby para-programadores-php
Ruby para-programadores-phpJuan Maiz
 
Introdução ao JS1.pptx
Introdução ao JS1.pptxIntrodução ao JS1.pptx
Introdução ao JS1.pptxLuanDev1
 
Quick introduction to Ruby on Rails
Quick introduction to Ruby on RailsQuick introduction to Ruby on Rails
Quick introduction to Ruby on RailsWhitesmith
 

Semelhante a Ruby learning (20)

Aula 2
Aula 2Aula 2
Aula 2
 
Aula 2
Aula 2Aula 2
Aula 2
 
Aula 2
Aula 2Aula 2
Aula 2
 
Aula 2
Aula 2Aula 2
Aula 2
 
Curso de introdução ao ruby
Curso de introdução ao rubyCurso de introdução ao ruby
Curso de introdução ao ruby
 
Programação Orientada a Objetos - 001
Programação Orientada a Objetos - 001Programação Orientada a Objetos - 001
Programação Orientada a Objetos - 001
 
Aula de apresentação Python explicando conceitos e aplicações.
Aula de apresentação Python explicando conceitos e aplicações.Aula de apresentação Python explicando conceitos e aplicações.
Aula de apresentação Python explicando conceitos e aplicações.
 
Ruby - Criando código para máquinas e humanos
Ruby - Criando código para máquinas e humanosRuby - Criando código para máquinas e humanos
Ruby - Criando código para máquinas e humanos
 
Ruby (1)
Ruby (1)Ruby (1)
Ruby (1)
 
Lógica de Programação - Unimep/Pronatec - Aula 07
Lógica de Programação - Unimep/Pronatec - Aula 07Lógica de Programação - Unimep/Pronatec - Aula 07
Lógica de Programação - Unimep/Pronatec - Aula 07
 
10 Boas Práticas de Programação
10 Boas Práticas de Programação10 Boas Práticas de Programação
10 Boas Práticas de Programação
 
Tema 2 | Linguagem PHP Básico (I)
Tema 2 | Linguagem PHP Básico (I)Tema 2 | Linguagem PHP Básico (I)
Tema 2 | Linguagem PHP Básico (I)
 
Crash Course Ruby & Rails
Crash Course Ruby & RailsCrash Course Ruby & Rails
Crash Course Ruby & Rails
 
Comandos em python
Comandos em pythonComandos em python
Comandos em python
 
Test-driven Development
Test-driven DevelopmentTest-driven Development
Test-driven Development
 
Ruby para programadores PHP
Ruby para programadores PHPRuby para programadores PHP
Ruby para programadores PHP
 
LabMM4 (T11 - 12/13) - PHP - Tipos de dados e variáveis
LabMM4 (T11 - 12/13) - PHP - Tipos de dados e variáveisLabMM4 (T11 - 12/13) - PHP - Tipos de dados e variáveis
LabMM4 (T11 - 12/13) - PHP - Tipos de dados e variáveis
 
Ruby para-programadores-php
Ruby para-programadores-phpRuby para-programadores-php
Ruby para-programadores-php
 
Introdução ao JS1.pptx
Introdução ao JS1.pptxIntrodução ao JS1.pptx
Introdução ao JS1.pptx
 
Quick introduction to Ruby on Rails
Quick introduction to Ruby on RailsQuick introduction to Ruby on Rails
Quick introduction to Ruby on Rails
 

Ruby learning

  • 1. + Aprendendo a programar com Ruby Sarah Pimentel
  • 2. + Objetivo • Revisão / Consolidação de conceitos básicos de programação • Estímulo para continuar o aprendizado • Highlights sobre revisão de código • Alinhamento de conhecimento da equipe para iniciar discussões sobre automação
  • 3. + Dinâmica Explicações básicas de programação Resolução de desafios Identificação de bugs na apresentação
  • 4. + Codeacademy O conteúdo baseia-se em sua maioria no site: http://www.codecademy.com/pt/tracks/ruby
  • 5. + Ruby  Ruby  Linguagem de alto nivel  Ler e escrever é fácil. Inglês.  Interpretado  Não precisa de compilador  Orientado a objeto  Tudo no ruby é um objeto  Fácil de usar
  • 6. + Ruby  Ruby  Linguagem de alto nivel  Ler e escrever é fácil. Inglês.  Interpretado  Não precisa de compilador  Orientado a objeto  Tudo no ruby é um objeto  Fácil de usar muito difícil…. Por isso os bugs demoram
  • 7. + Melhores Amigos  Google  IRB
  • 8. + Tipos de dados: Number, String, Boolean  Numbers  Boolean  True / False  “true” / “false”  String  Palavras ou frases  Variavel != variavel
  • 9. + IRB >> my_num = 25 => 25 >> my_boolean = true => true >> my_string = "Ruby" => "Ruby"
  • 10. + Variáveis  Palavra que guarda um valor  Convenção:  Letra minuscula  Separador de palavras: _  Evitar iniciar por simbolos ($, @, etc)
  • 11. + Math + Adição - Subtração * Multiplicação / Divisão ** Exponenciação % Módulo (resto)
  • 12. + IRB >> 2**3 => 8 >> 3**2 => 9 >> 25%7 => 4
  • 13. + Puts e Print  Print – joga a informação na tela  Puts – cria uma nova linha com a informação
  • 14. + IRB >> puts "hi" hi => nil >> print ”hello" hello=> nil
  • 15. + String Methods  Objetos possuem métodos  Tudo em ruby é um objeto
  • 16. + IRB >> "Estou aprendendo ruby".length => 21 >> "ruby".reverse => "ybur" >> "ruby".upcase => "RUBY" >> "RUBY".downcase => "ruby" >> "ruby".upcase.reverse => "YBUR"
  • 17. + Comentários  # Comenta uma única linha  =begin =end Comenta várias linhas
  • 18. + IRB >> # 2+2 ?> 1+1 => 2 >> =begin 2+2 1+1 =end >> 3+3 => 6
  • 19. + DESAFIO 1 Criar um programa que irá ler a entrada de um usuário e corrigir sua capitalização. Os dados devem ser lidos um a um. Output: Seu nome é Sarah Pimentel e você nasceu em Recife/PE.
  • 20. + Desafio 1  Escrever a pergunta  Capturar o resultado  Fazer isso para cada informação  Exibir o resultado de acordo com o esperado  Formatar as strings
  • 21. + puts ”Qual o seu nome?" nome= gets.chomp puts ”Qual seu sobrenome?" sobrenome= gets.chomp puts ”De qual cidade voce e?" cidade= gets.chomp puts ”De qual estado voce e?" estado= gets.chomp puts ”Seu nome e#{nome.capitalize!} #{sobrenome.capitalize!} e nasci em #{cidade.capitalize!}/#{estado.upcase!}"
  • 22. + Controle de Fluxo  Proporciona diferentes resultados dependendo da computação de informações
  • 23. + IRB >> user_num = Integer(gets.chomp) >> if user_num < 0 >> puts "You picked a negative integer!" >> elsif user_num > 0 >> puts "You picked a positive integer!" >> else >> puts "You picked zero!" >> end You picked a positive integer!
  • 24. + If  O comando If avalia uma expressão. Se a expressão é verdadeira, executa o bloco de código que se segue. Se é falsa, o bloco não é executado e o programa vai para o próximo comando.
  • 25. + IRB >> if true >> puts “Funciona” >> end Funciona
  • 26. + Else Se a expressão for verdadeira, rode esse pedaço de código. Se não for, rode esse outro pedaço.
  • 27. + IRB >> if 1 > 2 >> puts “Nao imprime” >> else >> puts “Imprime” >> end Imprime
  • 28. + Elsif E se quiser mais que duas opções?
  • 29. + IRB >> if 1 > 2 >> puts “Nao imprime” >> elsif 2 > 3 >> puts “Nao imprime” >> else >> puts “Imprime” >> end Nao Imprime
  • 30. + IRB >> if 1 > 2 >> puts “Nao imprime” >> elsif 2 > 3 >> puts “Nao imprime” >> else >> puts “Imprime” >> end Imprime
  • 31. + Unless  Verifica se algo é falso ao invés de verificar se algo é verdadeiro.
  • 32. + If, elsif, else, unless? comFome= false ___ ___ puts “Estou escrevendo um programa em Ruby!” ___ puts “Hora de comer!” ___
  • 33. + Comparações  =  operador de atribuição  ==  “é igual a”  !=  “é diferente de”  <  “é menor que”  <=  “é menor ou igual a”  >  “é maior que”  >=  “é maior ou igual a”
  • 34. + True or False? A. 77 != 77 B. -4 <= -4 C. -44 < -33 D. 100 == 1000
  • 35. + True or False? A. 77 != 77 FALSE B. -4 <= -4 TRUE C. -44 < -33 TRUE D. 100 == 1000 FALSE E. 10 = 100 FALSE
  • 36. + True or False? A. 77 != 77 FALSE B. -4 <= -4 TRUE C. -44 < -33 TRUE D. 100 == 1000 FALSE E. 10 = 100 SyntaxError: compile error syntax error, unexpected '=', expecting $end
  • 37. + Operadores booleanos  && (e)  True se todas as expressões forem verdadeiras  || (ou)  True se ao menos uma expressão for verdadeira  ! (não)  Inverte os valores true e false
  • 38. + True / False  true && true  TRUE  true && false  FALSE  false && true  FALSE  false && false  FALSE
  • 39. + True / False  true || true  TRUE  true || false  TRUE  false || true  TRUE  false || false  FALSE
  • 40. + True / False  !true  FALSE  !false  TRUE
  • 41. + True or False? A. 77 < 78 && 77 < 77 B. 2**3 == 8 && 3**2 == 9 C. (3 < 4 || false) && (false || true) D. !true && (!true || 100 != 5**2)
  • 42. + True or False? A. 77 < 78 && 77 < 77 FALSE B. 2**3 == 8 && 3**2 == 9 TRUE C. (3 < 4 || false) && (false || true) TRUE D. !true && (!true || 100 != 5**2) FALSE
  • 43. + Desafio 2 Cebolinha  Escreva um programa que transforma todos os r de uma frase informada pelo usuario em l.  Caso a frase inserida não contenha nenhum r, exibir a mensagem “assim a brincadeira não funciona”  Caso o usuário não entre nenhuma frase, pedir a frase novamente
  • 44. + Desafio 2  Receber input, até que o usuario entre uma frase qualquer  Validar se existe “r”.  Lembrar que pode ter tanto “r” quanto “R” na frase.  Substituir “r” por “l”  Exibir “assim a brincadeira nao funciona”
  • 45. +  puts "Qual o texto?"  texto = gets.chomp.downcase  if texto.include? “r"  texto.gsub!(/r/, ”l")  else  puts ”Assim a brincaderia não funciona”  end  puts texto
  • 46. + Caso o usuário não entre nenhuma frase, pedir a frase novamente  frase = “”  while frase.empty?  frase = gets.chomp  end
  • 47. + Loops  WHILE Repetir uma ação enquanto uma condição for verdadeira, sem saber ao certo quantas vezes isso vai ocorrer. frase = “” puts “digite uma frase” while frase.empty? frase = gets.chomp end
  • 48. + Loops i=0 while i < 5 puts i end
  • 49. + Loops  Loops infinitos i=0 while i < 5 puts i i=i+1 end
  • 50. + Loops  UNTIL Ao contrário do WHILE, executa enquanto a condição for falsa. counter = 1 until counter > 10 puts counter counter = counter + 1 end
  • 51. + Outros operadores de atribuição  +=  -=  *=  /=  ++ e -- não funcionam em ruby
  • 52. + Loops  FOR Quando você sabe quantas vezes quer executar o comando for num in 1...10 puts num end
  • 53. + Faixas (ranges)  for num in 1...10 (exclui o 10)  for num in 1..10 (inclui o 10)
  • 54. + Iterators e Blocos  Iterações são repetições de execução de um bloco de comandos  Iterator (loop infinito) loop { print “Olaaaa” } { } == do end i=0 loop do i += 1 print “#{i}” break if i < 5 end
  • 55. + Iterators e Blocos  Iterações são repetições de execução de um bloco de comandos  Iterator (loop infinito) loop { print “Olaaaa” } { } == do end i=0 loop do i += 1 print “#{i}” break if i > 5 end
  • 56. + Next Pode ser usado para pular passos. O código abaixo imprime os números impares entre 0 e 20. i = 20 loop do i -= 1 next if i % 2 == 0 puts “#{i}” break if i <= 0 end
  • 57. + Next Pode ser usado para pular passos. O código abaixo imprime os números impares entre 0 e 20. i = 20 loop do i -= 1 next if i % 2 == 0 puts “#{i}” break if i = 0 end
  • 58. + Next Pode ser usado para pular passos. O código abaixo imprime os números impares entre 0 e 20. i = 20 loop do i -= 1 next if i % 2 == 0 puts “#{i}” break if i == 0 end
  • 59. + Next Pode ser usado para pular passos. O código abaixo imprime os números impares entre 0 e 20. i = 20 loop do i -= 1 break if i == 0 next if i % 2 == 0 puts “#{i}” end
  • 60. + Array  Uma forma de armazenar múltiplos valores  [10,31,10,400]
  • 61. + Iterator  EACH Itera por cada elemento de um objeto. Qual o output? array = [1,2,3,4,5] array.each do |x| x += 10 puts "#{x}” end
  • 62. + Iterator array = [1,2,3,4,5] array.each do |x| x += 10 puts "#{x}” end 11 12 13 14 15
  • 63. + Iterator  TIMES É uma forma compacta do loop “for” 10.times { print “Ola Mundo” }
  • 64. + Exercicio IRB  Imprima os numeros de 1 a 50 usando:  WHILE  UNTIL  FOR  LOOP  TIMES
  • 65. + Estruturas de dados  ARRAY INDEX demo_array = [100, 200, 300, 400, 500] print demo_array[2]
  • 66. + Estruturas de dados  ARRAY INDEX demo_array = [100, 200, 300, 400, 500] print demo_array[2] 300
  • 67. + Array de Array  Um Array pode ser de qualquer coisa, até mesmo de arrays multi_array = [[0,0,0,0],[0,0,0,0],[0,0,0,0],[0,0,0,0]] multi_array.each { |x| puts "#{x}n" } [[0,0,0,0],[0,0,0,0],[0,0,0,0],[0,0,0,0]]
  • 68. + Hash  Arrays são indexados numerica e sequencialmente. Se quisermos organizar de outra forma nossa coleção de dados, devemos usar hashes. my_hash = { "name" => ”Sarah", "age" => 15, "hungry?" => true } puts my_hash["name"] puts my_hash["age"] puts my_hash["hungry?"]
  • 69. + Adicionando valores pets = Hash.new pets["Sarah"] = "dog” pets = { “Rafa” => “bird”, “Kaio” => “cat”, “Biro” => “hamster”}
  • 70. + Iterando nos hashes secret_identities = { "The Batman" => "Bruce Wayne", "Superman" => "Clark Kent", "Wonder Woman" => "Diana Prince", "Freakazoid" => "Dexter Douglas" } secret_identities.each do |key, value| puts "#{key}: #{value}" end
  • 71. + Desafio 3  Histograma  O programa recebe uma frase e cria um hash com esse input. Cada chave do hash vai ser uma palavra da frase. Cada valor vai ser a quantidade de vezes que essa palavra aparece na frase, indicando as palavras que aparecem mais emcima. Exemplo:  “The rain in Spain falls mainly on the plain”  The 2  Rain 1  In 1  Spain 1  Falls 1  Mainly 1  On 1  Plain 1 …
  • 73. + Métodos e Blocos  Um método é uma seção de código reutilizável, escrito para executar uma determinada tarefa em um programa.  Por que usar métodos?  Se algo der errado é mais fácil de encontrar o problema e resolve-lo se cada tarefa tiver seu método.  Deixa o código mais reutilizavel.
  • 74. + Métodos e Blocos def bem_vindo puts “Bem vindo ao Ruby” end bem_vindo
  • 75. + Parâmetros  Parâmetros são apelidos dados aos argumentos passados para os métodos. def quadrado(n) puts n ** 2 end quadrado(2)
  • 76. + Splat Arguments def cumprimentar(cumprimento, *amigos) amigos.each { |amigo| puts “#{cumprimento}, #{amigo}”} end cumprimentar(“Bom dia”, “Rafa”, “Beppu”, “Cabelinho”, “Agapito”, “Kaio”, “Diego”)
  • 77. + Return  Por vezes vamos querer que o método ao invés de imprimir algo na tela, retorne um valor que possamos usar em outras situações. def cube(n) return n ** 3 end
  • 78. + Return def cube(n) return n ** 3 end output = cube(3) output += 11 puts output 38
  • 79. + Blocos  Blocos são estruturas similares aos métodos, mas que não tem nome. São definidos por do end ou { } 1.times do puts “Eu sou um bloco de código” end 1.times { puts “Eu também sou” }
  • 80. + Diferenças entre métodos e blocos  O método pode ser chamado N vezes, o bloco é executado apenas uma vez  O método é executado em qualquer contexto, o bloco é executado no contexto em que está definido
  • 81. + Diferenças entre métodos e blocos def capitalize(string) puts “#{string[0].upcase}#{string[0..-1]}” end capitalize(“sarah”) capitalize(“diego”) [“kaio”,”beppu”].each { |string| puts “#{string[0].upcase}#{string[0..-1]}”}
  • 82. + Métodos e blocos  Um método pode receber um bloco como parâmetro. Isso é o que .each tem feito todo este tempo:. Tomar um bloco como um parâmetro e fazer coisas com ele!  Passar um bloco a um método é uma ótima maneira de abstrair determinadas tarefas a partir do método e definir as tarefas quando chamamos o método.  A abstração é uma idéia. Você pode pensar nisso no sentido de "fazer algo mais simples.”
  • 83. + Sort  Ordenação [2,3,4,1,5].sort! => [1, 2, 3, 4, 5]
  • 84. + Operador de comparação combinada  <=> Retorna 1 se o segundo item é maior que o primeiro, Retorna -1 se o primeiro item é maior que o primeiro Retorna 0 se os itens são iguais
  • 85. + Operador de comparação combinada  <=> livro_1 = “Selenium cookbook” livro_2 = “How Google Tests Software” livro_1 <=> livro_2 => 1
  • 86. +

Notas do Editor

  1. Receber input do usuariogets.chomp. Transformar a fraseem um array usando splitCriar o hash