Escala | Funciones Llamada por nombre

En Scala , cuando los argumentos pasan a través de la función de llamada por valor, calcula el valor de los argumentos o la expresión pasada una vez antes de llamar a la función. Pero una función de llamada por nombre en Scala llama a la expresión y vuelve a calcular el valor de la expresión pasada cada vez que se accede a ella dentro de la función. Aquí se muestran ejemplos con diferencia y sintaxis.

Llamada por valor

Este método utiliza semántica en modo. Los cambios realizados en el parámetro formal no se transmiten de vuelta a la persona que llama. Cualquier modificación a la variable de parámetro formal dentro de la función o método llamado afecta solo a la ubicación de almacenamiento separada y no se reflejará en el parámetro real en el entorno de llamada. Este método también se denomina llamada por valor.

Sintaxis:

def callByValue(x: Int)
// Scala program of function call-by-value
  
// Creating object
object GFG 
{
    // Main method
    def main(args: Array[String]) 
    {
        // Defined function
        def ArticleCounts(i: Int) 
        {
            println("Tanya did article " +
                    "on day one is 1 - Total = " + i)
            println("Tanya did article " +
                    "on day two is 1 - Total = " + i)
            println("Tanya did article "+ 
                    "on day three is 1 - Total = " + i)
            println("Tanya did article " +
                    "on day four is 1 - Total = " + i)
        }
  
        var Total = 0;
          
        // function call
        ArticleCounts 
        {
            Total += 1 ; Total
              
        }
    }
}
Producción:

Tanya did article on day one is 1 - Total = 1
Tanya did article on day two is 1 - Total = 1
Tanya did article on day three is 1 - Total = 1
Tanya did article on day four is 1 - Total = 1

Aquí, mediante el uso del mecanismo de llamada por valor de la función en el programa anterior, el recuento total de artículos no aumentó.

Llamada por nombre

Un mecanismo de llamada por nombre pasa un bloque de código a la llamada de función y el bloque de código se cumple, ejecuta y calcula el valor. el mensaje se imprimirá primero que devuelve el valor.
Sintaxis:

def callByName(x: => Int)

Ejemplo :

// Scala program of function call-by-name
  
// Creating object
object main 
{
    // Main method
    def main(args: Array[String])
    {
        // Defined function call-by-name
        def ArticleCounts(i: => Int) 
        {
            println("Tanya did articles " + 
                    " on day one is 1 - Total = " + i)
            println("Tanya did articles "+ 
                    "on day two is 1 - Total = " + i)
            println("Tanya did articles " + 
                    "on day three is 1 - Total = " + i)
            println("Tanya did articles " + 
                    "on day four is 1 - Total = " + i)
        }
  
        var Total = 0;
          
        // calling function
        ArticleCounts 
        {
            Total += 1 ; Total
        }
}
}
Producción:

Tanya did articles  on day one is 1 - Total = 1
Tanya did articles on day two is 1 - Total = 2
Tanya did articles on day three is 1 - Total = 3
Tanya did articles on day four is 1 - Total = 4

Aquí, mediante el uso del mecanismo de llamada por nombre de la función en el programa anterior, se incrementará el recuento total de artículos.
Otro programa de función llamada por nombre.

Ejemplo :

// Scala program of function call-by-name
  
// Creating object
object GFG
{
    // Main method
    def main(args: Array[String])
    {
        def something() = 
        {
            println("calling something")
            1 // return value
        }
          
        // Defined function
        def callByName(x: => Int) = 
        {
            println("x1=" + x)
            println("x2=" + x) 
        }
          
        // Calling function
        callByName(something)
    }
}
Producción:

calling something
x1=1
calling something
x2=1

Publicación traducida automáticamente

Artículo escrito por ashishsaini3 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *