Anda di halaman 1dari 18

Expresin de Asignacin

Una expresin de asignacin contiene el signo = para realizar la asignacin. Esta se puede interpretar como una expresin de lugar a la izquierda del igual y una expresin de valor a la derecha, o como una llamada a un asignador. Por ejemplo, el mtodo assoc se utiliza para crear listas que asocian valores a claves. assoc est sobrecargado como funcin para obtener el valor asociado a una clave, como place para obtener una referencia y como asignador que puede cambiar el valor asociado a una clave o para crear una nueva asociacin clavevalor. Podemos ver el comportamiento en el siguiente cdigo
Var l=[] l.Assoc('a')=10 // Asocia al caracter a el valor 10 l.Assoc('b')=20 // Asocia al caracter b el valor 20 &l.Assoc('a') // obtiene una apuntador al valor asociado &l.Assoc('d') // genera un error ya que no existe la asociacin 'd'-valor l.Assoc('d')=6 // crea la asociacin

Es importante considerar la diferencia entre las expresiones de lugar y las expresiones de asignacin ya que se puede comportar de forma diferente.

Expresin de Lugar
Las expresiones de lugar son poco comunes en CoSeL y se utilizan para obtener referencias a lugares donde podemos asignar cualquier tipo de dato. Su principal diferencia con un apuntador es que se asegura que se podr utilizar para realizar una asignacin, por contra, un apuntador es como cualquier otro valor de CoSeL y antes de realizar una asignacin a donde apunta hay que convertirlo en expresin de lugar. Por ejemplo, podemos asignar a la variable a el valor 10 utilizando la expresin a=10. Si obtenemos un apuntador a la variable a. Habr que convertirlo en lugar con el asterisco antes de asignar, tal como se ve en el ejemplo.
Var a=3 var p=&a *p=50

Una expresin de lugar puede ser:


Una variable Un place Un if con else Un switch

La forma especial * Etc.

Algunos ejemplos de expresiones de valor vlidas son:


// Declaraciones Var a=10,b=5 Place Second(l)=> l.Tail.Head // Expresiones de lugar a if (a>b) a else b Second([a,b,3])

las expresiones de lugar se puende encontrar a la izquierda del igual en una asignacin, despues del operador &, en parmetros pasados por referencia y en el cuerpo de places.

Expresin de Lugar
Las expresiones de lugar son poco comunes en CoSeL y se utilizan para obtener referencias a lugares donde podemos asignar cualquier tipo de dato. Su principal diferencia con un apuntador es que se asegura que se podr utilizar para realizar una asignacin, por contra, un apuntador es como cualquier otro valor de CoSeL y antes de realizar una asignacin a donde apunta hay que convertirlo en expresin de lugar. Por ejemplo, podemos asignar a la variable a el valor 10 utilizando la expresin a=10. Si obtenemos un apuntador a la variable a. Habr que convertirlo en lugar con el asterisco antes de asignar, tal como se ve en el ejemplo.
Var a=3 var p=&a *p=50

Una expresin de lugar puede ser:


Una variable Un place Un if con else Un switch La forma especial * Etc.

Algunos ejemplos de expresiones de valor vlidas son:


// Declaraciones

Var a=10,b=5 Place Second(l)=> l.Tail.Head // Expresiones de lugar a if (a>b) a else b Second([a,b,3])

las expresiones de lugar se puende encontrar a la izquierda del igual en una asignacin, despues del operador &, en parmetros pasados por referencia y en el cuerpo de places. Expresiones y Operadores

Expresin Una expresin es una combinacin de variables, operadores y llamadas de mtodos construida de acuerdo a la sintaxis del lenguaje que devuelve un valor. El tipo de dato del valor regresado por una expresin depende de los elementos usados en la expresin.

Operadores Los operadores son smbolos especiales que por lo comn se utilizan en expresiones.

La tabla siguiente muestra los distintos tipos de operadores que utiliza Java.
Operador Significado Operadores aritmticos
+ * / %

Ejemplo

Suma Resta Multiplicacin Divisin Mdulo Operadores de asignacin

a+b a-b a*b a/b a%b

= += -= *= /= %=

Asignacin Suma y asignacin Resta y asignacin Multiplicacin y asignacin Divisin y asignacin Mdulo y asignacin Operadores relacionales

a=b a += b (a=a + b) a -= b (a=a - b) a *= b (a=a * b) a / b (a=a / b) a % b (a=a % b)

== != < > <= >=

