Funções

Nesta aula iremos aprender como criar e estruturar uma função em ruby, veremos como retornar e passar múltiplos parâmetros para ela.

assinaturaAssine nossa Comunidade

Funções

As funções nos ajudam a reutilizar código, uma rotina que seria util em comum pode ser transformada em função.

Definição básica de função
        
          def funcao
            puts "oi"
          end
        
      

Aula Prática

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

Abaixo você vê uma função simples de cálculo, observe que além de defini-la deve invoca-la, chamando o nome dela. Os parênteses são opcionais a não ser que precise passar parâmetros.

      
        require 'byebug'
        # debugger
        def teste
          puts 1 + 5 - 3
        end

        teste
      
    

Nunca se esqueça de sempre acompanhar com o debugger, acompanhando a execução passo-a-passo para melhor entendimento.

Você pode chama-la quantas vezes quiser executar a mesma rotina. Abaixo conseguimos o retorno do cálculo 5 vezes seguidas, chamando a função ao invés de repetir código. A lógica permanece a mesma facilitando a manutenção e evolução do código.

As funções em Ruby têm retorno automático, ou seja se não explicitar com a palavra return, a última instrução é a que será retornada.

      
        require 'byebug'

        debugger
        
        def teste
          puts 1 + 5 - 3
        end

        teste
        teste
        teste
        teste
        teste
      
    

Exemplo com return, assim devemos passar o valor retornado pela função para uma variável para então imprimir a variável.

      
        require 'byebug'
        # debugger
        def teste
          return 1 + 420 - 3
        end

        a = teste

        puts a
      
    

Exemplo com return condicional antes do final da função, parâmetros e atribuição para variável do valor retornado da função, altere o parâmetro de teste para ver os diferentes resultados.

      
        require 'byebug'
        # debugger
        def teste(count)
          return 1 if count == 2

          1 + 420 - 3
        end

        a = teste(4)
        # a = teste 4 - outra opção
        puts a
      
    

Exemplo com parâmetro padrão.

      
        require 'byebug'
        # debugger
        def teste(count=1)
          return 1 if count == 2

          1 + 420 - 3
        end

        a = teste
        
        puts a
      
    

Exemplo com múltiplos parâmetros, ele recebe como um array.

      
        require 'byebug'
        # debugger
        def teste(*parametros)
          return 1 if count == 2

          1 + 420 - 3
        end

        a = teste 1,2,3,4,5
        
        puts a
      
    

Exemplo com múltiplos parâmetros, testando parâmetros.

      
        require 'byebug'
        # debugger
        def teste(*parametros)
          return 1 if parametros.include? 2

          1 + 420 - 3
        end

        a = teste 1,2,3,4,5
        
        puts a
      
    

Exemplo com múltiplos parâmetros, trabalhando com exceções (captura de erros).

      
        require 'byebug'
        # debugger
        
        def teste(*parametros)
          return 1 if parametros.include? 2

          1 + 420 - 3
        rescue Exception =>
          puts "Opa um erro aconteceu"
          puts e.message
        end

        a = teste 1,3,4,5
        
        puts a
      
    

Sem esse tratamento o próprio Ruby terminará a execução.

Exemplo com código da aula 08 sobre Hash, aplicando as funções sobre o programa, observe como melhora a leitura do código "principal".

      
    def captura_aluno
      aluno = {}

      puts "Digite o nome do aluno"
      aluno[:nome] = gets.delete("\n")

      puts "Digite o telefone do aluno"
      aluno[:tel] = gets.delete("\n")
      
      aluno
    end

    def mostrar_alunos(alunos)
      alunos.each do |aluno|
        puts "==============================================}"
        puts "aluno: #{aluno[:nome]}, telefone: #{aluno[:tel]}"
      end 
    end

    loop do
      puts "Bem vindo ao programa"
      puts "Digite 0 para sair ou 1 para continuar"
  
      valor = gets.to_i
      
      break if(valor == 0)
  
      alunos = []
  
      3.times do
        alunos << captura_aluno
      end
      
      mostrar_alunos(alunos)

    end
    
  

Funções

