HP Prime - Valor de retorno y anidación de instrucciones

En HP PPL toda sentencia, comando o función retorna valor, gracias a esta característica se pueden anidar instrucciones a conveniencia de tal forma que se pueda escribir código comprimido y en ocasiones ligeramente más veloz.


Valor de retorno y anidación
HP Prime - Programación

Las instrucciones pueden ejecutarse de diversas formas, estas pueden ser funciones o comandos evaluados en Inicio, CAS o en una línea de programa, toda instrucción ejecutada por el usuario retorna un valor, como por ejemplo 5+10→15, SIN(0)→0, INPUT(X)→1. Incluso si una instrucción no es una operación como 5→5, esto se debe al diseño tipo calculadora.


Valores de retorno

Según tipo de dato operado

En una instrucción se pueden operar diferentes tipos de datos, esto se rige al diseño académico de la calculadora. Retornando el tipo de dato predominante o un error al usarse datos no compatibles.



Según sintaxis del comando integrado

De acuerdo a lo especificado en el Manual de usuario, cada comando puede retornar valores reales, enteros, complejos, cadenas, matrices, listas, unidades, etc.



Y aunque no se encuentre descrito en la ayuda, todos los comandos de programación también retornan un valor luego de cumplir su función, ya sea luego de modificar la pantalla, mostrar un mensaje, realizar una pausa u otra acción, al final retornan un valor.



Según variable

Una variable siempre retornará su valor contenido, a menos que sea puesto en un ambiente no evaluado al usar el comando QUOTE o en comandos de paso por referencia, en este último caso será enviado el nombre y no el valor.



Según estructura

Las estructuras de control, poseen usualmente instrucciones que se ejecutan en su interior, bajo ese punto existe una última instrucción ejecutada; el valor de la última instrucción ejecutada se puede asumir como el valor retornado por la estructura.



Cuando una estructura es iniciada pero no logra ejecutar sus instrucciones, retorna el valor por defecto 0, en estructuras esto pasa únicamente con FOR.



Al usar las instrucciones CONTINUE y BREAK que alteran la continuidad del bucle actual, retorna el valor por defecto 0.



Según función/programa

Una función vacía retorna el valor por defecto 0.
Una función siempre retornará el resultado de la última línea ejecutada.



La declaración de una variable local es un instrucción fuertemente asociada al bloque de una función y al ámbito global de un programa. Al usar el comando LOCAL, esta instrucción retornará el valor por defecto 0.



Ante la presencia del comando RETURN en el bloque de una función, este forzará a terminar la función en esa línea. Puede retornar el resultado de la línea señalada o el valor por defecto 0 si no existe una instrucción precedente.






Anidación de instrucciones

Gracias a que HP PPL cuenta con una adecuada ejecución por niveles, es posible anidar instrucciones dentro de otras conociendo el valor retornado de cada una para simplificar convenientemente el código de nuestro programa. La anidación puede darse en una operación o en el paso de parámetros asumiendo que debe representar una sola instrucción y no un conjunto de instrucciones.

Anidación simple

De la misma forma que podemos anidar FP(ABS(ATAN(10))), es posible anidar los diversos comandos que existen en la calculadora.



Anidación con operaciones

De acuerdo a los valores retornados según el tipo de dato operado anteriormente, es posible anidar los comandos en operaciones, usando paréntesis para limitar la instrucción única, recordemos nuevamente que las instrucciones se anidan individualmente.





Instrucciones no anidables

Las instrucciones no anidables son, la definición de una función: FUNCIÓN BEGIN END, la declaracion de una variable: LOCAL, una estructura de control: CASE IF IFERR FOR WHILE REPEAT, los comandos CONTINUE, BREAK, RETURN, KILL y comandos similares, todos estos estan relacionados a bloques de código y control de flujo.

Si es necesario o persistente la necesidad de usar las anteriores estructuras, se recomienda crear funciones adicionales que las contengan, o buscar comandos lineales que simulen el mismo efecto como IFTE, PIECEWISE, ITERATE, EXECON, map, count, etc.


Consejos y datos finales