Igualdad Distinto Menor que Mayor que Menor o igual que Mayor o igual que Operadores especiales

a == b a != b a<b a>b a <= b a >= b

++

Incremento Decremento Cast Concatenacin de cadenas Acceso a variables y mtodos Agrupacin de expresiones

a++ (postincremento) ++a (preincremento) a-- (postdecremento) --a (predecremento) a = (int) b a = "cad1" + "cad2" a = obj.var1 a = (a + b) * c

--

(tipo)expr
+ . ( )

La tabla siguiente muestra la precedencia asignada a los operadores, stos son listados en orden de precedencia. Los operadores en la misma fila tienen igual precedencia

Operador . [] () ++ -- ! ~ new (tipo)expr * / % +<< >> >>> < > <= >= == != & ^ | && || ?: = += = *= /= %= &= ^= |= <<= >>= >>>=

Notas Los corchetes se utilizan para los arreglos ! es el NOT lgico y ~ es el complemento de bits new se utiliza para crear instancias de clases Multiplicativos Aditivos Corrimiento de bits Relacionales Igualdad AND (entre bits) OR exclusivo (entre bits) OR inclusivo (entre bits) AND lgico OR lgico Condicional Asignacin

Todos los operadores binarios que tienen la misma prioridad (excepto los operadores de asignacin) son evaluados de izquierda a derecha. Los operadores de asignacin son evaluados de derecha a izquierda. Variables y tipos de datos (1 de 3) Las variables son localidades de memoria en las que pueden almacenarse datos. Cada una tiene un nombre, un tipo y valor. Java tiene tres tipos de variables: de instancia, de clase y locales.

Variables de instancia. Se utilizan para definir los atributos de un objeto.

Variables de clase. Son similares a las variables de instancia, con la excepcin de que sus valores son los mismos para todas las instancias de la clase.

Variable locales. Se declaran y se utilizan dentro de las definiciones de los mtodos.

* A diferencia de otros lenguajes, Java no tiene variables globales, es decir , variables que son vistas en cualquier parte del programa. Variables y tipos de datos (2 de 3) Java es un lenguaje "fuertemente tipeado o tipificado" por lo que es necesario especificar el tipo de dato para cada una de las variables que se vayan a utilizar en un programa. El nombre de la variable debe de ser un identificador vlido, y se usa para referirse a los datos que contiene una variable. El tipo de una variable determina los valores que puede almacenar y las operaciones que se pueden hacer sobre ella. Para dar a una variable un tipo y un nombre, se escribe una declaracin de una variable, que tiene la siguiente forma:
TipoDato nombreVariable; Ej. String nombre; // variable de tipo String int edad; // variable de tipo int Punto p; // variable del tipo Punto

Se pueden escribir varios nombres de variables del mismo tipo en una sola lnea,
int x, y, z; String nombre, apellido;

Tambin se puede asignar un valor inicial a las variables al momento de crearlas,


String nombre, apellido="MiApellido";

int edad = 24;

Variables y tipos de datos (3 de 3) Las variables en Java pueden ser uno de los siguientes tipos:

Tipo primitivo. Una variable de tipo primitivo contiene un solo valor del tamao y formato apropiado de su tipo: un nmero, un carcter, o un valor booleano.

La tabla siguiente lista los tipos de datos primitivos soportados por Java.
Tipo Descripcin Nmeros enteros
byte short int long

Tamao/Formato

Entero byte Entero corto Entero Entero largo Nmeros reales

8-bit 2's 16-bit 2's 32-bit 2's 64-bit 2's

float double

Punto flotante Punto flotante de doble presicin Otros tipos

32-bit IEEE 754 64-bit IEEE 754

char boolean

Un solo carcter Un valor booleano

16-bit caracteres Unicode true o false

En Java, cualquier numrico con punto flotante automticamente se considera double. Para que sea considerado float se agrega una letra "f" o "F" al final del valor.

double d = 10.50; float f = 10.50F; Referencia. Los arreglos, las clases y las interfaces son del tipo referencia. El valor de una variable del tipo referencia es una direccin de un conjunto de valores representados por una variable. Las referencias en Java no son como en C++, stas son identificadores de instancias de alguna clase en particular.
Ej. String cad; //referencia a un objeto de la clase String Punto p; //referencia a un objeto de la clase Punto int[] var_arreglo; //referencia a un arreglo de enteros

Bloques y sentencias (1 de 6)

Sentencia Una instruccin o sentencia representa la tarea ms sencilla que se puede realizar en un programa.

