Funciones en batch

Solo disponible en BuenasTareas
  • Páginas : 7 (1531 palabras )
  • Descarga(s) : 0
  • Publicado : 3 de febrero de 2012
Leer documento completo
Vista previa del texto
Funciones en Batch

Saludos a todos, sé que me desaparezco a veces, pero he estado ocupado (como siempre), pero esta noche me saque el tiempo para crear este tema, bueno quizás algunos no se han dado cuenta y otros quizás lo usan sin darse cuenta, pero no lo hemos planteado en concreto (o al menos eso creo yo), así que creo que soy el primero en la implementación del concepto en BATCH, perdónsi ya alguien lo ha establecido concretamente y me estoy llevando los créditos pero por lo menos hasta ahora no lo he visto en ningún lado .

Las funciones en BATCH, como todos sabemos al igual que las matrices no existen, pero podemos simularlas . ¿Cómo así?
Pues sencillo, al simular una matriz lo que hacemos en BATCH es asignarle las dimensiones con mas variables en la variable XD, con loque conocemos de "Setlocal enabledelayedexpansion" le agregamos al CODE la posibilidad del las retrasadas je je , así usando "!" para la llamada de estas y una variable llamada "Hola", seria matriz en "Hola[%n%]" y su contenido seria invocado con "!Hola[%n%]!", etc. Este tema ya lo hemos tratado si quieren saber más pues busquen en el foro o GOOGLE, siempre se encuentran muchas cosas interesantes.¿Qué es una función en programación?

Según: http://www.alegsa.com.ar/Dic/funcion.php
En programación, una función es un grupo de instrucciones con un objetivo en particular y que se ejecuta al ser llamada desde otra función o procedimiento. Una función puede llamarse múltiples veces e incluso llamarse a sí misma (función recurrente).
Las funciones pueden recibir datos desde afuera alser llamadas a través de los parámetros y deben entregar un resultado.

Se diferencian de los procedimientos porque estos no devuelven un resultado.

¿Cómo la implementamos en BATCH?

Bueno, a lo que estamos aquí, las funciones en BATCH podemos simularlas con algo común, el comando "CALL", la diferencia con esto es que estableceríamos los parámetros con %1 %2 %*, definiríamos los campos y/ovariables etc.
Podemos hacerlo de dos maneras, definiendo los campos antes del CALL (cosa que no recomiendo) o enviando los campos al llamar las etiquetas.

El primer ejemplo de función a mi estilo es:

Código
@echo off
Setlocal enabledelayedexpansion
Set/p "num=Digito a multiplicar por 2: "
Call:Funcion_multiplicarPorDos resultado !num!
echo.!resultado!

pause>nul&exit:Funcion_multiplicarPorDos
set/a "%1=%2*2"
goto:EOF


Como vemos la función multiplica por 2 y el resultado es pasado por parámetro para ser establecido en la función.

Ok, está entendido, pero ¿qué hay de diferencia con el GOTO?
Pues sencillo, el GOTO nos confunde al usarlo,no nos permite "%n" , y la mejor simulación nos la provee CALL, el EOF de CALL lo podemos usar para finalizar unafunción y continuemos el CODE donde estaba, al igual que una función de otros lenguajes.

Revisión, entonces, veamos pues algunos dirán, pero yo implemento funciones a cada rato, y bueno quizás sí, pero en BATCH esto no veo que muchos lo hagan, lo que si veo mucho es que usan como dice la definición, un procedimiento, el cual no retorna nada.


Con esta forma de hacer una función podemossimular las funciones de C# que se asignan por OUT.
Me gustaría agregar que por convicción al usar una función en las etiquetas pongan function_nombreDeLaFuncion o funcion_nombreDeLaFuncion para diferenciarlas de los procedimientos.


Por ejemplo este es un procedimiento:
Código
@echo off

:: Send the length of the variable %MyVar%

:: to the variable %length%

:: by Secret_Doom
set#=%MyVar%
set length=0

:loop
if defined # (set #=%#:~1%&set /A length += 1&goto loop)
echo MyVar is %length% characters long!


Podemos ver que aquí, al finalizar solo se se lleno la variable length sin llamadas ni continuacion del CODE.

Veo tambien que los batcheros usamos esto mucho con call y casi como una funcion, e incluso hemos creado funciones, pero como comandos externos....
tracking img