Usabilizando GeneXus: Renombrar variables

Una de las cosas que ayuda mas a entender código escrito por otras personas, es que las variables, los objetos y las rutinas usadas en dicho código, tengan nombres coherentes y que permitan identificar rápidamente lo que se almacena en ellas.

A medida que pasa el tiempo, el significado de los diferentes objetos/variables del sistema  puede cambiar y por lo tanto conviene renombrarlo.

Si lo que renombro son tablas o atributos, le cambio el nombre, se genera un programa de reorganización para cambiar la base de datos y se regeneran todos los programas en forma que empiecen a usar dichos nombres.

Es renombrar objetos ejecutables (por ejemplo, procedures, transactiones, webpanels, etc) dentro de la KB, es una tarea que esta bien implementada, pues le cambio el nombre al objeto, hago un build all y se regeneran y compilan todos los objetos que se necesitan.

Las rutinas dentro de un objeto, se pueden renombrar y pero hay que cambiar en forma manual los lugares que hacen referencias a las mismas. No es un gran trabajo, pero hay que hacerlo en forma manual. El especificador indica cuando nos equivocamos en el cambio de nombre. Es una tarea que podría mejorarse, dando la opción al renombrar la subrutina que proponga un dialogo para cambiar todos los lugares que esta siendo invocada la misma.

Lo que si me parece que es muy mejorable, es la tarea de renombrar variables dentro de los objetos.
Hoy renombrar una variable, implica cambiar la definición de la misma (en el TAB de variables del objeto) y luego hay que ir por todos los demás TABs, cambiándola. Puede estar en las condiciones, en las rules, en el form, en el source.
Es una tarea en la cual se pueden introducir muchos errores, por lo que los programadores la evitan. Esto trae como  consecuencia, que una vez que una variable se nombro mal, como da mucho trabajo renombrarla, queda con el nombre mal por mucho tiempo.

Creo que si GeneXus ayudara en el renombre de variables, colaboraríamos mas para tener  código un poco mas facil de leer y entender.

Creo que son pequeñas cosas a mejorar que nos haría la vida un poco mas placentera y nos dejará pensar en problemas mas importantes.

PD1: Otra funcionalidad un poco mas avanzada, seria la de renombrar las variables basadas en un atributo y tiene el mismo nombre que dicho atributo, cuando lo renombro. Por ejemplo, si tengo el atributo/dominio CliId y en varios objetos de la KB tengo &CliId basada en dicho atributo, cuando renombre CliID a ClienteID, me pregunte si quiero renombrar tambien las variables basadas en dicho atributo y las renombre en forma acorde.

PD2: Hay dos  tipos de objetos que tienen problemas al renombrarse. Uno son los SDT cuando se tienen mas de un generador, porque muchas veces al renombrarlos las cosas dejan de compilar, porque quedan mal las referencias. Es un error que deberia solucionarse.

Otro caso en el cual se cambia el comportamiento al renombrar es con los External Objects del tipo SOAP, cuando manejan Location. En el codigo, pueden quedar referencias al nombre cuando se hace el GETLocation("NombreObjeto") y dicho nombre no se cambia cuando se renombra, por lo cual el programa deja de hacer lo que estaba haciendo. Hay que tener cuiado con este caso tambien.
Es un error que podria evitarse si GeneXus tuviera una sintaxis diferente.

Si en  vez de usar

&Location = GetLocation("NombreObjeto")

fuera

&Location = &NombreObjeto.GetLocation()

se podría adaptar automáticamente al cambio de nombre.

Comentarios

Entradas más populares de este blog

La nefasta influencia del golero de Cacho Bochinche en el fútbol uruguayo

Aplicación monolítica o distribuida?

Funcionalidades de GeneXus que vale la pena conocer: DATE Constants.