Uso de funciones para inicializar y tomar decisiones JavaScript

Uso de funciones para inicializar y tomar decisiones Problema que usted desea utilizar para inicializar las funciones y tomar decisiones. Teoría general, cuando se escribe un pedazo de código en caso de un cambio de lógica debe tener lugar sobre la base de un contexto, se utiliza una estructura de decisión. Por ejemplo, digamos que están llevando a cabo un interruptor de luz utilizando un programa. Encender la luz si la luz está apagada, y apagar la luz si la luz está encendida. El comportamiento del programa es determinada por las condiciones. Un ejemplo de comportamiento que merece una mirada más cercana es la inicialización. Inicialización normalmente debe ocurrir sólo si se ha hecho ya. La inicialización es importante porque la lógica de inicialización por defecto crea el marco para su aplicación funcione correctamente. Solución A modo de ejemplo, vamos a través de un ejemplo donde se requiere una función de inicialización que se inserta dentro de la función. La lógica es llevar a cabo una inicialización si no ha ocurrido ya. La función que se llama se define como sigue, y se incluya un llamado a la inicialización.

  

Consejo Usted podría utilizar este tipo de código para implementar una inicialización perezosa para escribir código basado en la convención que no realiza una inicialización explícita.

 Fuente: / web / ROOT / ajaxrecipes / JavaScript / makingdecisionsinitialization.html función ClassicalManipulateObject (obj) (info ( "ClassicalManipulateObject", "Arrancar"); if (! didInitialize) ( DoInitialization (obj); ) else ( info ( "ClassicalManipulateObject", "no inicialización necesario"); )assertEquals (3, obj.value); info ( "ClassicalManipulateObject", "Ending");)

 

En el ejemplo, el código en negrita se refiere a la funcionalidad de inicialización. didInitialize es una variable bandera que puede ser verdadera o falsa. Si la didInitialize variable es falsa, entonces la inicialización no tuvo lugar, si el didInitialize variable es cierto, entonces la inicialización se ha producido. Si la inicialización no tuvo lugar, se llama la función DoInitialization. Tenga en cuenta que en la lógica es una variable que representa si la inicialización ha tenido lugar y una función para realizar una inicialización. Este código es problemático, porque la variable tiene que ser definido en alguna parte, y la variable tiene que ser asignados correctamente en alguna parte. Y en algún lugar hay una referencia cruzada entre la variable de estado y el llamado de la funcionalidad de inicialización. Una solución es integrar la mayor parte de la lógica de inicialización en el contexto de la función DoInitialization. Pero el hecho es que en algún lugar hay una variable, y en algún lugar hay una función de inicialización, y en algún lugar hay una referencia cruzada entre la variable y la función de inicialización. Entonces, ¿dónde pones la lógica es irrelevante en la imagen de un "gran" sentido.

Otra solución es que no de la funcionalidad de inicialización como una decisión, sino como un estado. Hay un estado inicial, que consiste en realizar una inicialización y otro Estado para llevar a cabo ninguna inicialización. En cierto sentido, la didInitialize variable es una representación del estado. Teniendo esto en mente, usted sabe que JavaScript trata a sus funciones como objetos. Así, el didInitialize variable podría ser una función y no una variable booleana. Tratar el Estado como una variable que hace referencia a una función que permite simplificar la función que requiere una inicialización. La aplicación de la función de ClassicalManipulateObject se cambia a ManipulateObject, como se ilustra en el siguiente código.

 Fuente: / web / ROOT / ajaxrecipes / JavaScript / makingdecisionsinitialization.html función ManipulateObject (obj) (info ( "ManipulateObject", "Arrancar"); InitializeObject (obj);assertEquals (3, obj.value); info ( "ManipulateObject", "Ending");)

En la ejecución vez, el código en negrita de nuevo representa la funcionalidad de inicialización. Aquí no hay decisión que acaba de una llamada de función a InitializeObject. Usted podría estar pensando: "Yo podría haber hecho lo mismo con la decisión de inicialización basado, en que la decisión se aplica en InitializeObject." Pero esto es incorrecto, porque en la aplicación de InitializeObject, no hay ninguna decisión. La aplicación de InitializeObject inicializa la variable y permite el tratamiento a seguir. Si no hay ninguna decisión sobre si la inicialización, y InitializeObject representa una función para inicializar el estado, a continuación, para cada llamada, el estado se inicializará no puede llamar a esta función de inicialización. La magia está en el hecho de que trata a las funciones como JavaScript objetos. La aplicación de InitializeObject es el siguiente:

función InitializeObject (obj) (obj.value = 3; info ( "InitializeObject", "hacer la inicialización"); InitializeObject = InitializeEmptyObject;)

En la aplicación de InitializeObject, el parámetro obj es inicializado a un valor de 3, y el código en negrita se muestra la reasignación de la función de InitializeObject. Las referencias InitializeObject reasignar una función sin cuerpo, lo que significa que la primera vez InitializeObject se llama, la inicialización se lleva a cabo, pero después de cada llamada es una llamada a una función vacía que no hace nada.

Esta es la aplicación completa de la funcionalidad de inicialización sin utilizar una sola decisión o variable. Una ventaja de este enfoque es que no es necesario averiguar qué variable a la referencia cruzada con la función. La función toma el cuidado de sí mismo, y el usuario puede seguir llamando InitializeObject, sabiendo que todo va a ser atendido. Otra ventaja de este enfoque es que se está creando un motor de estado en el que el siguiente estado es determinado por la ejecución de la situación actual . No hay bloque situado en el centro de decisión que determina el flujo de ejecución global y necesita ser actualizado cada vez que un nuevo Estado debe ser integral. Normalmente, al escribir código en un lenguaje como Java, C # o C + +, no se andan reasignación la aplicación de la función definida. Y debido a que este comportamiento está arraigado en las mentes de los desarrolladores, que ni siquiera consideran que hacer eso. Sin embargo, no hay absolutamente ningún problema de la reasignación de funciones en JavaScript, porque las funciones son objetos. Funciones no son identificadores únicos con una funcionalidad única, ya que pensar en ellos cuando se trabaja con ellos en otros idiomas.

