Commits

Miguel Gordian committed 39511cc

Atributos y estructuras de datos

Se agrega el capitulo de estructura de datos y atributos, también se renombran
las imágenes de la mascota de Ceylon a su nombre "trompon".

Se Modifican algunos parámetros para la generación de archivos pdf, epub.

Comments (0)

Files changed (9)

source/_static/ceylon.ico

Removed
Old image

source/_static/ceylon.png

Removed
Old image

source/_static/ceylon.svg

Removed
Old image
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!-- Created with Inkscape (http://www.inkscape.org/) -->
-
-<svg
-   xmlns:dc="http://purl.org/dc/elements/1.1/"
-   xmlns:cc="http://creativecommons.org/ns#"
-   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
-   xmlns:svg="http://www.w3.org/2000/svg"
-   xmlns="http://www.w3.org/2000/svg"
-   xmlns:xlink="http://www.w3.org/1999/xlink"
-   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
-   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
-   id="svg2"
-   version="1.1"
-   inkscape:version="0.48.4 r9939"
-   width="184.29031"
-   height="128.65625"
-   sodipodi:docname="ceylong.svg">
-  <metadata
-     id="metadata8">
-    <rdf:RDF>
-      <cc:Work
-         rdf:about="">
-        <dc:format>image/svg+xml</dc:format>
-        <dc:type
-           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
-        <dc:title />
-      </cc:Work>
-    </rdf:RDF>
-  </metadata>
-  <defs
-     id="defs6">
-    <linearGradient
-       inkscape:collect="always"
-       id="linearGradient3767">
-      <stop
-         style="stop-color:#b96f0a;stop-opacity:1;"
-         offset="0"
-         id="stop3769" />
-      <stop
-         style="stop-color:#d5921f;stop-opacity:1"
-         offset="1"
-         id="stop3771" />
-    </linearGradient>
-    <linearGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient3767"
-       id="linearGradient3773"
-       x1="172.51404"
-       y1="101.77447"
-       x2="253.51151"
-       y2="39.185532"
-       gradientUnits="userSpaceOnUse" />
-    <linearGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient3767"
-       id="linearGradient3776"
-       gradientUnits="userSpaceOnUse"
-       x1="194.60425"
-       y1="79.158295"
-       x2="233.52512"
-       y2="34.977871" />
-    <linearGradient
-       inkscape:collect="always"
-       xlink:href="#linearGradient3767"
-       id="linearGradient2993"
-       gradientUnits="userSpaceOnUse"
-       x1="194.60425"
-       y1="79.158295"
-       x2="233.52512"
-       y2="34.977871" />
-  </defs>
-  <sodipodi:namedview
-     pagecolor="#ffffff"
-     bordercolor="#666666"
-     borderopacity="1"
-     objecttolerance="10"
-     gridtolerance="10"
-     guidetolerance="10"
-     inkscape:pageopacity="0"
-     inkscape:pageshadow="2"
-     inkscape:window-width="1366"
-     inkscape:window-height="719"
-     id="namedview4"
-     showgrid="false"
-     inkscape:zoom="1.9012945"
-     inkscape:cx="205.3125"
-     inkscape:cy="62.09375"
-     inkscape:window-x="-4"
-     inkscape:window-y="0"
-     inkscape:window-maximized="1"
-     inkscape:current-layer="svg2"
-     fit-margin-top="0"
-     fit-margin-left="0"
-     fit-margin-right="0"
-     fit-margin-bottom="0" />
-  <g
-     id="g3779"
-     transform="translate(-103.6875,-11.9375)">
-    <g
-       id="g2990">
-      <path
-         style="fill:url(#linearGradient2993);fill-opacity:1;stroke:none"
-         d="m 257.9375,11.9375 c -5.61819,2.553719 -3.36482,14.821888 0,20.9375 4.20469,7.642092 15.3125,22.5 15.3125,22.5 0.96862,10.109124 -10.4531,11.69077 -13.78125,-6.5625 -1.48238,-8.130115 -4.49351,-11.453703 -11.25,-22.0625 -14.83651,-0.365434 -26.08735,0.879075 -38.25,3.1875 0,0 -30.15687,0.545853 -45,2.9375 -15.22054,2.45246 -32.33162,5.580595 -44.75,11.65625 C 112.03122,55.373128 103.6875,88.0625 103.6875,88.0625 L 117.21875,75 c 0,0 1.10604,24.91987 2.78125,37.25 1.29629,9.54105 5.625,28.3125 5.625,28.3125 l 17.5625,-0.375 c 2.72652,-11.92894 6.99699,-22.11026 13.09375,-30.1875 7.23612,2.92807 14.1825,3.57716 20.9375,2.65625 l 7.9375,27.8125 22.125,0.125 c 0,0 0.066,-5.4662 0.59375,-8.125 2.96618,-14.94448 14.3125,-43.40625 14.3125,-43.40625 1.89886,-5.317401 3.50751,-9.320509 9.34375,-11.03125 13.75721,3.476874 33.03522,12.864851 46.75,3.65625 5.10712,-3.42911 9.55724,-9.568582 9.6875,-15.71875 0.23388,-11.04197 -4.02958,-19.053492 -16.1875,-28.90625 -6.86695,-6.293176 -8.75992,-9.336822 -6.96875,-19.875 0,0 -4.8993,0.878926 -6.875,-5.25 z M 216.5,40.71875 c 0,0 -12.53111,14.315266 -8.84375,20.9375 0.9484,1.703264 4.0324,0.04479 5.78125,0.90625 3.05544,1.505074 4.01288,6.738011 7.40625,7.03125 1.29731,0.112107 3.25,-2.15625 3.25,-2.15625 0,0 -1.34933,3.372324 -2.875,3.59375 -3.33792,0.484442 -5.25367,-4.32875 -8.3125,-5.75 -2.31722,-1.076671 -5.99314,0.128813 -7.40625,-2 -2.68816,-4.049648 -0.30726,-10.142659 1.96875,-14.4375 1.89595,-3.57766 9.03125,-8.125 9.03125,-8.125 z m 21.53125,11.625 c 0.28465,-0.01594 0.62093,0.0238 0.96875,0.15625 1.39129,0.529786 2.66106,2.135968 2.84375,3.5625 0.18269,1.426532 -0.79621,2.154786 -2.1875,1.625 -1.39129,-0.529786 -2.66106,-2.135968 -2.84375,-3.5625 -0.13702,-1.069899 0.3648,-1.733428 1.21875,-1.78125 z"
-         id="path2987"
-         inkscape:connector-curvature="0" />
-    </g>
-    <path
-       sodipodi:nodetypes="cscccc"
-       inkscape:connector-curvature="0"
-       id="path2989"
-       d="m 146.44649,140.02593 c 0,0 2.61459,-10.89245 4.69496,-16.07119 1.34417,-3.34609 3.65335,-8.71124 5.9461,-10.7163 1.42318,0.18162 1.82115,0.26812 3.4438,0.97129 1.05478,11.2628 3.25036,25.99678 3.25036,25.99678 z"
-       style="fill:#9f6104;fill-opacity:1;stroke:none" />
-    <path
-       sodipodi:nodetypes="cccc"
-       inkscape:connector-curvature="0"
-       id="path2991"
-       d="m 212.71759,139.84536 22.21075,0.18057 c -4.08286,-8.70926 -6.70752,-32.0004 -9.93164,-49.297029 0,0 -16.97406,32.684109 -12.27911,49.116459 z"
-       style="fill:#9f6104;fill-opacity:1;stroke:none" />
-  </g>
-</svg>

source/_static/trompon.ico

Added
New image

source/_static/trompon.svg

Added
New image
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:xlink="http://www.w3.org/1999/xlink"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   id="svg2"
+   version="1.1"
+   inkscape:version="0.48.4 r9939"
+   width="184.29031"
+   height="128.65625"
+   sodipodi:docname="ceylong.svg">
+  <metadata
+     id="metadata8">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title />
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <defs
+     id="defs6">
+    <linearGradient
+       inkscape:collect="always"
+       id="linearGradient3767">
+      <stop
+         style="stop-color:#b96f0a;stop-opacity:1;"
+         offset="0"
+         id="stop3769" />
+      <stop
+         style="stop-color:#d5921f;stop-opacity:1"
+         offset="1"
+         id="stop3771" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3767"
+       id="linearGradient3773"
+       x1="172.51404"
+       y1="101.77447"
+       x2="253.51151"
+       y2="39.185532"
+       gradientUnits="userSpaceOnUse" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3767"
+       id="linearGradient3776"
+       gradientUnits="userSpaceOnUse"
+       x1="194.60425"
+       y1="79.158295"
+       x2="233.52512"
+       y2="34.977871" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3767"
+       id="linearGradient2993"
+       gradientUnits="userSpaceOnUse"
+       x1="194.60425"
+       y1="79.158295"
+       x2="233.52512"
+       y2="34.977871" />
+  </defs>
+  <sodipodi:namedview
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1"
+     objecttolerance="10"
+     gridtolerance="10"
+     guidetolerance="10"
+     inkscape:pageopacity="0"
+     inkscape:pageshadow="2"
+     inkscape:window-width="1366"
+     inkscape:window-height="719"
+     id="namedview4"
+     showgrid="false"
+     inkscape:zoom="1.9012945"
+     inkscape:cx="205.3125"
+     inkscape:cy="62.09375"
+     inkscape:window-x="-4"
+     inkscape:window-y="0"
+     inkscape:window-maximized="1"
+     inkscape:current-layer="svg2"
+     fit-margin-top="0"
+     fit-margin-left="0"
+     fit-margin-right="0"
+     fit-margin-bottom="0" />
+  <g
+     id="g3779"
+     transform="translate(-103.6875,-11.9375)">
+    <g
+       id="g2990">
+      <path
+         style="fill:url(#linearGradient2993);fill-opacity:1;stroke:none"
+         d="m 257.9375,11.9375 c -5.61819,2.553719 -3.36482,14.821888 0,20.9375 4.20469,7.642092 15.3125,22.5 15.3125,22.5 0.96862,10.109124 -10.4531,11.69077 -13.78125,-6.5625 -1.48238,-8.130115 -4.49351,-11.453703 -11.25,-22.0625 -14.83651,-0.365434 -26.08735,0.879075 -38.25,3.1875 0,0 -30.15687,0.545853 -45,2.9375 -15.22054,2.45246 -32.33162,5.580595 -44.75,11.65625 C 112.03122,55.373128 103.6875,88.0625 103.6875,88.0625 L 117.21875,75 c 0,0 1.10604,24.91987 2.78125,37.25 1.29629,9.54105 5.625,28.3125 5.625,28.3125 l 17.5625,-0.375 c 2.72652,-11.92894 6.99699,-22.11026 13.09375,-30.1875 7.23612,2.92807 14.1825,3.57716 20.9375,2.65625 l 7.9375,27.8125 22.125,0.125 c 0,0 0.066,-5.4662 0.59375,-8.125 2.96618,-14.94448 14.3125,-43.40625 14.3125,-43.40625 1.89886,-5.317401 3.50751,-9.320509 9.34375,-11.03125 13.75721,3.476874 33.03522,12.864851 46.75,3.65625 5.10712,-3.42911 9.55724,-9.568582 9.6875,-15.71875 0.23388,-11.04197 -4.02958,-19.053492 -16.1875,-28.90625 -6.86695,-6.293176 -8.75992,-9.336822 -6.96875,-19.875 0,0 -4.8993,0.878926 -6.875,-5.25 z M 216.5,40.71875 c 0,0 -12.53111,14.315266 -8.84375,20.9375 0.9484,1.703264 4.0324,0.04479 5.78125,0.90625 3.05544,1.505074 4.01288,6.738011 7.40625,7.03125 1.29731,0.112107 3.25,-2.15625 3.25,-2.15625 0,0 -1.34933,3.372324 -2.875,3.59375 -3.33792,0.484442 -5.25367,-4.32875 -8.3125,-5.75 -2.31722,-1.076671 -5.99314,0.128813 -7.40625,-2 -2.68816,-4.049648 -0.30726,-10.142659 1.96875,-14.4375 1.89595,-3.57766 9.03125,-8.125 9.03125,-8.125 z m 21.53125,11.625 c 0.28465,-0.01594 0.62093,0.0238 0.96875,0.15625 1.39129,0.529786 2.66106,2.135968 2.84375,3.5625 0.18269,1.426532 -0.79621,2.154786 -2.1875,1.625 -1.39129,-0.529786 -2.66106,-2.135968 -2.84375,-3.5625 -0.13702,-1.069899 0.3648,-1.733428 1.21875,-1.78125 z"
+         id="path2987"
+         inkscape:connector-curvature="0" />
+    </g>
+    <path
+       sodipodi:nodetypes="cscccc"
+       inkscape:connector-curvature="0"
+       id="path2989"
+       d="m 146.44649,140.02593 c 0,0 2.61459,-10.89245 4.69496,-16.07119 1.34417,-3.34609 3.65335,-8.71124 5.9461,-10.7163 1.42318,0.18162 1.82115,0.26812 3.4438,0.97129 1.05478,11.2628 3.25036,25.99678 3.25036,25.99678 z"
+       style="fill:#9f6104;fill-opacity:1;stroke:none" />
+    <path
+       sodipodi:nodetypes="cccc"
+       inkscape:connector-curvature="0"
+       id="path2991"
+       d="m 212.71759,139.84536 22.21075,0.18057 c -4.08286,-8.70926 -6.70752,-32.0004 -9.93164,-49.297029 0,0 -16.97406,32.684109 -12.27911,49.116459 z"
+       style="fill:#9f6104;fill-opacity:1;stroke:none" />
+  </g>
+</svg>

source/_static/trompon_mini.png

Added
New image

source/atributos_estructuras.rst

+=============================================
+Atributos y variables, estrucutras de control
+=============================================
+
+Esta es la terera parte de este tour por Ceylon. En la pasada
+parada hemos aprendido acerca  de clases y los conceptos de un
+atributo. Una de las cosas que hace una clase especial es que 
+puede estados-referencia a otros objetos. Asi que e tiempo
+de aprender mas acerca de atributos y variables.
+
+Tambien veremos un poco de las estructuras de control (if, switch,
+for, while, y try).
+
+---------------------------
+Atributos y valores locales
+---------------------------
+
+En Java, un field de una clase es facilmente distinguir entre una
+variable local o parametro de un constructor. Esta distincion es 
+menos significativa en Ceylon e frecuente irrelevante. Un atributo
+es realmente solo una valor declarado en la lista de parametros o 
+en el cuerpo de la clase, puediendo ser capturado por alguna 
+declaración `shared`.
+
+Aqui, `cuenta` es una variable local-block del inicializador de 
+`Contador`.
+
+.. code-block:: ceylon
+    
+    class Contador () {
+        variable Integer cuenta=0;
+    }
+
+Pero en los siguientes dos ejemplos, `cuenta` es un atributo.
+
+.. code-block:: ceylon
+    
+    class Contador() {
+        shared varible Integer cuenta=0;
+    }
+
+    class Contador(){
+        variable Integer cuenta=0;
+        variable Integer inc() => ++cuenta++;
+    }
+
+Esto puede ser un poco confuso la primera vez, pero es 
+realmente como el principlo de trabajo de la closure.
+El mismo comportamiento aplica a valores local-block en 
+el cuerpo de una funcion. Funciones no pueden ser declarados
+miembros shared, por su puesto, pero ellos pueden retornar
+un `objeto` que capture una varaible local:
+
+.. code-block:: ceylon
+    
+    interface Contador {
+        shared formal Integer inc();
+    }
+
+    Contador crearContador () {
+        variable Integer cuenta=0;
+        object contador satisfies Contador {
+            shared actual Integer inc() => ++cuenta;
+        }
+        return contador;
+    }
+
+O, como veremos mas adelante, una función puede retornar una
+funcion anidada que capture la variable local:
+
+.. code-block:: ceylon
+    
+    Integer() contador {
+        variable Integer cuenta=0;
+        Integer inc() => ++cuenta;
+        return inc;
+    }
+
+(No te preocupes mucho acerca de la sintaxis aqui - por ahora todo
+lo que nos interesa es en que `contador()` devueve una referencía a 
+una función `inc()` la cual captura la variable `cuenta`.)
+
+Asi que aunque continuemos usando el termino "valor local" y "atributo"
+a lo largo de nuestro viaje, manten en mente que no hay una dinstinción
+significativa entre los terminos. Cualquier valor con nombre puede
+ser capturado por alguna otra declaración en el mismo contenido scope.
+Un valor local es solo un atributo que parece no ser capturado por nadie.
+
+
+---------
+Variables
+---------
+
+Ceylon alienta a usar atributos inmutables tanto como sea posible. Un atributo
+inmutable obtiene su valor cuando el objeto es inicializado, nunca mas puede
+ser reasignado.
+
+.. code-block:: ceylon
+    
+    class Referencia<Valor>(val){
+        shared Valor val;
+    }
+
+    value ref = Referencia("foo");
+    print(ref.val);
+    ref.val = "bar"; // compile error: value is no variable
+
+Si nostros queremos asignar un valor a la referencia necesitamos anotarla
+con `variable`:
+
+.. code-block:: ceylon
+ 
+    class Referencia<Valor>(val){
+        shared variable Valor val;
+    }
+
+    value ref = Referencia("foo");
+    print(ref.val);
+    ref.val = "bar"; // ok
+    print(ref.val);
+
+
+-------
+Setters
+-------
+
+Hemos conocido el concepto de un getter.
+
+Si queremos crear un atributo con un getter mutable, necesitamos
+definir un matching setter. Usualmete esto unicamente usable si tu
+tienes algun otro atributo interno que quieras al que quieras 
+establecer un valor indirectamente.
+
+Supongamos nuestra clase tiene los siguientes atributos, diseñados
+para unicamente ser usados internamente (un-shared).
+
+.. code-block:: ceylon
+
+   variable String? nombre=null;
+   variable String? apellido=null;
+
+(Recuerda que ceylon nunca incializa los atributos automaticamente a null.)
+
+Entonces nosotros podemos abstraer los atributos usando un tercer atributo
+definido como un par getter/setter:
+
+.. code-block:: ceylon
+
+    shared String nombreCompleto => 
+        " ".join(coalesce {nombre, apellido});
+
+    assign nombreCompleto {
+        value tokens = nombreCompleto.split().iterator();
+        if (is String primero = tokens.next()){
+            nombre=primero;
+        }
+        if (is String ultimo=tokens.next()){
+            apellido=ultimo;
+        }
+    }
+    
+    
+Un setter es identificado por la palabra reservada `assign` en lugar del
+tipo de la declaración. (EL tipo de el matching getter determina el tipo de
+el atributo.) Dentro de el cuerpo de el setter, el atributo nombre evalua 
+al valor a ser establecido
+    
+Asi es, se parece mucho a un par de metodos get/set en Java, aunque la sintaxis
+es significativamente mas simplificada. Pero desde que los atributos en Ceylon
+son poliformicos, y desde que puedes redefinir una referencia como un getter o 
+un par getter/setter sin afectar a los clientes que llamen al atributo, no
+necesitas definir getter y setters amenos que  estes haciendo algo especial
+con el valor que estas obteniendo o estableciendo.
+
+Nunca escribas codigo como este en Ceylon:
+
+.. code-block:: ceylon
+    
+    variable String _name = " ";
+    shared String name => _name; //pointless getter
+    assign name => _name=name;   //pointless setter
+
+No es necesario, y no obtines ningun beneficio de el.
+
+----------------------
+Estructuras de control
+----------------------
+
+Ceylon tiene seis estructuras de control que vienen integradas. No hay muy 
+nuevo para los desarrolladores de Java o de C#, asi que unos pequeños ejemplos
+sin muchos comentarios adicionales deberas de ser suficientes.
+
+En primer lugar, un "gotcha" para los chicos que vienen de lenguajes similares a C:
+Ceylon no permite omitir las llaves en una estructura de control. El siguiente codigo
+niquiera sera parseado:
+
+.. code-block:: ceylon
+    
+    if (x>100) print("grande");  //error
+
+Se debe se escribir:
+
+.. code-block:: ceylon
+
+    if (x>100) { print("big"); }
+
+La razón para que las llaves no sean opcionales en Ceylon es debido a que una expresion
+puede comenzar con una llave abierta, por ejemplo, `{"hola", "mundo" }`, así que llaves 
+opcionales en estructuras de control harán que la gramática sea ambigua a el parser.)
+
+Ok, ahora es momento de ir a los ejemplos.
+
+##
+if
+##
+
+La declaración del `if/else` es completamente tradicional:
+
+.. code-block:: ceylon
+    
+    if (x > 1000) {
+        print("Realmente grande");
+    }
+    else if (x > 100) {
+        print("Grande");
+    }
+    else {
+        print("pequeño");
+    }
+
+Después aprenderemos como el `if` puede estrechar el tipo de referencia
+en su bloque. Ya hemos visto un ejemplo de esto, pero volveremos a hablar 
+de esto con cuando lleguemos a `tipos opcionales`.
+
+Nosotros usamos frecuentemente el operador `then` e `else` en vez de `if`.
+
+######
+switch
+######
+
+La declaración `switch/case` elimina el muy criticado comportamiento "fall through" 
+y la sintaxis irregular:
+
+.. code-block:: ceylon
+    
+    switch (x<=>100)
+    case (pequenio) { print("pequeño"); }
+    case (igual) { print("Cien"); }
+    case (grande) { print("Grande"); }
+
+EL tipo de la expresión que evalua switch deberá de ser un tipo `enumerated`. Tu no 
+puedes usar switch con un `String` o un `Integer`. (Utiliza `if` en vez de ello.)
+
+Aun tenemos mucho mas que decir acerca de `switch` cuando discutamos tipos `enumerated`.
+
+######
+assert
+######
+
+Ceylon también tiene una declaración `assert`:
+
+.. code-block:: ceylon
+    
+    assert (longitud < 10);
+
+Los `assert` son buenos para crear declaraciones donde tu conoces que tiene que ser
+verdadero, pero no son aparentes a otros lectores del código(incluyendo el identificador
+de tipos!).  Los usos comunes de un `assert` incluyen cosas como precondiciones, 
+postcondiciones y clases invarientes.
+
+Si la condición es `false` es lanzada una excepciones en tiempo de ejecución. El mensaje
+de la excepción ayudara incluira detalles de la condición que fue violada, esto es muy
+importante cuando un `assert` tiene mas de una condicional.
+
+.. code-block:: ceylon
+    
+    assert (exists arg, !arg.empty);
+
+Para personalizar el mensaje de `assert`, agrega una anotación `doc`:
+
+.. code-block:: ceylon
+    
+    "La longitud debera ser de almenos 10"
+    assert (longitud < 10)
+
+En su caso, el analizador de tipos usara `assert` información para los tipos cuando
+checa declaraciones que siguen al `assert`, por ejemplo:
+
+.. code-block:: ceylon
+    
+    Integer? x = parseInteger("1");
+    assert (exists x);
+    // Despues de `assert`, x tiene el tipo Integer enve de Integer?
+    value y = x+10;
+
+Esto es realmente el mismo comportamiento que hemos visto anteriormente, unicamente
+esta vez enmedio de un bloque en vez de al inicio de un bloque `if`. (No te preocupes,
+habrá más de estos ejemplos después.)
+
+Nótese que, a diferencia del `assert` de Java, que puede ser deshabilitado en tiempo de 
+ejecución, los `assert` en Ceylon siempre estarán habilitados.
+
+###
+for
+###
+
+EL ciclo `for` tiene un bloque opcional `else`, que puede ser ejecutado cuando el ciclo
+termina completamente sus iteraciones si pasar por una declaración `return` o un `break`.
+
+
+.. code-block:: ceylon
+    
+    variable Boolean menores;
+
+    for (p in gente) {
+        if (p.age<18) {
+            menores=true;
+            break;
+        }
+    }
+    else {
+        menores=false;
+    }
+
+Este no es un `for` estilo C. En vez de ello, puedes usar el
+operador de rango longitudinal `:`, para producir una secuencia de
+`Integer`, dando su inicio y su longitud:
+
+.. code-block:: ceylon
+    
+    for (i in min:lon) { ... }
+
+Alternativamente, puede usar el operador de rango común `..` para 
+producir una secuencia de `Integer` entre dos puntos:
+
+.. code-block:: ceylon
+    
+    for (i in min..max) { ... }
+
+Existen algunos otros trucos con un  `for` que veremos mas adelante.
+
+Nosotros usamos `comprehensions` o incluso funciones `higher order` en
+vez de `for`.
+
+
+#####
+while
+#####
+
+EL `while` puede se usado de la forma tradicional.
+
+.. code-block:: ceylon
+    
+    value it = nombres.iterator();
+    while (is String siguiente = it.next()){
+        print(siguiente);
+    }
+
+No hay una declaración `do/while`.
+
+
+###
+try
+###
+
+La declaración `try/catch/finally` trabajan como en Java:
+
+.. code-block:: ceylon
+    
+    try {
+        message.send();
+    }
+    catch (ConnectionException|MessageException e) {
+        tx.setRollbackOnly();
+    }
+
+Para manejar todas la excepciones de Ceylon, junto con todas las
+excepciones de JavaScript, o todas las excepciones que son
+subclases de java.lang.Exception, , podemos `catch` el tipo 
+`Exception` definido en `ceylon.language`. Si no especificamos
+explicitamente un tipo, `Exception` es inferido:
+
+.. code-block:: ceylon
+    
+    try {
+        message.send(); 
+    }
+    catch (e) {// Equivalente a "catch (Exception e)"
+        tx.setRollbackOnly();
+    }
+
+No hay una manera de manejar excepciones de tipo `java.lang.Error`.
+
+Eventualmente `try` soportara expresiones `resource` similares a las
+Java 7.
+
+.. code-block:: ceylon
+    
+    try (Transaction()) {
+        try(s = Session()){
+            s.persist(person);
+        }
+    }
+
+**Notas de la implementación Milestone 5**
+
+Expresiones `Resource` aun no son implementados.
+
+
+##############
+Condition list
+##############
+
+Construcciones como `if,while` y `assert` aceptan `Contion list`. Una `condition list`
+es una lista no ordenada de múltiples booleanos, `exists, nonempty` e `is. La 
+`condition list` es satisfecha si (y solo si) cada una de las condicionales es satisfecha.
+
+Con condicionales booleanas puedes lograr el mismo comportamiento con el operador &&.
+Pero con `condition list` te permite usar el "structured typecasting" de `exists, is` y
+amigos en condiciones que aparezcan después en la misma lista.
+
+Veamos un ejemplo usando `assert`:
+
+.. code-block:: ceylon
+    
+    value url = parseUri("http://ceylon-lang.org/download");
+    assert(exists authority=url.authority,
+           exists host=authority.hostname);
+    // Hacer algo con host
+
+Aqui puedes ver dos condiciones `exists` en la declaración `assert`, separadas
+con coma. La primera declara `authority`(que es inferida a ser una `String` en vez de
+una `String?` debido al `exists`). La segunda condición entonces usa su propia `exists`
+condición.
+
+Lo importante a notar es que el compilador nos permite usar `authority` en la segunda
+condición y conocer que es una `String` y no una `String?`. No puedes hacer esto con 
+múltiples "&&" condiciones. Puedes lograrlo anidando varios `if`, pero hará menos 
+legible el código y  no trabajara bien en un declaración `while` o `somprehension`.
+
+##############
+Aun hay mas...
+##############
+
+Ahora que conocemos acerca de las clases y sus miembros, estamos listos para explorar
+herencia y refinamiento(overriding).
 source_suffix = '.rst'
 
 # The encoding of source files.
-#source_encoding = 'utf-8-sig'
+source_encoding = 'utf-8-sig'
 
 # The master toctree document.
 master_doc = 'index'
 # built documents.
 #
 # The short X.Y version.
-version = '0.1'
+#version = '0.1'
 # The full version, including alpha/beta/rc tags.
-release = '0.1'
+#release = '0.1'
 
 # The language for content autogenerated by Sphinx. Refer to documentation
 # for a list of supported languages.
-#language = None
+language = 'es'
 
 # There are two options for replacing |today|: either, you set today to some
 # non-false value, then it is used:
 
 # The name of an image file (relative to this directory) to place at the top
 # of the sidebar.
-html_logo = "_static/ceylon.png"
+html_logo = "_static/trompon_mini.png"
 
 # The name of an image file (within the static path) to use as favicon of the
 # docs.  This file should be a Windows icon file (.ico) being 16x16 or 32x32
 # pixels large.
-html_favicon = "_static/ceylon.ico"
+html_favicon = "_static/trompon.ico"
 
 # Add any paths that contain custom static files (such as style sheets) here,
 # relative to this directory. They are copied after the builtin static files,
 #html_show_sourcelink = True
 
 # If true, "Created using Sphinx" is shown in the HTML footer. Default is True.
-#html_show_sphinx = True
+html_show_sphinx = True
 
 # If true, "(C) Copyright ..." is shown in the HTML footer. Default is True.
 #html_show_copyright = True
 
 # The font size ('10pt', '11pt' or '12pt').
 #'pointsize': '10pt',
-
+    "babel": "\\usepackage[spanish]{babel}"
 # Additional stuff for the LaTeX preamble.
 #'preamble': '',
 }
 # Grouping the document tree into LaTeX files. List of tuples
 # (source start file, target name, title, author, documentclass [howto/manual]).
 latex_documents = [
-  ('index', 'CeylonTour.tex', u'CeylonTour Documentation',
+  ('index', 'CeylonTour.tex', u'Un tour por Ceylon',
    u'Miguel Angel Gordian', 'manual'),
 ]
 
 # The name of an image file (relative to this directory) to place at the top of
 # the title page.
-#latex_logo = None
+latex_logo = "_static/trompon.png"
 
 # For "manual" documents, if this is true, then toplevel headings are parts,
 # not chapters.
 # -- Options for Epub output ---------------------------------------------------
 
 # Bibliographic Dublin Core info.
-epub_title = u'CeylonTour'
+epub_title = u'Un Tour por Ceylon'
 epub_author = u'Miguel Angel Gordian'
 epub_publisher = u'Miguel Angel Gordian'
 epub_copyright = u'2013, Miguel Angel Gordian'
 
 # The language of the text. It defaults to the language option
 # or en if the language is not set.
-#epub_language = ''
+epub_language = 'es'
 
 # The scheme of the identifier. Typical schemes are ISBN or URL.
 #epub_scheme = ''
     introducción
     basico
     clases
+    atributos_estructuras