Sentencias de expresin Los siguientes tipos de expresiones pueden ser hechas dentro de una sentencia terminando la expresin con punto y coma (;): * * * * Expresiones de asignacin Cualquier uso de los operadores ++ y -Llamada de mtodos Expresiones de creacin de objetos

Esta clase de sentencias son llamadas sentencias de expresin.


Ej. valorA = 8933.234; valorA++; System.out.println(valorA); // asignacin // incremento // llamada a un mtodo

Integer objInt = new Integer(4); // creacin de objetos

Sentencias de declaracin de variables Las sentencias de declaracin de variables se utilizan para declarar variables.
Ej. int bValue; double aValue = 8933.234; String varCad;

Sentencias de control de flujo Las sentencias de control de flujo determinan el orden en el cual sern ejecutadas otro grupo de sentencias. Las sentencias if y for son ejemplos de sentencias de control de flujo.

Bloque de sentencias Un bloque es un grupo de cero o ms sentencias encerradas entre llaves ( { y } ). Se puede poner un bloque de sentencias en cualquier lugar en donde se pueda poner una sentencia individual.

Bloques y sentencias (2 de 6) Las sentencias de control de flujo se pueden utilizar para ejecutar sentencias condicionalmente, para ejecutar de manera repetida un bloque de sentencias y en general para cambiar la secuencia normal de un programa.

La sentencia if La sentencia if permite llevar a cabo la ejecucin condicional de sentencias.


if ( Expresion ){ sentencias; }

Se ejecutan las sentencias si al evaluar la expresin se obtiene un valor booleano true.


if ( Expresion ){

sentenciasA; } else{ sentenciasB; }

Si al evaluar la expresin se obtiene un valor booleano true se ejecutarn las sentenciasA, en caso contrario se ejecutarn las sentenciasB. Bloques y sentencias (3 de 6)

La sentencia switch Cuando se requiere comparar una variable con una serie de valores diferentes, puede utilizarse la sentencia switch, en la que se indican los posibles valores que puede tomar la variable y las sentencias que se tienen que ejecutar s es que la variable coincide con alguno de dichos valores.
switch( variable ){ case valor1: sentencias; break; case valor2: sentencias; break; ... case valorN: sentencias; break; default: sentencias; }

Cada case ejecutar las sentencias correspondientes, con base en el valor de la variable, que deber de evaluarse con valores de tipo byte, char, short o int. Si el valor de la variable no coincide con ningn valor, entonces se ejecutan las sentencias pordefault, s es que las hay. La sentencia break al final de cada case transfiere el control al final de la sentencia switch; de esta manera, cada vez que se ejecuta

un case todos los enunciados case restantes son ignorados y termina la operacin del switch. Bloques y sentencias (4 de 6)

El ciclo for El ciclo for repite una sentencia, o un bloque de sentencias, mientras una condicin se cumpla. Se utiliza la mayora de las veces cuando se desea repetir una sentencia un determinado nmero de veces. La forma general de la sentencia for es la siguiente;
for(inicializacin;condicin;incremento){ sentencias; }

* En su forma ms simple, la inicializacin es una sentencia de asignacin que se utiliza para establecer una variable que controle el ciclo. * La condicin es una expresin que comprueba la variable que controla el ciclo y determinar cuando salir del ciclo. * El incremento define la manera en como cambia la variable que controla el ciclo. Introduccin Las expresiones son sentencias que tras realizar una determinada accin devuelven un resultado. En C la mayora de las expresiones devuelven un entero. Hay tres tipos de expresiones:

Valores por la izquierda o lvalue (left value). Al evaluarlas devuelven la direccin de un cierto dato, que nos permitir acceder al mismo para inicializarlo, modificarlo, etc. Se llaman as porque son las expresiones que normalmente se colocan en el lado izquierdo del = en una expresin de asignacin. Suelen ser nombres de variables, elementos de un arreglo, etc. Valores por la derecha o rvalue (right value). Al evaluarlas obtenemos un dato de cierto tipo. Normalmente son las expresiones que se colocan a

la derecha del = en la asignacin. Ejemplos de ellos son los contenidos de las variables, los datos contenidos en los arreglos y los valores constantes. Llamada a una funcin. Si la funcin no es de tipo void, al llamarla devolver un dato. Este dato puede ser usado como una expresin del tipo valor por la derecha.

Consideraremos a continuacin dos tipos fundamentales de expresiones:


la asignacin las que utilizan operadores

