SlideShare una empresa de Scribd logo
Sistemas de tipos:
lo bueno, lo malo y lo feo
Enrique Zamudio
@chochosmx
github.com/chochos
@ceylonlang
#Ceylon
• Programando desde 1982
• Profesionalmente desde 1994
• En Java desde 2000
• Proyectos FOSS
• j8583
• jAlarms
• Ceylon
Sistemas de tipos
• Todos los lenguajes tienen uno
• Una característica más?
• Nótese el término: SISTEMA
• Consideración superficial
Static
Dynamic
Static
Dynamic
Ceylon
• Creado a partir de un sistema de tipos
• Es una de sus características principales
• Sintaxis, gramática, operadores obedecen al ST
• Arreglar problemas comunes y/o graves en el
sistema de tipos de Java
Java
null
ALGOL
1965
"I call it my billion-dollar
mistake"
Tony Hoare
2009
core dump
NullPointerException
try {
print(s.length());
} catch (NullPointerException ex) {
System.out.println("Yay");
}
String s = null;
Object o = null;
Integer i = null;
List<String> l = null;
PrintWriter p = null;
WorkerThreadFactory wtf = null;
String s = null;
¿Cuál es el tipo
de null?
Object
String Number Collection
Integer Float List Map
null
null
Object
Object Null
Object Null
Anything
Object Null
Anything
String Number
Object Null
Anything
String Number null
String s = null;
Integer s = null;
Null n = null;
String s = null;
Integer s = null;
Null n = null;
✘
Unión de tipos:
Tipo unión
String | Integer
String | Null
String|Integer a = 1;
String|Integer b = "uno";
String|Null s1 = "s";
String|Null s2 = null;
String|Integer a = 1;
String|Integer b = "uno";
String? s1 = "s";
String? s2 = null;
String? s = algo();
print(s.size); //NO COMPILA
if (exists s) {
...
}
Object Null
Anything
String Number null
Tipos algebraicos
(o enumerados)
class Anything
of Object|Null
class Null of null
object null extends Null
class Boolean
of true|false
class Comparison
of larger|smaller|equal
Usuario login(String username,
String password);
Usuario login(String username,
String password)
throws LoginException;
Usuario|Integer login(
String username,
String password);
casting
Object algo;
if (algo instanceof String) {
((String)algo).length();
}
Object algo;
if (algo instanceof String) {
//50 líneas
((Collection)algo).clear();
}
Object algo;
if (is String algo) {
algo.length();
}
Flow typing:
Tipado por flujo
String|Integer? algo;
if (exists algo) {
print(algo.hash);
if (is String algo) {
print(algo.uppercased);
} else {
print(algo/2);
}
}
Inferencia de tipos
(local)
value a = 1; //Integer
value b = "2"; //String
value c = login("a","b");
//Usuario|Integer
value d = a <=> 2; //Comparison
Intersección de tipos:
Tipo intersección
void enviar(Runnable r) {
if (r instanceof Serializable) {
stream.write((Serializable)r);
} else {
throw;
}
}
interface Runnalizable
extends Runnable, Serializable {
}
void enviar(Runnalizable r) {
stream.write(r);
}
void enviar(
Runnable & Serializable r) {
stream.write(r);
}
Tipos intersección
Tipos no
denotables
private java.util.List<?> lista;
<T> void boom(java.util.List<T> l, T arg) {
lista = l;
lista.add(arg);
}
Demo.java:7: error: no suitable method found for add(T)
lista.add(arg);
^
method List.add(int,CAP#1) is not applicable
(actual and formal argument lists differ in length)
method List.add(CAP#1) is not applicable
(actual argument T cannot be converted to CAP#1 by method
invocation conversion)
method Collection.add(CAP#1) is not applicable
(actual argument T cannot be converted to CAP#1 by method
invocation conversion)
where T is a type-variable:
T extends Object declared in method <T>boom(List<T>,T)
where CAP#1 is a fresh type-variable:
CAP#1 extends Object from capture of ?
Resumen
• Tipos unión
• Tipos intersección
• Tipos enumerados
• Tipado por flujo / acotación de tipos
• Inferencia local de tipos
• Tipos denotables
Otras cosas
• Reified generics
• Varianza en el sitio de declaración
• Covarianza y contravarianza
• Tuplas
¿?
ceylon-lang.org
github.com/ceylon
@ceylonlang
enrique@ceylon-lang.org

Más contenido relacionado

La actualidad más candente

Javascript C#
Javascript C#Javascript C#
Javascript C#
Manuel Antonio
 
Presentacion JFlex USC (Compiladores) 2011B
Presentacion JFlex USC (Compiladores) 2011BPresentacion JFlex USC (Compiladores) 2011B
Presentacion JFlex USC (Compiladores) 2011B
Kuritzuthian
 
Introducción a Scala
Introducción a ScalaIntroducción a Scala
Introducción a Scala
dhaat
 
Variables1
Variables1Variables1
Variables1
Daniel Cáceres
 
Java variables
Java variablesJava variables
Java variables
zoe2311
 
Controles Java Listas
Controles Java ListasControles Java Listas
Controles Java Listas
William Rafael Tantalean
 
Introduccion a Java
Introduccion a JavaIntroduccion a Java
Introduccion a Java
Juan Astudillo
 
1 Introducción a los Lenguajes de Programación y a la Programación Orientada ...
1 Introducción a los Lenguajes de Programación y a la Programación Orientada ...1 Introducción a los Lenguajes de Programación y a la Programación Orientada ...
1 Introducción a los Lenguajes de Programación y a la Programación Orientada ...
Jose Emilio Labra Gayo
 
Introduccion al lenguaje java
Introduccion al lenguaje javaIntroduccion al lenguaje java
Introduccion al lenguaje java
Yanina Ruiz Fernandez
 
Python
PythonPython
Metodos Constructor Y Destructor
Metodos Constructor Y DestructorMetodos Constructor Y Destructor
Metodos Constructor Y Destructorrezzaca
 
Constructor Y Destructor
Constructor Y DestructorConstructor Y Destructor
Constructor Y Destructor
Tecnologico
 
Java 8 introducción a expresiones lambdas y api stream
Java 8  introducción a expresiones lambdas y api streamJava 8  introducción a expresiones lambdas y api stream
Java 8 introducción a expresiones lambdas y api stream
Eudris Cabrera
 
Programación Orientada a Objetos - constructores y destructores
Programación Orientada a Objetos - constructores y destructoresProgramación Orientada a Objetos - constructores y destructores
Programación Orientada a Objetos - constructores y destructores
Alvaro Enrique Ruano
 
Clase 3
Clase 3Clase 3
Taller de programación clase #2
Taller de programación   clase #2Taller de programación   clase #2
Taller de programación clase #2Juan Cardona
 
Programa 19
Programa 19Programa 19
Programa 19
Javier Leon
 
Constructores en java(grupo 8)
Constructores en java(grupo 8)Constructores en java(grupo 8)
Constructores en java(grupo 8)Manuel Ch.
 
Contructores en java(grupo 8)
Contructores en java(grupo 8)Contructores en java(grupo 8)
Contructores en java(grupo 8)Manuel Ch.
 

La actualidad más candente (20)

Javascript C#
Javascript C#Javascript C#
Javascript C#
 
Presentacion JFlex USC (Compiladores) 2011B
Presentacion JFlex USC (Compiladores) 2011BPresentacion JFlex USC (Compiladores) 2011B
Presentacion JFlex USC (Compiladores) 2011B
 
Introducción a Scala
Introducción a ScalaIntroducción a Scala
Introducción a Scala
 
Variables1
Variables1Variables1
Variables1
 
Java variables
Java variablesJava variables
Java variables
 
Controles Java Listas
Controles Java ListasControles Java Listas
Controles Java Listas
 
Introduccion a Java
Introduccion a JavaIntroduccion a Java
Introduccion a Java
 
1 Introducción a los Lenguajes de Programación y a la Programación Orientada ...
1 Introducción a los Lenguajes de Programación y a la Programación Orientada ...1 Introducción a los Lenguajes de Programación y a la Programación Orientada ...
1 Introducción a los Lenguajes de Programación y a la Programación Orientada ...
 
Download.php
Download.phpDownload.php
Download.php
 
Introduccion al lenguaje java
Introduccion al lenguaje javaIntroduccion al lenguaje java
Introduccion al lenguaje java
 
Python
PythonPython
Python
 
Metodos Constructor Y Destructor
Metodos Constructor Y DestructorMetodos Constructor Y Destructor
Metodos Constructor Y Destructor
 
Constructor Y Destructor
Constructor Y DestructorConstructor Y Destructor
Constructor Y Destructor
 
Java 8 introducción a expresiones lambdas y api stream
Java 8  introducción a expresiones lambdas y api streamJava 8  introducción a expresiones lambdas y api stream
Java 8 introducción a expresiones lambdas y api stream
 
Programación Orientada a Objetos - constructores y destructores
Programación Orientada a Objetos - constructores y destructoresProgramación Orientada a Objetos - constructores y destructores
Programación Orientada a Objetos - constructores y destructores
 
Clase 3
Clase 3Clase 3
Clase 3
 
Taller de programación clase #2
Taller de programación   clase #2Taller de programación   clase #2
Taller de programación clase #2
 
Programa 19
Programa 19Programa 19
Programa 19
 
Constructores en java(grupo 8)
Constructores en java(grupo 8)Constructores en java(grupo 8)
Constructores en java(grupo 8)
 
Contructores en java(grupo 8)
Contructores en java(grupo 8)Contructores en java(grupo 8)
Contructores en java(grupo 8)
 

Similar a Sistemas de tipos: Lo bueno, lo malo y lo feo

JAVA.PPT
JAVA.PPTJAVA.PPT
JAVA.PPT
GalvanGR
 
JAVA (1).PPT
JAVA (1).PPTJAVA (1).PPT
JAVA (1).PPT
DanielHidalgo92
 
JAVA (1).PPT
JAVA (1).PPTJAVA (1).PPT
JAVA (1).PPT
miguel checa
 
04 j flex
04 j flex04 j flex
04 j flex
Karyamel Ml
 
Lenguaje de programacion java, conceptos
Lenguaje de programacion java, conceptosLenguaje de programacion java, conceptos
Lenguaje de programacion java, conceptos
mellcv
 
Java fundamentos -15 consejos prácticos - Encuentro Universitario Comunidad J...
Java fundamentos -15 consejos prácticos - Encuentro Universitario Comunidad J...Java fundamentos -15 consejos prácticos - Encuentro Universitario Comunidad J...
Java fundamentos -15 consejos prácticos - Encuentro Universitario Comunidad J...
Eudris Cabrera
 
Java fundamentos 15 consejos prácticos - ITLA Tech Day 2018
Java fundamentos   15 consejos prácticos - ITLA Tech Day 2018Java fundamentos   15 consejos prácticos - ITLA Tech Day 2018
Java fundamentos 15 consejos prácticos - ITLA Tech Day 2018
Eudris Cabrera
 
LibreríAs De Java
LibreríAs De JavaLibreríAs De Java
LibreríAs De Java
Universidad Veracruzana
 
Javaintroduccion 2010
Javaintroduccion 2010Javaintroduccion 2010
Javaintroduccion 2010
Carlos_Pazmino
 
Java fundamentos -15 consejos practicos open saturday 2018
Java fundamentos -15 consejos practicos open saturday 2018Java fundamentos -15 consejos practicos open saturday 2018
Java fundamentos -15 consejos practicos open saturday 2018
Eudris Cabrera
 
Java clases dictadas
Java clases dictadasJava clases dictadas
Java clases dictadasGaloGabriel
 
Javascript - 2014
Javascript - 2014Javascript - 2014
Javascript - 2014
Carlos Alonso Pérez
 
Estructura de lenguaje C++
Estructura de lenguaje C++Estructura de lenguaje C++
Estructura de lenguaje C++
jhoel terrel
 
Mule Librerias en Java
Mule Librerias en JavaMule Librerias en Java
Mule Librerias en Java
Manuel Antonio
 
Introducción a Swift
Introducción a SwiftIntroducción a Swift
Introducción a Swift
betabeers
 
Java 7- Java Day Guatemala
Java 7- Java Day GuatemalaJava 7- Java Day Guatemala
Java 7- Java Day Guatemala
Víctor Leonel Orozco López
 
Taller de programación clase #2
Taller de programación   clase #2Taller de programación   clase #2
Taller de programación clase #2Carlos Posada
 

Similar a Sistemas de tipos: Lo bueno, lo malo y lo feo (20)

JAVA.PPT
JAVA.PPTJAVA.PPT
JAVA.PPT
 
JAVA (1).PPT
JAVA (1).PPTJAVA (1).PPT
JAVA (1).PPT
 
JAVA (1).PPT
JAVA (1).PPTJAVA (1).PPT
JAVA (1).PPT
 
Grupo1
Grupo1Grupo1
Grupo1
 
04 j flex
04 j flex04 j flex
04 j flex
 
Lenguaje de programacion java, conceptos
Lenguaje de programacion java, conceptosLenguaje de programacion java, conceptos
Lenguaje de programacion java, conceptos
 
Java fundamentos -15 consejos prácticos - Encuentro Universitario Comunidad J...
Java fundamentos -15 consejos prácticos - Encuentro Universitario Comunidad J...Java fundamentos -15 consejos prácticos - Encuentro Universitario Comunidad J...
Java fundamentos -15 consejos prácticos - Encuentro Universitario Comunidad J...
 
Java fundamentos 15 consejos prácticos - ITLA Tech Day 2018
Java fundamentos   15 consejos prácticos - ITLA Tech Day 2018Java fundamentos   15 consejos prácticos - ITLA Tech Day 2018
Java fundamentos 15 consejos prácticos - ITLA Tech Day 2018
 
LibreríAs De Java
LibreríAs De JavaLibreríAs De Java
LibreríAs De Java
 
Javaintroduccion 2010
Javaintroduccion 2010Javaintroduccion 2010
Javaintroduccion 2010
 
Java fundamentos -15 consejos practicos open saturday 2018
Java fundamentos -15 consejos practicos open saturday 2018Java fundamentos -15 consejos practicos open saturday 2018
Java fundamentos -15 consejos practicos open saturday 2018
 
Java clases dictadas
Java clases dictadasJava clases dictadas
Java clases dictadas
 
Javascript - 2014
Javascript - 2014Javascript - 2014
Javascript - 2014
 
Estructura de lenguaje C++
Estructura de lenguaje C++Estructura de lenguaje C++
Estructura de lenguaje C++
 
Mule Librerias en Java
Mule Librerias en JavaMule Librerias en Java
Mule Librerias en Java
 
Introducción a Swift
Introducción a SwiftIntroducción a Swift
Introducción a Swift
 
Java 7- Java Day Guatemala
Java 7- Java Day GuatemalaJava 7- Java Day Guatemala
Java 7- Java Day Guatemala
 
Taller de programación clase #2
Taller de programación   clase #2Taller de programación   clase #2
Taller de programación clase #2
 
Java 8
Java 8Java 8
Java 8
 
Los lenguajes de la web
Los lenguajes de la webLos lenguajes de la web
Los lenguajes de la web
 

Más de Enrique Zamudio López

Bulletproofing your foot for Kotlin
Bulletproofing your foot for KotlinBulletproofing your foot for Kotlin
Bulletproofing your foot for Kotlin
Enrique Zamudio López
 
Introducción a Protocol Buffers
Introducción a Protocol BuffersIntroducción a Protocol Buffers
Introducción a Protocol Buffers
Enrique Zamudio López
 
Developing Android applications with Ceylon
Developing Android applications with Ceylon Developing Android applications with Ceylon
Developing Android applications with Ceylon
Enrique Zamudio López
 
Criptografía para simples mortales
Criptografía para simples mortalesCriptografía para simples mortales
Criptografía para simples mortales
Enrique Zamudio López
 
Diseño de compiladores: Un vistazo a Ceylon-JS
Diseño de compiladores: Un vistazo a Ceylon-JSDiseño de compiladores: Un vistazo a Ceylon-JS
Diseño de compiladores: Un vistazo a Ceylon-JS
Enrique Zamudio López
 
Introducción a Ceylon
Introducción a CeylonIntroducción a Ceylon
Introducción a Ceylon
Enrique Zamudio López
 
PCJ Sesión 9: Threads
PCJ Sesión 9: ThreadsPCJ Sesión 9: Threads
PCJ Sesión 9: Threads
Enrique Zamudio López
 
Introducción a jAlarms
Introducción a jAlarmsIntroducción a jAlarms
Introducción a jAlarms
Enrique Zamudio López
 

Más de Enrique Zamudio López (8)

Bulletproofing your foot for Kotlin
Bulletproofing your foot for KotlinBulletproofing your foot for Kotlin
Bulletproofing your foot for Kotlin
 
Introducción a Protocol Buffers
Introducción a Protocol BuffersIntroducción a Protocol Buffers
Introducción a Protocol Buffers
 
Developing Android applications with Ceylon
Developing Android applications with Ceylon Developing Android applications with Ceylon
Developing Android applications with Ceylon
 
Criptografía para simples mortales
Criptografía para simples mortalesCriptografía para simples mortales
Criptografía para simples mortales
 
Diseño de compiladores: Un vistazo a Ceylon-JS
Diseño de compiladores: Un vistazo a Ceylon-JSDiseño de compiladores: Un vistazo a Ceylon-JS
Diseño de compiladores: Un vistazo a Ceylon-JS
 
Introducción a Ceylon
Introducción a CeylonIntroducción a Ceylon
Introducción a Ceylon
 
PCJ Sesión 9: Threads
PCJ Sesión 9: ThreadsPCJ Sesión 9: Threads
PCJ Sesión 9: Threads
 
Introducción a jAlarms
Introducción a jAlarmsIntroducción a jAlarms
Introducción a jAlarms
 

Último

Escaneo y eliminación de malware en el equipo
Escaneo y eliminación de malware en el equipoEscaneo y eliminación de malware en el equipo
Escaneo y eliminación de malware en el equipo
nicromante2000
 
CONCEPTOS DE PROGRAMACION CUALQUIER LENGUAJE
CONCEPTOS DE PROGRAMACION CUALQUIER LENGUAJECONCEPTOS DE PROGRAMACION CUALQUIER LENGUAJE
CONCEPTOS DE PROGRAMACION CUALQUIER LENGUAJE
SamuelGampley
 
Introducción_a_las_APIs_y_Desarrollo_Back-end-Abbie Dominguez Girondo.pdf
Introducción_a_las_APIs_y_Desarrollo_Back-end-Abbie Dominguez Girondo.pdfIntroducción_a_las_APIs_y_Desarrollo_Back-end-Abbie Dominguez Girondo.pdf
Introducción_a_las_APIs_y_Desarrollo_Back-end-Abbie Dominguez Girondo.pdf
AbbieDominguezGirond
 
Maquina de Dibujo y Escritura Automática.pdf
Maquina de Dibujo y Escritura Automática.pdfMaquina de Dibujo y Escritura Automática.pdf
Maquina de Dibujo y Escritura Automática.pdf
juanjosebarreiro704
 
Caso de exito Cirrus - Hospital La Salle
Caso de exito Cirrus - Hospital La SalleCaso de exito Cirrus - Hospital La Salle
Caso de exito Cirrus - Hospital La Salle
Ecaresoft Inc.
 
PitchCollabART uniendo talentos, creando maravillas digitales
PitchCollabART uniendo talentos, creando maravillas digitalesPitchCollabART uniendo talentos, creando maravillas digitales
PitchCollabART uniendo talentos, creando maravillas digitales
juanorejuela499
 

Último (6)

Escaneo y eliminación de malware en el equipo
Escaneo y eliminación de malware en el equipoEscaneo y eliminación de malware en el equipo
Escaneo y eliminación de malware en el equipo
 
CONCEPTOS DE PROGRAMACION CUALQUIER LENGUAJE
CONCEPTOS DE PROGRAMACION CUALQUIER LENGUAJECONCEPTOS DE PROGRAMACION CUALQUIER LENGUAJE
CONCEPTOS DE PROGRAMACION CUALQUIER LENGUAJE
 
Introducción_a_las_APIs_y_Desarrollo_Back-end-Abbie Dominguez Girondo.pdf
Introducción_a_las_APIs_y_Desarrollo_Back-end-Abbie Dominguez Girondo.pdfIntroducción_a_las_APIs_y_Desarrollo_Back-end-Abbie Dominguez Girondo.pdf
Introducción_a_las_APIs_y_Desarrollo_Back-end-Abbie Dominguez Girondo.pdf
 
Maquina de Dibujo y Escritura Automática.pdf
Maquina de Dibujo y Escritura Automática.pdfMaquina de Dibujo y Escritura Automática.pdf
Maquina de Dibujo y Escritura Automática.pdf
 
Caso de exito Cirrus - Hospital La Salle
Caso de exito Cirrus - Hospital La SalleCaso de exito Cirrus - Hospital La Salle
Caso de exito Cirrus - Hospital La Salle
 
PitchCollabART uniendo talentos, creando maravillas digitales
PitchCollabART uniendo talentos, creando maravillas digitalesPitchCollabART uniendo talentos, creando maravillas digitales
PitchCollabART uniendo talentos, creando maravillas digitales
 

Sistemas de tipos: Lo bueno, lo malo y lo feo