Espiral

Expresiones

El concepto de expresión puede resultar un poco confuso, pero en realidad es muy sencillo. En PHP, las expresiones son trozos de código que devuelven un valor. Hay muchos tipos de expresiones; las más usadas y usuales son la asignación de variables ($var=1;), las llamadas a función (print("aiya");), la operación de variables y valores sueltos, ya sea aritméticamente o comparativamente (1==1, 1+1), o los simples valores o variables sueltos ($var, 123).

Como dije antes, las expresiones devuelven un valor. Un valor puede ser true (verdadero) si es distinto de 0, o false, si es igual a 0, o bien es nulo (sin valor).

No te preocupes si no has entendido muy bien qué son las expresiones; son algo muy sencillo que se aprende sobre la marcha, pero al menos te haces una idea.

Sentencias

Era necesario explicar más o menos lo que son las expresiones porque las sentencias funcionan en base a ellas.

En realidad, una sentencia es casi todo lo que acaba en punto y coma (;) o está entre llaves ({ }); serían algo similar a las frases de un texto, y se ejecutan una a una. Las sentencias muy a menudo también son expresiones que devuelven un valor. Pero yo me voy a referir a las sentencias de control, una serie de palabras clave que sirven para controlar la ejecución del programa, y encauzarla en una u otra dirección.

Sentencias condicionales

Las sentencias condicionales ejecutan una expresión (que suele ser una comparación) y, si es cierta (devuelve true), ejecuta un bloque de código.

Sentencia if

Es la más sencilla y la más usada.

<?
if(2+2==5) {
     print("Esto no se imprime, porque es falso.");
}
 
if(1) {
     print("Esto se imprime porque 1 devuelve true.");
}
 
$var=2;
 
if($var=1) {
     print("Cuidado con esto, = no es lo mismo que ==, por lo que esto se imprimirá.");
     // Ahora $var vale 1
}
 
if($var<=20) {
    print("1 es menor o igual que 20.");
}
?>

Combinadas con if van las sentencias elseif, que, si la expresión del if es falsa, vuelve a hacer otra comparación, y else, que, si las expresiones de los if y los elseif son falsas, se ejecuta.

<?
if(2+2==5) {
     print("No se imprime.");
} elseif(2+2==4) {
     print("Esto sí se imprime.");
} else {
     print("Esto se imprimiría si 2+2 no fuera 5 ni 4.");
}
?>
Sentencia switch

Este tipo de sentencia toma una expresión, y según lo que devuelva, ejecuta una cosa u otra. Vamos a verlo con un ejemplo con líneas numeradas.

1
2
3
4
5
6
7
8
9
10
11
12
13
<?
switch(2+2) {
     case 5:
          print("Esto no se imprimirá.");
          break;
     case 4:
          print("Esto sí se imprimirá.");
          break;
     default:
          print("Esto se imprimiría si 2+2 no fuera 5 ni 4.");
          break;
}
?>

En la línea 3 vemos una nueva sentencia, case, que lo que hace es comparar la expresión que viene detrás suya con la expresión del switch, la cual vemos en la línea 2. Además, vemos que los bloques case no tienen llaves, sino que empiezan por dos puntos (:), y terminan cuando ven una sentencia break como la de la línea 5.

En la línea 9 vemos otra sentencia nueva, default, que sería el equivalente a else en sentencias tipo if. También empieza por dos puntos y acaba con break;.

Como ya te habrás dado cuenta, este ejemplo y el anterior hacen exactamente lo mismo. Entonces, ¿para qué queremos las sentencias switch? Pues supongo que será simplemente por motivos de elegancia :P. No hay nada que if no pueda hacer que switch sí pueda, aunque sí al revés.

Sentencias de bucle

Un bucle es un bloque de código que se repite mientras una expresión sea verdadera. Estas expresiones casi siempre son comparaciones, ya que de lo contrario se generaría, en la mayoría de los casos, un bucle infinito, es decir, que nunca se detendría.

Bucle while

Este es el bucle más sencillo. Si una expresión es verdadera, se ejecuta el bloque, y al acabar, se vuelve a evaluar la expresión; si sigue siendo verdadera, se vuelve a ejecutar el bloque, y así consecutivamente hasta que la condición sea falsa.

1
2
3
4
5
6
7
<?
$var=1;
while($var<=9) {
     print($var);
     $var++;
}
?>

Este código imprimirá 123456789. Con cada repetición se incrementará el valor de $var, como vemos en la línea 5, y se irá repitiendo hasta que $var deje de ser menor o igual que 9, es decir, cuando $var valga 10.

Sentencias do… while

