JSL : if - else -> trouver les virgules ?Salut,
Je suis souvent confronté au problème qu'un code ne fonctionne pas car 1 point-virgule sur 10 est une virgule ou une virgule qui appartient au bloc if est réellement manquante.
Existe-t-il une astuce simple pour rendre les blocs d'une clause if-else plus visibles ?
Modélisation statistique avancéeÉtudes de consommation et de marchéConception d'expériencesAnalyse de fiabilitéRe : JSL : if - else -> trouver les virgules ?cool, très pratique 
Re : JSL : if - else -> trouver les virgules ?Coller l'instruction If() dans l'éditeur de formule permet de la repérer assez rapidement.

Re : JSL : if - else -> trouver les virgules ?Oh non - encore une fois, après quelques copier-coller et réarrangement de mon code, il se comporte comme s'il y avait une mauvaise virgule quelque part dans une instruction if
- et j'aurais aimé qu'il y ait un fonction de surbrillance déjà implémenté dans Jmp17 
Hum, pas encore...
Je suis donc revenu aux suggestions contenues dans les messages et j'ai cherché de l'aide.
En lisant les suggestions la première fois J'ai pensé : ça a l'air bien, beaucoup d'entre eux m'aideront lorsque j'aurai le prochain problème.
Maintenant, lors de la recherche de la virgule placée par erreur, c'était en fait @txnelson c'est suggestion ce qui m'a aidé à le trouver :
Cliquer sur reformater le script et vérifiez où l'indentation ne correspond pas à celle attendue.
Assez simple – et comme prévu.
Par contre, en cherchant encore et encore la mauvaise virgule, les autres suggestions se lisent un peu comme
" il y a une virgule là où elle ne devrait pas être ? tu dois le trouver et le corriger ".
Pour combiner les deux approches, pour écrire votre code
1) de manière lisible
2) tel que reformater le script ne change pas le formatage.
On pourrait mettre un ligne vide devant les virgules dans le si déclarations. Cela empêchera reformater le script du déplacement des virgules à la fin de la ligne précédente.Malheureusement, cela déplacera également le code après les virgules vers la ligne suivante, en laissant simplement les virgules là - ce qui rend le code un peu "à mailles larges" et difficile à lire. Hum.
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" )
);
Essayez par vous-même : Où est la virgule placée par erreur
code tel qu'il a été fourni par Attaque erratique , mais avec une virgule là où il devrait y avoir un point-virgule :
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" )
)
Voir plus... Re : JSL : if - else -> trouver les virgules ?Salut @hogi ,
Ce n'est pas une réponse exacte à votre question spécifique. Mais je pense que cette extension jsl pour Visual Studio offre une meilleure expérience de script en général.
https://marketplace.visualstudio.com/items?itemName=VinceFaller.jmp-scripting
Re : JSL : if - else -> trouver les virgules ?je suis d'accord avec @jthi , j'évite d'utiliser le reformatage.C'est mon travail en tant que programmeur d'avoir un guide de style clair et de l'appliquer au fur et à mesure que j'écris le code.
Des annotations telles que
, // else
peut aider à donner un guide visuel lorsqu'il y a un grand nombre de lignes de code.
Moi aussi, je pense qu'aligner la virgule avec l'instruction if principale est le style préférable.
Re : JSL : if - else -> trouver les virgules ?Pas à ma connaissance. Actuellement, les quelques modifications que vous pouvez trouver se trouvent sur la page des préférences de l'éditeur de script.
De plus, écrire un formateur automatique personnalisable n'est pas la tâche la plus simple (du moins je le pense) et je ne suis même pas sûr que ce soit une bonne idée. Je pense que les formateurs automatiques avisés sont plus courants et probablement meilleurs que ceux entièrement personnalisables. Mais JSL n'a pas de guide de style à suivre, donc il n'y a pas de commun opinion sur laquelle baser le formateur automatique (JSL est un très petit langage).
Voici une vidéo concernant le formateur automatique noir pour Python Łukasz Langa - La vie est mieux peinte en noir, ou : Comment arrêter de s'inquiéter et adopter le formatage automatique (youtube.com)
Re : JSL : if - else -> trouver les virgules ?
@jthi a écrit:
configurer [reformatage] correctement...
existe-t-il un moyen de configurer le reformatage ?
Re : JSL : if - else -> trouver les virgules ?J'utilise un style un peu similaire à celui @ErraticAttack mais je sépare les conditions sur la même ligne que , et je pourrais même commenter autrement et attraper si les blocs sont longs
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);
);
je essayer pour éviter d'utiliser le reformatage JSL une fois que mes scripts sont devenus suffisamment longs/compliqués, car je dois généralement nettoyer après l'avoir utilisé. Même si le reformatage était aussi flexible que j'en aurais besoin, je pense que je ne prendrais pas la peine de le configurer correctement...
Re : JSL : if - else -> trouver les virgules ?Ma solution à cela est de mettre des virgules importantes au niveau de la clôture englobante.Voici un exemple : notez que les virgules séparant les blocs IF sont au niveau de l'instruction IF, et idem pour 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" )
)
Re : JSL : if - else -> trouver les virgules ?JMP devrait vous embaucher dans un rôle de qualité produit ! Aimer!
Re : JSL : if - else -> trouver les virgules ?Merci pour votre soutien 
voici le souhait :
coloration syntaxique optimisée dans l'éditeur JSL
Re : JSL : if - else -> trouver les virgules ?J'aime votre réflexion à ce sujet, ainsi que d'autres réflexions que vous avez sur les améliorations apportées à JMP et JSL..... Je vous suggère de les ajouter à la liste de souhaits JMP.Cela permettra de transmettre votre avis aux personnes qui peuvent réellement apporter les changements.
Re : JSL : if - else -> trouver les virgules ?Hm, je viens de penser :
S'il existe ce merveilleux GraphBuilder dans Jmp qui vous aide à générer tout type de graphique en 5 secondes,
il devrait également être possible d'analyser des structures If & Match compliquées en <5 secondes pour trouver toute erreur dans la structure.
L'indentation automatique via "script de reformatage" est géniale - elle montre la hiérarchie complète de la structure du code - d'un seul coup d'œil.
Mais c'est aussi l'inconvénient : le complet hiérarchie
C’est pourquoi l’œil humain a besoin d’un certain temps pour analyser les informations – et a même besoin du soutien du cerveau pour ce faire.
Il existe des moyens d'encoder les informations dans un format dans lequel « l'œil » a moins besoin du soutien du cerveau - comme on peut l'apprendre de @XanGregg :
Plénière : tous les graphiques sont faux, mais certains sont utiles - Xan Gregg
En pensant dans ce sens...
A Cliquez sur une parenthèse pour mettre en surbrillance l'instruction If est très utile
- mais ce serait bien si l'ombrage du texte inclus n'était pas uniforme (comme dans l'image de gauche) - mais d'une manière significative (comme sur la photo de droite).
Jmp dispose de toutes les informations nécessaires (il les utilise pour ajuster l'indentation) - pourquoi ne pas les utiliser pour l'ombrage ?
Il est clair qu'il n'y a AUCUNE information supplémentaire dans l'image de droite qui ne puisse être déduite de l'indentation de gauche.
Et l'indentation peut encore montrer plus : la hiérarchie complète de la structure complexe du code en un seul coup d'œil. Oui.
Mais l’image de droite semble assez convaincante, n’est-ce pas ?
modifier: lien vers le souhait

Re : JSL : if - else -> trouver les virgules ?j'ai aimé ce que cet homme avait à dire ici .
JMP ne se soucie pas de ce formatage mais vous vous retrouverez rapidement dans le pétrin si vous n'avez pas la discipline nécessaire pour écrire le code d'une manière qui reflète la hiérarchie des zones d'affichage.
Cette déclaration ne s'applique pas exclusivement aux boîtes d'affichage, mais au JSL en général. J'apprends encore moi-même, mais c'est un bon investissement de temps que de structurer visuellement le code en parties logiques, même si cela se transforme parfois en un exercice médico-légal (qui, par coïncidence, est le lieu où la plupart des apprentissages ont tendance à se produire).
Re : JSL : if - else -> trouver les virgules ?Faites un clic droit sur la fenêtre JSL et sélectionnez "Reformater le script".
Cela alignera les blocs sur les indentations standard.
Vous pouvez également cliquer sur n'importe quelle fonction ou support de limite de matrice {} [] et il sélectionnera le support correspondant.
Re: JSL : if - else -> trouver les virgules ?un bel exemple de ce qui peut mal se passer :
x= if(<BR />// 1st test<BR /><BR /> 1==3,
1
, // 2nd test
1==5,
2,
, // others
3
)
après avoir exécuté le code, x= ...
Voir plus...(Surligner pour lire)
indice:

... aucun message d'erreur ?
indice :... pas de message d’erreur ?
Re: JSL : if - else -> trouver les virgules ?Les gars, c'est presque parfait :

https://community.jmp.com/t5/Discussions/If-statement-comma/mp/824212/highlight/true#M100363
bonne solution de contournement
... jusqu'à ce que la coloration syntaxique optimisée :folded_hands: soit disponible dans l'éditeur JSL .