Varios otros lenguajes de programación utilizan de forma predeterminada el espacio de nombres/entorno local en lugar de un entorno global. Los expertos de JMP dicen que NamesDefaultToHere(1) es el BKM siempre que las secuencias de comandos, ya que normalmente el espacio de nombres local es apropiado para nuevas secuencias de comandos para evitar conflictos con otras secuencias de comandos JMP. Sería más conveniente definir NamesDefaultToHere(0) cuando desee que un script esté en el espacio de nombres global en lugar de definir cada script con el argumento "verdadero".
Hola @cnattrass , ¡Gracias por su sugerencia! Hemos capturado su solicitud y la tomaremos en consideración.
En mi opinión, tener un espacio de nombres global como predeterminado es una decisión de diseño extremadamente pobre, aunque entiendo que puede ser necesario para la compatibilidad con scripts JSL escritos en versiones anteriores de JMP.
Creo que cualquier codificador JSL nuevo aprende esto de la manera más difícil cuando comienzan a suceder cosas extrañas y difíciles de depurar debido a colisiones de nombres de variables con múltiples scripts; en particular, con los detritos que dejan los scripts que se ejecutaron anteriormente en el espacio de nombres global.Dado que las variables no requieren declaración en JSL, y el espacio de nombres global es el valor predeterminado, creo que es absolutamente crucial inicializar todas las variables a un estado vacío en la parte superior de mi secuencia de comandos para estar seguro de que valores inesperados no se inmiscuyan en mi secuencia de comandos, causando confusión y caos.
Por supuesto, también es una buena práctica poner Nombres predeterminados aquí (1); en la parte superior de cada script JSL jamás escrito, en todas partes, siempre, a menos que el script necesidades utilizar el espacio de nombres global por alguna extraña razón.Incluso en tal situación, creo que sería mejor establecer el espacio de nombres predeterminado en Local y hacer referencia a todas las variables globales como el espacio de nombres global explícitamente usando el ::nombre_global sintaxis.Por lo tanto, si el espacio de nombres global predeterminado es realmente necesario para la compatibilidad con versiones anteriores, deberíamos tener la opción de que el editor de secuencias de comandos inserte siempre Nombres predeterminados aquí (1); en la parte superior de todos los scripts nuevos, en lugar de requerir que el programador recuerde y escriba esto cada vez .
Incluso con estas precauciones, a veces todavía me encuentro con casos extremos en los que se producen colisiones.Por ejemplo, el Suma y Producto Las funciones incluyen una variable implícita llamada i por defecto.Eso está bien cuando se usa dentro de un script donde ya configuré el espacio de nombres local predeterminado.Pero ¿qué pasa con las fórmulas de columna?Normalmente no pienso en las fórmulas de columna como guiones, aunque eso es exactamente lo que son.Los edito gráficamente usando el editor de fórmulas GUI.Nunca se me había pasado por la cabeza.
Bueno, la primera vez que usé un Suma en una fórmula de columna, también ejecuté un script de tabla donde había olvidado establecer el espacio de nombres local, en el que usé un Para bucle con el iterador como i .Esto, como era de esperar, generó confusión y caos.La aplicación dejó de responder, se quedó atrapada en un bucle infinito y tuve que finalizar la tarea.Luego tuve que intentarlo unas cuantas veces más antes de que finalmente me diera cuenta del terrible y oscuro error que había cometido, fomentado por la trampa que me había tendido el Suma Es pernicioso global i iterador.En pocas palabras, ahora incluso en Fórmulas de columna hago doble clic en el editor de secuencias de comandos e inserto el Nombres predeterminados aquí (1); .Ningún guión está seguro sin él .