Son muy similares a while. El bloque de código se pone antes de la comparación de while, después de la palabra clave do, y lo que hace es ejecutar al menos una vez el bloque de código, independientemente de que se cumpla la condición; y después de la primera vuelta, si cumple la condición, funciona como un while normal.

<?
do {
     print("Esto se imprimirá una vez aunque 2+2 no sea 5.");
} while(2+2==5);
 
$var=0;
do {
     print("Esto se imprimirá tres veces.");
     $var++;
} while($var<3);
?>
Bucle for

Este es algo más complejo que los anteriores. Entre sus paréntesis se incluye la declaración de una variable, la condición y la operación que se le hará a la variable con cada vuelta. Generalmente esa variable se usará también en el bloque de código. Veamos un ejemplo.

<?
for($i=1;$i<=9;$i++) {
     print($i);
}
?&gt

El código anterior hace lo mismo que el ejemplo que pusimos con while: imprime 123456789. Entre los paréntesis vemos que primero se declara la variable $i con valor inicial 1, luego especificamos la condición, y luego se opera la variable, normalmente con un incremento.

Sentencias útiles en los bucles

Para usar en bucles tenemos algunas sentencias útiles de una sola palabra.

Una de ellas ya la hemos visto: break. Lo que hace es interrumpir en el punto en el que es ejecutada el bucle y continuar con el programa.

<?
$var=1;
while(1) {
     print($var);
     $var++;
     if($var==10) {
          break;
     }
}
?>

Sí, esto hace lo mismo que el ejemplo que puse con for y con while. No tiene mucho sentido, la verdad, porque es mucho más elegante hacerlo con for o while, pero break puede sernos útil en alguna ocasión.

Otra sentencia útil es continue. Es parecida a break; cuando es ejecutada detiene el bucle, pero no continua con el programa, sino que vuelve a comenzar el bucle desde el principio.

1
2
3
4
5
6
7
8
9
10
11
<?
$var=1;
while(1) {
     print($var);
     $var++;
     if($var<10) {
          continue;
     }
     break;
}
?>

Aquí tenemos otra forma aún más surrealista de expresar los ejemplos anteriores; por cada vuelta, si $var sigue siendo menor que 10, el bucle comienza desde el principio; cuando deje de ser menor que 10, el bucle seguirá y se ejecutará break, y el bucle se interrumpirá. También puede sernos útil en alguna ocasión.

Aunque no lo parezca, con el capítulo anterior y este ya se pueden hacer multitud de programas, aunque la verdad no muy útiles; las expresiones, las variables y las sentencias de control son los pilares base de todo PHP. Su uso combinado con las funciones y la entrada de datos por medio de formularios nos permitirán hacer todo lo que se nos ocurra.

Resumen

  • Las expresiones son trozos de código que devuelven un valor, que puede ser true (distinto de 0) o false (igual a 0, o bien nulo).

  • Las sentencias de control nos permiten controlar cómo funcionará el programa en base al resultado de expresiones.

  • Las sentencias condicionales if se ejecutan si una expresión devuelve true; switch toma una expresión y ejecuta una cosa u otra según lo que devuelva.

  • Los bucles while se ejecutan mientras una expresión sea verdadera; los bucles do... while se ejecutan al menos una vez; for es una forma compleka de bucle en la que se declara, compara y opera una variable.

  • La sentencia break interrumpe el bucle y sigue con el programa; continue vuelve al inicio del bucle.

Próximo capítulo: Funciones

Threkk
06/05/2007 6:52 am
 

¿Qué decir…? Que gracias a ti estoy aprendiendo PHP más allá del “prueba y a ver que pasa”…

Shock
06/05/2007 7:08 am
 

Aiya!

Threkk y quien más lea esto, por favor, sed jodidamente críticos :P. Quiero que se entienda y que sea útil, así que puteadme cada vez que veais una minucia de fallo.

dopimpon
07/05/2007 5:36 am
 

Hola, gracias por el cursito, está todo muy bien explicado.

Cómo haces para insertar código coloreado?? tan bonito con los numeritos de línea? :)
Saludos

Threkk
07/05/2007 8:29 am
 

Pues mira, te voy a dar caña ;D :

Estaría bien que pusieras ejemplos prácticos de lo que vayas explicando; quiero decir, que no se produzca el “¿Y esto pa’qué sirve?”

Shock
07/05/2007 11:24 am
 

Aiya!

Dopimpon, uso el plugin WP-Syntax que puedes encontrar en la página de WordPress, wordpress.org.

Threkk, lo he pensado, pero es que ahora mismo no puedo darte ningún ejemplo útil. Quédate simplemente con lo que hacen, no para qué lo hacen. Eso se irá aclarando conforme avancemos :P.

