A menudo quiero activar una determinada función solo una vez, pero necesito activarla desde otra función a la que se llama repetidamente. Por ejemplo, tomar una instantánea de algo para usarlo más tarde. Normalmente lo hago estableciendo un booleano global.¿Cómo activar una función una vez, y solo una vez ...?
Me pregunto si la forma en que lo hago es en realidad la mejor manera?
¡Me parece recordar que las variables globales son malas y las variables booleanas globales son incluso peores!
De todos modos, esta es la forma por lo general puedo lograr que provocó un cierto método sólo una vez:
En mi conjunto inicial de variables ...
private var myStatus:Boolean = false;
Luego, dentro de la función que es llamada a menudo .. .
if (!myStatus) {
doMyFunction();
myStatus = true;
}
parece bastante lógico para mí, pero es lo correcto ?
ACTUALIZACIÓN: Bueno, en base a lo que he aprendido de sus respuestas, en lugar de comprobar una variable booleana mundial, ahora en primer lugar comprobar si existe el nodo XML (estoy almacenar las imágenes dentro de una estructura XML antes de cualquier escritura para disco) y, si no lo hace, añado un nuevo nodo con los datos de imagen codificados en base64. Todavía configuro un indicador booleano para luego poder sobreescribir la imagen en blanco con los datos de imagen editados por el usuario si fuera necesario. Funciona perfectamente ¡Gracias por toda tu ayuda!
Ahora también me siento más cómodo con el uso de ese sistema particular (hilo inseguro) en ciertas situaciones.
Pero, ¿qué ocurre si la función devuelve el resultado de una declaración de caso y quieres que una de las declaraciones de casos pueda ejecutar una función? solo la primera vez que se devuelve? ¿O todavía no lo entiendo? – defmeta
@defmeta: Creo que significa considerar por qué solo está ejecutando el código una vez. Si es para hacer la configuración, tal vez podrías simplificar moviendo la configuración a una etapa anterior. Si está almacenando en la memoria caché un resultado costoso que quizás nunca sea necesario, entonces, seguro, siga adelante y hágalo en el primer uso. –
@defmeta: onebyone tiene razón, ¿tal vez podría ser un poco más específico sobre lo que debe hacer su función run-once? ¿Hay efectos secundarios al llamar a esta función? ¿Qué pasa si lo llamas dos veces? – rojoca