Nesta aula iremos aprender um pouco mais sobre funções, iremos ver mais uma forma de utilizar a função para economizar códigos desnecessários.

Funções Recursivas

Definição básica de função recursiva
      
        def recursiva
          puts "Danilo"
        end

        recursiva
      
    

A função acima gera um loop infinito pois não colocamos uma saída, então ela chama a si mesmo (recursividade) até o infinito, abaixo mostramos como implementar uma condição de saída para prevenir a execução infinita.

      
        def recursiva(count)
          puts "Danilo"
          return if count == 10
          recursiva(count + 1)
        end
        count = 0
        recursiva(1)
      
    

Aula Prática

Como de praxe copie o arquivo padrão das aulas anteriores para seguir conforme o padrão.

Estrutura base que usaremos.

      
        require 'byebug'
        # debugger
        @i = 1
        def captura_servico
          #TODO: capturar dados do serviço: http://localhost:3000/usuarios.json
          puts "implementar o dado para buscar da API #{@i}"
          @i += 1
          return if 1 > 3
          captura_servico
        end
        
        captura_servico
    
      
    

A URL que usaremos do serviço é utilizada localmente, caso você deseje o mesmo resultado deve iniciar a API que foi desenvolvida no curso de node.js como é mostrado na aula

      
        require 'byebug'
        # debugger
        def captura_servico(pagina=1)
          uri = URI("http://localhost:3000/usuarios.json?pagina=#{pagina}")
          request = Net::HTTP.get_response(uri)
          if request.code == "200"
          dados = JSON.parse(request.body)
          debugger
          x = ""
        end
        
        captura_servico
    
      
    

Dica: Procure sobre o JSON Server Link para o pacote no NPM, assim você consegue montar uma resposta falsa de API REST simulando o que o fizemos aqui, inclusive com paginação.

      
        require 'byebug'
        require 'active_suport/all'
        require 'httparty'

        def captura_servico(pagina=1)
          uri = URI("http://localhost:3000/usuarios.json?pagina=#{pagina}")
          request = Net::HTTP.get_response(uri)
          if request.code == "200"
            dados = JSON.parse(request.body)
            dados.each do |dado|
              puts"==========================================="
              puts dado["id"]
              puts dado["nome"]
              puts dado["login"]
              puts dado["senha"]
              puts dado["email"]
              puts"==========================================="
            end
          end
        end

        6.times do |i|
          captura_servico(i)
        end
      
    

Implementação final com validação de paginas.

      
        require 'byebug'
        require 'active_suport/all'
        require 'httparty'

        def captura_servico(pagina=1)
          uri = URI("http://localhost:3000/usuarios.json?pagina=#{pagina}")
          request = Net::HTTP.get_response(uri)
          if request.code == "200"
            dados = JSON.parse(request.body)
            dados.each do |dado|
              puts"==========================================="
              puts dado["id"]
              puts dado["nome"]
              puts dado["login"]
              puts dado["senha"]
              puts dado["email"]
              puts"==========================================="
            end
            captura_servico(pagina + 1) if dados.size > 0
          end
        end

        captura_servico

      
    


Próximas Aulas


Orientação a objetos - instância e construtor

Nesta aula iremos aprender o como criar uma classe, uma instância e a utilização de construtores em ...

Orientação a Objetos - Accessors

Nesta aula iremos aprender como criar propriedades em uma classe ruby, iremos criar propriedades de ...

Orientação a Objetos - Herança

Nesta aula iremos aprender sobre herança, mais uma aula de orientação a objetos em Ruby, com a heran...

Orientação a Objetos - public, private, protected

Nesta aula iremos aprender as marcações public, private, protected e veremos as diferenças entre ela...

Orientação a objetos - Polimorfismo e Overload

Nesta aula iremos aprender como fazer polimorfismo no Ruby, também iremos ver como funciona o overlo...

Orientação a Objetos - Interface, Abstração, Singleton

Nesta aula iremos aprender como implementar Interface, Abstração e classe Singleton, de uma forma mu...

Metaprogramming - RunTime

Nesta aula iremos aprender o inicio da metaprogramação, veremos como o Ruby injeta métodos em objeto...

Metaprogramming - Modulo

Nesta aula iremos aprender como programar orientado a objetos por comportamento, iremos ver os estad...



Danilo

Arquiteto de software, analista, programador, professor. Danilo criou o projeto torne-se um programador, para passar o seu conhecimento para a nova geração. Com o intuito de ser um bom pai, Danilo trabalha muito motivado para garantir o futuro de sua filha.

ELEVE SEUS GANHOS E POTENCIALIZE SUA PERFORMANCE

Receba nossa Ebook de LÓGICA DE PROGRAMAÇÃO

© Didox Business & Technology - CNPJ: 12.127.195/0001-14