Operadores y Procedencia

Descargar como docx, pdf o txt
Descargar como docx, pdf o txt
Está en la página 1de 5

Operadores y procedencia La precedencia de un operador indica qu tan "estrechamente" se unen dos expresiones juntas.

Por ejemplo, en la expresin 1 + 5 * 3 , la respuesta es 16 y no 18 porque el operador de multiplicacin ("*") tiene una precedencia mayor que el operador de adicin ("+"). Los parntesis pueden ser usados para forzar la precedencia, si es necesario. Por ejemplo: (1 + 5) * 3 se evala como 18. Cuando los operadores tienen la misma precedencia, su asociatividad decide si se evalan a partir de la derecha o desde la izquierda - ver ms abajo los ejemplos. La siguiente tabla lista en orden la precedencia de los operadores, con los operadores de mayor precedencia en la parte superior. Los operadores en la misma lnea tienen la misma precedencia, en cuyo caso su asociatividad decide cul es el orden de evaluacin.
Precedencia de operadores Asociatividad no asociativo izquierda no asociativo derecha no asociativo derecha izquierda izquierda izquierda no asociativo no asociativo izquierda izquierda izquierda izquierda clone new [ ++ -~ - (int) (float) (string) (array) (object) (bool) @ instanceof ! */% +-. << >> < <= > >= <> == != === !== & ^ | && Operadores Informacin adicional clone and new array() incremento/decremento tipos tipos lgico aritmtica aritmtica y string bit a bit comparacin comparacin bit a bit y referencias bit a bit bit a bit lgico

Precedencia de operadores Asociatividad izquierda izquierda derecha izquierda izquierda izquierda izquierda || ?: = += -= *= /= .= %= &= |= ^= <<= >>= => and xor or , Operadores Informacin adicional lgico ternario asignacin lgico lgico lgico muchos usos

Para operadores de igual precedencia, asociatividad izquierda significa que la evaluacin procede de la izquierda a la derecha y asociatividad derecha significa lo opuesto.
Ejemplo #1 Asociatividad
<?php $a = 3 * 3 % 5; // (3 * 3) % 5 = 4 $a = true ? 0 : true ? 1 : 2; // (true ? 0 : true) ? 1 : 2 = 2 $a = 1; $b = 2; $a = $b += 3; // $a = ($b += 3) -> $a = 5, $b = 5 // mezclar ++ y + produce un comportamiento indefinido $a = 1; echo ++$a + $a++; // puede mostrar 4 o 5 ?>

El uso de parntesis, incluso cuando no es estrictamente necesario, a menudo puede mejorar la legibilidad del cdigo.

Construccin de expresiones Una expresin es una combinacin de operadores y operandos. Los datos u operandos pueden ser constantes, variables y llamadas a funciones. Adems, dentro de una expresin pueden encontrarse subexpresiones encerradas entre parntesis. Por ejemplo, la siguiente expresin matemtica: ( 3) cos( ) 2x + b
2

Cuando se ejecuta una sentencia de cdigo que contiene una expresin, sta se evala. Al evaluarse la expresin toma un valor que depende del valor asignado previamente a las variables, las constantes y los operadores y funciones utilizadas y la secuencia de la ejecucin de las operaciones correspondientes. Este valor resultante de la evaluacin de la expresin ser de un determinado tipo de dato. Por ejemplo, de un tipo numrico entero (integer, shortint), de un tipo real o de un tipo lgico o booleano. Como en el captulo anterior ya se trat de los datos simples u operandos que pueden emplearse en TurboPascal, este captulo se centrar en los operadores. El captulo acerca de las funciones se deja para ms adelante.

Bloques de sentencias de programas En programacin, una sentencia es una lnea de cdigo en algn lenguaje de programacin. Un programa est constituido por mltiples sentencias de programacin, lo que es llamado cdigo fuente. Un algoritmo de programacin est constituido por una o ms sentencias de programacin. Las sentencias de programacin suelen tener algn caracter que determina su final, por lo general es un punto y coma (;) o un punto final (.), y algunas estn separadas simplemente por enters (retorno de carro). Esto depende del lenguaje de programacin que se est empleando. Existen lenguajes que no necesitan un caracter que determine el final de una sentencia. En algunos lenguajes de programacin las sentencias estn numeradas, de esta manera, si existe algn error de sintaxis (o alguna advertencia), el compilador entrega un mensaje con el nmero de sentencia donde fue encontrado. Una sentencia de programacin tiene una sintaxis y una semntica. La sintaxis est determinada por el lenguaje de programacin y, si existe algn error, el compilador suele detectarlo. Tambin una sentencia tiene una semntica, si existe algn error de semntica, en general, no puede ser descubierto por el compilador. Esto es porque la semntica est asociada al "significado" o "funcin" de esa sentencia (o un grupo de sentencias), pero el compilador no puede determinar qu quiere hacer elprogramador. Un snippet es un segmento de una o ms sentencias de programacin, y permite
3

reutilizar cdigos, hacer cdigos ms eficientes o facilitar el trabajo al programador.

Funciones bsicas de entrada y salida Hasta ahora, todas las funciones descritas tomaban sus argumentos y devolvan un valor sin interactuar con el exterior. A la hora de realizar programas "reales" es necesario que stos sean capaces de almacenar resultados y leer datos de ficheros, realizar preguntas y obtener respuestas del usuario, etc. Una de las principales ventajas del lenguaje Haskell es que permite realizar las tareas de Entrada/Salida de una forma puramente funcional, manteniendo la transparencia referencial y sin efectos laterales. Para ello, a partir de la versin 1.3 se utiliza una mnada de Entrada/Salida. El concepto de mnada tiene su origen en una rama de las matemticas conocida como Teora de la Categora. No obstante, desde el punto de vista del programador resulta ms sencillo considerar una mnada como un tipo abstracto de datos. En el caso de la mnada de Entrada/Salida, los valores abstractos son las acciones primitivas correspondientes a operaciones de Entrada/Salida convencionales. Ciertas operaciones especiales permiten componer acciones de forma secuencial (de forma similar al punto y coma de los lenguajes imperativos). Esta abstraccin permite ocultar el estado del sistema (es decir, el estado del mundo externo) al programador que accede a travs de funciones de composicin o primitivas. Una expresin de tipo IO a denota una computacin que puede realizar operaciones de Entrada/Salida y devolver un resultado de tipo a. A continuacin se declara una sencilla funcin que muestra por pantalla la cadena "Hola Mundo": main::IO() main = print "Hola, mundo!" La funcin main tiene tipo IO () indicando que realiza Entrada/Salida y no devuelve ningn valor. Esta funcin tiene un significado especial cuando el lenguaje es compilado, puesto que es la primera funcin evaluada por el sistema. En esta ocasin, se utiliza la funcin print declarada en el Standar prelude que se encargar de imprimir su argumento en la salida estndar. Introduccin al lenguaje Haskell 34 A continuacin se muestran algunas de las funciones bsicas de Entrada/salida predefinidas: putChar::Char->IO () Imprime un caracter getChar::IO Char Lee un caracter putStr::String->IO () Imprime una cadena
4

putStrLn::String->IO () Imprime una cadena y un salto de lnea print::Show a => a ->IO () Imprime un valor de cualquier tipo imprimible (perteneciente a la clase Show) getLine::IO String Lee una cadena de caracteres hasta que encuentra el salto de lnea getContents::IO String Lee en una cadena toda la entrada del usuario (esta cadena ser potencialmente infinita y se podr procesar gracias a la evaluacin perezosa) interact::(String->String)->IO () Toma como argumento una funcin que procesa una cadena y devuelve otra cadena. A dicha funcin se le pasa la entrada del usuario como argumento y el resultado devuelto se imprime. writeFile::String->String->IO () Toma como argumentos el nombre de un fichero y una cadena; escribe dicha cadena en el fichero correspondiente. appendFile::String->String->IO () Toma como argumentos el nombre de un fichero y una cadena; aade dicha cadena al final del fichero correspondiente. readFile::String->IO String Toma como argumento el nombre de un fichero y devuelve el contenido en una cadena. A continuacin se muestran dos programas sencillos: el primer programa convierte la entrada del usuario a maysculas. main = interact (map toUpper) El siguiente programa escribe en el fichero "tabla.txt" una tabla con los cuadrados de los 10 primeros nmeros naturales. main = appendFile "tabla.txt" (show [(x,x*x) | x<[1..10]])
Bibliografa: http://ocw.upm.es/ciencia-de-la-computacion-e-inteligencia-artificial/fundamentosprogramacion/contenidosteoricos/ocwfundamentosprogramaciontema4.pdf http://php.net/manual/es/language.operators.precedence.php http://es.scribd.com/doc/50623758/20/Funciones-basicas-de-Entrada-Salida http://www.alegsa.com.ar/Dic/sentencia.php

También podría gustarte