Nesta aula iremos aprender como criar e estruturar uma função em ruby, veremos como retornar e passar múltiplos parâmetros para ela.

Próximas Aulas:
assinaturaAssine nossa Comunidade

Funções

As funções nos ajudam a reutilizar código, uma rotina que seria util em comum pode ser transformada em função.

Definição básica de função
        
          def funcao
            puts "oi"
          end
        
      

Aula Prática

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

Abaixo você vê uma função simples de cálculo, observe que além de defini-la deve invoca-la, chamando o nome dela. Os parênteses são opcionais a não ser que precise passar parâmetros.

      
        require 'byebug'
        # debugger
        def teste
          puts 1 + 5 - 3
        end

        teste
      
    

Nunca se esqueça de sempre acompanhar com o debugger, acompanhando a execução passo-a-passo para melhor entendimento.

Você pode chama-la quantas vezes quiser executar a mesma rotina. Abaixo conseguimos o retorno do cálculo 5 vezes seguidas, chamando a função ao invés de repetir código. A lógica permanece a mesma facilitando a manutenção e evolução do código.

As funções em Ruby têm retorno automático, ou seja se não explicitar com a palavra return, a última instrução é a que será retornada.

      
        require 'byebug'

        debugger
        
        def teste
          puts 1 + 5 - 3
        end

        teste
        teste
        teste
        teste
        teste
      
    

Exemplo com return, assim devemos passar o valor retornado pela função para uma variável para então imprimir a variável.

      
        require 'byebug'
        # debugger
        def teste
          return 1 + 420 - 3
        end

        a = teste

        puts a
      
    

Exemplo com return condicional antes do final da função, parâmetros e atribuição para variável do valor retornado da função, altere o parâmetro de teste para ver os diferentes resultados.

      
        require 'byebug'
        # debugger
        def teste(count)
          return 1 if count == 2

          1 + 420 - 3
        end

        a = teste(4)
        # a = teste 4 - outra opção
        puts a
      
    

Exemplo com parâmetro padrão.

      
        require 'byebug'
        # debugger
        def teste(count=1)
          return 1 if count == 2

          1 + 420 - 3
        end

        a = teste
        
        puts a
      
    

Exemplo com múltiplos parâmetros, ele recebe como um array.

      
        require 'byebug'
        # debugger
        def teste(*parametros)
          return 1 if count == 2

          1 + 420 - 3
        end

        a = teste 1,2,3,4,5
        
        puts a
      
    

Exemplo com múltiplos parâmetros, testando parâmetros.

      
        require 'byebug'
        # debugger
        def teste(*parametros)
          return 1 if parametros.include? 2

          1 + 420 - 3
        end

        a = teste 1,2,3,4,5
        
        puts a
      
    

Exemplo com múltiplos parâmetros, trabalhando com exceções (captura de erros).

      
        require 'byebug'
        # debugger
        
        def teste(*parametros)
          return 1 if parametros.include? 2

          1 + 420 - 3
        rescue Exception =>
          puts "Opa um erro aconteceu"
          puts e.message
        end

        a = teste 1,3,4,5
        
        puts a
      
    

Sem esse tratamento o próprio Ruby terminará a execução.

Exemplo com código da aula 08 sobre Hash, aplicando as funções sobre o programa, observe como melhora a leitura do código "principal".

      
    def captura_aluno
      aluno = {}

      puts "Digite o nome do aluno"
      aluno[:nome] = gets.delete("\n")

      puts "Digite o telefone do aluno"
      aluno[:tel] = gets.delete("\n")
      
      aluno
    end

    def mostrar_alunos(alunos)
      alunos.each do |aluno|
        puts "==============================================}"
        puts "aluno: #{aluno[:nome]}, telefone: #{aluno[:tel]}"
      end 
    end

    loop do
      puts "Bem vindo ao programa"
      puts "Digite 0 para sair ou 1 para continuar"
  
      valor = gets.to_i
      
      break if(valor == 0)
  
      alunos = []
  
      3.times do
        alunos << captura_aluno
      end
      
      mostrar_alunos(alunos)

    end