Escala | Inferencia de tipo

Scala Type Inference hace que sea opcional especificar el tipo de variable siempre que se maneje la falta de coincidencia de tipos. Con capacidades de inferencia de tipos, podemos pasar menos tiempo escribiendo cosas que el compilador ya sabe. El compilador de Scala a menudo puede inferir el tipo de una expresión para que no tengamos que declararla explícitamente.
Primero echemos un vistazo a la sintaxis de cómo se declaran las variables inmutables en Scala.

val variable_name : Scala_data_type = value

Ejemplo:

// Scala program of type interference
object Geeks 
{ 
    
    // Main method 
    def main(args: Array[String]) 
    { 
        // prints a double value
        val a : Double = 7.893
        println(a)  
        println(a.getClass)
          
    } 
} 

Producción :

7.893
double

En el ejemplo anterior, el método getClass se usa para imprimir el tipo de variable en la consola. Para el ejemplo anterior, el tipo de variable ‘a’ es doble.

Sin embargo, a través de la inferencia de tipos, Scala detecta automáticamente el tipo de la variable sin que el usuario lo haya especificado explícitamente.
Ejemplo :

// Scala program of type interference
object Geeks { 
  
    // Main method 
    def main(args: Array[String]) 
    { 
        // type inference
        println("Scala Data Types")
        val number = 5
        val big_number = 100000000L
        val small_number = 1
        val double_number = 2.50
        val float_number = 2.50f
        val string_of_characters = "This is a string of characters"
        val byte = 0xc
        val character = 'D'
        val empty = ()
          
        println(number)
        println(big_number)
        println(small_number)
        println(double_number)
        println(float_number)
        println(string_of_characters)
        println(byte)
        println(character)
        println(empty)
          
    } 
} 

Producción :

Scala Data Types
5
100000000
1
2.5
2.5
This is a string of characters
12
D
()

Tenga en cuenta que no se especifica explícitamente ningún tipo de datos para las variables anteriores.

Inferencia de tipos en Scala para funciones
Ahora veremos cómo funciona la inferencia de tipos para funciones en Scala.
Primero echemos un vistazo a cómo se declaran las funciones en Scala.
Sintaxis:

 def function_name ([parameter_list]) : [return_type] = {
   
  // function body

}

Ejemplo :

// Scala program of multiply two numbers
object Geeks 
{ 
  
    // Main method 
    def main(args: Array[String])
    { 
          
        // Calling the function 
        println("Product of the two numbers is: " + Prod(5, 3)); 
    } 
      
      
    // declaration and definition of Product function 
    def Prod(x:Int, y:Int) : Int =
    { 
        return x*y 
    } 
} 

Producción :

Product of the two numbers is: 15

En el ejemplo anterior, como podemos a partir de la declaración de que el tipo de retorno especificado es Int. Con la inferencia de tipos de Scala, Scala detecta automáticamente el tipo de función sin que el usuario lo especifique explícitamente.
Ejemplo :

// Scala program of type interference
object Geeks 
{ 
  
    def factorial(n: Int)= { 
          
        var f = 1
        for(i <- 1 to n) 
        { 
            f = f * i; 
        } 
          
        f 
    } 
  
    // Driver Code 
    def main(args: Array[String]) 
    { 
        println(factorial(5)) 
    }
  
}

Producción :

120
def factorial(n: Int)= 

En el ejemplo anterior, se omiten los dos puntos y el tipo de devolución.

Además, en el ejemplo anterior, hemos omitido la declaración «return f» a «f» ya que no hemos especificado el tipo de devolución.
Si en lugar de «f», se colocó «return f», el compilador muestra el siguiente error.

prog.scala:11: error: method factorial has return statement; needs result type
        return f
        ^

Esto muestra el poder de la inferencia de tipos de Scala, pero para los métodos recursivos, el compilador no puede inferir un tipo de resultado. La función factorial anterior también se puede implementar de forma recursiva.
La siguiente es una definición recursiva de la función factorial sin inferencia de tipo.
Ejemplo :

// Scala program of using recursion
object Geeks { 
  
    // factorial function
    def factorial(n: Int): Int =
    { 
        if (n == 0) 
            return 1
        else
            return n * factorial(n-1) 
    } 
  
    // Driver Code 
    def main(args: Array[String]) 
    { 
        println(factorial(5)) 
    } 
  
}

Producción :

120

Ejemplo: con inferencia de tipo Scala

// Scala program of type interference
object Geeks 
{ 
      
    // Defining function with type interfrence
    def factorial(n: Int) =
    { 
        if (n == 0) 
            1
        else
            n * factorial(n-1) 
    } 
  
    // Driver Code 
    def main(args: Array[String]) 
    { 
        println(factorial(5)) 
    } 
  
}

Producción:

Compile Errors :
prog.scala:8: error: recursive method factorial needs result type
            n * factorial(n-1)
                ^

Publicación traducida automáticamente

Artículo escrito por dahalegopal27 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 *