La estructura condicional
(IF-ELSE)
La estructura IF-ELSE permite establecer una bifurcación o alternativa dentro de una secuencia de ordenes. Es decir, en ocasiones es posible que deseemos que el programa ejecute una instrucción o instrucciones, pero solo si se cumple determinada circunstancia, y, en caso contrario, o bien no hacer nada, o bien ejecutar otras instrucciones diferentes. Por ejemplo, queremos hacer un alias que a intervalos de un minuto mida nuestro lag, y solo si este supera los 15 segundos nos envíe un mensaje a la pantalla de Status avisándonos de cuanto lag tenemos. Esto no es posible hacerlo mediante una secuencia lineal de instrucciones; es preciso que el programa discierna en algún momento si procede o no ejecutar la orden de imprimir un mensaje. Esta posibilidad es la que nos facilita la estructura IF. En definitiva, IF comparará valores, y ejecutará o no diferentes instrucciones, en función del resultado de la comparativa. El formato general completo de la estructura IF es el siguiente: La orden if comparará Valor_1 y Valor_2 mediante un operador de comparación. En función de esta comparación ejecutará o no el comando o comandos incluidos dentro de las llaves. Por ejemplo:if (Valor_1 operador Valor_2) { comandos } Esta orden compara del contenido de dos variables, y solo en caso de que la primera variable sea mayor que la segunda enviará un mensaje a la pantalla de Status, y hará sonar un sonido Wav que supuestamente tenemos dentro de un directorio de la unidad C: llamado "sonidos".if (%Variable_1 > %Variable_2) { Obsérvese que la condición del if se debe de poner entre paréntesis, y las instrucciones internas a ejecutar estarán encerradas entre llaves (si solo hay una instrucción no son necesarias las llaves). Como se puede ver en la sintaxis general del if, junto este se pueden emplear otras dos instrucciones: elseif y else, aunque estas solo de forma opcional. Si podemos leer la sintaxis de IF de la siguiente forma: la del elseif equivaldrá a: El anexo else es una posibilidad que permite ejecutar una serie de instrucciones en caso de que lo anterior no se haya producido. Las instrucciones comprendidas dentro del else se ejecutarán siempre que no hay resultado cierta la condición del if ni, de existir, la del elseif. Si no se especifica un else, el script sencillamente continuará a desde la instrucción siguiente al último "}", o bien terminará si no hay nada más. Es perfectamente posible "anidar" instrucciones if, es decir, incluir más if’s dentro del bloque de instrucciones de un if. Por ejemplo, queremos hacer un alias que se llame "números". Este, al ejecutarse, nos pedirá tres números cualesquiera que cargará en tres variables, a continuación evaluará cual es el mayor de los tres y nos lo imprimirá en la ventana de Status. Podríamos hacer algo como lo siguiente:
set %A $$?="Introduce el primer número" set %B $$?="Introduce el segundo número" set %C $$?="Introduce el tercer número" if ( %A > %B ) {
else { echo -s El mayor es %C } } elseif ( %B > %C ) { echo -s El mayor es %B } else { echo -s El mayor es %C } unset %A %B %C
En esta tabla se han usado, para hacerla más comprensible, los operándos genéricos A y B; en su lugar podemos usar valores numéricos, cadenas de caracteres, variables (identificándolas con su nombre precedido del símbolo %), o identificadores (con su nombre precedido del símbolo $). Si anteponemos el símbolo ! delante de cualquiera de los operadores de la tabla anterior este será negado, es decir, la condición se evaluará como cierta no cuando suceda eso, sino cuando no suceda. Hasta ahora hemos visto como la estructura if puede evaluar una condición simple; no obstante es también posible crear condiciones complejas combinando varias con o operadores lógicos. El mIRC admite dos tipos de operadores lógicos para enlazar entre sí dos o mas condiciones simples formando así una sola condición múltiple:
Por ejemplo: Esta instrucción comprobará si mi nick es distinto de SomaTic, y además si tengo el estatus de operador dentro del canal #ayuda_irc, de suceder ambas cosas me retirará dicho estatus.
Por ejemplo: Esta orden comprobará que la variable %A
contiene un número en el rango [10-20] , en caso contrario manda al status
un aviso. El uso del comando goto es un recurso muy útil en especial cuando se utiliza desde dentro de una estructura if. La sintaxis de este comando es: La orden goto provoca un salto automático dentro de la secuencia que el programa utiliza para leer las líneas de un script, pasando directamente a leer a partir de una determinada etiqueta, las líneas que continúan a partir de esta. Una etiqueta no es más que una palabra que ocupa una línea del script, y que se identifica como tal por tener el símbolo ":" delante. La llamada a una etiqueta desde la orden goto no debe de llevar los dos puntos delante. Ejemplo:
:PideDato
if (( %valor < 0 ) || ( %valor > 9 )) {
goto PideDato EJEMPLOS: 1- El siguiente alias nos presentará la lista de operadores del canal en que nos encontramos en este momento. Se puede observar el empleo de la instrucción de salto incondicional (goto), el uso del parámetro $nick(canal,numero), el comando inc(%variable), y la estructura if.
set %i 1 :sigue set %nick $nick(#,%i) if ( %nick == $null ) { goto final } if ( %nick isop # ) { echo 3 %nick is un Op! } inc %i ;(Se incrementa en uno la variable %i) goto sigue :final echo -a * Fin de la lista de operadores de #.
echo -s Tabla ASCII :presenta if ( %num > 241 ) { goto fin } echo -s $chr( %num ) es el carácter ASCII carácter ASCII número: %num inc %num goto presenta :fin echo -s Fin de la tabla. |