tutorial software parte introduccion ejemplos curso crear comentarios clases clase scala types

parte - scala software



Comprender qué palabra clave ''tipo'' hace en Scala (3)

En realidad, la palabra clave type en Scala puede hacer mucho más que aliasar un tipo complicado a un nombre más corto. Introduce miembros de tipo .

Como sabes, una clase puede tener miembros de campo y miembros de método. Bueno, Scala también permite que una clase tenga miembros tipo.

En su caso particular, el type es, de hecho, la introducción de un alias que le permite escribir un código más conciso. El sistema de tipo simplemente reemplaza el alias con el tipo real cuando se realiza la verificación de tipo.

Pero también puedes tener algo como esto

trait Base { type T def method: T } class Implementation extends Base { type T = Int def method: T = 42 }

Al igual que cualquier otro miembro de una clase, los miembros de tipo también pueden ser abstractos (simplemente no especifica cuál es su valor en realidad) y pueden anularse en las implementaciones.

Los miembros de tipo pueden verse como duales de genéricos ya que muchas de las cosas que puede implementar con genéricos se pueden traducir a miembros de tipo abstracto.

Así que sí, se pueden usar para aliasing, pero no los limites a esto, ya que son una característica poderosa del sistema de tipos de Scala.

Por favor vea esta excelente respuesta para más detalles:

Scala: Tipos abstractos vs genéricos

Soy nuevo en Scala y no pude encontrar mucho sobre la palabra clave type . Estoy tratando de entender lo que la siguiente expresión puede significar:

type FunctorType = (LocalDate, HolidayCalendar, Int, Boolean) => LocalDate

FunctorType es una especie de alias, pero ¿qué significa?


Sí, el tipo de alias FunctorType es solo una abreviatura de

(LocalDate, HolidayCalendar, Int, Boolean) => LocalDate

Los alias tipo a menudo se usan para mantener el resto del código simple: ahora puede escribir

def doSomeThing(f: FunctorType)

que será interpretado por el compilador como

def doSomeThing(f: (LocalDate, HolidayCalendar, Int, Boolean) => LocalDate)

Esto ayuda a evitar la definición de muchos tipos personalizados que son solo tuplas o funciones definidas en otros tipos, por ejemplo.

También hay otros casos de uso interesantes para el type , como se describe, por ejemplo, en este capítulo de Programación en Scala .


Solo un ejemplo para ver cómo usar "tipo" como alias:

type Action = () => Unit

La definición anterior define Acción para ser un alias del tipo de procedimientos (methodes) que toman una lista de parámetros vacía y devuelven la Unidad.