Molti altri linguaggi di programmazione utilizzano per impostazione predefinita lo spazio dei nomi/ambiente locale anziché un ambiente globale. Gli esperti JMP affermano che NamesDefaultToHere(1) è il BKM ogni volta che si esegue lo scripting poiché in genere lo spazio dei nomi locale è appropriato per i nuovi script per evitare conflitti con altri script JMP. Sarebbe più conveniente definire NamesDefaultToHere(0) quando si desidera che uno script si trovi nello spazio dei nomi globale anziché definire ogni script con l'argomento "true"
CIAO @cnattrass , Grazie per il tuo suggerimento! Abbiamo catturato la tua richiesta e la prenderemo in considerazione.
A mio avviso, avere lo spazio dei nomi Global come predefinito è una decisione progettuale estremamente inadeguata, anche se capisco che potrebbe essere necessario per la compatibilità con le versioni precedenti con gli script JSL scritti nelle versioni precedenti di JMP.
Penso che qualsiasi nuovo programmatore JSL impari questo nel modo più duro quando iniziano a verificarsi cose strane e difficili da eseguire il debug a causa di collisioni di nomi di variabili con più script; in particolare, con i detriti lasciati dagli script che sono stati eseguiti in precedenza sotto lo spazio dei nomi globale.Poiché le variabili non richiedono dichiarazioni in JSL e lo spazio dei nomi globale è l'impostazione predefinita, credo che sia assolutamente cruciale inizializzare tutte le variabili su uno stato vuoto nella parte superiore del mio script per essere certi che valori imprevisti non si intromettano nel mio script, causando confusione e caos.
Naturalmente è anche una buona pratica mettere Nomi predefiniti qui(1); in cima a ogni singolo script JSL mai scritto, ovunque, sempre, a meno che lo script esigenze per utilizzare lo spazio dei nomi globale per qualche strano motivo.Anche in una situazione del genere, ritengo che sarebbe meglio impostare lo spazio dei nomi predefinito su Locale e fare riferimento a tutte le variabili globali come spazio dei nomi globale utilizzando esplicitamente il comando ::nome_globale sintassi.Pertanto, se lo spazio dei nomi globale predefinito è veramente necessario per la compatibilità con le versioni precedenti, dovremmo avere l'opzione che l'editor di script lo inserisca sempre Nomi predefiniti qui(1); in cima a tutti i nuovi script, invece di richiedere al programmatore di ricordarlo e digitarlo ogni volta .
Anche con queste precauzioni, a volte riscontro ancora casi limite in cui si verificano collisioni.Ad esempio, il Somma E Prodotto le funzioni includono una variabile implicita denominata io per impostazione predefinita.Va bene se utilizzato all'interno di uno script in cui ho già impostato lo spazio dei nomi locale predefinito.Ma per quanto riguarda le formule di colonna?Normalmente non considero le formule di colonna come script, anche se è esattamente quello che sono.Li modifico graficamente utilizzando l'editor di formule della GUI.Non mi era mai passato per la mente.
Bene, la prima volta che ho usato a Somma in una formula di colonna, mi è capitato anche di eseguire uno script di tabella in cui avevo dimenticato di impostare il namespace locale, in cui ho utilizzato un Per loop con l'iteratore as io .Ciò, non sorprendentemente, ha portato a confusione e caos.L'applicazione non ha risposto, è rimasta bloccata in un ciclo infinito e ho dovuto interrompere l'attività.Poi ho dovuto riprovarci ancora qualche volta prima di rendermi finalmente conto del terribile, oscuro errore che avevo commesso, fomentato dalla trappola tesa dal Somma E' pernicioso a livello globale io iteratore.Per farla breve, ora anche in Formule di colonna faccio doppio clic sull'editor di script e inserisco il file Nomi predefiniti qui(1); .Nessuno script è sicuro senza di esso .