O TEMA DO FÓRUM ESTÁ EM MANUTENÇÃO. FEEDBACKS AQUI: ACESSAR

[Ruby] Aula 10 - Method Overload (Sobrecarga de Métodos)

Iniciado por Raizen, 14/11/2014 às 17:57

14/11/2014 às 17:57 Última edição: 16/12/2015 às 10:30 por Raizen
[box class=windowbg1]
Índice das aulas básicas
  • Aula 1 - Introdução
  • Aula 2 - Objetos
  • Aula 3 - Operações
  • Aula 4 - Condições
  • Aula 5 - Repetição
  • Aula 6 - Arrays
  • Aula 7 - Hashes
    [/box]
    [box class=windowbg1]
    Índice das aulas avançadas
  • Aula 8 - Superclasses e instâncias
  • Try and Catch
  • Aula 10 - Method Overload (Sobrecarga de Métodos)
    [/box]
    [box class=windowbg1]
    Índice das aulas de algoritmos
  • Aula 1 - Sort
  • Aula 2 - Busca
  • Aula 3 - Recursividade
    [/box]

    [box class=windowbg]
    Method Overload
    [/box]
    Conhecimento necessário : médio
    [box class=windowbg]
    Introdução
    [/box]
    [box class=windowbg2]
       Method Overload, seria a utilização de um mesmo nome de um método(ou função dependendo da linguagem), para diferentes blocos de código, é amplamente usado em vários programas por reduzir o número de métodos, e facilitar na hora de utilizar aquele método.
    Basicamente eu tenho um mesmo método que permite que tenha argumentos diferentes em cada um deles.
    Exemplo:
    Quero um método tamanho, para indicar o número de caracteres, seja em uma string, um integer ou um float, e na programação eu fizesse o seguinte.

    tamanho(34132)
    


    Esse código deve retornar 5, e se eu chamar o mesmo método
    tamanho("um texto")
    

    Esse deve retornar 8, o tamanho da string.

    Basicamente a Sobrecarga é ter 2 métodos com o nome tamanho, e mesmo que o número de entradas e o tipo de entrada seja diferente, ele aceitar do mesmo modo.


    Outro exemplo de sobrecarga é a quantidade de argumentos,
    Exemplo:
    Quero que um método data tenha argumentos que sejam o dia, ou o dia e o mês, ou o dia, o mês e o ano.
    Logo:
    data(2) #retorna "dia 2"
    data(2, 3) #retorna "dia 2 de março"
    data(2, 3, 2010) #retorna "dia 2 de março de 2010"
    


    [/box]


    [box class=windowbg]
    No Ruby
    [/box]
    [box class=windowbg2]
       Adivinhem jovens :), não há sobrecarga de métodos no Ruby, Ruby é uma Linguagem de programação dinâmica(Dynamic Typed Language), e
    como sabem, não há declaram explicita do tipo de váriavel ao ser declarado, e com isso o primeiro exemplo dado sobre o tipo de váriavel já falharia na verificação, já que ele não faria distinção entre por exemplo uma string de um número.
    Por isso o Ruby dispõe de outros modos para que seja possível simular a Sobrecarga de métodos.
    [/box]

    [box class=windowbg]
    Multiplos argumentos no Ruby
    [/box]
    [box class=windowbg2]
       Como dito logo acima, o Ruby dispõe de modos para que seja possível recriar a sobrecarga, uma delas é que a linguagem permite que um mesmo método tenha diferentes quantidades de variáveis, basta declara-los no próprio argumento.
       
    Exemplo:
    def um(x, y = 2, z = 4)
    	return (x + y + z)
    end
    um(2) # O valor será 8
    
    um(2, 1) # O valor será 7
    
    um(2, 1, 0) # O valor será 3
    

    Basicamente, se for declarado nos argumentos e não tiver no momento que utilizar o método, o Ruby automaticamente declara aquele argumento tal, com isso o "problema" de multiplos argumentos pode ser resolvido.

    [/box]
    [box class=windowbg]
    Diferentes tipos no Ruby
    [/box]
    [box class=windowbg2]
        Esse o Ruby não dispõe de algo que facilmente faça essa verificação para que seja facilitado, porém há modos simplificados de reproduzir o mesmo efeito.
    Por exemplo:
    vamos recriar o método tamanho dito no começo da aula, que retorna a quantidade de caracteres, ou do número ou do texto.
    Nesse caso tem 3 entradas, float, integer ou string
    def um(tex)
      if tex.is_a?(Integer)
        um_integer(tex)
      elsif tex.is_a?(Float)
        um_float(tex)
      elsif tex.is_a?(String)
        um_string(tex)
      end
    end
    
    def um_integer(tex)
      p "um inteiro"
    end
    def um_float(tex)
      p "um número"
    end
    def um_string(tex)
      p "um texto"
    end
    


    Agora basta combinar a ideia de ambas, o número de argumentos e tipos diferentes para recriar a Sobrecarga de métodos :).

    [/box]

    [box class=windowbg]
    Finalizando
    [/box]
    [box class=windowbg2]
       Porque utilizar a sobrecarga de métodos? A ideia é simples, facilidade. Com apenas um método digamos, memorizado, posso recriar vários cenários que tenham a ver com aquele método, apenas mudando os parametros. Isso é amplamente utilizado em classes que são disponibilizados para outras pessoas, facilitando e muito a quantidade de métodos necessários para a função desejada.
       Aonde isso entra no RPG Maker? Simples, entra no momento que você quer disponilizar um script para ser usado por outros scripters, ou por Chamar Script, assim com poucos métodos, é possível recriar vários efeitos diferenciados, facilitando muito a pessoa que vai utilizar o seu script.

    [/box]