SlideShare une entreprise Scribd logo
1  sur  16
Télécharger pour lire hors ligne
      
Java  World     Capítulo  4        2  
  




Operadores  
                                                                                                                                                                              h
Los  operadores  son  aquellos  elementos  que  producen  un  resultado  realizando  operaciones  con  uno  o  varios  operandos  (estos  son  
                                                                                                                                                                              t
los  elementos  que  se  encuentran  a  la  izquierda  y  derecha  del  operador).  
                                                                                                                                                                              t
Operadores  de  asignación                                                                                                                                                    p
El  operador  de  asignación  es  el  =.  Algunos  conceptos  a  tener  en  cuenta:                                                                                           :
                                                                                                                                                                              /
           Cuando   se   le   asigna   un   valor   a   una   primitiva,   el   tamaño   si   importa.   (Es   importante   saber   cuando   ocurrirá   un   casteo  
                                                                                                                                                                              /
           implícito,  explícito,  y  cuando  se  trunca  el  valor).  
           Una  variable  de  referencia  no  es  un  objeto,  es  una  manera  de  obtener  el  objeto  al  que  hace  referencia.  
                                                                                                                                                                              g
           Cuando  se  asigna  un  valor  a  una  referencia,  el  tipo  importa.  (Es  importante  saber  las  reglas  para  superclases,  subclases,  y                     u
           arrays).                                                                                                                                                           s
                                                                                                                                                                              t
Operadores  de  asignación  compuestos                                                                                                                                        a
Actualmente,  existen  alrededor  de  11  operadores  de  asignación  compuestos,  pero  en  el  examen  solo  aparecerán  los  4  más  comunes                               v
(+=,  -­‐=,  *=,  /=)  se  encuentran  en  el  examen.                                                                                                                        o
Pero,  que  es  un  operador  de  asignación  compuesto?                                                                                                                      a
Simplemente,  es  una  manera  abreviada  de  realizar  una  operación  con  el  valor  de  la  variable  en  donde  se  asigna  el  resultado  con  otro  
                                                                                                                                                                              l
                                                                                                                                                                              b
     int  a  =  2;;  
     a  =  a  *  3;;                                                                                                                                                          e
                                                                                                                                                                              r
     //Diferente  sintaxis,  mismo  significado.  
     int  a  =  2;;                                                                                                                                                           o
     a  *=  3;;                                                                                                                                                               l
conjunto.  Veamos  un  ejemplo:                                                                                                                                               a
                                                                                                                                                                              .
     int  a  =  2;;  
     int  b  =  3;;                                                                                                                                                           b
     int  c  =  5;;                                                                                                                                                           l
       
     a  =  a  *  (  b  +  c  );;                                                                                                                                              o
                                                                                                                                                                              g
     //Diferente  sintaxis,  mismo  significado.  
     int  a  =  2;;  
                                                                                                                                                                              s
     int  b  =  3;;                                                                                                                                                           p
     int  c  =  5;;                                                                                                                                                           o
     a  *=  b  +  c;;  
                                                                                                                                                                              t
  
A   simple   vista,   parece   sencillo,   pero   no   hay   que   confundirse.   El   operador   de   asignación   compuesto   se   refleja   en   realizar   una  
                                                                                                                                                                              .
opeación  con  el  resultado  de  todo  lo  que  se  encuentra  luego  del  igual.  Veamos  un  ejemplo:                                                                      c
                                                                                                                                                                              o
                                                                                                                                                       mpuesto                m  
realiza  los  siguientes  pasos:  

      1.   Realiza  todas  las  operaciones  contenidas  a  la  derecha  del  operador  de  asignación  (=).  
      2.   Realiza  la  operación  compuesta  (Multiplicar,  Dividir,  Sumar,  Restar,  ...).  
      3.   Asigna  el  valor  de  la  operación  a  la  variable.  

Operadores  relacionales  
El  examen  cubre  sies  operadores  relaciones  (<,  <=,  >,  >=,  ==    y  ¡=).    
Los  operadores  relacionales  siempre  producen  como  resultado  un  valor  de  tipo  boolean.  
Los  operadures  se  traducen  como:  

  
3          Java  World     Capítulo  4  
              




                         <              menor  que  
h                        <=             menor  o  igual  que  
t                        >              mayor  que  
t                        >=             mayor  o  igual  que  
                         ==             igual  que  
p
                         ¡=             distinto  de  
:
/                                        Es  muy  común  ver  en  una  comparación  un  operador  =.  Esto  es  una  asignación,  no  un  operador  relacional.  
/                                        Como   dijimos,   estos   tipos   de   operadores   devuelven   un   valor   boolean,   asi   que   pueden   ser   utilizados   en  
v                                        sentencias  condicionales  (if,  else,  while),  como  ser  asignados  a  una  variable.  
a
            Veamos  algunos  ejemplos:  
l
o                int  x  =  7;;  
r                if  (  x  <  9  )  {  
c                    //Codigo  ...  
                 }  else  {  
r                    //Codigo  ...  
e                }  
                 //Entra  en  el  if  
a                  
t                boolean  a  =  100  >  90;;  
                 if  (  a  )  {  
i                    //Codigo  ...  
v                }  else  {  
o                    //Codigo  ...  
                 }  
.                //Entra  en  el  else  
b             
                   
l             
o           Ahora,  veamos  un  ejemplo  un  poco  más  complicado:  
g
s                int  x  =  12;;  
                 if  (  (x  =  2  *  3  )  ==  6  )  {  
p                    //Codigo  ...  
o                }  else  {  
                     //Codigo  ...  
t                }  
.           En  este  código,  se  ejecuta  el  if.  
c           Los  pasos  que  realizó  el  programa  fueron:  
o                1. Realizar  la  ope                     
                 2. Asignar  el  resultado  de  la  operación  anterior  a  x.  
m                3. Comparar  el  valor  de  x  con  el  literal  6.  
            Vuelvo  a  recalcar  la  importancia  de  entender  la  diferencia  entre  =  e  ==,  y  saber  identificar  cuando  podría  haber  un  posible  error.  
            Quiero  mostrar  otro  ejemplo,  en  donde  se  aprecia  aun  más  la  importancia  de  detectar  las  diferencias  entre  dichos  operadores:  

                 boolean  x  =  false;;  
                   
                 if  (  x  =  true  )  {  
                     //Codigo  ...  
                 }  else  {  
                     //Codigo  ...  
                 }  
              
            El  resultado  de  el  código  anterior  ejecuta  el  código  dentro  del  if.  
            ¿Cómo?  Simple:  

              
Java  World     Capítulo  4     4  
  




       1.   x  es  false.  
       2.   Dentro  de  la  condición,  se  asigna  true  a  x.                                                                                                       h
       3.   Se  evalua  x  (este  ahora  vale  true).                                                                                                                 t
                             Hay  que  recordar  que  una  sentencia  de  condición,  en  Java,  solo  evalua  los  tipos  boolean.  Es  válido  asignar              t
                             un  valor  a  una  variable  dentro  de  una  condición,  pero  si  el  tipo  de  dato  almacenado  no  es  de  tipo  boolean,           p
                                                                                                                                                                      :
                             compilación.                                                                                                                             /
No  es  lo  mismo  que:                                                                                                                                               /
     boolean  x  =  false;;  
                                                                                                                                                                      g
                                                                                                                                                                      u
     if  (  x  ==  true  )  {                                                                                                                                         s
         //Codigo  ...  
     }  else  {                                                                                                                                                       t
         //Codigo  ...                                                                                                                                                a
     }  
                                                                                                                                                                      v
  
                                                                                                                                                                      o
En  este  código  se  ejecuta  el  else.  
También  es  posible  realizar  una  comparación  como:                                                                                                               a
   char  a  =  7;;                                                                                                                                                    l
   if  (  a  <  'g'  )  {                                                                                                                                             b
       //Codigo  ...  
   }  else  if  (  a  <  16  )  {                                                                                                                                     e
       //Codigo  ...                                                                                                                                                  r
   }  
                                                                                                                                                                      o
                                                                                                                                                                      l
Cuando  se  compara  un  valor  de  tipo  char,  se  utiliza  el  valor  unicode  del  caracter.                                                                      a
Operadores  de  igualdad                                                                                                                                              .
Los  operadores  de  igualdad  son:                                                                                                                                   b
                                                                                                                                                                      l
            ==        Igual  que  
            ¡=        Distinto  de  
                                                                                                                                                                      o
                                                                                                                                                                      g
Estos  operadores   solo  comparan  el  patrón  de  bits.  Esto   es  importante  dado  que  en  una   variable  de  tipo  referencia,  el  valor   es  la            s
posición  de  memoria  donde  se  encuentra  el  objeto.                                                                                                              p
Igualdad  en  primitivas                                                                                                                                              o
Algunos  ejemplos:                                                                                                                                                    t
                                                                                                                                                                      .
     'a'  ==  'a'                                 //TRUE  
     'a'  ==  'b'                                 //FALSE                                                                                                             c
     7  !=  9                                     //TRUE                                                                                                              o
     1.0  ==  1L                                  //TRUE  (se  realiza  un  casteo  implícito)  
     true  ==  false                              //FALSE                                                                                                             m  
  
                                               




  
5          Java  World     Capítulo  4  
              




            Igualdad  en  variables  de  tipo  referencia  
h           Cuando   se   compara   una   referencia   con   los   operadores   de   igualdad,   solo   se   compara   el   objeto   al   que   referencian   (el   valor   de   la  
t           variable  es  la  dirección  de  memoria  en  donde  se  encuentra  el  objeto  realmente).  
t                class  Simple  {  
p                    int  x;;  
:                    Simple(int  x){  this.x  =  x;;  }  
                 }  
