¿Por qué usar siempre una declaración else y la diferencia fundamental entre valores vacíos y perdidos?Hola a todos,
un poco de una pregunta teórica aquí. Actualmente estoy escribiendo un tutorial de secuencias de comandos JSL para mis colegas, por lo que estoy tratando de asegurarme de tener una buena comprensión de la forma en que funciona JSL.
Una vez leí en un foro que siempre debe usar una declaración 'Else' dentro de un bucle 'If', incluso si eso significaba agregar Empty() como la declaración 'Else'.
Para ver la diferencia, intenté jugar con el editor de scripts:
y=if(1>2, 1);
z= if (1>2, 1 , Empty());
Show (y);
Show (z);
Show (Is Missing (y) );
Show (Is Missing (z) );
Show (Is Empty (y) );
Show (Is Empty (z) );
x= If (y==z, "true", "false");
Show (x); <BR /><BR />// results :<BR />y = .;<BR />z = Empty();<BR />Is Missing(y) = 1;<BR />Is Missing(z) = 1;<BR />Is Empty(y) = 0;<BR />Is Empty(z) = 1;<BR />x = .;
Entonces, el valor Empty() es tanto un valor faltante como un valor vacío, pero '.' Falta pero no está vacío. Qué diferencia hace eso ? Dado el hecho de que ambos devuelven un valor faltante cuando se usan en operadores de comparación, ¿por qué debería molestarme en usar Empty() como una declaración 'Else'?
Esto también ilustra el hecho de que cuando la condición probada en la sentencia if devuelve falta, no es ni verdadera ni falsa, por lo que el ciclo no devuelve ninguna de las dos sentencias, ¡lo cual siempre es bueno tener en cuenta!
Re: ¿Por qué usar siempre una sentencia else y la diferencia fundamental entre valores vacíos y faltantes?FWIW Nunca uso una declaración ELSE si no tengo una condición ELSE.Mantiene mi código simple y ajustado.Soy consciente de que if() es una función y sé cómo usarla como tal.Tal vez sea un vestigio de otros idiomas que he usado.
Re: ¿Por qué usar siempre una sentencia else y la diferencia fundamental entre valores vacíos y faltantes?Estoy de acuerdo en que la programación de computadoras en general y las secuencias de comandos JMP en particular son temas serios. Guardar guiones y piratear juntos guiones escritos por otros solo lo llevará hasta cierto punto. El resultado suele ser confusión y frustración.
Lamento que nuestro entrenamiento no sea una opción. Nuestro curso introductorio es maduro (alrededor de dos décadas) y bien recibido. No tengo conocimiento de ninguna otra capacitación para JSL, gratuita o de pago. Puede haber algunos videos gratuitos que cubran temas específicos, pero dudo que transmitan la mentalidad. Por lo general, son de estilo 'cómo hacer' o 'libro de cocina'.
Tal vez otro miembro de la comunidad conozca la capacitación que le conviene.
Re: ¿Por qué usar siempre una sentencia else y la diferencia fundamental entre valores vacíos y faltantes?Bueno, seguro que no quiero restringir mi creatividad teniendo una mentalidad limitante. Supongo que probablemente me falta formación en este campo. Probé Scripting en JSL hace unos meses, principalmente iterando en el script existente y mirando el índice de Scripting y el pdf de la guía de Scripting. Ahora creo que necesito algo un poco más serio si quiero liberar el potencial de JSL.
¿Conoce recursos en línea (gratuitos) para aprender JSL? Sé que esta puede ser una pregunta complicada ya que usted es miembro del personal y su empresa ofrece cursos pagos, pero actualmente esta no es una opción para mí.
Re: ¿Por qué usar siempre una sentencia else y la diferencia fundamental entre valores vacíos y faltantes?Haces algunas preguntas importantes.
Mi punto básico es que, como con cualquier lenguaje de programación de computadoras, la sintaxis y los modismos de JSL son nuestros amigos pero no somos esclavos de ellos. Mi pregunta, "¿Qué esperas?" solo pretendía señalar que necesitamos la respuesta a esta pregunta cada vez que escribimos o modificamos código. Una respuesta clara marca la diferencia en nuestro código.
Sí, las funciones son un elemento clave para escribir scripts. Por definición, cada función devuelve un resultado. Pero a veces estamos más interesados en un efecto secundario de la función que en el resultado que devuelve. Por ejemplo, la función V List Box() devuelve una referencia al objeto de cuadro de visualización que crea. Podría estar más interesado en la caja en sí (el efecto secundario) que en la referencia.
Muchos programadores novatos piensan que If() y For() son sentencias o comandos. son funciones La mentalidad de declaración puede limitar su creatividad. La mentalidad es importante. El siguiente guión muestra dos enfoques para lograr lo mismo, pero el segundo enfoque nunca se le ocurriría a alguien con una mentalidad de declaración.
Names Default to Here( 1 );
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
mean weight = Col Mean( dt:weight );
// assign within the If() function call
dt << New Column( "Condition 1", Numeric, Continuous );
For Each Row(
If( :weight < mean weight, dt:Condition 1 = -1, dt:Condition 1 = 1 );
);
// assign with the returned result from the If() function call
dt << New Column( "Condition 2", Numeric, Continuous );
For Each Row(
dt:Condition 2 = If( :weight < mean weight, -1, 1 );
);
Re: ¿Por qué usar siempre una sentencia else y la diferencia fundamental entre valores vacíos y faltantes?Hola MarkBailey,
Gracias por estas ideas
de hecho, pensé que era extraño tener que usar Empty() como una declaración else. Traté de buscar la publicación que mencionaba esta práctica, pero ya no puedo encontrarla, así que no puedo preguntarle al usuario por qué cree que esto es útil.
En respuesta a su pregunta: ¿Qué está tratando de hacer con la función condicional If ()? ¿Qué esperas que regrese?
Bueno, es fácil olvidar que JSL es un lenguaje basado en funciones y que las funciones devuelven valores. Por lo general, no uso realmente lo que devuelve la instrucción If. Solo estaba explorando esto como una forma de comprender los fundamentos de JSL. En la práctica, me pregunto, ¿de qué sirve usar valores devueltos de una declaración If?
Todo lo que puedo pensar es en ganar espacio en un script o hacerlo un poco más rápido. Pero se siente como si tratara de ser inteligente de esa manera, volvería a perseguirme más tarde y generaría errores/errores.
¿Cuál es tu opinión sobre esto?
Re: ¿Por qué usar siempre una sentencia else y la diferencia fundamental entre valores vacíos y faltantes?La forma en que uso Is Empty() es para ver si alguna vez se asignó una variable.Evitando así un error de sintaxis para:
names default to here(1);
show(z);
se puede comprobar si alguna vez se ha hecho referencia a la variable "z":
Names Default To Here( 1 );
If( Is Empty( z ) == 0,
Show( z )
);
Un mejor ejemplo es el siguiente.
Names Default To Here( 1 );
x=1;
If( x > 2, z = 7 );
If( Is Empty( z ) == 0,
Show( z )
);
Dado que JSL es un lenguaje interpretado, sigue el flujo lógico de JSL Entonces, si x <= 2, JSL no ejecutará (ni siquiera mirará) z = 7, y por lo tanto sin verificar si z está vacío () es requerido ya que JSL daría un error de sintaxis.
En su ejemplo, está utilizando una forma diferente de asignar el valor a z
names default to here(1);
z=(if(1>2, 7));
show(z);
La variable z tomará el valor de 7 si 1>2, pero si no es cierto, z ya no está asignada, por lo que tomará un valor faltante, ".".La ventaja aquí es que una vez que se realiza la asignación, JSL ha procesado la variable z y no tendrá un error de sintaxis si se hace referencia a z más adelante en el flujo del programa.
Esto nos lleva a la pregunta de si se debe asignar Vacío() como resultado de que se devuelva un falso en una función If().
names default to here(1);
z=(if(1>2, 7, Empty()));
show(z);
Entonces simplemente se reduce a, ¿no desea tener z como un valor faltante y prefiere verificar Is Empty () vs. Is Missing ().Personalmente, prefiero la ruta del valor faltante, ya que deja Empty() como una verificación de que nunca se asignó z. .
Re: ¿Por qué usar siempre una sentencia else y la diferencia fundamental entre valores vacíos y faltantes?Llevo escribiendo más tiempo que la mayoría de la gente (1998). Soy autor y enseño todos nuestros cursos de scripting. No conozco una 'mejor práctica' que recomiende incluir siempre un argumento para la condición 'else' o usar vacío en los casos en que no hay un valor de retorno específico. Ciertamente nunca lo extrañé ni pagué por no usarlo. Creo que este tema es otro caso de 'depende'. ¿Qué estás tratando de hacer con el condicional? Si() ¿función? ¿Qué esperas que regrese?
El valor de retorno predeterminado de la Si() la función es desaparecido cuando el primer argumento se evalúa como falso y solo hay dos argumentos. Ha demostrado este comportamiento con el valor almacenado en y . El Si() se ha comportado como tal desde que JSL se introdujo por primera vez en JMP 4 en 2000.
Puede proporcionar un tercer argumento a la Si() función que se evalúa y se devuelve cuando el primer argumento se evalúa como falso. Ha demostrado este comportamiento con el valor almacenado en z donde usted suministró el Vacío() funciona como el tercer argumento.
Desaparecido representa un valor desconocido. La mayoría de las veces representa valores de datos que son desconocidos o el resultado de evaluar una expresión numérica imposible como Log( -1 ). Creo que desaparecido tiene mucho sentido como valor de retorno predeterminado para una condición que no está representada por un argumento.
Vacío es solo eso Representa el estado donde no hay nada allí. Por ejemplo, si llama Tabla de datos actual () sin argumento cuando no hay tablas de datos abiertas, devuelve vacío .