Exit() en funciones

Pregunta Sin Miedo no te cortes cualquier cosa para empezar - Autoit se comienza facilmente.Para Ordenes o Comandos sueltos. Ver nota como preguntar.
Responder
avechuche
Hacker del Foro
Mensajes: 188
Registrado: 13 Ago 2009, 09:53

Exit() en funciones

Mensaje por avechuche »

Bueno resulta que quiero salir de una funcion, normalmente uso "Return" para salir en un momento dado, pero eso si la funcion de la cual estoy saliendo, no esta dentro de otra función. El tema es asi
Supongamos:

Código: Seleccionar todo

Func _Primera()

          Func _Primera_A()

                    Func _Primera_B()

                             Segun lo que pase aca a tiene que seguir normalmente con el codigo o tiene que salir por completo de la Funcion _Primera() y asi seguir con la segunda, tercera ... etc, pero si pongo return no me sirve para nada. Lo que habia pensado es poner las funcions y adentro Whiles para poder salir con "ExitLoop X", pero si hay algo mas practico. mejor :D

                    EndFunc

          mas codigo ....

          EndFunc

          mas codigo ....

EndFunc

Func _Segunda()
EndFunc

Func _Tercera()
EndFunc
Gracias desde ya
Avatar de Usuario
sahsanu
Mensajes: 9
Registrado: 02 May 2011, 05:58
Ubicación: Zaragoza, España

Re: Exit() en funciones

Mensaje por sahsanu »

Hola,

Lo que tienes que hacer es gestionar los errores en tus funciones y actuar en consecuencia.

Abajo te dejo un ejemplo tonto que he hecho pero creo que muestra lo que quiero decir (o eso espero) :smt002

Si ejecutas el script verás lo siguiente:

01.- Soy la función _Primera()
1A.- Soy la función _Primera_A()
1B.- Soy la función _Primera_B()
1B.- Fin de la función _Primera_B()
1A.- Fin de la función _Primera_A()
01.- Fin de la función _Primera()

02.- Soy la función _Segunda()
03.- Soy la función _Tercera()

Es decir, se ejecutan todas las funciones. Ahora en el script cambia _Primera_B(1) por _Primera_B(2) para simular un error en esta función y verás que no ejecuta nada más en las tres funciones _Primera y salta directamente a la segunda función.

01.- Soy la función _Primera()
1A.- Soy la función _Primera_A()
1B.- Soy la función _Primera_B()
02.- Soy la función _Segunda()
03.- Soy la función _Tercera()

Código: Seleccionar todo

_Primera()
_Segunda()
_Tercera()

Func _Primera()
	ConsoleWrite("01.- Soy la función _Primera()" & @CRLF)

	_Primera_A()
	If @error Then Return SetError(1, 0, -1)

	ConsoleWrite("01.- Fin de la función _Primera()" & @CRLF)
EndFunc   ;==>_Primera

Func _Primera_A()
	ConsoleWrite("1A.- Soy la función _Primera_A()" & @CRLF)

	_Primera_B(1) ;llama a la función con 1 para que se ejecute todo el script
	If @error Then Return SetError(1, 0, -1)

	ConsoleWrite("1A.- Fin de la función _Primera_A()" & @CRLF)
EndFunc   ;==>_Primera_A

Func _Primera_B($variableB)
	ConsoleWrite("1B.- Soy la función _Primera_B()" & @CRLF)

	If $variableB = 2 then Return SetError(1, 0, -1)

	ConsoleWrite("1B.- Fin de la función _Primera_B()" & @CRLF)
EndFunc   ;==>_Primera_B

Func _Segunda()
	ConsoleWrite("02.- Soy la función _Segunda()" & @CRLF)
EndFunc   ;==>_Segunda

Func _Tercera()
	ConsoleWrite("03.- Soy la función _Tercera()" & @CRLF)
EndFunc   ;==>_Tercera
Responder