Translate

miércoles, 26 de agosto de 2015

Convención de nombres en funciones, clases, métodos y variables

Programar en Python es el fín principal de los artículos que se publican habitualmente en este blog, pero en programación siempre debemos cultivar las buenas prácticas, independientemente del lenguaje de programación que usemos. 

Una convención de nombres, en programación, consiste en una serie de reglas que nos permitirán denominar adecuadamente la acción que realizan las funciones, clases o métodos y el contenido de variables. Reduciremos el esfuerzo en la lectura del código y lo podremos entender mejor.

Se recomienda utilizar 'identificadores significativos' que pueden componerse de varias palabras, evitando los espacios en blanco que pueden sustituirse por subrayado '_' (snake_case) o guión '-' (spynal-case es una variante de snake_case, aunque es poco usada ya que el guión puede ser considerado caracter en algunos lenguajes). Esta nomenclatura, que habitualmente utilizará caracteres alfanuméricos en minúsculas, se identifica como snake_case debido a que se asemeja a una serpiente. Por ejemplo :  calcula_total_precio() o es_correcto = 1 .  Esta nomenclatura, es muy común en programación C. Tambien es utilizado habitualmente para componer las URI de una API REST, frecuentemente utilizado por los gigantes de la Web, p.e.:
POST /v1/specific_orders

Otra nomenclatura habitual usada como 'identificador significativo', se compone con mayúsculas y minúsculas,  denominándose CamelCase por las jorobas que parece formar, similar a las de un camello. Por ejempo:  CalculaTotalPrecio()  (UpperCamelCase) calculaTotalPrecio() o esCorrecto = 1 (LowerCamelCase) . Esta nomenclatura, habitualmente se usa en programación Javascript, Ruby,...etc.

El que usemos una convención u otra solo es una cuestión de dogma, aunque existen razones para utilizar una u otra:

- Cuando lee la nomenclatura snake_case o undescore_case, habitualmente nuestro cerebro elimina el carácter de subrayado ( que no considera un caracter significativo ) y la lectura puede ser más rápida.

- Cuando lee la nomenclatura CamelCase nuestro cerebro realizará una labor de traducción, aunque se compensa con una mejora en el uso de memoria hardware, ya que la dimensión del identificador será menor que su equivalente en snake_case.

En el caso de Python, debería leer la recomendación PEP 0008 (Style Guide for Python Code) que además de otras muchas directivas, nos aclaran la aplicación de estas nomenclaturas :

- Normalmente los nombres de clase deben utilizar la convención CapWords o CamelCase (UpperCamelCase). 
Por ejemplo :
class MyClass(object):

- Utilice la nomenclatura snake_case para denominar funciones, métodos y variables de instancia (atributos o propiedades en Python se le denominan variables de instancia y siempre deben ir precedidos de la referencia self): en minúsculas con palabras separadas por guiones bajos para mejorar la legibilidad. 
Por ejemplo :
def get_my_class(arg1, arg2, arg3):

- Utilice dos subrayado iniciales sólo para métodos no públicos y variables de instancia no públicas
Por ejemplo :
def  __init__():     ó   __a = c + h

- Las constantes suelen definirse en un nivel de módulo y se escriben en letras mayúsculas con guiones bajos para separar palabras. 
Ejemplo :  MAX_OVERFLOW y  TOTAL

-Para denominar variables globales debe utilizar las misma convención que para las funciones (snake_case).
- Los variables de instancia públicas no deben contener los dos guiones bajos iniciales y se denominan con la nomenclatura snake_case.

El único fín de esta información, a modo de resúmen, es que seamos conscientes de que es posible programar código más reusable y legible con unas convenciones mínimas.