/                  
/                public  static  void  main(String[]  args)  {  
                     Simple  obj_1  =  new  Simple(16);;  
v                    Simple  obj_2  =  new  Simple(16);;  
a                    Simple  obj_3  =  obj_1;;  
l                      
                     System.out.println("Objeto  1  es  igual  a  objeto  2?    "  +  (obj_1  ==  obj_2));;  
o                    System.out.println("Objeto  1  es  igual  a  objeto  3?    "  +  (obj_1  ==  obj_3));;  
r                }  
c             
r
e                                      Objeto  1  es  igual  a  objeto  2?    False  
a                                      Objeto  1  es  igual  a  objeto  3?    True  
t
i           A  pesar  de  que  el  único  atributo  que  tiene  el  objeto  Simple  es  igual  en  obj_1  como  en  obj_2,  su  comparación  de  igualdad  da  false.  
            Vamos  a  hacerlo  un  poco  más  gráfico  para  dejar  este  importante  concepto  bien  en  claro.  
v
o                                                                              Obj_1                   Obj_2                    Obj_3  
.
                                                  Variables                  0x0000F0                0x0000A9                0x0000F0  
b
l
o
g
s
                                                  Memoria                         16                      16  
p
o
                                                                             0x0000F0                0x0000A9  
t
.             
c           En   el   gráfico   podemos   apreciar   facilmente   el   porque   la   comparación   entre   obj_1   y   obj_2   fallo,   cuando   entre   obj_1   y   obj_3   fue  
            exitosa.  Más  alla  de  que  obj_1  y  obj_2  contentan  su  único  atributo  con  el  mismo  valor.  
o
m           Igualdad  en  enumeradores  
            Se  aplica  la  política  de  variables  de  referencia.  Al  final,  un  enumerador  es  un  objeto.  

            Comparación  con  instanceof  
            El  operador  instanceof  devuelve  un  valor  de  tipo  boolean,  que  indica  si  el  objeto  Es-­‐Un  objeto  del  tipo  especificado  (o  subtipo).  
            También  aplica  a  interfaces,  cuando  el  objeto  Implementa  una  interfaz  especificada  (o  alguna  de  sus  superclases  la  implementa).  

                                         El   operador   instanceof   solo   funciona   para   comparar   tipos   que   se   encuentren   en   el   mismo   árbol   de  
                                         herencia.  

                                                          




              
Java  World     Capítulo  4         6  
  




Veamos  un  ejemplo  de  esto:  
                                                                                                                                                                                 h
     interface  Dibujable  {}  
     class  Triangulo  implements  Dibujable  {}                                                                                                                                 t
     class  Cuadrado  extends  Triangulo  {}                                                                                                                                     t
     class  Circulo  implements  Dibujable  {}  
                                                                                                                                                                                 p
  
                                                                                                                                                                                 :
Tipo                  Se  puede  comparar  con                                                                      No  se  puede  comparar  con  
                                                                                                                                                                                 /
null                  Cualquier  clase  o  interface                                                                -­‐  
                                                                                                                                                                                 /
Dibujable             Dibujable     Object     Circulo     Triangulo     Cuadrado                                   -­‐  
Circulo               Circulo     Dibujable     Object                                                              Triangulo     Cuadrado  
                                                                                                                                                                                 g
Triangulo             Cuadrado     Triangulo     Dibujable     Object                                               Circulo                                                      u
Cuadrado              Cuadrado     Triangulo     Dibujable     Object                                               Circulo                                                      s
http://thechroniclesofbinary.googlecode.com/files/ejemploInstanceof.java                                                                                                         t
Para  compilarlo:  Javac  -­‐g  ejemploInstanceof.java                                                                                                                           a
Para  ejecutarlo:  java  ejemploInstanceof                                                                                                                                       v
Operadores  aritméticos                                                                                                                                                          o
                                                                                                                                                                                 a
No  hay  mucho  que  decir  acerca  de  estos,  salvo  que  todos  los  utilizamos.  
                                                                                                                                                                                 l
El  operador  de  resto                                                                                                                                                          b
Cualdo  realizamos  una  operación  de  división,  existe  un  resto.  Este  valor  puede  ser  obtenido  a  partir  del  operador  %.                                           e
                                                                                                                                                                                 r
     public  class  ejemploResto  {                                                                                                                                              o
         static  public  void  main(String[]  arg)  {  
                                                                                                                                                                                 l
             System.out.println("9  dividido  2  es  "  +  (9  /  2)  +  ".  Y  el  resto  es  "  +  (9  %  2));;  
         }                                                                                                                                                                       a
     }                                                                                                                                                                           .
Un  ejemplo  del  operador:                                                                                                                                                      b
                                                                                                                                                                                 l
                                                                                                                                                                                 o
                         9  dividido  2  es  4.  Y  el  resto  es  1.  
                                                                                                                                                                                 g
                                                                                                                                                                                 s
                                                                                                                                                                                 p
El  operador  de  concatenación                                                                                                                                                  o
                                                                                                                                                                                 t
El  operador  +  también  puede  ser  utilizado  para  concatenar  cadenas  de  caracteres.  
La   regla   para   saber   cuando   se   comporta   como   suma   y   cuando   como   concatenación   es   simple:   Si   alguno   de   los   dos   valores   es   un           .
String,  el  +  funciona  como  concatenador.                                                                                                                                    c
Algunos  ejemplos:                                                                                                                                                               o
     System.out.println(67  +  45  +  9);;                                             //121                                                                                     m  
     System.out.println(67  +  45  +  "  -­  valores"  +  67  +  45);;            //112     valores6745  
     System.out.println("hola"  +  "  "  +  "mundo");;                                 //hola  mundo  
  
  
                                              




  
7          Java  World     Capítulo  4  
              




            Operadores  de  incremento  y  decremento  
h           Estos  operadores  sirven  para  incrementar  o  decrementar  en  1  el  valor  de  cualquier  variable  numérica.  
t
            http://thechroniclesofbinary.googlecode.com/files/ejemploOperadoresIncrementoDecremento.java  
t
            Para  compilarlo:  Javac  -­‐g  ejemploOperadoresIncrementoDecremento.java  
p           Para  ejecutarlo:  java  ejemploOperadoresIncrementoDecremento  
:
            En  el  ejemplo  se  puede  ver  como  el  operador  de  incremento  y  decremento  es  aplicado  a  todos  los  valores  de  tipo  numérico,  y  como  
/
            funciona  el  de  preincremento  y  posincremento.  
/
v
a                                        Existe  una  gran  diferencia  entre  los  operadores  de  preincremento  y  posincremento.  
l
o             
r
                         Preincremento   ++variable             Antes   de   realizar   cualquier   acción,   el   valor   de   la   variable   es   incrementado   en   1.   Luego  
c
                         continúa  con  la  lógica.  
r                        Posincremento   variable++             Primero  realiza  la  lógica,  y  al  finalizar  incrementa  el  valor  de  la  variable  en  1.  
e
a           Veamos  un  ejemplo:  
t                int  x;;  
                   
i                x  =  0;;  
v                System.out.println(x++  +  6);;                  //6  
o                System.out.println(x);;                          //7  
                   
.                x  =  0;;  
b                System.out.println(++x  +  6);;                  //7  
                 System.out.println(x);;                          //7  
l
              
o
            Hay  que  tener  cuidado  en  codigos  de  condición  complejos,  veamos  algunos  ejemplos:  
g           http://thechroniclesofbinary.googlecode.com/files/ejemploIncrementoDecrementoCondicionales.java  
s           Para  compilarlo:  Javac  -­‐g  ejemploIncrementoDecrementoCondicionales.java  
p           Para  ejecutarlo:  java  ejemploIncrementoDecrementoCondicionales  
o
t
.
c
o
m  




              
Java  World     Capítulo  4     8  
  




   int  x,  y,  z;;  
                                                                                                                        h
   x  =  0;;y  =  2;;z  =  2;;                                                                                          t
   if  (  (x++  ==  y)  ||  (z  ==  ++y)  ){  
       System.out.println("(  (x++  ==  y)  ||  (z  ==  ++y)  )  ?  true");;                                            t
   }  else  {                                                                                                           p
       System.out.println("(  (x++  ==  y)  ||  (z  ==  ++y)  )  ?  false");;  
   }  
                                                                                                                        :
   //Resultado:  false                                                                                                  /
                                                                                                                        /
   x  =  0;;  
   if  (  (x++  ==  ++x)  )  {                                                                                          g
       System.out.println("(  (x++  ==  ++x)  )  ?  true");;                                                            u
   }  else  {  
       System.out.println("(  (x++  ==  ++x)  )  ?  false");;                                                           s
   }                                                                                                                    t
   //Resultado:  false  
     
                                                                                                                        a
   x  =  0;;                                                                                                            v
   if  (  (++x  ==  x++)  )  {                                                                                          o
       System.out.println("(  (++x  ==  x++)  )  ?  true");;  
   }  else  {                                                                                                           a
       System.out.println("(  (++x  ==  x++)  )  ?  false");;                                                           l
   }  
   //Resultado:  true                                                                                                   b
                                                                                                                        e
   x  =  0;;y  =  1;;z  =  2;;  
   if  (  (-­-­z  >  y)  &&  (x  ==  z)  )  {  
                                                                                                                        r
       System.out.println("(  (-­-­z  >  y)  &&  (++x  <  z)  )  ?  true");;                                            o
   }  else  {                                                                                                           l
       System.out.println("(  (-­-­z  >  y)  &&  (++x  <  z)  )  ?  false");;  
   }                                                                                                                    a
   //Resultado:  false                                                                                                  .
     
   x  =  2;;y  =  1;;z  =  2;;                                                                                          b
   if  (  (-­-­z  >  y)  &&  (x  >  z)  )  {                                                                            l
       System.out.println("(  (-­-­z  >  y)  &&  (x  >  z)  )  ?  true");;  
   }  else  {  
                                                                                                                        o
       System.out.println("(  (-­-­z  >  y)  &&  (x  >  z)  )  ?  false");;                                             g
   }                                                                                                                    s
   //Resultado:  false  
                                                                                                                        p
     
                                                                                                                        o
