Funções de ordem superior do Scala

Funções de ordem superior do Scala
Quando uma função aceita outra função como um parâmetro ou retorna outra função como uma saída, ela é chamada de função de ordem superior. Isso se refere a funções que interagem com outras funções. É importante observar que essa função de ordem superior pode ser usada com funções e métodos que retornam as funções como resultados ou assumem as funções como parâmetros. Isso é viável porque o compilador Scala permite a conversão de métodos em funções. A idéia de funções de ordem superior em Scala no Ubuntu 20.04 é explicado neste artigo.

Importância de funções de ordem superior

Em relação às funções de ordem superior, alguns pontos-chave incluem:

    • As funções de ordem superior são concebíveis porque a linguagem de programação Scala trata as funções como valores de primeira classe. Isso significa que, como outros valores, as funções podem ser fornecidas como parâmetros ou saídas, o que é útil para fornecer uma maneira flexível de escrever os programas.
    • Ao construir uma composição de função em que as funções podem ser criadas a partir de outras funções, é vantajoso. O método de composição conhecido como "composição da função" envolve o uso de duas funções compostas anteriormente para criar uma única função.
    • Funções lambda e funções anônimas também podem ser criadas com sua ajuda. As funções sem nome, mas, no entanto, funcionam como funções são conhecidas como funções anônimas.
    • É aplicado a programas e reduzidos ao número de linhas de código inúteis.

Exemplo 1: Usando uma função para assumir outra função como argumento

Vamos considerar o primeiro exemplo de uma função de ordem superior. Passamos a função em uma determinada função como um parâmetro.


Aqui, o objeto é designado como "MyObject". Então, dentro da definição principal do objeto, chamamos de função de "func". A função "func" assume o valor numérico e a função "multiplybythree" como uma entrada. Invocamos novamente a função "func" para imprimir o valor de "x", que é passado como uma entrada dentro do "f". Por fim, definimos a operação "X*3" na função "MultiplybyThree".

À medida que passamos a função "multiplybyThree" dentro da outra função "func", a função "func" produz o resultado da função "multiplybythree" da seguinte forma:

Exemplo 2: Usando a função anônima como lambda

Uma função anônima não tem um nome, mas desempenha a mesma função. Quando você não pretende repetir uma função mais tarde, criar uma versão anônima é uma boa ideia. Em Scala, os operadores de curinga “=>” e “_” sublinheiros podem ser usados ​​para gerar funções anônimas.
Aqui está um para ilustrar:


Dentro do método principal do objeto "MyDemo", criamos duas variáveis. As variáveis ​​são declaradas como "res1" e "res2". A variável "res1" é inicializada com a função anônima usando o operador "=>". A função anônima é definida com os parâmetros X e Y e no lado direito do foguete “=>” Operador, definimos a equação “x+y”. Depois disso, temos outra função anônima que é empregada com o curinga “_”. Dentro do método println, chamamos de "res1" e "res2", respectivamente, e atribuímos a eles dois valores.

Os resultados para ambas as funções anônimos são gerados da seguinte forma:

Exemplo 3: Usando a expressão multilina

O termo "expressão multilina" refere -se às expressões que abrangem muitas linhas. Ao utilizar as expressões multilinas em Scala, tenha cuidado. Para evitar problemas relacionados à expressão multilina, você pode usar os seguintes métodos:


O objeto "mytest" tem a definição de três funções. A primeira função é definida como "Sum1", que leva os parâmetros "i" e "j". Os valores de entrada "i" e "j" são definidos como "i+j" dentro da função "sum1" bloco. Em seguida, temos outra função como "Sum2", que também pega os valores de entrada e também define a operação "i+j". Depois disso, definimos o método principal em que duas variáveis ​​“resultado1” e “resultado2” são declaradas. Essas variáveis ​​são chamadas de funções "SUM1" e "SUM2" por passar os valores contra o "i" e "j".

A saída obtida pelas duas funções "SUM1" e "SUM2" tem os mesmos resultados.

Exemplo 4: Usando uma função carregando

Um método em Scala pode ter inúmeras listas de parâmetros. Uma função que aceita as listas de argumentos ausentes como argumentos é produzida quando uma função é chamada com menos listas de parâmetros do que requer. Em outras palavras, é um método para alterar uma função que aceita vários parâmetros em um que só aceita um.


Aqui, criamos uma função "Add" que leva dois argumentos separadamente. O "P" é o primeiro argumento e "Q" é o segundo argumento. Então, declaramos uma variável "resultado1" no método principal. A variável "resultado1" é chamada de função "add" e define os valores para "P" e "Q". Além disso, passamos o argumento único para a função "add" que é chamada na variável "addvalues". Os AddValues ​​também assumem os valores de argumento de um número.

Os resultados para o código anterior após a compilação são os seguintes:

Exemplo 5: Usando uma função aninhada

Sendo uma linguagem de função de primeira classe, o Scala permite que você passe as funções, retorne as funções, componha as funções, use as funções aninhadas e mais. A definição e o chamado das funções aninhadas são demonstradas no exemplo a seguir:


Dentro da função "sub1", definimos outra função "sub2" que avalia a diferença entre "a-b". Fora da função sub2, chamamos de "sub2", que assume o valor do argumento "x" e o "sub2 (y, z)". Em seguida, declaramos uma variável "resultado" que é chamada de função sub1 e passamos o valor numérico a ser avaliado para operação diferente.

A seguir, é apresentado o resultado da operação diferente gerado pelo código anterior:

Exemplo 6: Usando uma função com parâmetros de comprimento variável

Você pode definir as funções com parâmetros de comprimento variável em scala. Qualquer quantidade de argumentos pode ser passada ao chamar a função.


Para a função "Add", definimos a variável "mysum" que é inicialmente zero. Então, temos o loop que itera sobre os números e incrementos do mysum. Dentro do principal, chamamos a função Add e passamos os valores numéricos para ela.

A duração da variável "mysum" é impressa na tela.

Conclusão

Descobrimos no artigo acima mencionado que o uso das funções de ordem superior em Scala pode tornar a base de código simples e fácil de compreender as operações. Funções de ordem superior são aquelas que aceitam ou retornam as entradas de outras funções. Também examinamos os exemplos demonstrando as várias aplicações para essas funções de ordem superior. Além disso, aprendemos a entregar as funções anônimas como funções de alta ordem.