Asignacin El primer tipo a considerar dada su importancia es la asignacin. La sintaxis de una asignacin es:
lvalue = rvalue;

Para evaluar una asignacin el compilador evala el lado derecho. El dato que obtiene es entonces cargado en la direccin que resulta de evaluar el lado izquierdo. Por ejemplo:
i = 1;

introduce el entero 1 en la direccin de la variable i. Como toda expresin, la asignacin devuelve un valor, que es el mismo que se carga en la variable. Esto puede ser usado para inicializar varias variables con el mismo valor. Por ejemplo, si tenemos tres variables enteras i, j y k, la expresin:
i = j = k = 0;

las inicializa a 0 a las tres. Obsrvese que una misma variable puede estar en ambos lados de una asignacin:
i = i + 1;

Esta expresin incrementa la variable i en una unidad.

Operadores El segundo tipo de expresiones son los operadores. Hay varios tipos de operadores:

aritmticos de incremento y decremento relacionales y lgicos de manipulacin de bits

Operadores aritmticos

Los cuales realizan las operaciones aritmticas bsicas. Estas expresiones tienen como sintaxis:
rvalue operador rvalue

Los operadores aritmticos son:


+ * / %

operador de suma operador de diferencia multiplicacin divisin entera resto de la divisin (operador mdulo)

Por ejemplo:
i = a + 1; j = b * 4 + 10 / 2;

Operadores de incremento y decremento

Sirven para incrementar el valor de una variable. Admiten cuatro posibles combinaciones:
++lvalue

incrementa el contenido de lvalue y devuelve el nuevo contenido --lvalue decrementa el contenido de lvalue y devuelve el nuevo contenido

incrementa el contenido de lvalue y devuelve el valor que contena antes de incrementarlo decrementa el contenido de lvalue y devuelve el valor que contena antes de lvalue-decrementarlo
lvalue++

Por ejemplo:
i = j++; /* carga en i el valor de j y luego incrementa j*/ i = ++j; /* incrementa j y luego carga su valor en i */

Estos operadores son muy usados en las variables de los bucles y con los punteros. El tipo de datos que devuelven es el del lvalue.

Operadores de comparacin (relacionales) y lgicos

Los relacionales son:


< > <= >= == !=

menor que mayor que menor o igual que mayor o igual que igual que distinto de

Los lgicos son:


&& || !

Y O NO

La sintaxis para estas expresiones es:


rvalue operador rvalue

El valor que devuelve es de tipo entero: devuelve un 0 si el resultado de la comparacin es falso (FALSE) y un valor distinto de 0 si el resultado de la comparacin es verdadero (TRUE). En C el cero se toma como valor falso, y cualquier valor diferente del cero es verdadero. El valor concreto empleado para representar el valor verdadero es irrelevante, y normalmente depende del sistema empleado. Cuando lo que comparamos son caracteres, se compara realmente su cdigo ASCII.

Por ejemplo:
1 > 2 1 == 1 '1' == 1 'a' < 'b' 1 || 0 !1

devuelve un valor falso devuelve un valor verdadero devuelve falso es verdadero devuelve verdadero devuelve falso

Operadores de manipulacin de bits

Estos operadores muestran una de las armas ms potentes del lenguaje C , la de poder manipular internamente, es decir bit a bit , las variables. Estos operadores slo se aplican a variables del tipo char, short, int y long y no pueden ser usados con float o double. Sabemos que las computadoras guardan los datos organizados en forma digital, en bytes, formados por nmeros binarios de 8 bits y como se vio anteriormente, un char ocupa un byte de 8 bits , mientras que los short e int se forman con dos bytes ( 16 bits ) y los long por cuatro bytes ( 32 bits ). Para el manejo de dichos bits, contamos con los operadores descriptos en la siguiente tabla .
& | ^ << >> ~

Y (bit a bit) O inclusiva O exclusiva Desplazamiento a la izqda. Desplazamiento a la dcha. Complemento a uno

Describiremos mediante unos pocos ejemplos la operatoria de manejo de bits. Analicemos primero como funciona el operador Y, tambin llamado BITWISE AND. Las reglas para la operacin son las dadas en la siguiente tabla.
bit a & bit b = bit c 0 & 0 = 0 0 & 1 = 0 1 & 0 = 0

1 & 1 = 1
Reglas para la operacin Y (bit a bit)