Veamos  a  fondo  uno  por  uno:  
                                                                                                                        t
     x  =  0;;y  =  2;;z  =  2;;                                                                                        .
     if  (  (x++  ==  y)  ||  (z  ==  ++y)  ){  //...  
                                                                                                                        c
     (  (0  ==  2)  ||  (2  ==  3)  )  //false  ||  false                                                               o
                                                                                                                        m  
     x  =  0;;  
     if  (  (x++  ==  ++x)  )  {  //...  
       
     (  (0  ==  1)  )  //false  
  
  
  
  




  
9          Java  World     Capítulo  4  
              




h                x  =  0;;  
                 if  (  (++x  ==  x++)  )  {  //...  
t
                   
t                (  (1  ==  1)  )  //true  
p
:                x  =  2;;y  =  1;;z  =  2;;  
/                if  (  (-­-­z  >  y)  &&  (x  >  z)  )  {  //...  
                   
/                (  (1  >  1)  &&  (2  >  1)  )  )  //false  &&  true  
v
              
a             
l           Operador  condicional  
o
            Este  operador  requiere  tres  términos,  y  es  utilizado  para  la  asignación  de  valores  a  una  variable.  
r
            Su  funcionamiento  es  similar  al  de  un  if,  verifica  una  condición,  y  si  esta  es  true  asigna  un  valor,  caso  contrario  asigna  la  otra.  
c           Ejemplo  de  la  sintaxis:  
r
                 variable  =  (expresion  booleana)  ?  valor  a  asignar  si  la  condicion  fue  true  :  valor  a  
e                asignar  si  la  condicion  fue  false;;  
a                  
                 int  x;;  
t                x  =  (  true  )    ?  1  :  2;;    //x  ahora  contiene  el  valor  1  
i                x  =  (  false  )  ?  1  :  2;;    //x  ahora  contiene  el  valor  2  
v
o
.                                       Hay  que  recordar  que  los  operadores  lógicos   solo   funcionan  con  valores  de  tipo   boolean,  salvo  aquellos  
b                                       que  se  utilizan  a  nivel  de  bits.  
                                          
l             
o                                                        
g
s
p
o
t
.
c
o
m  




              
Java  World     Capítulo  4       10  
  




Operadores  lógicos                                                               
                                                                                                                                                                         h
Los  operadores  lógicos  necesarios  para  el  examen  son:  &,  |,  ^,  ¡,  &&  y  ||.  
                                                                                                                                                                         t
Operadores  lógicos  sobre  bits  (no  entra  en  el  examen)                                                                                                            t
Los  siguientes  operadores  &,  |  y  ^  pueden  utilizarse  en  diferentes  situaciones,  una  de  ellas  es  para  comparación  a  nivel  de  bits.  Estos            p
fueron  incluidos  en  versiones  de  examenes  previas,  pero  para  nuestra  versión,  no  son  necesarios.                                                            :
                                                                                                                                                                         /
     byte  b01  =  5  &  15;;  //Compuerta  AND                                                                                                                          /
     /*  
             0  0  1  0  1      -­  5  
                                                                                                                                                                         g
             0  1  1  1  1      -­  15                                                                                                                                   u
             -­-­-­-­-­-­-­-­-­-­                                                                                                                                        s
             0  0  1  0  1      -­  5  
     */                                                                                                                                                                  t
                                                                                                                                                                         a
     byte  b02  =  3  |  8;;  //Compuerta  OR  
     /*                                                                                                                                                                  v
             0  0  0  1  1      -­  3                                                                                                                                    o
             0  1  0  0  0      -­  8  
             -­-­-­-­-­-­-­-­-­-­  
                                                                                                                                                                         a
             0  1  0  1  1      -­  11                                                                                                                                   l
     */                                                                                                                                                                  b
       
     byte  b03  =  29  ^  11;;  //Compuerta  XOR                                                                                                                         e
     /*                                                                                                                                                                  r
             1  1  1  0  1      -­  29  
             0  1  0  1  1      -­  11                                                                                                                                   o
             -­-­-­-­-­-­-­-­-­-­                                                                                                                                        l
             1  0  1  1  0      -­  21  
     */  
                                                                                                                                                                         a
                                                                                                                                                                         .
  
                                                                                                                                                                         b
                                                                                                                                                                         l
  
                                                                                                                                                                         o
Si  deseas  comprender  un  poco  más  acerca  del  funcionamiento  de  las  operaciones  lógicas  con  compuertas  en  código  binario,  puedes  
buscar  en  internet  por  el  nombre  de  las  mismas  (AND,  OR,  XOR).  
                                                                                                                                                                         g
                                                                                                                                                                         s
                                                                                                                                                                         p
                                                                                                                                                                         o
                                                                                                                                                                         t
                                                                                                                                                                         .
                                                                                                                                                                         c
                                                                                                                                                                         o
                                                                                                                                                                         m  




  
11          Java  World     Capítulo  4  
           




         Operadores  lógicos  de  circuito  corto  
h        Estos  son:  
t
t                     &&        AND  de  circuito  corto  
p                     ||        OR  de  circuito  corto  
:        Pero,  ¿por  qué  de  circuito  corto?  
/        Se  denominan  de  esta  manera  porque  cuando  se  evalua  una  expresión,  si  la  primer  evaluación  hace  que  la  condición  no  se  cumpla  
/        no  se  evalua  la  siguiente.  
v        Veamos  algunos  ejemplos:  
a           class  Valores  {  
l               public  int  getValor1()  {  
                    System.out.println("Devuelvo  el  valor  1");;  
o                   return  1;;  
r               }  
                  
c               public  int  getValor2()  {  
r                   System.out.println("Devuelvo  el  valor  2");;  
e                   return  2;;  
                }  
a           }  
t             
            public  class  ejemploOperadoresLogicosCircuitoCorto  {  
i               static  public  void  main(String[]  args)  {  
v                   Valores  valores  =  new  Valores();;  
                      
o                   if  (  (valores.getValor1()  ==  2)  &&  (valores.getValor1()  ==  1)  )  {  
.                       System.out.println("(  (valores.getValor1()  ==  2)  &&  (valores.getValor1()  ==  
b           1)  )  ?  true");;  
                    }  else  {  
l                       System.out.println("(  (valores.getValor1()  ==  2)  &&  (valores.getValor1()  ==  
o           1)  )  ?  false");;  
                    }  
g                     
s                   if  (  (valores.getValor2()  >  0)  ||  (valores.getValor2()  !=  5)  )  {  
                        System.out.println("(  (valores.getValor2()  >  0)  ||  (valores.getValor2()  !=  
p           5)  )  ?  true");;  
o                   }  else  {  
t                       System.out.println("(  (valores.getValor2()  >  0)  ||  (valores.getValor2()  !=  
            5)  )  ?  false");;  
.                   }  
c               }  
            }  
o
              
m  
                                    Devuelvo  el  valor  1  
                                    (  (valores.getValor1()  ==  2)  &&  (valores.getValor1()  ==  1)  )  ?  false  
                                    Devuelvo  el  valor  2  
                                    (  (valores.getValor2()  >  0)  ||  (valores.getValor2()  !=  5)  )  ?  true  
                                      
           
         Como  se  puede  apreciar,  en  los  dos  casos,  al  evaluar  la  primer  condición  no  es  necesario  evaluar  la   segunda,  de  manera  que  esta  
         última,  directamente  es  obviada.  
           
                                                       



           
Java  World     Capítulo  4         12  
  




Operadores  lógicos  de  circuito  completo  
                                                                                                                                                                                  h
Estos  son:  
                                                                                                                                                                                  t
           |                                                                                                                                                                      t
           &                                                                                                                                                                      p
                                                                                                                                                                                  :
Al   contrario   de   los   de   circuito   corto,   estos   siempre   evaluan   todas   las   condiciones,   por   más   que   ya   se   conozca   de   antemano   el  
resultado  de  la  operación  lógica  (estos  operadores  son  ineficientes).                                                                                                     /
Veamos  el  ejemplo  con  los  operadores  de  circuito  completo:                                                                                                                /
                                                                                                                                                                                  g
                                                                                                                                                                                  u
