Tipos de datos b谩sicos

6/36

Lectura

Tipos de datos b谩sicos

https://docs.scala-lang.org/tour/unified-types.html#nothing-and-null

Scala tiene una familia de tipos de datos b谩sicos que no son nada diferentes a los que quiz谩s ya conozcas de otros lenguajes. Lo que quiz谩s s铆 tiene de diferente es c贸mo se relacionan estos tipos entre ellos.

Como Scala mezcla conceptos de programaci贸n orientada a objetos con conceptos de programaci贸n funcional, el polimorfismo generado por la herencia de estos tipos de datos puede ser importante en algunas ocasiones, aunque no te afectar谩 para los temas que estaremos tratando a lo largo del curso.

Existe entonces un tipo de dato llamado Any. Debajo de este tendremos otros dos: AnyVal y AnyRef. Este 煤ltimo no nos interesa para esta secci贸n, pero el primero s铆, as铆 que vamos a verlo en m谩s detalle.

unified-types-diagram.png

Los tipos que se relacionan con AnyVal son los que solemos llamar tipos de datos b谩sicos, estos son: Double, Float, Long, Int, Short, Byte, Unit, Boolean, y Char.

La mayor铆a te podr铆an sonar familiares:

  • Boolean es para almacenar falso o verdadero.
  • Double, Float, Long, Int, Short, son tipos num茅ricos.
  • Byte se usa para datos binarios.
  • Char se usa para almacenar caracteres/letras.
  • Unit es quiz谩s el tipo extra帽o ac谩, este tipo de dato tiene el objetivo de expresar la unidad o tambi茅n puede entenderse como el vac铆o. Por ejemplo, en algunos lenguajes se usa una palabra reservada void para expresar esto, pero void no es tratado como un tipo de dato en s铆. Usar Unit como un tipo de dato hace el lenguaje m谩s consistente.

Finalmente, tendremos un tipo de dato llamado Nothing, que como su nombre lo indica鈥 es el tipo de dato que usaremos para expresar la nada.

Entonces, as铆 como todos los tipos de datos provienen de Any, o dicho de otra manera, Any es lo que todos los tipos de datos tienen en com煤n, ning煤n tipo de dato puede provenir de Nothing.

En teor铆a de lenguajes de programaci贸n Nothing es lo que se conoce como bottom type, el tipo de dato m谩s bajo del que ning煤n otro tipo de dato puede provenir. Any viene siendo el top type, el tipo de dato m谩s alto del que todos los dem谩s provienen.

Si conoces los tipos b谩sicos de Java, te habr谩s dado cuenta que aunque Scala tiene una relaci贸n muy cercana con Java, aqu铆 no hay una diferencia en cuanto a tipos b谩sicos con los dem谩s tipos de datos.

Por ejemplo en Java el tipo int es distinto al tipo Integer. En Scala de hecho, el tipo Int corresponde directamente al tipo Integer de Java. Lo interesante es que el compilador de Scala es inteligente, y sabe en qu茅 momentos debe usar a bajo nivel, un tipo o el otro.

Como ejercicio, investiga m谩s sobre el tipo Unit y el tipo Nothing, haz un listado de los usos que podr铆as darles. Tambi茅n puedes escribir las dudas que te generen.

En la pr贸xima clase veremos uno de los temas m谩s importantes cuando quieres hacer programaci贸n funcional.

Aportes 5

Preguntas 0

Ordenar por:

驴Quieres ver m谩s aportes, preguntas y respuestas de la comunidad? Crea una cuenta o inicia sesi贸n.

Les dejo le definici贸n que encontr茅 mas Entendible

Nothing:
Nothing is also a Trait, which has no instances. It is a subset of each of the distinct types. The major motive of this Trait is to supply a return type for the methods which consistently throws an exception i.e, not even a single time returns generally. It is also helpful in providing a type for Nil.
Unit:
The Unit is Scala is analogous to the void in Java, which is utilized as a return type of a functions that is used with a function when the stated function does not returns anything.

Usos de nothing: Es el tipo de resultado para los metodos, los cuales nunca hacen un return normal. Un ejemplo es el metodo Scala.sys, el cual retorna una excepci贸n.

You only use Nothing if the method never returns (meaning it cannot complete normally by returning, it could throw an exception). Nothing is never instantiated and is there for the benefit of the type system (to quote James Iry:聽鈥淭he reason Scala has a bottom type is tied to its ability to express variance in type parameters.鈥). From the article you linked to:
One other use of Nothing is as a return type for methods that never return. It makes sense if you think about it. If a method鈥檚 return type is Nothing, and there exists absolutely no instance of Nothing, then such a method must never return.

Unit is a subtype of scala.AnyVal. There is only one value of type Unit, (), and it is not represented by any object in the underlying runtime system. A method with return type Unit is analogous to a Java method which is declared void.

Type Nothing is at the very bottom of Scala鈥檚 class hierarchy; it is a subtype of every other type. However, there exist no values of this type whatsoever. Why does it make sense to have a type without values? One use of Nothing is that it signals abnormal termination. For
instance there鈥檚 the error method in the Predef object of Scala鈥檚 standard
library, which is defined like this:

def error(message: String): Nothing =
throw new RuntimeException(message)

The return type of error is Nothing, which tells users that the method will not return normally (it throws an exception instead). Because Nothing is a subtype of every other type, you can use methods like error in very flexible ways. For instance:

def divide(x: Int, y: Int): Int =
if (y != 0) x / y
else error(鈥渃an鈥檛 divide by zero鈥)

The 鈥渢hen鈥 branch of the conditional, x / y, has type Int, whereas the else branch, the call to error, has type Nothing. Because **Nothing **is a subtype of Int, the type of the whole conditional is Int, as required.

A good resource about Unit, Null and Nothing types in Scala:
https://kubuszok.com/2018/kinds-of-types-in-scala-part-1/

En escala no tengo tipos primitivos y null tiene su representaci贸n con nothing ?