previenen muchos bugs mientras te permite expresar más, mas facilmente: union types intersection types higher order functions mixin inheritance enumerated types.
código de otros que escribiendo el nuestro. Debido a esto, Ceylon propicia la legibilidad mediante una sintaxis regular, soporte para estructuras tipo árbol y un poco de azúcar sintatica donde es conveniente.
herramientas. El compilador produce modulos que pueden ser distribuidos mediante la siguiente generación de arquitectura de repositorios con Ceylon Herd como su enfoque social principal.
tools. Ceylon trae consigo una conjunto de comandos muy completo, y una IDE (Eclipse) con búsqueda, refactoring, quick fixes + asistencia, autocompletado, debugging, y mucho más.
n @ i l c a p i t a n o : / t m p % c e y l o n n e w h e l l o - w o r l d - - h o l a E n t e r m o d u l e n a m e [ c o m . e x a m p l e . h e l l o w o r l d ] : o r g . k a l t i a . h o l a E n t e r m o d u l e v e r s i o n [ 1 . 0 . 0 ] : W o u l d y o u l i k e t o g e n e r a t e E c l i p s e p r o j e c t f i l e s ? ( y / n ) : y E n t e r E c l i p s e p r o j e c t n a m e [ o r g . k a l t i a . h o l a ] : W o u l d y o u l i k e t o g e n e r a t e a n a n t b u i l d . x m l ? ( y / n ) : y
y produce un módulo y archivos fuente en un repositorio. c e y l o n c o m p i l e o r g . k a l t i a . h o l a N o t e : C r e a t e d m o d u l e c o m . e x a m p l e . h o l a / 1 . 0 . 0
c e y l o n i n f o o r g . k a l t i a . h o l a S h o w i n g v e r s i o n s f o r m o d u l e : c o m . e x a m p l e . h e l l o w o r l d 1 . 0 . 0
c e y l o n i m p o r t - j a r o r g . n e o 4 j . c y p h e r / 2 . 0 . 0 ~ / S c r i v a n i a / n e o 4 j - c o m m u n i t y - 2 . 1 . 0 - M 0 1 / l i b / n e o 4 j - c y p h
contenido dentro del directorio source. r m - r s o u r c e s # B o r r a d o a c c i d e n t a l c e y l o n s r c o r g . k a l t i a . h o l a t r e e s o u r c e s o u r c e ` - - c o m ` - - e x a m p l e ` - - h e l l o w o r l d | - - m o d u l e . c e y l o n | - - p a c k a g e . c e y l o n ` - - r u n . c e y l o n 3 d i r e c t o r i e s , 3 f i l e s
a estrcuturas en forma de árbol. H t m l h t m l = H t m l { d o c t y p e = h t m l 5 ; H e a d { t i t l e = " C e y l o n : h o m e p a g e " ; } ; B o d y { H 2 ( " W e l c o m e t o C e y l o n ` ` l a n g u a g e . v e r s i o n ` ` ! " ) , P ( " N o w g e t y o u r c o d e o n : ) " ) } ; } ;
es exportada por herramientas de Ceylon. " T h i s m o d u l e i s j u s t a s i l l y e x a m p l e . Y o u ' l l f i n d s o m e p r o p e r m o d u l e s i n t h e c o m m u n i t y r e p o s i t o r y [ C e y l o n H e r d ] [ H e r d ] . [ H e r d ] : h t t p : / / m o d u l e s . c e y l o n - l a n g . o r g H a p p y H e r d i n g ! " m o d u l e o r g . j b o s s . e x a m p l e " 1 . 0 . 0 " { i m p o r t c e y l o n . m a t h " 0 . 3 . 0 " ; i m p o r t c e y l o n . f i l e " 0 . 3 . 1 " ; }
si no son cumplidas las condiciones. También puede estrechar el tipo. No puede ser deshabilitada en tiempo de ejecución. v o i d p r i n t S q r t ( O b j e c t x ) { a s s e r t ( i s F l o a t x , x > = 0 . 0 ) ; p r i n t ( x ^ 0 . 5 ) ; }
multiples tipos, podemos verificar si es el elemento que deseamos y ajustar la ejecución acorde a su diseño. v a l u e n u m = p a r s e I n t e g e r ( " 1 " ) ; / / b e f o r e t h e a s s e r t s t a t e m e n t n u m i s o f t y p e I n t e g e r ? a s s e r t ( e x i s t s n u m ) ; / / a f t e r t h e a s s e r t s t a t e m e n t n u m i s o f t y p e I n t e g e r v a l u e p l u s O n e = n u m + 1 ;
casos: ENUMERATED TYPES v o i d s w i t c h O n E n u m V a l u e s ( B o o l e a n b ) { s w i t c h ( b ) c a s e ( t r u e ) { p r i n t ( " y e s " ) ; } c a s e ( f a l s e ) { p r i n t ( " n o " ) ; } }
c h O n E n u m T y p e s ( F o o | B a r | B a z v a r ) { s w i t c h ( v a r ) c a s e ( i s F o o ) { p r i n t ( " F O O " ) ; } c a s e ( i s B a r ) { p r i n t ( " B A R " ) ; } c a s e ( i s B a z ) { p r i n t ( " B A Z " ) ; } }
t c h O n L i t e r a l V a l u e s ( I n t e g e r i ) { s w i t c h ( i ) c a s e ( 0 ) { p r i n t ( " z e r o " ) ; } c a s e ( 1 ) { p r i n t ( " o n e " ) ; } c a s e ( 2 ) { p r i n t ( " t w o " ) ; } e l s e { p r i n t ( " l o t s " ) ; } }
estático de la lista coincide con el tipo de cada elemento en la lista. [ F l o a t , F l o a t , F l o a t , S t r i n g ] o r i g i n = [ 0 . 0 , 0 . 0 , 0 . 0 , " o r i g i n " ] ;
iterables satisfacen la interfas Iterable. Ceylon provee dos formas de lidiar con iterables. Se pueden construir iterables usando llaves. Valores opcionales: { S t r i n g * } w o r d s = { " h e l l o " , " w o r l d " } ; Valores obligatorios: { S t r i n g + } w o r d s = { " h e l l o " , " w o r l d " } ; { S t r i n g + } m o r e W o r d s = { " h o l a " , " m u n d o " , * w o r d s } ;
y un valor. E n t r y < i n t e g e r , s t r i n g = " " > i n t N a m e = 1 - > " O n e " ; H a s h M a p { f o r ( p i n p e o p l e ) p . f i r s t N a m e + " " + p . l a s t N a m e - > p } < / i n t e g e r , >
t r y { / / s o m e c o d e } c a t c h ( R e a d E x c e p t i o n e ) { / / c l e a n u p c o d e } c a t c h ( W r i t e E x c e p t i o n e ) { / / c l e a n u p c o d e } f i n a l l y { / / c l e a n u p c o d e } O con una expresion t r y ( R e a d e r i n p u t = o p e n ( ' / e t c / p a s s w d ' ) ) { / / . . . }
para generar iterables. C h a r a c t e r [ ] u p p e r c a s e L e t t e r s = ' A ' . . ' Z ' ; I n t e g e r [ ] c o u n t D o w n = 1 0 . . 0 ; C h a r a c t e r [ ] s a l u d o = " h o l a " [ 1 : 3 ] ; / / E m p i e z a d e s d e e l i n d i c e u n o / / y t o m a 3 v a l o r e s I n t e g e r [ ] d e s p e d i d a = " A d i o s " [ 0 . . 3 ] ; / / T o m a d e s d e e l i n d i c e 0 a l 3
un iterable. S t r i n g [ ] a r g s ( S t r i n g * e ) = > e ; a r g s ( " u n o " , " d o s " ) ; a r g s ( * { " u n o " , " d o s " } ) ; { S t r i n g + } n a m e s = { " f o o " , " b a r " , " b a z " } ; { I n t e g e r + } s i z e s = n a m e s * . s i z e ; { S t r i n g + } n a m e s = { " f o o " , " b a r " , " b a z " } ; { S t r i n g + } i n i t i a l s = n a m e s * . i n i t i a l ( 1 ) ;
analisis de el "mejor" o los tipos principales. Para cada expresión, un unico tipo mas especifico puede ser determinado, sin la necesidad de analizar el resto de la expresiones en las que aparece. Todos los tipos usados por el compilador son denotables. L i s t < c a p t u r e # 3 - o f ? > una parte integral de Ceylon es que provee soporte de primer orden a tipos union e interseccion.
u e s t u f f = { " h e l l o " , " w o r l d " , 1 . 0 , - 1 } ; v a l u e j o i n e d S t u f f = c o n c a t e n a t e ( { " h e l l o " , " w o r l d " } , { 1 . 0 , 2 . 0 } , { } ) ; El compilador infiere los tipos: I t e r a b l e < S t r i n g | F l o a t | I n t e g e r > - > s t u f f S e q u e n t i a l < S t r i n g | F l o a t > - > j o i n e d S t u f f .
Ceylon requiere que especifiquemos cuando un tipo puede ser null; S t r i n g ? n o m b r e = . . . ; es azucar sintactica para: S t r i n g | N u l l n o m b r e = . . . ;
condiciones como is y exists. v o i d h e l l o ( S t r i n g ? n a m e ) { i f ( i s S t r i n g n a m e ) { p r i n t ( " H e l l o , ` ` n a m e ` ` ! " ) ; } e l s e { p r i n t ( " H e l l o , w o r l d ! " ) ; } }
hay en Java. a b s t r a c t c l a s s S u i t ( S t r i n g n a m e ) o f h e a r t s | d i a m o n d s | c l u b s | s p a d e s { } o b j e c t h e a r t s e x t e n d s S u i t ( " h e a r t s " ) { } o b j e c t d i a m o n d s e x t e n d s S u i t ( " d i a m o n d s " ) { } o b j e c t c l u b s e x t e n d s S u i t ( " c l u b s " ) { } o b j e c t s p a d e s e x t e n d s S u i t ( " s p a d e s " ) { } Y consumir todos los casos en Suit con switch: v o i d p r i n t S u i t ( S u i t s u i t ) { s w i t c h ( s u i t ) c a s e ( h e a r t s ) { p r i n t ( " H e a r t z e s " ) ; } c a s e ( d i a m o n d s ) { p r i n t ( " D i a m o n d z e s " ) ; } c a s e ( c l u b s ) { p r i n t ( " C l i d u b s " ) ; } c a s e ( s p a d e s ) { p r i n t ( " S p i d a d e s " ) ; } }
una subclase de =Y= y =Y= no es una subclase de =X=. Si =X= es una clase final y =Y= es una interfaz no satisfecha por =X= Dos instancias de un tipo generico puede ser disjoint, =MutableList and MutableList=.
a una clase o interfas existente, especialmente si la clase o interfaz es un tipo parametrisado. Para uniones e intersecciones: a l i a s N u m = > F l o a t | I n t e g e r ;
t e r f a c e P e o p l e = > S e t < p e r s o n > ; < / p e r s o n > En clases: c l a s s N a m e d < v a l u e > ( S t r i n g n a m e , V a l u e v a l ) g i v e n V a l u e s a t i s f i e s O b j e c t = > E n t r y < S t r i n g , V a l u e > ( n a m e , v a l ) ; < / v a l u e >
clase. c l a s s B u f f e r e d R e a d e r ( R e a d e r r e a d e r ) s a t i s f i e s R e a d e r { s h a r e d d e f a u l t c l a s s B u f f e r ( ) = > M u t a b l e L i s t < C h a r a c t e r > ( ) ; } c l a s s B u f f e r e d F i l e R e a d e r ( F i l e f i l e ) e x t e n d s B u f f e r e d R e a d e r ( F i l e R e a d e r ( f i l e ) ) { s h a r e d a c t u a l c l a s s B u f f e r ( ) = > M u t a b l e L i n k e d L i s t < C h a r a c t e r > ( ) ; . . . }
devueltas por una función, además pueden ser asignadas a variables como valores. a l i a s C o l o r = > S t r i n g ; v a l u e d e v u l v e F u n c i o n C o l o r = > v o i d ( C o l o r ? c = n u l l ) { i f ( e x i s t s c ) { p r i n t ( " M i c o l o r f a v o r i t o e s ` ` c ` ` " ) ; } e l s e { p r i n t ( " E n a u s e n c i a d e l u z l a o s c u r i d a d p r e v a l e c e " ) ; } } ; d e v u l v e F u n c i o n C o l o r ( ) ;
de parámentros, cada una significando una invación que devuelve otra función. I n t e g e r s u m a ( I n t e g e r x ) ( I n t e g e r Y ) { r e t u r n x + y ; } v a l u e s u m a 3 = s u m a ( 3 ) ; s u m a 3 ( 5 ) ; / / = > 8
o l a r c o o r d i n a t e " c l a s s P o l a r ( a n g l e , r a d i u s ) { s h a r e d F l o a t a n g l e ; s h a r e d F l o a t r a d i u s ; s h a r e d P o l a r r o t a t e ( F l o a t r o t a t i o n ) = > P o l a r ( a n g l e + r o t a t i o n , r a d i u s ) ; s h a r e d P o l a r d i l a t e ( F l o a t d i l a t i o n ) = > P o l a r ( a n g l e , r a d i u s * d i l a t i o n ) ; s h a r e d S t r i n g d e s c r i p t i o n = " ( ` ` r a d i u s ` ` , ` ` a n g l e ` ` ) " ; } Y las interfaces tambien. i n t e r f a c e W r i t e r { s h a r e d f o r m a l F o r m a t t e r f o r m a t t e r ; s h a r e d f o r m a l v o i d w r i t e ( S t r i n g s t r i n g ) ;
una clase abstracta. a b s t r a c t c l a s s P o i n t ( ) { s h a r e d f o r m a l P o l a r p o l a r ; s h a r e d f o r m a l C a r t e s i a n c a r t e s i a n ; s h a r e d f o r m a l P o i n t r o t a t e ( F l o a t r o t a t i o n ) ; s h a r e d f o r m a l P o i n t d i l a t e ( F l o a t d i l a t i o n ) ; }
reimplementar un elemento. c l a s s P e r s o n a ( S t r i n g n o m b r e ) { s h a r e d d e f a u l t S t r i n g d e s c r i p t i o n = > " ( M e l l a m o ` ` n o m b r e ` ` ) " ; } c l a s s N e r d ( S t r i n g n , S t r i n g f r a s e ) e x t e n d s P e r s o n a ( n ) { s h a r e d d e f a u l t S t r i n g d e s c r i p t i o n = > s u p e r . d e s c r i p t i o n + " , " + f r a s e ; }
simular un tipo Multiherencia. i n t e r f a c e P e r s o n a { s h a r e d f o r m a l S t r i n g n a m e ; s h a r e d f o r m a l S t r i n g e d a d ; s h a r e d B o o l e a n v i v o ( ) = > . . . ; } i n t e r f a c e U b i c a c i o n { s h a r e d f o r m a l S t r i n g d i r ; s h a r e d U C a r t e s i a n a u C a r t e s i a n a ( ) = > . . . ; } c l a s s H o g a r ( n a m e , e d a d , d i r ) s a t i s f i e s P e r s o n a & U b i c a c i o n { s h a r e d a c t u a l S t r i n g d i r ; s h a r e d a c t u a l S t r i n g e d a d ; s h a r e d a c t u a l S t r i n g n a m e ; }
tipos genericos y la posibilidad de imponer restricción a estos. s h a r e d c l a s s S i n g l e t o n < o u t e l e m e n t = " " > ( E l e m e n t e l e m e n t ) e x t e n d s O b j e c t ( ) s a t i s f i e s [ E l e m e n t + ] g i v e n E l e m e n t s a t i s f i e s O b j e c t { . . . } < / o u t >
lenguaje constructores para paquetes y modulos, que van deacuerdo a un control de acceso provisto por =shared=. " [ H e r d ] : h t t p : / / m o d u l e s . c e y l o n - l a n g . o r g H a p p y H e r d i n g ! " m o d u l e o r g . j b o s s . e x a m p l e " 1 . 0 . 0 " { i m p o r t c e y l o n . m a t h " 0 . 3 . 0 " ; i m p o r t c e y l o n . f i l e " 0 . 3 . 1 " ; }
subtipo de =ConstrainedAnnotation=. Vamos a llamar a esta función un *contructor de anotacion*. " A n n o t a t i o n t o s p e c i f y A P I d o c u m e n t a t i o n o f a p r o g r a m e l e m e n t . " s h a r e d a n n o t a t i o n D o c A n n o t a t i o n d o c ( S t r i n g d e s c r i p t i o n ) = > D o c A n n o t a t i o n ( d e s c r i p t i o n ) ;
módulos y paquetes, asi como miembros de clases y asi poder ajustar el comportamiento de nuestro programa en tiempo de ejecución. v a l u e e n d = E n d p o i n t { p a t h = s t a r t s W i t h ( " / e c h o " ) ; s e r v i c e ( R e q u e s t r e q u e s t , R e s p o n s e r e s p o n s e ) = > r e s p o n s e . w r i t e S t r i n g ( r e q u e s t . q u e r y S t r i n g ) ; } ; v a l u e p = ` p a c k a g e o r g . k a l t i a . c e l y a . e n d p o i n t s ` ; v a l u e n s = p . m e m b e r s < v a l u e d e c l a r a t i o n > ( ) ; / / a s s e r t ( n o n e m p t y n s ) ; v a l u e s e r v e r = n e w S e r v e r ( [ f o r ( i i n n s ) i f ( i s E n d p o i n t i ) i ] ) ; < / v a l u e d e c l a r a t i o n >
funcional en FirefoxOs Mejora en la traducción de tour de Ceylon Kaltia Curso online o presencial de Ceylon Recursos para aprender a usar la Terminal, LiveScript y Storm