A  diferencia  de  los  operadores  lógicos  de  circuito  corto,  vemos  como  se  verifica  la  segunda  condición.                                                             s
     class  Valores  {                                                                                                                                                            t
         public  int  getValor1()  {  
                                                                                                                                                                                  a
             System.out.println("Devuelvo  el  valor  1");;  
             return  1;;                                                                                                                                                          v
         }                                                                                                                                                                        o
           
         public  int  getValor2()  {                                                                                                                                              a
             System.out.println("Devuelvo  el  valor  2");;                                                                                                                       l
             return  2;;  
         }                                                                                                                                                                        b
     }                                                                                                                                                                            e
                                                                                                                                                                                  r
     public  class  ejemploOperadoresLogicosCircuitoCompleto  {  
         static  public  void  main(String[]  args)  {                                                                                                                            o
             Valores  valores  =  new  Valores();;                                                                                                                                l
               
             if  (  (valores.getValor1()  ==  2)  &  (valores.getValor1()  ==  1)  )  {                                                                                           a
                 System.out.println("(  (valores.getValor1()  ==  2)  &  (valores.getValor1()  ==  1)                                                                             .
     )  ?  true");;  
             }  else  {                                                                                                                                                           b
                 System.out.println("(  (valores.getValor1()  ==  2)  &  (valores.getValor1()  ==  1)                                                                             l
     )  ?  false");;                                                                                                                                                              o
             }  
                                                                                                                                                                                  g
             if  (  (valores.getValor2()  >  0)  |  (valores.getValor2()  !=  5)  )  {                                                                                            s
                 System.out.println("(  (valores.getValor2()  >  0)  |  (valores.getValor2()  !=  5)  )  
     ?  true");;                                                                                                                                                                  p
             }  else  {                                                                                                                                                           o
                 System.out.println("(  (valores.getValor2()  >  0)  |  (valores.getValor2()  !=  5)  )  
     ?  false");;  
                                                                                                                                                                                  t
             }                                                                                                                                                                    .
         }                                                                                                                                                                        c
     }  
                                                                                                                                                                                  o
                                              
                                                                                                                                                                                  m  
                       Devuelvo  el  valor  1  
                       Devuelvo  el  valor  1  
                       (  (valores.getValor1()  ==  2)  &  (valores.getValor1()  ==  1)  )  ?  false  
                       Devuelvo  el  valor  2  
                       Devuelvo  el  valor  2  
                       (  (valores.getValor2()  >  0)  |  (valores.getValor2()  !=  5)  )  ?  true  




  
13               Java  World     Capítulo  4  
              




                                                                             Operadores  lógicos  ^  y  ¡  
   h                                                                         Estos  operadores  cumplen  la  unción  de  las  siguientes  compuertas:  
   t
   t                                                                                 ¡   Not  
   p                                                                                 ^   Xor  
   :                                                                         Not  
   /
                                                                             El  operador  Not  solo  toma  un  término,  y  el  resultado  refleja  el  valor  de  
   /
                                                                             entrada  invertido.  
   v
   a                                                                         Xor  
   l
                        Lo  que  se  viene  
                                                                             El  operador  Xor  evalua  dos  términos.  Si  estos  son  diferentes,  el  resultado  
   o                    En   la   proxima   entrega   estaremos              es  true,  de  lo  contrario  es  false.  
   r                    adentrandonos   en   las   sentencia   para            
   c                    control  de  flujo  del  programa.  
                          
   r
                                                         
   e                    Veremos   las   sentencias   de   condición   y  
   a                    bucles.  
   t                      
   i                    Nos   adentraremos   en   el   mundo   de   la  
   v                    excepciones   para   saber   como   tratar   los  
   o                    errores  en  Java.  
   .                      
   b                    Veremos  las  afirmaciones,  un  mecanismo  
   l                    que   Java   nos   otorga   para   verificar  
   o                    aquellas   secciones   de   código   que  
   g
                        estamos   seguros   no   deberían   de   fallar  
   s
                        jamás.  
   p
                          
   o
                        Esto   y   mucho   más,   en   el   próximo  
   t
                        JavaWorld.  
   .
                   
   c
   o
   m  




              
Java  World     Capítulo  4         14  
  




                                                                                                                                                                                  h
                                                                                                                                                                                  t
                                                                                                                               
                                                                                                                                                                                  t
                                                                                                                                                                                  p
¿Que  es  JavaWorld  para  Valor  Creativo?                                                                                                                                       :
                                                                                                                                                                                  /
Muchos   de   los   visitantes   de   Valor   Creativo   provienen   de   la   revista   digital   JavaWorld   de   Gustavo   Alberola   y   Matias   Álvarez.  
                                                                                                                                                                                  /
Recientemente  se  agrego  a  la  revista  una  nueva  sección  relacionado  con  la  importancia  de  la  creatividad  en  la  industria  del  Software.  
                                                                                                                                                                                  g
                                        JavaWorld  es  más  bien  un  resumen,  para  gente  de  habla  hispana,  de  un  libro  de  más  de  900                                 u
                                        páginas  totalmente  en  ingles  (por  ello  serán  10  ediciones).  El  libro  habla  de  programación  en                               s
                                        lenguaje  Java  y  esta  orientado  a  programadores.                                                                                     t
                                        Valor   Creativo   se   unió   a   la   iniciativa   y   su   objetivo   es   transformar   este   resumen   en   un   revista            a
                                        creando,   con   el   paso   del   tiempo,   múltiples   secciones   relacionado   con   Java   y   el   mundo   de   la  
                                                                                                                                                                                  v
                                        Informática.  
                                          
                                                                                                                                                                                  o
                                        Este  proyecto  llevo  muchas  horas  de  planificación  antes  del  lanzamiento  de  la  primera  edición,  con                          a
                                        un  simple  objetivo  realizar  la  revista  lo  mejor  posible  con  los  recursos  disponibles.                                         l
                                                                                                                                                                                  b
                                        Decisiones                                                                                                                                e
                                          
                                                                                                                                                                                  r
Cuando  empezamos  a  diagramar  la  revista  surgio  el  problema  de  que  los  párrafos  de  doble  columna  eran  incómodos  a  la  vista  por  la  
                                                                                                                                                                                  o
información  que  manejaban,  de  ahí  nuestra  primer  decisión:  realizar  una  Revista  tipo  Informe.  
La  segunda  decisión  era  como  llamarla  había  que  darle  un  nombre  y  un  logo,  que  más  simple  que  el  lema  Java  para  todo  el  mundo,                            l
de  aquí  nació  el  mundo  dentro  de  una  taza.                                                                                                                                a
                                                                                                                                                                                  .
                                                                                                                                                                                  b
                                                                                                                                                                                  l
                                                                                                                                                                                  o
                                                                                                                                                                                  g
                                                                                                                                                                                  s
                                                                                                                                                                                  p
                                                                                                                                                                                  o
                                                                                                                                                                                  t
                                                                                                                                                                                  .
                                                                                                                                                                                  c
                                                                                                                                                                                  o
                                                                                                                                                                                  m  
  
La  tercera  decisión  fue  como  proponer  la  revista  que  las  personas  sean  atraídas  a  el,  y  nacen  los  lemas  ¿Querés  ser  un  SCJP?  en  el  
portada,   ¿Tenes   lo   que   se   necesita   para   serlo?   en   la   contratapa   -­‐en   un   comentario   personal   cuando   se   pensó   en   estos   lemas  
simplemente   nacieron   por   mi   incapacidad   de   entender   los   temas   de   JavaWorld,   la   verdad   es   que   no   entendía   nada   y   por   ello   el  
desafío-­‐.  
La  cuarta  decisión  fue  muy  importante  debido  a  que  la  revista  era  gratuita  y  los  costos  de  diseño  son  elevados,  se  decidió  realizar  
una  plantilla  única  y  mantenerla  durante  todas  las  ediciones.  Fue  muy  difícil  esta  decisión  porque  si  queremos  algo  prolijo  tenemos  
que  respetar  lo  anterior  y  la  idea  es  que  las  revistas  sean  coleccionables,  por  ello  si  ahora  no  nos  gusta  la  letra,  por  ejemplo,  será  un  
error  que  no  se  debe  corregir.  



  
15          Java  World     Capítulo  4  
           




         Resultados  
h
t        A  partir  de  todas  nuestras  decisiones  se  lanzo  la  primera  edición.  
t          
         Nadie  se  esperaba  el  éxito  de  la  revista  tan  pronto,  y  con  mente  fría  se  lanzo  el  segundo  capitulo  con  mayor  aceptación.  A  partir  de  
p
         la  tercera  edición  se  anexa  la  sección  Valor  Creativo  con  el  fin  de  darles  a  los  lectores  herramientas  para  que  agreguen  valor  a  sus  
:        trabajos  intangibles.  
/          
/        Estamos  muy  contentos  con  todos  los  comentarios  que  nos  dejan  los  usuarios,  y  ello  nos  motiva  aún  más  a  seguir  adelante.  Es  un  
v        esfuerzo  en  conjunto  muy  grande  y  que  la  gente  lo  valore  y  reconozco  es  nuestra  recompensa.  
a          
         Seguiremos  trabajando  por  más  ediciones,  y  cualquier  adhesión,  apoyo  o  sugerencia  es  bien  recibida.    
l
           
o
         Saludos  a  todos  y  feliz  año  nuevo.  
r          
c          
r          
e          
a          
           
t
           
i          
v          
o          
.          
b          
l          
           
o
           
g          
s          
p          
o          
t          
           
.
           
c
           
o          
m          




                                                    




           
 




  

Contenu connexe

Tendances

Tendances (16)

Creacion2.
Creacion2.Creacion2.
Creacion2.
 
Asignaciones en java
Asignaciones en javaAsignaciones en java
Asignaciones en java
 
Clase iv
Clase ivClase iv
Clase iv
 
Logica tipos de datos operadores
Logica tipos de datos operadoresLogica tipos de datos operadores
Logica tipos de datos operadores
 
Funciones trigo uni
Funciones trigo uniFunciones trigo uni
Funciones trigo uni
 
Prontuario2010
Prontuario2010Prontuario2010
Prontuario2010
 
Polimorfismo
PolimorfismoPolimorfismo
Polimorfismo
 
Estudio del espín mediante la notación de Dirac
Estudio del espín mediante la notación de DiracEstudio del espín mediante la notación de Dirac
Estudio del espín mediante la notación de Dirac
 
Revista digital calculo 2
Revista digital calculo 2Revista digital calculo 2
Revista digital calculo 2
 
Tema 2 mario
Tema 2 marioTema 2 mario
Tema 2 mario
 
Programación básica (pseudocodigos)
Programación básica (pseudocodigos)Programación básica (pseudocodigos)
Programación básica (pseudocodigos)
 
Estructuras control java-
Estructuras control java-Estructuras control java-
Estructuras control java-
 
Seccion Fundamentos SCJP
Seccion Fundamentos SCJPSeccion Fundamentos SCJP
Seccion Fundamentos SCJP
 
Transp objetos
Transp objetosTransp objetos
Transp objetos
 
Ejemplo analisis-sistema
Ejemplo analisis-sistemaEjemplo analisis-sistema
Ejemplo analisis-sistema
 
Presentacion funcions
Presentacion funcionsPresentacion funcions
Presentacion funcions
 

En vedette (20)

Modulo 4 mapas
Modulo 4 mapasModulo 4 mapas
Modulo 4 mapas
 
F iso20k v1
F iso20k v1F iso20k v1
F iso20k v1
 
Las 7 cabritas cristy
Las 7 cabritas cristyLas 7 cabritas cristy
Las 7 cabritas cristy
 
Magnetismo
MagnetismoMagnetismo
Magnetismo
 
Estrategias de seguimiento y acompañamiento de la tutoria
Estrategias de seguimiento y acompañamiento de la tutoriaEstrategias de seguimiento y acompañamiento de la tutoria
Estrategias de seguimiento y acompañamiento de la tutoria
 
Planificacion clase 6 terminada
Planificacion clase 6 terminadaPlanificacion clase 6 terminada
Planificacion clase 6 terminada
 
Sala constitucional inadmisible manuel enrique reyes peña
Sala constitucional  inadmisible  manuel enrique reyes peñaSala constitucional  inadmisible  manuel enrique reyes peña
Sala constitucional inadmisible manuel enrique reyes peña
 
Nuestros servicios realiza sep2013
Nuestros servicios realiza sep2013Nuestros servicios realiza sep2013
Nuestros servicios realiza sep2013
 
Día del patrimonio cultural
Día del patrimonio culturalDía del patrimonio cultural
Día del patrimonio cultural
 
Planificacion clase 3 terminada
Planificacion clase 3 terminadaPlanificacion clase 3 terminada
Planificacion clase 3 terminada
 
Guion clase 3 terminada
Guion clase 3 terminadaGuion clase 3 terminada
Guion clase 3 terminada
 
Capitulo 5
Capitulo 5Capitulo 5
Capitulo 5
 
Blog mami 2012
Blog mami 2012Blog mami 2012
Blog mami 2012
 
Magnetismo
MagnetismoMagnetismo
Magnetismo
 
Clase9 threads
Clase9 threadsClase9 threads
Clase9 threads
 
Magnetismo
MagnetismoMagnetismo
Magnetismo
 
Planificacion clase 2 terminada
Planificacion clase 2 terminadaPlanificacion clase 2 terminada
Planificacion clase 2 terminada
 
Globo cristy
Globo cristyGlobo cristy
Globo cristy
 
Agua en aves
Agua en avesAgua en aves
Agua en aves
 
Verbos Tres
Verbos TresVerbos Tres
Verbos Tres
 

Similaire à Capitulo 4

Similaire à Capitulo 4 (20)

JavaWorld - SCJP - Capitulo 4
JavaWorld - SCJP - Capitulo 4JavaWorld - SCJP - Capitulo 4
JavaWorld - SCJP - Capitulo 4
 
Elementos del lenguaje java
Elementos del lenguaje javaElementos del lenguaje java
Elementos del lenguaje java
 
Actividad N° 7 - Unidad 4
Actividad N° 7 - Unidad 4 Actividad N° 7 - Unidad 4
Actividad N° 7 - Unidad 4
 
Ap n° 7 rios,m. fernanda
Ap n° 7 rios,m. fernandaAp n° 7 rios,m. fernanda
Ap n° 7 rios,m. fernanda
 
INTRODUCCIÓN ADSI - PARTE 2
INTRODUCCIÓN ADSI - PARTE 2INTRODUCCIÓN ADSI - PARTE 2
INTRODUCCIÓN ADSI - PARTE 2
 
Operadores Matemáticos
Operadores MatemáticosOperadores Matemáticos
Operadores Matemáticos
 
Leccion 2 Java
Leccion 2 JavaLeccion 2 Java
Leccion 2 Java
 
1390230107 194 _operadores
1390230107 194 _operadores1390230107 194 _operadores
1390230107 194 _operadores
 
Introduccion c
Introduccion cIntroduccion c
Introduccion c
 
Tipo de operadores
Tipo de operadoresTipo de operadores
Tipo de operadores
 
Tipo de operadores
Tipo de operadoresTipo de operadores
Tipo de operadores
 
Tipo de operadores
Tipo de operadoresTipo de operadores
Tipo de operadores
 
Tipo de operadores
Tipo de operadoresTipo de operadores
Tipo de operadores
 
Tipo de operadores
Tipo de operadoresTipo de operadores
Tipo de operadores
 
Tipo de operadores
Tipo de operadoresTipo de operadores
Tipo de operadores
 
Tipo de operadores..
Tipo de operadores..Tipo de operadores..
Tipo de operadores..
 
Tipo de operadores
Tipo de operadoresTipo de operadores
Tipo de operadores
 
Programacion basica
Programacion basicaProgramacion basica
Programacion basica
 
P web(21,'elementos de js')
P web(21,'elementos de js')P web(21,'elementos de js')
P web(21,'elementos de js')
 
Fraccionarios1
Fraccionarios1Fraccionarios1
Fraccionarios1
 

Plus de jorg_marq

Clase8 innerclasses
Clase8 innerclassesClase8 innerclasses
Clase8 innerclassesjorg_marq
 
Clase7 generics
Clase7 genericsClase7 generics
Clase7 genericsjorg_marq
 
Clase6 collections
Clase6 collectionsClase6 collections
Clase6 collectionsjorg_marq
 
Clase5 controldeflujo
Clase5 controldeflujoClase5 controldeflujo
Clase5 controldeflujojorg_marq
 
Clase4 operadores
Clase4 operadoresClase4 operadores
Clase4 operadoresjorg_marq
 
Clase3 asignaciones
Clase3 asignacionesClase3 asignaciones
Clase3 asignacionesjorg_marq
 
Clase2 ejemplosdeenumpoo
Clase2 ejemplosdeenumpooClase2 ejemplosdeenumpoo
Clase2 ejemplosdeenumpoojorg_marq
 
Clase1 introduccinalcurso
Clase1 introduccinalcursoClase1 introduccinalcurso
Clase1 introduccinalcursojorg_marq
 
Capitulos 8 9-10
Capitulos 8 9-10Capitulos 8 9-10
Capitulos 8 9-10jorg_marq
 
Clase10 stringsio
Clase10 stringsioClase10 stringsio
Clase10 stringsiojorg_marq
 
Whither cman
Whither cmanWhither cman
Whither cmanjorg_marq
 
Ex300 objectives
Ex300   objectivesEx300   objectives
Ex300 objectivesjorg_marq
 
Ex200 objectives
Ex200   objectivesEx200   objectives
Ex200 objectivesjorg_marq
 

Plus de jorg_marq (18)

Clase8 innerclasses
Clase8 innerclassesClase8 innerclasses
Clase8 innerclasses
 
Clase7 generics
Clase7 genericsClase7 generics
Clase7 generics
 
Clase6 collections
Clase6 collectionsClase6 collections
Clase6 collections
 
Clase5 controldeflujo
Clase5 controldeflujoClase5 controldeflujo
Clase5 controldeflujo
 
Clase4 operadores
Clase4 operadoresClase4 operadores
Clase4 operadores
 
Clase3 asignaciones
Clase3 asignacionesClase3 asignaciones
Clase3 asignaciones
 
Clase2 ejemplosdeenumpoo
Clase2 ejemplosdeenumpooClase2 ejemplosdeenumpoo
Clase2 ejemplosdeenumpoo
 
Clase1 introduccinalcurso
Clase1 introduccinalcursoClase1 introduccinalcurso
Clase1 introduccinalcurso
 
Capitulos 8 9-10
Capitulos 8 9-10Capitulos 8 9-10
Capitulos 8 9-10
 
Capitulo 7
Capitulo 7Capitulo 7
Capitulo 7
 
Capitulo 6
Capitulo 6Capitulo 6
Capitulo 6
 
Capitulo 3
Capitulo 3Capitulo 3
Capitulo 3
 
Capitulo 2
Capitulo 2Capitulo 2
Capitulo 2
 
Capitulo 1
Capitulo 1Capitulo 1
Capitulo 1
 
Clase10 stringsio
Clase10 stringsioClase10 stringsio
Clase10 stringsio
 
Whither cman
Whither cmanWhither cman
Whither cman
 
Ex300 objectives
Ex300   objectivesEx300   objectives
Ex300 objectives
 
Ex200 objectives
Ex200   objectivesEx200   objectives
Ex200 objectives
 

Capitulo 4

  • 1.    
  • 2. Java  World    Capítulo  4   2     Operadores   h Los  operadores  son  aquellos  elementos  que  producen  un  resultado  realizando  operaciones  con  uno  o  varios  operandos  (estos  son   t los  elementos  que  se  encuentran  a  la  izquierda  y  derecha  del  operador).   t Operadores  de  asignación   p El  operador  de  asignación  es  el  =.  Algunos  conceptos  a  tener  en  cuenta:   : / Cuando   se   le   asigna   un   valor   a   una   primitiva,   el   tamaño   si   importa.   (Es   importante   saber   cuando   ocurrirá   un   casteo   / implícito,  explícito,  y  cuando  se  trunca  el  valor).   Una  variable  de  referencia  no  es  un  objeto,  es  una  manera  de  obtener  el  objeto  al  que  hace  referencia.   g Cuando  se  asigna  un  valor  a  una  referencia,  el  tipo  importa.  (Es  importante  saber  las  reglas  para  superclases,  subclases,  y   u arrays).   s t Operadores  de  asignación  compuestos   a Actualmente,  existen  alrededor  de  11  operadores  de  asignación  compuestos,  pero  en  el  examen  solo  aparecerán  los  4  más  comunes   v (+=,  -­‐=,  *=,  /=)  se  encuentran  en  el  examen.   o Pero,  que  es  un  operador  de  asignación  compuesto?   a Simplemente,  es  una  manera  abreviada  de  realizar  una  operación  con  el  valor  de  la  variable  en  donde  se  asigna  el  resultado  con  otro   l b int  a  =  2;;   a  =  a  *  3;;   e   r //Diferente  sintaxis,  mismo  significado.   int  a  =  2;;   o a  *=  3;;   l conjunto.  Veamos  un  ejemplo:   a . int  a  =  2;;   int  b  =  3;;   b int  c  =  5;;   l   a  =  a  *  (  b  +  c  );;   o   g //Diferente  sintaxis,  mismo  significado.   int  a  =  2;;   s int  b  =  3;;   p int  c  =  5;;   o a  *=  b  +  c;;   t   A   simple   vista,   parece   sencillo,   pero   no   hay   que   confundirse.   El   operador   de   asignación   compuesto   se   refleja   en   realizar   una   . opeación  con  el  resultado  de  todo  lo  que  se  encuentra  luego  del  igual.  Veamos  un  ejemplo:   c   o mpuesto   m   realiza  los  siguientes  pasos:   1. Realiza  todas  las  operaciones  contenidas  a  la  derecha  del  operador  de  asignación  (=).   2. Realiza  la  operación  compuesta  (Multiplicar,  Dividir,  Sumar,  Restar,  ...).   3. Asigna  el  valor  de  la  operación  a  la  variable.   Operadores  relacionales   El  examen  cubre  sies  operadores  relaciones  (<,  <=,  >,  >=,  ==    y  ¡=).     Los  operadores  relacionales  siempre  producen  como  resultado  un  valor  de  tipo  boolean.   Los  operadures  se  traducen  como:    
  • 3. 3   Java  World    Capítulo  4     <   menor  que   h <=   menor  o  igual  que   t >   mayor  que   t >=   mayor  o  igual  que   ==   igual  que   p ¡=   distinto  de   : / Es  muy  común  ver  en  una  comparación  un  operador  =.  Esto  es  una  asignación,  no  un  operador  relacional.   / Como   dijimos,   estos   tipos   de   operadores   devuelven   un   valor   boolean,   asi   que   pueden   ser   utilizados   en   v sentencias  condicionales  (if,  else,  while),  como  ser  asignados  a  una  variable.   a Veamos  algunos  ejemplos:   l o int  x  =  7;;   r if  (  x  <  9  )  {   c    //Codigo  ...   }  else  {   r    //Codigo  ...   e }   //Entra  en  el  if   a   t boolean  a  =  100  >  90;;   if  (  a  )  {   i    //Codigo  ...   v }  else  {   o    //Codigo  ...   }   . //Entra  en  el  else   b     l   o Ahora,  veamos  un  ejemplo  un  poco  más  complicado:   g s int  x  =  12;;   if  (  (x  =  2  *  3  )  ==  6  )  {   p    //Codigo  ...   o }  else  {      //Codigo  ...   t }   . En  este  código,  se  ejecuta  el  if.   c Los  pasos  que  realizó  el  programa  fueron:   o 1. Realizar  la  ope   2. Asignar  el  resultado  de  la  operación  anterior  a  x.   m   3. Comparar  el  valor  de  x  con  el  literal  6.   Vuelvo  a  recalcar  la  importancia  de  entender  la  diferencia  entre  =  e  ==,  y  saber  identificar  cuando  podría  haber  un  posible  error.   Quiero  mostrar  otro  ejemplo,  en  donde  se  aprecia  aun  más  la  importancia  de  detectar  las  diferencias  entre  dichos  operadores:   boolean  x  =  false;;     if  (  x  =  true  )  {      //Codigo  ...   }  else  {      //Codigo  ...   }     El  resultado  de  el  código  anterior  ejecuta  el  código  dentro  del  if.   ¿Cómo?  Simple:    
  • 4. Java  World    Capítulo  4   4     1. x  es  false.   2. Dentro  de  la  condición,  se  asigna  true  a  x.   h 3. Se  evalua  x  (este  ahora  vale  true).   t Hay  que  recordar  que  una  sentencia  de  condición,  en  Java,  solo  evalua  los  tipos  boolean.  Es  válido  asignar   t un  valor  a  una  variable  dentro  de  una  condición,  pero  si  el  tipo  de  dato  almacenado  no  es  de  tipo  boolean,   p : compilación.   / No  es  lo  mismo  que:   / boolean  x  =  false;;   g   u if  (  x  ==  true  )  {   s    //Codigo  ...   }  else  {   t    //Codigo  ...   a }   v   o En  este  código  se  ejecuta  el  else.   También  es  posible  realizar  una  comparación  como:   a char  a  =  7;;   l if  (  a  <  'g'  )  {   b    //Codigo  ...   }  else  if  (  a  <  16  )  {   e    //Codigo  ...   r }   o   l Cuando  se  compara  un  valor  de  tipo  char,  se  utiliza  el  valor  unicode  del  caracter.   a Operadores  de  igualdad   . Los  operadores  de  igualdad  son:   b l ==   Igual  que   ¡=   Distinto  de   o g Estos  operadores   solo  comparan  el  patrón  de  bits.  Esto   es  importante  dado  que  en  una   variable  de  tipo  referencia,  el  valor   es  la   s posición  de  memoria  donde  se  encuentra  el  objeto.   p Igualdad  en  primitivas   o Algunos  ejemplos:   t . 'a'  ==  'a'       //TRUE   'a'  ==  'b'         //FALSE   c 7  !=  9       //TRUE   o 1.0  ==  1L       //TRUE  (se  realiza  un  casteo  implícito)   true  ==  false     //FALSE   m          
  • 5. 5   Java  World    Capítulo  4     Igualdad  en  variables  de  tipo  referencia   h Cuando   se   compara   una   referencia   con   los   operadores   de   igualdad,   solo   se   compara   el   objeto   al   que   referencian   (el   valor   de   la   t variable  es  la  dirección  de  memoria  en  donde  se  encuentra  el  objeto  realmente).   t class  Simple  {   p    int  x;;   :    Simple(int  x){  this.x  =  x;;  }   }   /   / public  static  void  main(String[]  args)  {      Simple  obj_1  =  new  Simple(16);;   v    Simple  obj_2  =  new  Simple(16);;   a    Simple  obj_3  =  obj_1;;   l          System.out.println("Objeto  1  es  igual  a  objeto  2?    "  +  (obj_1  ==  obj_2));;   o    System.out.println("Objeto  1  es  igual  a  objeto  3?    "  +  (obj_1  ==  obj_3));;   r }   c   r e Objeto  1  es  igual  a  objeto  2?    False   a Objeto  1  es  igual  a  objeto  3?    True   t i A  pesar  de  que  el  único  atributo  que  tiene  el  objeto  Simple  es  igual  en  obj_1  como  en  obj_2,  su  comparación  de  igualdad  da  false.   Vamos  a  hacerlo  un  poco  más  gráfico  para  dejar  este  importante  concepto  bien  en  claro.   v o Obj_1   Obj_2   Obj_3   . Variables   0x0000F0   0x0000A9   0x0000F0   b l o g s Memoria   16   16   p o 0x0000F0   0x0000A9   t .   c En   el   gráfico   podemos   apreciar   facilmente   el   porque   la   comparación   entre   obj_1   y   obj_2   fallo,   cuando   entre   obj_1   y   obj_3   fue   exitosa.  Más  alla  de  que  obj_1  y  obj_2  contentan  su  único  atributo  con  el  mismo  valor.   o m   Igualdad  en  enumeradores   Se  aplica  la  política  de  variables  de  referencia.  Al  final,  un  enumerador  es  un  objeto.   Comparación  con  instanceof   El  operador  instanceof  devuelve  un  valor  de  tipo  boolean,  que  indica  si  el  objeto  Es-­‐Un  objeto  del  tipo  especificado  (o  subtipo).   También  aplica  a  interfaces,  cuando  el  objeto  Implementa  una  interfaz  especificada  (o  alguna  de  sus  superclases  la  implementa).   El   operador   instanceof   solo   funciona   para   comparar   tipos   que   se   encuentren   en   el   mismo   árbol   de   herencia.        
  • 6. Java  World    Capítulo  4   6     Veamos  un  ejemplo  de  esto:   h interface  Dibujable  {}   class  Triangulo  implements  Dibujable  {}   t class  Cuadrado  extends  Triangulo  {}   t class  Circulo  implements  Dibujable  {}   p   : Tipo   Se  puede  comparar  con   No  se  puede  comparar  con   / null   Cualquier  clase  o  interface   -­‐   / Dibujable   Dibujable    Object    Circulo    Triangulo    Cuadrado   -­‐   Circulo   Circulo    Dibujable    Object   Triangulo    Cuadrado   g Triangulo   Cuadrado    Triangulo    Dibujable    Object   Circulo   u Cuadrado   Cuadrado    Triangulo    Dibujable    Object   Circulo   s http://thechroniclesofbinary.googlecode.com/files/ejemploInstanceof.java   t Para  compilarlo:  Javac  -­‐g  ejemploInstanceof.java   a Para  ejecutarlo:  java  ejemploInstanceof   v Operadores  aritméticos   o a No  hay  mucho  que  decir  acerca  de  estos,  salvo  que  todos  los  utilizamos.   l El  operador  de  resto   b Cualdo  realizamos  una  operación  de  división,  existe  un  resto.  Este  valor  puede  ser  obtenido  a  partir  del  operador  %.   e r public  class  ejemploResto  {   o    static  public  void  main(String[]  arg)  {   l        System.out.println("9  dividido  2  es  "  +  (9  /  2)  +  ".  Y  el  resto  es  "  +  (9  %  2));;      }   a }   . Un  ejemplo  del  operador:   b l o 9  dividido  2  es  4.  Y  el  resto  es  1.   g s   p El  operador  de  concatenación   o t El  operador  +  también  puede  ser  utilizado  para  concatenar  cadenas  de  caracteres.   La   regla   para   saber   cuando   se   comporta   como   suma   y   cuando   como   concatenación   es   simple:   Si   alguno   de   los   dos   valores   es   un   . String,  el  +  funciona  como  concatenador.   c Algunos  ejemplos:   o System.out.println(67  +  45  +  9);;                                             //121   m   System.out.println(67  +  45  +  "  -­  valores"  +  67  +  45);;            //112    valores6745   System.out.println("hola"  +  "  "  +  "mundo");;               //hola  mundo            
  • 7. 7   Java  World    Capítulo  4     Operadores  de  incremento  y  decremento   h Estos  operadores  sirven  para  incrementar  o  decrementar  en  1  el  valor  de  cualquier  variable  numérica.   t http://thechroniclesofbinary.googlecode.com/files/ejemploOperadoresIncrementoDecremento.java   t Para  compilarlo:  Javac  -­‐g  ejemploOperadoresIncrementoDecremento.java   p Para  ejecutarlo:  java  ejemploOperadoresIncrementoDecremento   : En  el  ejemplo  se  puede  ver  como  el  operador  de  incremento  y  decremento  es  aplicado  a  todos  los  valores  de  tipo  numérico,  y  como   / funciona  el  de  preincremento  y  posincremento.   / v a Existe  una  gran  diferencia  entre  los  operadores  de  preincremento  y  posincremento.   l o   r Preincremento   ++variable   Antes   de   realizar   cualquier   acción,   el   valor   de   la   variable   es   incrementado   en   1.   Luego   c continúa  con  la  lógica.   r Posincremento   variable++   Primero  realiza  la  lógica,  y  al  finalizar  incrementa  el  valor  de  la  variable  en  1.   e a Veamos  un  ejemplo:   t int  x;;     i x  =  0;;   v System.out.println(x++  +  6);;   //6   o System.out.println(x);;     //7     . x  =  0;;   b System.out.println(++x  +  6);;   //7   System.out.println(x);;     //7   l   o Hay  que  tener  cuidado  en  codigos  de  condición  complejos,  veamos  algunos  ejemplos:   g http://thechroniclesofbinary.googlecode.com/files/ejemploIncrementoDecrementoCondicionales.java   s Para  compilarlo:  Javac  -­‐g  ejemploIncrementoDecrementoCondicionales.java   p Para  ejecutarlo:  java  ejemploIncrementoDecrementoCondicionales   o t . c o m    
  • 8. Java  World    Capítulo  4   8     int  x,  y,  z;;     h x  =  0;;y  =  2;;z  =  2;;   t if  (  (x++  ==  y)  ||  (z  ==  ++y)  ){      System.out.println("(  (x++  ==  y)  ||  (z  ==  ++y)  )  ?  true");;   t }  else  {   p    System.out.println("(  (x++  ==  y)  ||  (z  ==  ++y)  )  ?  false");;   }   : //Resultado:  false   /   / x  =  0;;   if  (  (x++  ==  ++x)  )  {   g    System.out.println("(  (x++  ==  ++x)  )  ?  true");;   u }  else  {      System.out.println("(  (x++  ==  ++x)  )  ?  false");;   s }   t //Resultado:  false     a x  =  0;;   v if  (  (++x  ==  x++)  )  {   o    System.out.println("(  (++x  ==  x++)  )  ?  true");;   }  else  {   a    System.out.println("(  (++x  ==  x++)  )  ?  false");;   l }   //Resultado:  true   b   e x  =  0;;y  =  1;;z  =  2;;   if  (  (-­-­z  >  y)  &&  (x  ==  z)  )  {   r    System.out.println("(  (-­-­z  >  y)  &&  (++x  <  z)  )  ?  true");;   o }  else  {   l    System.out.println("(  (-­-­z  >  y)  &&  (++x  <  z)  )  ?  false");;   }   a //Resultado:  false   .   x  =  2;;y  =  1;;z  =  2;;   b if  (  (-­-­z  >  y)  &&  (x  >  z)  )  {   l    System.out.println("(  (-­-­z  >  y)  &&  (x  >  z)  )  ?  true");;   }  else  {   o    System.out.println("(  (-­-­z  >  y)  &&  (x  >  z)  )  ?  false");;   g }   s //Resultado:  false   p     o Veamos  a  fondo  uno  por  uno:   t x  =  0;;y  =  2;;z  =  2;;   . if  (  (x++  ==  y)  ||  (z  ==  ++y)  ){  //...     c (  (0  ==  2)  ||  (2  ==  3)  )  //false  ||  false   o m   x  =  0;;   if  (  (x++  ==  ++x)  )  {  //...     (  (0  ==  1)  )  //false            
  • 9. 9   Java  World    Capítulo  4     h x  =  0;;   if  (  (++x  ==  x++)  )  {  //...   t   t (  (1  ==  1)  )  //true   p : x  =  2;;y  =  1;;z  =  2;;   / if  (  (-­-­z  >  y)  &&  (x  >  z)  )  {  //...     / (  (1  >  1)  &&  (2  >  1)  )  )  //false  &&  true   v   a   l Operador  condicional   o Este  operador  requiere  tres  términos,  y  es  utilizado  para  la  asignación  de  valores  a  una  variable.   r Su  funcionamiento  es  similar  al  de  un  if,  verifica  una  condición,  y  si  esta  es  true  asigna  un  valor,  caso  contrario  asigna  la  otra.   c Ejemplo  de  la  sintaxis:   r variable  =  (expresion  booleana)  ?  valor  a  asignar  si  la  condicion  fue  true  :  valor  a   e asignar  si  la  condicion  fue  false;;   a   int  x;;   t x  =  (  true  )    ?  1  :  2;;    //x  ahora  contiene  el  valor  1   i x  =  (  false  )  ?  1  :  2;;    //x  ahora  contiene  el  valor  2   v o . Hay  que  recordar  que  los  operadores  lógicos   solo   funcionan  con  valores  de  tipo   boolean,  salvo  aquellos   b que  se  utilizan  a  nivel  de  bits.     l   o     g s p o t . c o m    
  • 10. Java  World    Capítulo  4   10     Operadores  lógicos     h Los  operadores  lógicos  necesarios  para  el  examen  son:  &,  |,  ^,  ¡,  &&  y  ||.   t Operadores  lógicos  sobre  bits  (no  entra  en  el  examen)   t Los  siguientes  operadores  &,  |  y  ^  pueden  utilizarse  en  diferentes  situaciones,  una  de  ellas  es  para  comparación  a  nivel  de  bits.  Estos   p fueron  incluidos  en  versiones  de  examenes  previas,  pero  para  nuestra  versión,  no  son  necesarios.   : / byte  b01  =  5  &  15;;  //Compuerta  AND   / /*          0  0  1  0  1      -­  5   g        0  1  1  1  1      -­  15   u        -­-­-­-­-­-­-­-­-­-­   s        0  0  1  0  1      -­  5   */   t   a byte  b02  =  3  |  8;;  //Compuerta  OR   /*   v        0  0  0  1  1      -­  3   o        0  1  0  0  0      -­  8          -­-­-­-­-­-­-­-­-­-­   a        0  1  0  1  1      -­  11   l */   b   byte  b03  =  29  ^  11;;  //Compuerta  XOR   e /*   r        1  1  1  0  1      -­  29          0  1  0  1  1      -­  11   o        -­-­-­-­-­-­-­-­-­-­   l        1  0  1  1  0      -­  21   */   a .   b   l   o Si  deseas  comprender  un  poco  más  acerca  del  funcionamiento  de  las  operaciones  lógicas  con  compuertas  en  código  binario,  puedes   buscar  en  internet  por  el  nombre  de  las  mismas  (AND,  OR,  XOR).   g s     p o t . c o m    
  • 11. 11   Java  World    Capítulo  4     Operadores  lógicos  de  circuito  corto   h Estos  son:   t t &&   AND  de  circuito  corto   p ||   OR  de  circuito  corto   : Pero,  ¿por  qué  de  circuito  corto?   / Se  denominan  de  esta  manera  porque  cuando  se  evalua  una  expresión,  si  la  primer  evaluación  hace  que  la  condición  no  se  cumpla   / no  se  evalua  la  siguiente.   v Veamos  algunos  ejemplos:   a class  Valores  {   l    public  int  getValor1()  {          System.out.println("Devuelvo  el  valor  1");;   o        return  1;;   r    }         c    public  int  getValor2()  {   r        System.out.println("Devuelvo  el  valor  2");;   e        return  2;;      }   a }   t   public  class  ejemploOperadoresLogicosCircuitoCorto  {   i    static  public  void  main(String[]  args)  {   v        Valores  valores  =  new  Valores();;             o        if  (  (valores.getValor1()  ==  2)  &&  (valores.getValor1()  ==  1)  )  {   .            System.out.println("(  (valores.getValor1()  ==  2)  &&  (valores.getValor1()  ==   b 1)  )  ?  true");;          }  else  {   l            System.out.println("(  (valores.getValor1()  ==  2)  &&  (valores.getValor1()  ==   o 1)  )  ?  false");;          }   g           s        if  (  (valores.getValor2()  >  0)  ||  (valores.getValor2()  !=  5)  )  {              System.out.println("(  (valores.getValor2()  >  0)  ||  (valores.getValor2()  !=   p 5)  )  ?  true");;   o        }  else  {   t            System.out.println("(  (valores.getValor2()  >  0)  ||  (valores.getValor2()  !=   5)  )  ?  false");;   .        }   c    }   }   o     m   Devuelvo  el  valor  1   (  (valores.getValor1()  ==  2)  &&  (valores.getValor1()  ==  1)  )  ?  false   Devuelvo  el  valor  2   (  (valores.getValor2()  >  0)  ||  (valores.getValor2()  !=  5)  )  ?  true       Como  se  puede  apreciar,  en  los  dos  casos,  al  evaluar  la  primer  condición  no  es  necesario  evaluar  la   segunda,  de  manera  que  esta   última,  directamente  es  obviada.          
  • 12. Java  World    Capítulo  4   12     Operadores  lógicos  de  circuito  completo   h Estos  son:   t |   t &   p : Al   contrario   de   los   de   circuito   corto,   estos   siempre   evaluan   todas   las   condiciones,   por   más   que   ya   se   conozca   de   antemano   el   resultado  de  la  operación  lógica  (estos  operadores  son  ineficientes).   / Veamos  el  ejemplo  con  los  operadores  de  circuito  completo:   /   g   u A  diferencia  de  los  operadores  lógicos  de  circuito  corto,  vemos  como  se  verifica  la  segunda  condición.   s class  Valores  {   t    public  int  getValor1()  {   a        System.out.println("Devuelvo  el  valor  1");;          return  1;;   v    }   o          public  int  getValor2()  {   a        System.out.println("Devuelvo  el  valor  2");;   l        return  2;;      }   b }   e   r public  class  ejemploOperadoresLogicosCircuitoCompleto  {      static  public  void  main(String[]  args)  {   o        Valores  valores  =  new  Valores();;   l                  if  (  (valores.getValor1()  ==  2)  &  (valores.getValor1()  ==  1)  )  {   a            System.out.println("(  (valores.getValor1()  ==  2)  &  (valores.getValor1()  ==  1)   . )  ?  true");;          }  else  {   b            System.out.println("(  (valores.getValor1()  ==  2)  &  (valores.getValor1()  ==  1)   l )  ?  false");;   o        }             g        if  (  (valores.getValor2()  >  0)  |  (valores.getValor2()  !=  5)  )  {   s            System.out.println("(  (valores.getValor2()  >  0)  |  (valores.getValor2()  !=  5)  )   ?  true");;   p        }  else  {   o            System.out.println("(  (valores.getValor2()  >  0)  |  (valores.getValor2()  !=  5)  )   ?  false");;   t        }   .    }   c }   o     m   Devuelvo  el  valor  1   Devuelvo  el  valor  1   (  (valores.getValor1()  ==  2)  &  (valores.getValor1()  ==  1)  )  ?  false   Devuelvo  el  valor  2   Devuelvo  el  valor  2   (  (valores.getValor2()  >  0)  |  (valores.getValor2()  !=  5)  )  ?  true    
  • 13. 13   Java  World    Capítulo  4     Operadores  lógicos  ^  y  ¡   h Estos  operadores  cumplen  la  unción  de  las  siguientes  compuertas:   t t ¡   Not   p ^   Xor   : Not   / El  operador  Not  solo  toma  un  término,  y  el  resultado  refleja  el  valor  de   / entrada  invertido.   v a Xor   l Lo  que  se  viene   El  operador  Xor  evalua  dos  términos.  Si  estos  son  diferentes,  el  resultado   o En   la   proxima   entrega   estaremos   es  true,  de  lo  contrario  es  false.   r adentrandonos   en   las   sentencia   para       c control  de  flujo  del  programa.       r     e Veremos   las   sentencias   de   condición   y   a bucles.   t   i Nos   adentraremos   en   el   mundo   de   la   v excepciones   para   saber   como   tratar   los   o errores  en  Java.   .   b Veremos  las  afirmaciones,  un  mecanismo   l que   Java   nos   otorga   para   verificar   o aquellas   secciones   de   código   que   g estamos   seguros   no   deberían   de   fallar   s jamás.   p   o Esto   y   mucho   más,   en   el   próximo   t JavaWorld.   .   c o m    
  • 14. Java  World    Capítulo  4   14     h t   t p ¿Que  es  JavaWorld  para  Valor  Creativo?     : / Muchos   de   los   visitantes   de   Valor   Creativo   provienen   de   la   revista   digital   JavaWorld   de   Gustavo   Alberola   y   Matias   Álvarez.   / Recientemente  se  agrego  a  la  revista  una  nueva  sección  relacionado  con  la  importancia  de  la  creatividad  en  la  industria  del  Software.     g JavaWorld  es  más  bien  un  resumen,  para  gente  de  habla  hispana,  de  un  libro  de  más  de  900   u páginas  totalmente  en  ingles  (por  ello  serán  10  ediciones).  El  libro  habla  de  programación  en   s lenguaje  Java  y  esta  orientado  a  programadores.   t Valor   Creativo   se   unió   a   la   iniciativa   y   su   objetivo   es   transformar   este   resumen   en   un   revista   a creando,   con   el   paso   del   tiempo,   múltiples   secciones   relacionado   con   Java   y   el   mundo   de   la   v Informática.     o Este  proyecto  llevo  muchas  horas  de  planificación  antes  del  lanzamiento  de  la  primera  edición,  con   a un  simple  objetivo  realizar  la  revista  lo  mejor  posible  con  los  recursos  disponibles.   l   b Decisiones   e   r Cuando  empezamos  a  diagramar  la  revista  surgio  el  problema  de  que  los  párrafos  de  doble  columna  eran  incómodos  a  la  vista  por  la   o información  que  manejaban,  de  ahí  nuestra  primer  decisión:  realizar  una  Revista  tipo  Informe.   La  segunda  decisión  era  como  llamarla  había  que  darle  un  nombre  y  un  logo,  que  más  simple  que  el  lema  Java  para  todo  el  mundo,   l de  aquí  nació  el  mundo  dentro  de  una  taza.   a   . b l o g s p o t . c o   m     La  tercera  decisión  fue  como  proponer  la  revista  que  las  personas  sean  atraídas  a  el,  y  nacen  los  lemas  ¿Querés  ser  un  SCJP?  en  el   portada,   ¿Tenes   lo   que   se   necesita   para   serlo?   en   la   contratapa   -­‐en   un   comentario   personal   cuando   se   pensó   en   estos   lemas   simplemente   nacieron   por   mi   incapacidad   de   entender   los   temas   de   JavaWorld,   la   verdad   es   que   no   entendía   nada   y   por   ello   el   desafío-­‐.   La  cuarta  decisión  fue  muy  importante  debido  a  que  la  revista  era  gratuita  y  los  costos  de  diseño  son  elevados,  se  decidió  realizar   una  plantilla  única  y  mantenerla  durante  todas  las  ediciones.  Fue  muy  difícil  esta  decisión  porque  si  queremos  algo  prolijo  tenemos   que  respetar  lo  anterior  y  la  idea  es  que  las  revistas  sean  coleccionables,  por  ello  si  ahora  no  nos  gusta  la  letra,  por  ejemplo,  será  un   error  que  no  se  debe  corregir.    
  • 15. 15   Java  World    Capítulo  4     Resultados   h t A  partir  de  todas  nuestras  decisiones  se  lanzo  la  primera  edición.   t   Nadie  se  esperaba  el  éxito  de  la  revista  tan  pronto,  y  con  mente  fría  se  lanzo  el  segundo  capitulo  con  mayor  aceptación.  A  partir  de   p la  tercera  edición  se  anexa  la  sección  Valor  Creativo  con  el  fin  de  darles  a  los  lectores  herramientas  para  que  agreguen  valor  a  sus   : trabajos  intangibles.   /   / Estamos  muy  contentos  con  todos  los  comentarios  que  nos  dejan  los  usuarios,  y  ello  nos  motiva  aún  más  a  seguir  adelante.  Es  un   v esfuerzo  en  conjunto  muy  grande  y  que  la  gente  lo  valore  y  reconozco  es  nuestra  recompensa.   a   Seguiremos  trabajando  por  más  ediciones,  y  cualquier  adhesión,  apoyo  o  sugerencia  es  bien  recibida.     l   o Saludos  a  todos  y  feliz  año  nuevo.   r   c   r   e   a     t   i   v   o   .   b   l     o   g   s   p   o   t     .   c   o   m          
  • 16.