Collection de ressources utiles sur le web :
- Il y a une excellente conférence de @joseph_morgan dans la série Discovery Summit :
https://community.jmp.com/t5/Abstracts/Using-JSL-to-Develop-Efficient-Robust-Applications-EU-2018-415/ev-p/849638
Joseph explique les secrets et les possibilités de la gestion des expressions en JSL , ainsi que les pièges liés à cette fonctionnalité.
Ce cours magistral est basé sur le contenu de « Fonctions de gestion des expressions : Partie I - Démêler le casse-tête des fonctions Expr(), NameExpr(), Eval(), ... »
- Écriture dynamique de code JSL par @Jasean
(Guide étape par étape des astuces universelles n° 1 et n° 2, voir ci-dessous)
- La différence entre les chaînes de caractères et les expressions - en 50 lignes :
Réponse à une publication de la communauté par @Craige_Hales
- Excellent cours avec de nombreux exemples d'application : Session 9 : JSL avancé , @jthi
- Vous trouverez des informations complémentaires dans le Guide de script : expressions avancées, macros et listes.
Bases
interne:
#062 - Gestion des expressions en JSL
#092 - Gestion des expressions
| 1 |
n'évaluez pas l'expression (2+1), Il suffit de la stocker dans la variable x |
x = Expr (2+1) |
| 2 |
obtenir l'expression stockée dans x |
Nom Expr (x) |
| 3 |
évaluation des forces |
Évaluation (myexpr) |
| 4 |
évaluer xyz et remplacer Expr(xyz) par la valeur de retour |
Eval Expr( ... Expr(xyz)) |
*) NB : dans 1 et 4, il s’agit de la même fonction « Expr(...) » – mais avec l’effet inverse :
Dans le cas 1, le contenu de Expr n'est pas évalué ; dans le cas 4, SEUL le contenu de Expr est évalué.
3 astuces universelles
| 1 |
pré-évaluer des parties d'une expression via Évaluation Expr() ... puis évaluez l'expression via Évaluation() résout 90 % (99 % avec l'option 2) de tous les problèmes |
Évaluer( Évaluer Expr ( ... Exp (évaluer 1er) ...)) option 2 : Évaluer( Évaluer Expr ( ... Exp (Nom Expr ( )) ...))
|
| 2 |
Résout le même problème à 99%. # 1 - option 2 |
Eval(substitute(Expr(), Expr(), Name Expr() ))
|
| 3 |
ultimate trick for références de colonnes ( @jthi, e.g. Séance 9 : JSL avancé @33min ) |
Nom Exp ( en tant que colonne ("nom de colonne" ou : colonne)) |
N.B. :
Certaines fonctions évaluent leurs arguments, d'autres non, certaines n'en évaluent qu'une partie (par exemple , `head() ` évalue- t-elle ses arguments ? ), tandis que d'autres les évaluent, mais si l'argument est une variable unique, elles se comportent comme `NameExpr()` . Les fonctions utilitaires `Show`, `Write` et `Print` font exception.
Malheureusement, la plupart de ces détails ne sont pas accessibles aux utilisateurs. Ces derniers doivent donc deviner.
Voici une suggestion pour l'éditeur JSL : afficher ces informations de manière interactive afin d'aider les utilisateurs : coloration syntaxique avancée dans l'éditeur JSL - la fonction évalue-t-elle son argument ?
-> Si vous souhaitez bénéficier de cette assistance automatique, veuillez suivre le lien et voter !
Exemples tirés de la communauté :
[PlusConteneurs thématiquescomme ça]
Salut @hogi ,
Merci d'avoir consolidé ces informations et d'avoir rassemblé une grande partie de ces informations. Le discours semble vraiment instructif.
J'aime la façon dont vous pouvez faire les choses de différentes manières dans JMP et JSL, mais parfois il y a trop de façons différentes qui sont très spécifiques au cas en question, et cela peut devenir quelque peu fastidieux lorsque vous essayez de créer du code générique et capable de gérer de nombreux scénarios différents.
Merci!,
DS
Si vous n'utilisez pas les astuces :
JSL et variables - 3 problèmes dont vous devez être conscient lors de l'écriture de code JSL.
Différents problèmes, toujours la même solution : )
la solution?
-> il suffit de lire le message principal.
c= 5;
col = Name Expr(:height);
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
gb = graph Builder(); framebox = report(gb)[FrameBox(1)];
// issues with variables in a message
// all 3 of them look quite innocent
// but none of them will survive a restart
New Column ("rescaled", Formula (c * :height));
dt << New Column ("rescaled", Formula (5 * col));
framebox << Add Graphics Script(Y Function( c * x, x ) );
// no issue here:
dt << concatenate(dt);
dt << new column(c, formula(3));On pourrait penser : n’utilisez jamais de variable dans un message !
Mais cela va beaucoup trop loin – les deux derniers exemples ne posent pas de problème.