SlideShare una empresa de Scribd logo
1 de 54
Descargar para leer sin conexión
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

Presentacion JFlex USC (Compiladores) 2011B
Presentacion JFlex USC (Compiladores) 2011BPresentacion JFlex USC (Compiladores) 2011B
Presentacion JFlex USC (Compiladores) 2011BKuritzuthian
 
Introducción a Scala
Introducción a ScalaIntroducción a Scala
Introducción a Scaladhaat
 
Java variables
Java variablesJava variables
Java variableszoe2311
 
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
 
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 DestructorTecnologico
 
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 streamEudris 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 destructoresAlvaro Enrique Ruano
 
Taller de programación clase #2
Taller de programación   clase #2Taller de programación   clase #2
Taller de programación clase #2Juan Cardona
 
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

Lenguaje de programacion java, conceptos
Lenguaje de programacion java, conceptosLenguaje de programacion java, conceptos
Lenguaje de programacion java, conceptosmellcv
 
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 2018Eudris Cabrera
 
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 2018Eudris Cabrera
 
Java clases dictadas
Java clases dictadasJava clases dictadas
Java clases dictadasGaloGabriel
 
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 JavaManuel Antonio
 
Introducción a Swift
Introducción a SwiftIntroducción a Swift
Introducción a Swiftbetabeers
 
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

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
 

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