Sistema de tipo unificado en Scala

En este artículo discutiremos cómo funciona el Sistema de tipos unificados en Scala. Un Sistema de Tipo Unificado esencialmente significa que hay un Súper-Tipo del cual heredan otros Sub-Tipos . En Scala, el Super-Tipo es la clase Cualquiera . Por lo tanto, la clase Any se denomina raíz . De Any, se derivan dos subclases.

  1. AnyVal: Todos los tipos de valores se extienden a la clase AnyVal. Hay nueve tipos de valores predefinidos y no son nulos: Doble, Flotante, Largo, Int, Corto, Byte, Char, Unidad y Booleano.
  2. AnyRef: Todos los tipos de referencia se extienden a la clase AnyRef. Las clases definidas por el usuario definen los tipos de referencia de forma predeterminada; es decir, siempre (indirectamente) subclasifican scala.AnyRef. scala.AnyRef en programación java corresponde a java.lang.Object.

Dado que Scala se ejecuta en la máquina virtual de Java, debe diferenciar explícitamente entre los tipos de valor y los tipos de referencia. Para este propósito, las dos subclases AnyVal y AnyRef se pueden heredar de la raíz, es decir, Any. A diferencia de la mayoría de los otros lenguajes como Java, C, etc. Scala no tiene tipos primitivos incorporados. Estos tipos de datos de tamaño de byte se conocen como tipos de valor y son subclases de la clase AnyVal que a su vez se extiende a Any(root). Esto es similar a las clases contenedoras o clases en caja en lenguajes como Java. En otras palabras, debido al Sistema de Tipo Unificado, todos los tipos de datos de tamaño de byte son subclases, heredados de la Clase Raíz. Sin embargo, las variables en Scala que pertenecen a los tipos de valor no se pueden instanciar con la nueva palabra clave. La nueva palabra clave se puede utilizar para tipos de referencia.

El siguiente diagrama representa cómo los tipos valorados y de referencia están relacionados con las clases principales y la raíz.

En el diagrama anterior,

  • Las flechas representan la herencia.
  • Las líneas dobles representan la jerarquía y la conversión de tipos implícita.

Las ventajas de utilizar un sistema de tipo unificado son las siguientes:

  • Una mayor cantidad de Type Safety en comparación con otros tipos de sistemas.
  • La interoperabilidad e integración de objetos creados en otros lenguajes es más fácil.
  • Todas las variables tienen acceso a ciertos métodos universales como equals, hashCode, toString. Esto se debe a que todas las variables son instancias de clases que se heredan de la clase raíz Any, donde se definen los métodos universales.

Veamos la funcionalidad de tener un sistema de tipo unificado con un ejemplo.

// Scala Program to print common elements
// from 2 lists
object Geek
{
    def main(args:Array[String])
    {
        // Creating a list with a fixed data type
        val GfG : List[String] = List("Geeks","for","Geeks")
          
        // Creating a List which can take 
        // variable data type input by Using Any
        val myList : List[Any] = List(
            "Geeks",
            "for",
            "Geeks",
            1000,
            525)
    myList.foreach( value => {
          
        //.contains() is an universally declared function
        if (GfG.contains(value)){
            println(value)
        }
    })
    }
}

PRODUCCIÓN:

Geeks
for
Geeks

En el ejemplo anterior, vemos que pudimos crear una lista que contiene valores de diferentes tipos de datos especificando el tipo Cualquiera . Dado que Any es la clase raíz, esta expresión es válida. Además, hemos usado un método .contains() para ver si la Lista GfG contiene un elemento en particular. El método .contains() se puede usar en Listas, Conjuntos y algunas otras colecciones, ya que es una función universal que está presente en Cualquier clase. Esto solo es posible gracias al Unified Type System que, por lo tanto, hace que Scala sea más robusto y funcional como lenguaje para manejar Big Data Analytics.

Publicación traducida automáticamente

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