JSL: si - más -> ¿encuentra las comas?Hola,
A menudo me enfrento al problema de que un código no funciona porque 1 de cada 10 punto y coma es una coma o falta una coma que pertenece al bloque if.
¿Existe algún truco sencillo para hacer más visibles los bloques de una cláusula if-else?
Modelado estadístico avanzadoInvestigación de Consumidores y MercadosDiseño de experimentosAnálisis de fiabilidadRe: JSL: si - más -> encontrar las comas?genial, muy conveniente 
Re: JSL: si - más -> encontrar las comas?Pegar la declaración If() en el editor de fórmulas ayuda a detectarla con bastante rapidez.

Re: JSL: si - más -> encontrar las comas?Oh, no, una vez más, después de copiar y pegar y reorganizar mi código, se comporta como si hubiera una coma incorrecta en algún lugar de una declaración if.
- y deseaba que hubiera un función de resaltado implementado ya en Jmp17 
Mmm, todavía no...
Así que volví a las sugerencias de las publicaciones y busqué ayuda.
Mientras lee las sugerencias la primera vez Pensé: suena bien, muchos de ellos me ayudarán cuando tenga el próximo problema.
Ahora, al buscar la coma colocada erróneamente, en realidad era @txnelson 's sugerencia lo que me ayudó a encontrarlo:
Haga clic en reformatear el script y compruebe dónde la sangría no se ajusta a la esperada.
Bastante simple y como se esperaba.
Por otro lado, mientras buscamos una y otra vez la coma incorrecta, las otras sugerencias se leen un poco como
" ¿Hay una coma donde no debería estar? tienes que encontrarlo y corregirlo ".
Para combinar ambos enfoques, escribir su código.
1) de forma legible
2) tal que reformatear el script no cambia el formato.
Uno podría poner un linea vacia delante de las comas en el si declaraciones. Esto evitará reformatear el script de mover las comas al final de la línea anterior.Desafortunadamente, también cambiará el código después de las comas a la siguiente línea, dejando las comas allí, lo que hace que el código sea un poco "amplio" y difícil de leer. Mmm.
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" )
);
Pruébelo usted mismo: ¿Dónde está la coma colocada erróneamente?
código tal como fue proporcionado por Ataque errático , pero con una coma donde debería haber un punto y coma:
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" )
)
Ver más... Re: JSL: si - más -> encontrar las comas?Hola @hogi ,
Esta no es una respuesta exacta a su pregunta específica. Pero creo que esta extensión jsl para Visual Studio proporciona una mejor experiencia de secuencias de comandos en general.
https://marketplace.visualstudio.com/items?itemName=VinceFaller.jmp-scripting
Re: JSL: si - más -> encontrar las comas?estoy de acuerdo con @jthi , evito usar reformatear.Mi trabajo como programador es tener una guía de estilo clara y hacerla cumplir mientras escribo el código.
Anotaciones como
, // else
Puede ayudar a brindar una guía visual cuando hay una gran cantidad de líneas de código.
Yo también creo que alinear la coma con la declaración if principal es el estilo preferible.
Re: JSL: si - más -> encontrar las comas?No que yo sepa. Actualmente, los pocos cambios que puede realizar se encuentran en la página de preferencias del Editor de secuencias de comandos.
Además, escribir un formateador automático personalizable no es la tarea más sencilla (al menos eso creo) y ni siquiera estoy seguro de si es una buena idea. Creo que los formateadores automáticos obstinados son más comunes y probablemente mejores que los totalmente personalizables. Pero JSL no tiene guías de estilo a seguir, por lo que no hay común opinión en la que basar el formateador automático (JSL es un lenguaje muy pequeño).
Aquí hay un video sobre el formateador automático negro para Python. Łukasz Langa - La vida es mejor pintada de negro, o: Cómo dejar de preocuparse y adoptar el formato automático (youtube.com)
Re: JSL: si - más -> encontrar las comas?
@jthi escribió:
configurando [reformateando] correctamente...
¿Hay alguna forma de configurar el reformateo?
Re: JSL: si - más -> encontrar las comas?Utilizo un estilo un poco similar al @ataqueerrático pero separo las condiciones en la misma línea que, e incluso podría comentar más y detectar si los bloques son largos
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);
);
I intentar para evitar el uso de formato jsl después de que mis scripts se vuelvan lo suficientemente largos/complicados, ya que normalmente tengo que limpiar después de usarlos. Incluso si reformatear fuera tan flexible como necesitaría, creo que no me molestaría en configurarlo correctamente...
Re: JSL: si - más -> encontrar las comas?Mi solución a esto es poner comas importantes al nivel de la valla circundante.Aquí hay un ejemplo: observe que las comas que separan los bloques IF están en el nivel de la declaración IF, y lo mismo para 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: si - más -> encontrar las comas?¡JMP debería contratarlo para un puesto de calidad del producto! ¡Me encanta!
Re: JSL: si - más -> encontrar las comas?gracias por tu apoyo 
aquí está el deseo:
resaltado de sintaxis optimizado en el editor JSL
Re: JSL: si - más -> encontrar las comas?Me gusta su opinión sobre esto y otras ideas que tenga sobre las mejoras a JMP y JSL... Le sugiero que las agregue a la lista de deseos de JMP.Esto hará llegar su opinión a las personas que realmente pueden realizar los cambios.
Re: JSL: si - más -> encontrar las comas?Mmm, solo pensé:
Si existe este maravilloso GraphBuilder en Jmp que te ayuda a generar todo tipo de gráficos en 5 segundos,
También debería ser posible analizar estructuras complicadas If & Match en <5 segundos para encontrar cualquier error en la estructura.
La sangría automática mediante un "script de reformateo" es excelente: muestra la jerarquía completa de la estructura del código de un solo vistazo.
Pero esa es también la desventaja: el completo jerarquía
Por eso el ojo humano necesita algo de tiempo para analizar la información, e incluso necesita algo de apoyo del cerebro para hacerlo.
Hay formas de codificar información en un formato en el que el "ojo" necesita menos apoyo del cerebro, como se puede aprender de @XanGregg :
Plenaria: Todos los gráficos son incorrectos, pero algunos son útiles - Xan Gregg
Pensando en esta línea...
A Haga clic en un corchete para resaltar la declaración If es muy útil
- pero sería genial si el sombreado del texto incluido no fuera uniforme (como en la imagen de la izquierda) - pero de una manera significativa (como en la imagen de la derecha).
Jmp tiene toda la información que se necesita (la usa para ajustar la sangría). ¿Por qué no usarla para el sombreado?
Está claro que NO hay información adicional en la imagen de la derecha que no pueda deducirse de la sangría de la izquierda.
Y la sangría puede mostrar aún más: la jerarquía completa de la compleja estructura del código de un solo vistazo. Sí.
Pero la imagen correcta parece bastante convincente, ¿verdad?
editar: enlace al deseo