Si suponemos tener dos variables del tipo char, una de ella de valor 85 (hex. 55 ), otra de valor 71 (hex. 47) y realizamos el Y a nivel bits de ellas, obtendremos :
bits 0 1 0 1 0 1 0 1 & 0 1 0 0 0 1 1 1 ------------------------0 1 0 0 0 1 0 1 decimal 85 & 71 69 hexadecimal 55 & 47 ------45 -------

Ntese que la operacin es del tipo lgico entre bits, por lo que los resultados numricos tienen poco ningn significado y slo se han puesto con fines de ejemplo. De la misma manera para la operacin O inclusiva, cuyas reglas se dan en la siguiente tabla:
bit a | bit b = bit c 0 | 0 = 0 0 | 1 = 1 1 | 0 = 1 1 | 1 = 1
Reglas para la operacin O inclusiva (bit a bit)

Para las mismas variables anteriores obtendremos el resultado:


0 1 0 1 0 1 1 1 87 57

Analizando ahora la O exclusiva tendremos :


bit a ^ bit b = bit c 0 ^ 0 = 0 0 ^ 1 = 1 1 ^ 0 = 1 1 ^ 1 = 0
Reglas para la operacin O exclusiva (bit a bit)

Para las mismas variables anteriores obtendremos:

18

12

Veamos ahora las operaciones de desplazamiento. La sentencia


c = a << b

implica asignarle a c el valor de a con sus bits desplazados a la izquierda en b lugares. Los bits que van "saliendo" por la izquierda , se desechan, y los bits que van quedando libres a la derecha se completan con cero . Se procede de la misma manera para el desplazamiento a la derecha >>. El operador complemento a uno (~) es del tipo unitario , es decir que realiza una operacin sobre una nica variable , y su efecto es dar a la variable un valor igual a restar de ( -1 ) el valor que traa . Quizs es ms visible decir que este operador cambia los bits en 1 de la variable en 0 y viceversa.

Reglas de precedencia y asociatividad En los operadores anteriores deben tenerse en cuenta la precedencia de los mismos y las reglas de asociatividad, que son las normales en la mayora de lenguajes. Se debe consultar el manual de referencia para obtener una explicacin detallada. Adems, hay toda una serie de operadores aritmticos con asignacin, como pueden ser += y ^=.
Precedencia Operadores Asociatividad ()[] -> . 0 izqda. a dcha. sizeof (tipo) ! ~ ++ -- signo* & dcha. a izqda. 1 * / % 2 izqda. a dcha. + 3 izqda. a dcha. > 4 izqda. a dcha. >= 5 izqda. a dcha. == != 6 izqda. a dcha. & 7 izqda. a dcha. ^ 8 izqda. a dcha. | 9 izqda. a dcha. && 10 izqda. a dcha. || 11 izqda. a dcha.

12 13

?: = += -= *= etc

dcha. a izqda. dcha. a izqda.

NOTA: en la fila de los operadores de precedencia cero se han agregado a la derecha los tres operadores , [] ->> y . que sern analizados en otro lugar. De la misma manera, en el rengln siguiente hemos colocado al final los dos operadores * y &, ya que, aunque coinciden en smbolo con los de producto e Y (bit a bit), son otro tipo de operadores que se describirn en otro lugar. En ese mismo rengln se ha consignado como "signo" al unitario - . NOTA: En la evaluacin de expresiones lgicas, los compiladores normalmente utilizan tcnicas de evaluacin rpida. Para decidir si una expresin lgica es cierta o falsa, muchas veces no es necesario evaluarla completamente. Por ejemplo, en una expresin como <exp1> || <exp2>, el compilador evala primero <exp1> y si es cierta, no evala <exp2>. Por ello se deben evitar construcciones en las que se modifiquen valores de datos en la propia expresin, pues su comportamiento puede depender de la implementacin del compilador o de la optimizacin utilizada en una compilacin o en otra. Estos son errores que se pueden cometer fcilmente en C ya que una asignacin es tambin una expresin. Debemos evitar: if (( x++ > 3 ) || ( x < y ))

y escribir en su lugar: x++; if (( x > 3 ) || ( x < y )) Hay un tipo especial de expresin en C que se denomina expresin condicional y est representada por los operadores ? : . Su utilizacin es como sigue: <e> ? <x> : <y>. Se evala sie, si es cierto entonces x; si no, y. int mayor ( int a, int b ) { return ( a > b ) ? TRUE : FALSE; } inutil () { float a, b = 0.0; ( b > 0.0 ) ? sin(M_PI / 8) : cos(M_PI / 4); }

Anda mungkin juga menyukai