Te adelanto que, por ejemplo, para mostrar los comentarios de esta entrada, se usa un bucle; para saber si los comentarios están o no abiertos, se usa un condicional. Y muchos otros procesos que tienen la base en eso que ves arriba :P.

marbu
15/05/2007 12:06 pm
 

joder, que las asignaciones devuelven un lógico, que fuerte… si es que estos lenguajes de hoy día ya no tienen respeto xD

(jo, acabo de probarlo en java y no me deja hacerlo, que decepcion -_-)

por favor, sed jodidamente críticos :P . Quiero que se entienda y que sea útil, así que puteadme cada vez que veais una minucia de fallo.

bwahahaha, pues te tomo la palabra >:-)

primero lo mas tonto: tienes un typo en el resumen, en el cuarto punto: “compleka” :P
luego hay una cosilla que no me ha quedado del todo clara: el continue. Cuando aparece, la ejecución del bucle se para en ese punto y vuelve empezar el bucle desde el comienzo, ok, pero… ¿despues de un continue se vuelve a comprobar la condición del bucle, o directamente se ejecuta de nuevo pase lo que pase? lo primero parece lo más lógico, pero vete tu a saber…

Por lo demás, yo lo he entendido bien, pero tal vez para alguien que no sabe nada de programación le resulte más facil de entender si aparte de explicar lo que hacen las sentencias se las “traduces”. Me explico, es muy muy intuitivo explicar el while traduciendolo literalmente, en plan de que “while(condicion){codigo}” es “mientras la condición sea verdadera se ejecuta el código”, o en el ejemplo del for que has puesto, ayudaría mucho a comprenderlo si por ejemplo le añadiras al código el comentario “para cada valor de i ejecutamos el código entre llaves, empezando con i=1, y aumentandola en 1 en cada vuelta (i++), pero solo mientras i sea menor o igual que nueve (cuando i es mayor que 9 hemos acabado)”. O algo así, como idea :P. En la uni, de hecho, en primero de programación se empieza con un pseudolenguaje con todas las sentencias traducidas al español :P.

venga, que ya tengo ganas de empezar a hacer el pipa de verdad con php! ;-)

marbu
15/05/2007 12:11 pm
 

mierda tio, ¿por qué el blockquote me sale siempre mal? xP

yo hago esto:

lo que ha dicho el alguien

por queee? TT_TT

marbu
15/05/2007 12:23 pm
 

coño, ahora ha salido algo, pero no lo que tenia que salir ¿eso que ha salido es la cita o el codigo? porque en el mensaje de antes se supone que deberia haber salido el codigo del blockquote metido dentro de un bloque “code”… blegh! xP

ahm, vale, lo acabo de googlear y el cite es para poner una url… va a ser que como no he puesto una url en ese campo, por eso me sale mal ¿no? a ver, la prueba definitiva:

marbu ya podía dejar de usar los comentarios para hacer experimentos ¬¬

Shock
16/05/2007 1:24 am
 

Aiya!

En el primer comentario no habías cerrado el blockquote, sencillamente :P.

La etiqueta code es lineal, no de bloque, por lo que hay que poner el code dentro del blockquote :P.

Acabo de comprobar que en C sí que devuelven un valor :P.

Sí, vuelve a mirar la condición :P.

Y sí, puede que tenga que usar más pseudocódigo y esas cosas, pero eso para la siguiente versión :P.

Este blog soporta MyComments y Gravatar.

XHTML: Puedes usar estas etiquetas: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre lang="" line="">

Ego

  • Nombre: Shock Harad
  • Edad: 15 16 17 años
  • Profesión: Estudiante de 4º de ESO 2º de Bachillerato
  • Ubicación: Málaga, Andalucía, España, Tierra, Sistema Solar, Vía Láctea. [...]

Acerca de

[...] Generalmente se hablará de Linux/informática, proyectos propios, alguna reseña de lo que sea... pero, en realidad, cualquier frikada tiene cabida aquí. [...]

Gaticos y monetes

Baúl

Mésenyah Getalc

Tuitis

  • Mi deporte preferido de las noches veraniegas es creer que la sombra de la cadenilla de la lámpara del techo es una cucaracha.
  • @SeoWelsh ¡Hasta enero! Puedo pasarme el cuatrimestre de sarao en sarao =D
  • @Dreamslave En un agujero en el suelo vivía un Harad.
  • [...]

Hamijos

Bla bla bla

  • RSS
  • Egómetro
  • XHTML 1.0 Strict válido
  • CSS válido
  • Hecho en Linux
  • Licencia Creative Commons
  • Uso Konqueror
  • Anda con WordPress
  • RES