JSL: if - else -> trova le virgole?CIAO,
Spesso mi trovo ad affrontare il problema che un codice non funziona perché 1 punto e virgola su 10 è una virgola o una virgola che appartiene al blocco if è effettivamente mancante.
Esiste un trucco semplice per rendere più visibili i blocchi in una clausola if-else?
Modellazione statistica avanzataRicerche sui consumatori e sul mercatoProgettazione di esperimentiAnalisi di affidabilitàRi: JSL: if - else -> trova le virgole?bello, molto comodo 
Ri: JSL: if - else -> trova le virgole?Incollare l'istruzione If() nell'editor della formula aiuta a individuarla abbastanza rapidamente.

Ri: JSL: if - else -> trova le virgole?Oh no, ancora una volta, dopo un po' di copia e incolla e riorganizzazione del mio codice, si comporta come se ci fosse una virgola sbagliata da qualche parte in un'istruzione if
- e avrei desiderato che ci fosse un funzione di evidenziazione implementato già in Jmp17 
Mhm, non ancora...
Quindi sono tornato ai suggerimenti nei post e ho cercato aiuto.
Durante la lettura dei suggerimenti la prima volta Ho pensato: suona bene, molti di loro mi aiuteranno quando avrò il prossimo problema.
Ora, quando si cerca la virgola posizionata erroneamente, in realtà lo era @txnelson 'S suggerimento che mi ha aiutato a trovarlo:
Clicca su riformattare lo script e controlla dove il rientro non si adatta a quello previsto.
Abbastanza semplice e come previsto.
D'altra parte, mentre cercavo più e più volte la virgola sbagliata, gli altri suggerimenti si leggevano un po' così
" c'è una virgola dove non dovrebbe esserci? devi trovarlo e correggerlo ".
Per combinare entrambi gli approcci, scrivere il codice
1) in modo leggibile
2) tale che riformattare lo script non cambia la formattazione.
Si potrebbe mettere un riga vuota davanti alle virgole nel Se dichiarazioni. Ciò impedirà riformattare lo script dallo spostare le virgole alla fine della riga precedente.Sfortunatamente, sposterà anche il codice dopo le virgole alla riga successiva, lasciando semplicemente le virgole lì, il che rende il codice un po' "a maglie larghe" e difficile da leggere. Uhm.
Names Default To Here( 1 );
dt = Current Data Table();
If(
Is Empty( dt ),
Print( "no table found" );
,
N Rows( dt ) == 0,
Print( "table has no data" );
, // else
Print( "ok" )
);
Prova tu stesso: Dov'è la virgola posizionata erroneamente?
codice così come è stato fornito da Attacco irregolare , ma con una virgola al posto del punto e virgola:
Names Default to Here( 1 );
dt = Current Data Table();
Try(
If( Contains( dt << Get Column Names, As Name( "height" ) ),
mean = Col Mean( dt:height );
max = Col Max( dt:height );
min = Col Min( dt:height );
std dev = Col Std Dev( dt:height ),
Write( "\!NSome stats on :HEIGHT:",
"\!NMin: ", min,
"\!NMax: ", max,
"\!NMean: ", mean,
"\!NStd Dev: ", std dev
)
,
Contains( dt << Get Column Names, As Name( "weight" ) ),
mean = Col Mean( dt:weight );
max = Col Max( dt:weight );
min = Col Min( dt:weight );
std dev = Col Std Dev( dt:weight );
Write( "\!NSome stats on :WEIGHT:",
"\!NMin: ", min,
"\!NMax: ", max,
"\!NMean: ", mean,
"\!NStd Dev: ", std dev
)
,
Contains( dt << Get Column Names, As Name( "age" ) ),
mean = Col Mean( dt:age );
max = Col Max( dt:age );
min = Col Min( dt:age );
std dev = Col Std Dev( dt:age );
Write( "\!NSome stats on :AGE:",
"\!NMin: ", min,
"\!NMax: ", max,
"\!NMean: ", mean,
"\!NStd Dev: ", std dev
)
,
Print( "Cannot find columns 'height', 'weight', or 'age'" )
)
,
Print( "mistakes were made" )
)
Visualizza altro... Ri: JSL: if - else -> trova le virgole?CIAO @hogi ,
Questa non è una risposta esatta alla tua domanda specifica. Ma penso che questa estensione jsl per Visual Studio offra una migliore esperienza di scripting in generale.
https://marketplace.visualstudio.com/items?itemName=VinceFaller.jmp-scripting
Ri: JSL: if - else -> trova le virgole?Sono d'accordo con @jthi , evito di usare re-format.Il mio lavoro come programmatore è avere una guida di stile chiara e applicarla mentre scrivo il codice.
Annotazioni come
, // else
può aiutare a fornire una guida visiva quando è presente un numero elevato di righe di codice.
Anch'io penso che allineare la virgola con l'istruzione if principale sia lo stile preferibile.
Ri: JSL: if - else -> trova le virgole?Non che io sappia. Attualmente le poche modifiche che puoi trovare nella pagina delle preferenze Script Editor.
Anche scrivere un formattatore automatico personalizzabile non è il compito più semplice (almeno lo penserei) e non sono nemmeno sicuro che sia una buona idea. Penso che i formattatori automatici supponenti siano più comuni e molto probabilmente migliori di quelli completamente personalizzabili. Ma JSL non ha guide di stile da seguire, quindi non ce n'è comune opinione su cui basare il formattatore automatico (JSL è un linguaggio molto piccolo).
Ecco un video riguardante il formattatore automatico nero per Python Łukasz Langa - La vita è meglio dipinta di nero, ovvero: come smettere di preoccuparsi e adottare la formattazione automatica (youtube.com)
Ri: JSL: if - else -> trova le virgole?
@jthi ha scritto:
configurare [riformattare] correttamente...
c'è un modo per configurare la riformattazione?
Ri: JSL: if - else -> trova le virgole?Io uso uno stile un po' simile a @ErraticAttack ma separo le condizioni sulla stessa riga di , e potrei anche commentare altro e capire se i blocchi sono lunghi
Names Default To Here(1);
dt = Current Data Table();
Try(
If(Is Empty(dt),
print("no table found");
, N Rows(dt) == 0,
print("table has no data");
, N Rows(dt) <= 10,
print("not enough data");
, // else
print("ok")
);
, // catch
show(exception_msg);
);
IO Tentativo per evitare di utilizzare la riformattazione jsl dopo che i miei script diventano abbastanza lunghi/complicati poiché di solito devo ripulirli dopo averlo utilizzato. Anche se la riformattazione fosse flessibile quanto ne avrei bisogno, penso che non mi preoccuperei di configurarla correttamente...
Ri: JSL: if - else -> trova le virgole?La mia soluzione a questo è inserire virgole importanti a livello della recinzione che lo racchiude.Ecco un esempio: nota che le virgole che separano i blocchi IF sono al livello dell'istruzione IF e lo stesso per TRY
Names Default to Here( 1 );
dt = Current Data Table();
Try(
If( Contains( dt << Get Column Names, As Name( "height" ) ),
mean = Col Mean( dt:height );
max = Col Max( dt:height );
min = Col Min( dt:height );
std dev = Col Std Dev( dt:height );
Write( "\!NSome stats on :HEIGHT:",
"\!NMin: ", min,
"\!NMax: ", max,
"\!NMean: ", mean,
"\!NStd Dev: ", std dev
)
,
Contains( dt << Get Column Names, As Name( "weight" ) ),
mean = Col Mean( dt:weight );
max = Col Max( dt:weight );
min = Col Min( dt:weight );
std dev = Col Std Dev( dt:weight );
Write( "\!NSome stats on :WEIGHT:",
"\!NMin: ", min,
"\!NMax: ", max,
"\!NMean: ", mean,
"\!NStd Dev: ", std dev
)
,
Contains( dt << Get Column Names, As Name( "age" ) ),
mean = Col Mean( dt:age );
max = Col Max( dt:age );
min = Col Min( dt:age );
std dev = Col Std Dev( dt:age );
Write( "\!NSome stats on :AGE:",
"\!NMin: ", min,
"\!NMax: ", max,
"\!NMean: ", mean,
"\!NStd Dev: ", std dev
)
,
Print( "Cannot find columns 'height', 'weight', or 'age'" )
)
,
Print( "mistakes were made" )
)
Ri: JSL: if - else -> trova le virgole?JMP dovrebbe assumerti per un ruolo di qualità del prodotto! Lo adoro!
Ri: JSL: if - else -> trova le virgole?Grazie per il vostro sostegno 
ecco l'augurio:
evidenziazione della sintassi ottimizzata nell'editor JSL
Ri: JSL: if - else -> trova le virgole?Mi piace il tuo pensiero al riguardo e altri pensieri che stai avendo sui miglioramenti a JMP e JSL.....ti suggerisco di aggiungerli alla lista dei desideri di JMP.Ciò consentirà di fornire il tuo contributo alle persone che possono effettivamente apportare le modifiche.
Ri: JSL: if - else -> trova le virgole?Hmm, ho solo pensato:
Se c'è questo meraviglioso GraphBuilder in Jmp che ti aiuta a generare ogni tipo di grafico in 5 secondi,
dovrebbe anche essere possibile analizzare complesse strutture If & Match in < 5 secondi per trovare eventuali errori nella struttura.
Il rientro automatico tramite "reformat script" è fantastico: mostra la gerarchia completa della struttura del codice - a colpo d'occhio.
Ma questo è anche lo svantaggio: il completare gerarchia
Questo è il motivo per cui l'occhio umano ha bisogno di tempo per analizzare le informazioni e per farlo ha bisogno anche del supporto del cervello.
Esistono modi per codificare le informazioni in un formato in cui l'"occhio" ha bisogno di meno supporto da parte del cervello, come si può imparare @XanGregg :
Plenaria: tutti i grafici sono sbagliati, ma alcuni sono utili - Xan Gregg
Pensando in questo senso...
A Fare clic su una parentesi per evidenziare l'istruzione If è molto utile
- ma sarebbe fantastico se l'ombreggiatura del testo incluso non fosse uniforme (come nell'immagine a sinistra) - ma in modo significativo (come nella foto a destra).
Jmp ha tutte le informazioni necessarie (le usa per regolare il rientro): perché non usarle per l'ombreggiatura?
È chiaro che non ci sono informazioni aggiuntive nell'immagine a destra che non possano essere dedotte dalla rientranza a sinistra.
E il rientro può mostrare anche di più: la gerarchia completa della complessa struttura del codice in un solo colpo d'occhio. SÌ.
Ma l’immagine giusta sembra abbastanza convincente, giusto?
modificare: collegamento al desiderio

