HP Prime - Comando EXPR

EXPR es un comando especial encargado de compilar y ejecutar una o más instrucciones pasadas como un parámetro tipo cadena, su utilidad es indiscutible pero a la vez no es recomendable respecto a la optimización de programas.


Convirtiendo cadenas en código
EXPR - HP Prime

Son pocos los lenguajes que poseen comandos o medios de este tipo, interpretar una cadena como código es una locura, a costa de esto HP PPL tiene este tipo de comando gracias a su sencillez. Actualmente los lenguajes modernos carecen de una función completa como tal, por razones muy justificables, estos poseen muchas funcionalidades que hacen innecesario y problemático el uso de un comando así, son más versátiles; existen las funciones Parse pero no funcionan de este modo (interpretan cadenas).


Sintaxis del comando

Solo basta con colocar una cadena dentro del comando, muy sencillo; pero como ya sabemos, por más sencillo que sea un comando, aparece un programador y lo complica todo. Veamos ejemplos de una sola instrucción.



Como se había mencionado, es posible ejecutar más de una instrucción, lo redactamos como si fuera escrito fuera del código, separando las instrucciones con punto y coma (;) como es usual, en los ejemplos anteriores no era necesario colocarlo por las Omisiones en sintaxis que existen en HP Prime.




Estructura equivalente

El contenido de EXPR se inserta como un subbloque de código, similar al código contenido en una estructura de control como IF; debido a esto entendemos que a causa del Ámbito de variables, las variables creadas en este subalgoritmo no existen fuera del EXPR, y en ese mismo sentido es posible acceder a variables del bloque padre, de la función actual, a las varibles y funciones del programa, y por último a fuentes externas como variables y comandos (Programas, Inicio, Aplicaciones, CAS).



Este subalgoritmo debe compilarse y ejecutarse, es por ello que el comando EXPR nos permite obtener errores de compilación (todos los existentes) en plena ejecución de un programa, algo inusual pero útil en muchos casos.



Al ser código que se inserta como un bloque interno respecto al bloque padre, será posible contener el comando RETURN, y este actuará sobre la función actual con normalidad.



Por otro lado, no confundir al comando EXPR como la solución a esa necesidad que surgía cuando éramos programadores principiantes, la necesidad de crear nombres de variables de forma automática. Recordando que esta no es una alternativa, podemos usar las estructuras actuales como listas, vectores o matrices, también se puede usar cadenas y enteros ya que también se puede consultar cada uno de sus elementos.




Ejemplos de uso

Convertir datos separados a notación sexagesimal



Manipular grupos de variables

En ocasiones donde los nombres de variables siguen una secuencia y no es posible editarlos en grupo; como el caso de limpiar las variables de la vista simbólica de la App Función



Usar en reemplazo de HVars, AVars

HVars y AVars se encargan de crear y asignar los valores de las variables de usuario y aplicaciones respectivamente, pero al ya estar creados, pueden ser usados con normalidad con EXPR; eso le permite más versatilidad como por ejemplo EXPR("VarExterna(5):=10"), esto no es posible con los comandos anteriores puesto que pueden usar solo el nombre como parámetro.

Reemplazar un CASE

La estructura CASE puede resultar extensa cuando deseamos hacer cosas sencillas; en el caso donde deseamos desesperadamente obtener un código reducido es posible reemplazarla con el uso de listas y el nombre de las funciones como cadena.





Simular funciones con paso por referencia

Existen 2 formas de simular esto, aquí veremos la que parece más adecuada por usar la propiedad de insertarse en el bloque actual, pero también no permite la verificación de sintaxis; la otra forma mencionada se encuentra en Consideraciones 2° Parte.




Desventajas

No es posible detectar errores de sintaxis mediante el editor de programas, puesto que al ser una cadena, no se le aplica ningún tipo de validación (hablando de su contenido).

La velocidad de ejecución se reduce a causa de la compilación requerida por cada vez que se use el comando; si un comando EXPR se encuentra dentro de un bucle de procesamiento, el retraso puede ser importante.

Lamentablemente para listas locales, debido a un error del comando, no es posible manipular su contenido cuando requieran más de 2 índices de acceso, ejemplo: EXPR("Lista(1,1,1)") → Error de sintaxis. Esto al fin fue corregido en el firmware 13441.


Consejos y datos finales

Usar el comando EXPR solo cuando sea necesario, intentar proponer los algoritmos con las otras características brindadas por el lenguaje.

El comando EXPR trae consigo el proceso de compilación y estructurado en memoria antes de accionar el bloque contenido, esto lo hace en plena ejecucción.

Por las razones explicadas, no es correcto ejecutar EXPR(Programs(1)), es código pero no realiza una inserción exitosa como es de esperar.

Comentarios

Lo más visto