La aplicación de InitializeObject funciona y es una solución completa. Pero hay un pequeño inconveniente en que una vez que InitializeObject ha sido asignado a una función vacía, la funcionalidad de inicialización se ha perdido hasta que la página HTML que se actualiza. Para algunos problemas, que es una solución aceptable. Por ejemplo, puede envolver XMLHttpRequest sólo una vez porque se puede crear una instancia de XMLHttpRequest en el navegador sólo una cierta manera específica. Hay algunos casos, sin embargo, cuando es posible que desee restablecer e inicializar otra vez, y ser capaz de hacer eso, usted necesita para envolver InitializeObject en una función dentro de una función, como se demuestra en el ejemplo siguiente.

 Fuente: / web / ROOT / ajaxrecipes / JavaScript / makingdecisionsinitialization.html función ResetInitializeObject () (InitializeObject = function (obj) (obj.value = 3; info ( "InitializeObject", "hacer la inicialización"); InitializeObject = InitializeEmptyObject;)) ResetInitializeObject ( );

La función de InitializeObject es una variable que se le asigna una función de implementación en el contexto ResetInitializeObject. Receta 2-4 muestra que no hay ninguna diferencia en cómo se declara una función, aunque parezca extraño o fuera de lugar. Para inicializar InitializeObject, la función ResetInitializeObject se llama, creando así la función InitializeObject. InitializeObject Y cuando se le reasignará a sí mismo en una función vacía.

Llamadas ResetInitializeObject nuevo restablece la inicialización, lo que permite InitializeObject para inicializar el estado y restablecer de nuevo. A partir de este ejemplo, usted puede ver que una decisión no tiene que ser aplicado mediante una sentencia if. Otro ejemplo que ilustra cómo un motor de Estado podría aplicar la siguiente. El ejemplo implementa un interruptor de luz, donde si la luz está encendida, se apaga, y viceversa. Tenga en cuenta que ni una sola declaración, si se utiliza en este ejemplo.

 Fuente: / web / ROOT / ajaxrecipes / JavaScript / makingdecisionsinitialization.html función ToggleLight () (ToggleLight.on = function () (ToggleLight.curr = ToggleLight.off; retorno "";) ToggleLight.off = function () (ToggleLight.curr = ToggleLight.on; retorno "off";) try (return ToggleLight.curr ();) catch (e) (info ( "ToggleLight", "..."); ToggleLight.on inicialización retorno ();))

El ToggleLight función es llamada cada vez que desee cambiar la luz de encendido o apagado. No hay ningún parámetro para indicar un sobre o un descuento; que la funcionalidad está integrada dentro de la función ToogleLight. En la aplicación ToggleLight hay dos propiedades, dentro y fuera, los cuales son funciones. La asigna en función de la propiedad Curr a apagado y devuelve un "sobre" de amortiguación. La función de apagado asigna la propiedad curr en OFF y devuelve un "off" de amortiguación.

Para cambiar el estado, la propiedad Curr que se define como una función es llamada. El llamamiento de curr está incrustado en un bloque de excepción, porque Curr no se ha inicializado la ToggleLight primera vez que es llamado. Así, se genera una excepción, y en la parte de captura del bloque de excepción, el de la propiedad (que es una función) es llamado. Pide a asigna automáticamente Curr e inicializa el estado. Es importante recordar que el uso de un bloque de excepción y pide a es aceptable porque es una forma de aplicación de inicialización perezosa. Al escribir bloques de decisión y funciones del Estado y pensar en los siguientes aspectos de esta receta:

• El programa no es necesario incluir como muchas de las decisiones, porque las decisiones han sido sustituidos por los diferentes estados.

• Puede reasignar funciones si se puede romper el problema en un problema en el motor del estado.

• Puede ser más flexible con funciones reasignadas, porque la conducta puede ser sustituido de forma dinámica. Por ejemplo, si usted requiere una inicialización de dos etapas con una decisión, lo que significa adicional si los estados alterados en una ubicación central de código fuente. Usando una función de reasignación, se está creando un motor de estado en el que el comportamiento puede ser alterado durante el tiempo de ejecución a nivel local.

• Cuando se lee a través de ejemplos de esta receta, usted puede haber pensado: "¿Por qué no utilizar una clase y objeto?" La respuesta es que una función es un objeto y los ejemplos son programación orientada a objetos. El código parece extraño porque normalmente asumen una función es una función utilizada para crear una clase, y que las clases no suelen funciones. Si molesta la notación que, mi consejo es dejar esta función de estofado de JavaScript en su mente un poco. Usted seguramente vendrá a ver que es una forma poderosa de la programación.

Nota Para otro ejemplo del uso de la recursividad en vez de usar bloques de decisión.

un artículo presentado por Sonja Lande


Descargo de responsabilidad:Nuestro sitio web no es responsable por el contenido de este artículo. Webarticles es un recurso de información gratuito.
Importante: Este artículo "Uso de funciones para inicializar y tomar decisiones de JavaScript" fue traducida por un software automático. Sentimos pena por los errores de ortografía que pueda haber ocurrido. Gracias por su comprensión.


Online: 247 users browsing the articles directory