Re: JSL: si - más -> encontrar las comas?me gustó lo que este hombre tenía que decir aquí .
A JMP no le importa este formato, pero rápidamente se meterá en un lío si no tiene la disciplina para escribir el código de una manera que refleje la jerarquía de los cuadros de visualización.
Esta declaración no se aplica exclusivamente a las cajas de visualización, sino a JSL en general. Todavía estoy aprendiendo, pero es una buena inversión de tiempo estructurar visualmente el código en partes lógicas, incluso si a veces se convierte en un ejercicio forense (que, casualmente, es donde tiende a ocurrir la mayor parte del aprendizaje).
Re: JSL: si - más -> encontrar las comas?Haga clic derecho en la ventana JSL y seleccione "Reformatear script".
Eso alineará los bloques en las muescas estándar.
También puede hacer clic en cualquier función o corchete de límite de matriz {} [] y seleccionará el corchete correspondiente
Re: JSL: if - else -> ¿encontrar las comas?Un buen ejemplo de lo que puede salir mal:
x= if(<BR />// 1st test<BR /><BR /> 1==3,
1
, // 2nd test
1==5,
2,
, // others
3
)
después de ejecutar el código, x=...
Ver más...(Resaltar para leer)
pista:

...no hay mensaje de error?
pista:...¿no hay mensaje de error?
Re: JSL: if - else -> ¿encontrar las comas?Chicos, esto es casi perfecto:

https://community.jmp.com/t5/Discussions/If-statement-comma/mp/824212/highlight/true#M100363
Buena solución alternativa
... hasta que el resaltado de sintaxis optimizado en el editor JSL esté disponible.