El retorno de valores posiblemente puede variar en el tiempo (variaciones compatibles con versiones anteriores), como el caso de TEXTOUT, que anteriormente solo retornaba 1 y 0, actualmente retorna una coordenada de pantalla, y en el futuro puede que esto sea modificado. Se recomienda explorar las condiciones del comando en el firmware actual.

No anidar instrucciones con el objetivo de reinventar la funcionalidad de un comando, cada comando y operación tiene un comportamiento determinado, cada parámetro debe corresponder a la sintaxis indicada en la Ayuda.

La anidación debe realizarse de tal manera que no enriede de forma extrema el código, una funcionalidad no debería hacer más complicada una tarea, sino provechosa.

En ciertos comandos como INPUT, MSGBOX, ISKEYDOWN, RECT y similares, retorna el valor 1 para indicar un caso de éxito, y 0 para un caso contrario.

El retorno del valor 0 es un estándar usual en otros lenguajes, por esta razón no debemos confundirlo con un resultado negativo, simplemente puede representar un caso de culminación o caso no contemplado, como por ejemplo una función vacía o una función con un return; a secas.

Comentarios

  1. No hablo español, pero con google traduzco tus textos.
    Su trabajo es importante para todos nosotros, ya que HP no lo ha estado haciendo desde 2013.
    Tengo 83 años, pero el cerebro todavía está allí (¡no de salud, qué mal!).
    Gracias amigo. (un ejemplo de lo que hago)

    ResponderBorrar
  2. Buenas, hice un programa que al seleccionar una variable me imprime un texto, si elijo otra variable se imprime pero lo hace debajo de lo que ya había impreso y lo que quiero es que una vez lo imprima borre lo anterior porque sino se acumula mucho texto y dificulta la lectura


    EXPORT Formulas_Q()
    BEGIN


    LOCAL A=0,B=0,C=0,D=0,E=0,F=0,G=0,H=0;
    LOCAL I=0,J=0,K=0,L=0,M=0,N=0,O=0,Q=0;
    LOCAL P=0,R=0,S=0,T=0,U=0,V=0,W=0,X=0;




    CHOOSE(A, "Leyes Básicas", "Ley de los Gases ", "Disoluciones",
    "Propiedades coligativas","Estructura atómica",
    "Mecánica ondulatoria","Configuración electrónica",
    "Propiedades periódicas","Enlace químico",
    "Termodinámica química","Cinética química",
    "Equilibrio químico","Reacciones de precipitación",
    "Reacciones de transferencia de protones",
    "Reacciones de transferencia de electrones"
    );

    IF A==1 THEN
    CHOOSE(B,"Leyes Básicas","Ley de conservación de la masa: Ley de Lavoisier","Ley de las proporciones definidas: Ley de Proust","Ley de las proporciones múltiples: Ley de Dalton","Ley de las proporciones recíprocas: Ley de Richter","Ley de los volúmenes de combinación: Ley de Gay-Lussac","Principio de Avogadro"); ELSE
    END;

    IF B==1 THEN
    PRINT("
    Ley de conservación de la masa: Ley de Lavoisier

    En toda reacción química la masa de las sustancias que reaccionan es igual a la masa de las sustancias que se producen en la reacción. ");
    END;

    IF B==2 THEN
    PRINT("
    Ley de las proporciones definidas: Ley de Proust.
    Cuando dos elementos se combinan para formar un compuesto lo hacen siempre en una proporción constante o definida. ");
    END;

    IF B==3 THEN
    PRINT("Cuando dos elementos se combinan para formar diferentes compuestos, las cantidades de uno de ellos que se combinan con una cantidad fija del otro están en relación de números enteros y sencillos. ");
    END;
    END;

    ResponderBorrar
    Respuestas
    1. Usa PRINT; de este modo (sin argumentos) para limpiar el terminal cada vez que lo necesites, por ejemplo ubicándolo antes del primer CHOOSE.
      Disculpa que no haya respondido antes, tuve problemas técnicos con las notificaciones, puedes dejar más dudas sin problemas.

      Borrar

Publicar un comentario

Lo más visto

Matriz (Tipo) - HP Prime