![]() |
![]() |
Variables
Variables.-
El uso de variables es un recurso
fundamental en programación. Consideremos una variable informática como un
recipiente en el que podemos depositar un valor cualquiera, para después hacer
uso de él dentro de una instrucción, de esta forma no tendremos que tocar la
instrucción cada vez que queramos alterar el valor que se introducirá, sino
simplemente asignar antes un nuevo valor a la variable.
Una variable no es más que un
espacio de nuestra memoria RAM (una dirección de memoria) que queda reservado
en el momento en que se crea la variable, e identificado temporalmente con el
nombre que se le asigne a dicha variable. Cada vez que se asigne un valor a la
variable, el programa lo que hace es depositar ese valor en dicha dirección
reservada. Cuando ejecutemos una instrucción que contenga esa variable, el
programa irá a ese espacio de memoria, tomará el valor que contenga y lo pondrá
en el lugar del nombre de la variable dentro de la instrucción.
Por ejemplo, si en un script para
mIRC hemos creado una variable llamada %num, a la que hemos asignado el valor
3.14159, podemos tener una instrucción como la siguiente:
Echo –a El valor
asignado es: %num
Esta orden presentará en la ventana
activa el mensaje que diga:
“El valor asignado
es: 3.14159”
Si queremos que el valor que se
presente sea otro, no tenemos mas que asignar previamente una valor distinto a
la variable.
El uso de las variables es sencillo,
en mIRC lo único que hace falta es identificarlas con un nombre de nuestra elección
y precederlas del símbolo %.
Para crear nuestras variables en
mIRC procederemos usando la siguiente orden:
set <%varable>
[valor]
Por ejemplo:
set %num 3.14159
No es necesario preocuparse de que
tipo es la información que se deposite dentro de la variable, es decir, si se
trata de una cadena de caracteres, de un número entero o un número que contenga
parte entera y decimal, esta distinción la hace el programa en el momento en
que hagamos uso de ella; en principio todas las variables se consideran como
una cadena de caracteres, pero si empleamos para manejarlas operadores
aritméticos, el programa las transforma internamente en el valor numérico que
corresponda, la única limitación es que solo se consideraran los cinco primeros
valores decimales, es decir, los cinco primeros dígitos tras la coma decimal.
Recursos de asignación.-
Asignar valores a una variable se
puede hacer de forma directa como hemos visto, o de forma indirecta a través de
algún recurso del programa. Por ejemplo, si queremos que la variable %MiNick
reciba el nick que estemos usando en cada momento sin tener que especificarlo
en cada momento, podemos recurrir a la función o identificador $me, que nos
devuelve nuestro nick actual. La asignación sería entonces:
set %MiNick $me
También podemos asignar a una
variable el valor de otra variable:
set %var2 %var1
Incluso podemos hacer que el
programa nos pregunte que valor queremos asignar cuando el script llegue a ese
punto:
set %variable
$$?=”Introduce un valor para la variable”
Asimismo es posible también hacer
que una variable reciba directamente el resultado de operaciones aritméticas
sencillas:
%x = 5 + 1 à Suma
%x = 5 - %y à Resta
%x = %y * 2 à Producto
%x = %z / $2 à División
%x = $1 % %h à Módulo (Resto de la división: $1 entre %h)
%x = 2 ^ %w à Potencia
Solo es posible asignar el resultado
de operaciones simples, para el uso de operaciones más complicadas es preciso
recurrir al uso de la función $calc (ver identificadores).
Finalmente podremos hacer
incrementos o decrementos del valor numérico de un variables con las ordenes.
inc %varciable à Incremento
dec %variables à Decremento
Por ejemplo:
set %valor 5
set %cifra 2
dec %valor %cifra
echo –a El valor
actual es: %valor
En la pantalla aparecerá el
siguiente mensaje:
“El valor actual
es: 3”
Si en algún momento hacemos uso de
una variable que aún no ha sido creada, o bien, que no contiene ningún valor,
está devolverá el parámetro $null (nulo), esto solo será útil en las
comparaciones de tipo if-else.
NOTA.-
Podemos consultar todas las variables existente en un momento determinado, así
como el valor que contienen (alterándolo manualmente si lo deseamos) desde el
menú Herramientas, Editor de script, en la solapa “variables”.
Eliminación de variables.-
Eventualmente es posible también la
eliminación de variables, es decir, hacer que desaparezca la reserva de memoria
que la creación de la variable supuso. La orden para esto es la siguiente:
unset <%variable_1>
Es posible usar también el carácter
* para eliminar grupos de variables, por ejemplo:
unset %nom*
Esta orden eliminará todas las
variables cuyo nombre empiece por “nom”
Finalmente podemos también eliminar
todas las variables instaladas con la orden:
unsetall
La estructura condicional
(IF-ELSE).-
La estructura IF-ELSE permite
establecer una alternativa dentro de una secuencia de órdenes. Es decir,
determinar que el programa ejecute una instrucción o instrucciones si se cumple
o cumplen determinadas circunstancias y en caso contrario, o bien no hacer
nada, o 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 que nos envíe un mensaje a la pantalla de estado avisándonos de cuanto
lag tenemos. Esto no es posible hacerle mediante una secuencia lineal de
instrucciones, es preciso que el programa discierna en algún momento si procede
o no ejecutar la orden. 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:
if (valor_1 operador valor_2)
{
comandos }
elseif (valor_1 operador
valor_2) {
comandos }
else { comandos }
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
(%variable1 > %variable2) {
echo –s
Atención, la primera variable es mayor que la segunda!!!
splay
c:\sonidos\alarma.wav
}
Esta orden compara el contenido de
dos variables, y solo si la primera es mayor que la segunda enviará un mensaje
a la ventana de estado y hará sonar un sonido wav que supuestamente tenemos
guardado en el directorio de la unidad c: llamado sonidos.
Obsérvese que la condición if se debe de poner entre paréntesis y
las instrucciones internas a ejecutar se encerrarán entre llaves (si solo se
usa una instrucción no son necesarias las llaves).
Como se puede ver en la sintaxis
general de if, junto a este se
pueden usar otras dos instrucciones: elseif
y else, aunque estas solo de forma opcional.
La sintaxis de if se puede
interpretar de la siguiente forma: Si (pasa
esto) { Haz esto } la de elseif de la forma: En caso
contrario, si (pasa esto) { Haz
esto }. El else permite ejecutar una seria de instrucciones en caso de que lo
anterior no se haya producido, las instrucciones dentro del else se ejecutarán siempre que no haya
resultado cierto en la condición if
ni, de existir, en elseif.
Es posible asimismo 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” que al ejecutarse, nos pida tres números cualesquiera que
cargará en tres variables, a continuación evaluará cual es mayor de las tres y
nos lo imprimirá en la ventana de estado, para eso podríamos hacer lo
siguiente:
/numeros {
set %A
$$?=”Introduce el primer número”
set %B
$$?=”Introduce el segundo número”
set %c
$$?=”Introduce el tercer número”
if (%A >
%B) {
if (%a > %C) { echo –s El
mayor número es %A }
else { echo –s El
mayor número es %C }
}
elseif (%B > %C) {
echo –s El mayor número es %B }
else {echo –s El
mayor número es %C}
unset %A %B
%C
}
Los operadores de
comparación que podemos usar dentro de la condición de un if son los siguientes:
A == B à A es igual a B
A != B à A es distinto de B
A < B à A es menor que B
A > B à A es mayor que B
A >= B à A es mayor o igual que B
A <= B à A es menor o igual que B
A // B à A es múltiplo de B
A \\ B à A no es múltiplo de B
A isin B à La cadena de caracteres A se
encuentra dentro de la cadena B
A iswm B à La cadena A es idéntica a la
cadena B
A isnum B à A es un numero incluido en la
cadena B. Si no se pone B se evalúa solo si A es un número.
A isletter B à Igual que el anterior pero con
letras en lugar de números.
A ison B à El nick A está en el canal B
A isop B à El nick A es operador en el canal
B
A isvo B à El nick A tiene voz en el canal B
A ischan à El nick A está en el mismo canales
que nosotros en este momento
A isauto B à El nick A está en nuestra lista de
auto-op para el canal B (B es opcional)
A isignore à Ell nick A esta en nuestra lista
de ignorados
A isprotect B à El nick A es protegido en el canal
B
A isnotify à El nick A está en nuestra lista de
notify
En esta tabla se han usado, para
hacerla mas comprensible, genéricamente 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 se cumpla sino cuando no se cumpla.
También es posible crear condiciones
más complejas combinando varias con los operadores
lógicos. El mIRC admite dos tipos de operadores lógicos para enlazar entre
sí dos o más condiciones simples formando así una sola condición múltiple:
1. Operador AND (&&), en castellano “y”.
Si ((pasa esto) y (esto) y (además
esto)) { Haz esto }
Por ejemplo:
if (($me !iswm Juan) && ($me
isop #ayuda)) { mode $me –o #ayuda }
Esta instrucción comprobará si mi
nick es distinto de Juan, y además si tengo el estado de operador en el canal
#ayuda, de suceder ambas cosas me retirará dicho estatus.
2. Operador OR (||), en castellano “o”.
Si ((pasa esto) o (esto) o (esto otro)) { Haz esto }
Por ejemplo:
if ((%A > 20) || (%B < 10)) { echo –s Variable
fuera de rango }
Esta instrucción comprobará si la variable %A es un número
en el rango [10-20], en caso contrario manda un aviso a la ventana de estatus.
El comando goto.-
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:
goto <etiqueta>
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:
/CargarVar
{
:PideDato
set %valor $$?=”Introduce un número entre 0 y
9”
if ((%valor < 0) || (%valor > 9)) {
echo –a Dato erróneo, introduzca solo un dígito
entre 0 y 9
goto PideDato
}
}
Este alias es una sencilla rutina que nos permite aceptar
valores para una variable, depurando que solo se introduzca un dígito entre 0 y
9, de no ser así el alias volverá una y otra vez a la etiqueta PideDato
solicitando un nuevo valor para la variable.
Ejemplos:
1.- El siguiente alias nos presentará la lista de
operadores del canal en que nos encontremos en este momento. Se puede observar
el empleo de la instrucción de salto incondicional (goto), el uso del parámetro $nick(canal,número),
el comando inc(%variable) y la
estructura if.
/listaOps {
echo –a * Listando Operadores en #
set %i 1
:sigue
set %nick
$nick(#,%i)
if (%nick
== $null) { goto final }
if (%nick isop #) { echo 3 %nick es un Op }
inc %i ;(Se incrementa en un la variable %i)
goto sigue
:final
echo –a * Fin de la lasta de operadores de #
}
2.- Este ejemplo presenta un alias que imprimirá en la
pantalla de estatus una tabla de caracteres ASCII entre el 33 y el 241 ambos
inclusive.
/TablaASCII
{
set %num 33
echo –s Tabla ASCII
:presenta
if (%num > 241) { goto fin }
echo –s $chr(%num) es el carácter ASCII del número:
%num
inc %num
goto presenta
:fin
echo –s Fin de la lista
}