Variables, condicionales y bucles

Variables:

Nos sirven para almacenar datos de forma temporal en nuestro script (o no tan temporal;). Las variables se reconocen porque llevan el símbolo del % delante suya, ejemplo: %var

1.- Crear y destruir variables: A la variable se le puede asignar cualquier nombre y cualquier valor.

Existen basicamente 2 formas de setear (crear) una variable:

  • set %nombre_variable valor
  • var %nombre_variable = valor

Para desetearla (destruirla) solo debes de poner: unset %nombre_variable

¿Qué diferencia existe en setear una variable de una forma u otra? utilizando var %variable = valor, creamos una variable que tras terminar de ejecutarse el "evento" que la creo, se destruira (util para variables que "controlen" los bucles); sin embargo con set %var valor, creamos una variable que no desaparecera hasta hacer un unset %var

2.- Setear una variable de forma "especial": solo aplicable para set

Podemos crear una variable que se auto-deseteara (auto-destruira) pasados x seg. Esto es ESENCIAL cuando tratamos de hacer protecciones de flood, repeticiones... Comando: set -uN %nombre_variable valor donde N es el nº de segundos que deben pasar para que se desetee la variable.

También podemos setear la variable de forma que su valor valla disminuyendo en x por cada segundo que pasa. Comando: set -zN %nombre_variable valor donde N es cuanto se va a disminuir la variable por cada segundo que pase.

Por último puedes setear una variable con un valor que sera interpretado como texto plano. Comando set -n %nombre_variable valor de esta forma el valor no sera evaluado. Ejemplo: set -n %var %var2 de esta forma, se creara la variable %var cuyo valor sera %var2; si no se pone el parametro -n, el mIRC evaluara %var2 y le dara su valor a %var

3.- "Jugando" con las variables: inc y dec (si no se indica valor, se incrementa o decrementa en una unidad)

  • inc %var N <--- incrementa el valor de %var en N (obviamente el valor de la variable debe ser un numero)
  • dec %var N <--- decrementa el valor de %var en N

Parametros para ambos "comandos": Los parametros se indican tras el "comando" (ejemplo: inc -u30 %var)

  • -uN <--- la variable es incrementada o decrementada cada N segundos el valor indicado
  • -c <--- incrementa o decrementa la variable por cada segundo que pasa (el valor indicado)

Condicionales:

Es una parte esencial en cualquier código ya que nos permite tomar desiciones. Comando: if (algo) { esto }

1.- Comparadores: Estos son los comparadores más usados, aunque existen muchos más (/help isin)

  • == igual a
  • === igual a (caso sensitivo; descrimina entre mayúsculas y minúsculas)
  • != distinto a
  • > mayor que
  • < menor que
  • >= mayor igual a
  • <= menor igual a
  • isin cadena1 esta dentro de cadena2
  • iswm cadena1 esta contenida de cadena2
  • ison nick esta en canal
  • isop nick es op en canal
  • isvo nick es op en canal

2.- Usando los condicionales (if-then-else):

  • if (2 != 3) { echo -a 2 es distinto que 3 } <--- obviamente esto siempre se cumplira
  • if (%variable == 3) { echo -a la variable es igual a 3 } <--- si el valor de la variable es igual 3...
  • if (Ss ison $chan) { mode # +o Ss } <--- Si Ss esta en el canal, le das op ;)
  • if ($nick == Ss) { mode # +o Ss } <--- Más de lo mismo

Ejemplo: Calculadora (En los alias)

Calcula {
if ($1 == suma) { echo -a $2 + $3 == $calc($2 + $3) }
elseif ($2 == multiplica) { echo -a $2 x $3 == $calc($2 * $3) }
elseif ($2 == divide) { echo -a $2 / $3 == $calc($2 / $3) }
else { echo -a $1 Comando no reconocido }
}
Con este código, hemos creado el comando calcula, al cual le debemos de dar 3 parametros: la operacion a realizar, dato1 y dato2: Calcula operacion dato1 dato2. $1 hace referencia a la operación a realizar, que puede ser suma, multiplica o divide, en caso de que no sea ninguna (else) te indica que el comando no es reconocido.

A tener en cuanta: uso de if-elseif-else; usando if, la comparacion se realiza siempre. Si usamos elseif, la comparación solo se realiza si la comparación anterior no se cumple. else se ejecutan los comandos indicados si ninguna comparación se cumple. OJO: else al igual que elseif requiere de un if que inicie la compracion.

3.- Comparaciones multiples: && y ||

  • if ($nick == $me) && (%aviso == 1) { esto } <--- si se cumplen ambas compraciones
  • if ($nick == $me) || ($nick == Ss) { esto } <--- si se cumple cualquier compración

Bucles:

Es un código que se ejecuta una vez tras otra hasta que se rompa la condición o se cumpla la condición (en función de que sea un bucle tipo while o goto). Como ya he dicho, existen dos tipos de bucle: while y goto. Recomiendo usar el while pues es mucho mas rapido y comodo; aunque el goto es indispensable para algunas funciones. Además puede ser usado sin que se llegue a crear un bucle. OJO: Los bucles se ejecutan hasta que se rompa la condición luego si no tienes cuidado puedes entrar en un bucle sin fin, para parar la ejecución de un bucle sin fin pulsa: CTRL + BREAK o CTRL + PAUSA (el nombre de la 2º tecla puede variar segun el teclado, pero siempre esta junto a los Fx)

1.- Bucle con goto: ejemplo explicativo (En los alias):

dimeOps {
var %tmp = 1
var %nicks = 0
:a
if ($snick(#,%tmp) == $null) { goto fin } ;/*Aqui romperemos la condición, si el nick no existe, se caba el bucle*/
else {
%nicks = %nicks $snick(#,%tmp)
inc %tmp
goto a
}
:fin
echo # %nicks
}

2.- Bucle con while: ejemplo explicativo, el mismo pero con while (En los alias):

dimeOps {
var %tmp = 1
var %nicks = 0
while ($nick(#,%tmp)) { var %nicks = %nicks %nick(#,%tmp) | inc %tmp }
;/* while ($nick(#,%tmp)) <--- mientras eso exista */
echo # %nicks
}