Ri: JSL: if - else -> trova le virgole?mi è piaciuto cosa aveva da dire quest'uomo qui .
JMP non si preoccupa di questa formattazione ma ti ritroverai presto nei guai se non hai la disciplina necessaria per scrivere il codice in un modo che rifletta la gerarchia delle caselle di visualizzazione.
Questa affermazione non si applica esclusivamente alle caselle di visualizzazione, ma a JSL in generale. Sto ancora imparando, ma è un buon investimento di tempo strutturare visivamente il codice in parti logiche, anche se a volte si trasforma in un esercizio forense (che, guarda caso, è dove tende ad avvenire la maggior parte dell'apprendimento).
Ri: JSL: if - else -> trova le virgole?Fare clic con il tasto destro sulla finestra JSL e selezionare "Riformatta script".
Ciò allineerà i blocchi alle rientranze standard.
Puoi anche fare clic su qualsiasi funzione o parentesi di confine della matrice {} [] e selezionerà la parentesi corrispondente
Re: JSL: if - else -> trova le virgole?un bell'esempio di cosa può andare storto:
x= if(<BR />// 1st test<BR /><BR /> 1==3,
1
, // 2nd test
1==5,
2,
, // others
3
)
dopo aver eseguito il codice, x= ...
Vedi altro...(Evidenziare per leggere)
suggerimento:

... nessun messaggio di errore?
Suggerimento:... nessun messaggio di errore?
Re: JSL: if - else -> trova le virgole?Ragazzi, questo è quasi perfetto:

https://community.jmp.com/t5/Discussions/If-statement-comma/mp/824212/highlight/true#M100363
bella soluzione alternativa
... finché non sarà disponibile l'evidenziazione della sintassi ottimizzata nell'editor JSL .