Azúcar sintáctico: un arma de doble filo

mayo 9, 2018 0 Por angaroshi
Azúcar sintáctico: un arma de doble filo

El azúcar sintáctico es el condimento preferido de casi todo desarrollador Ruby. ¿Cómo no va a serlo con tantas herramientas disponibles?. Pero… ¿Tanta azúcar, no puede hacer mal? Veamos….

ActiveSupport es un gran ejemplo de una librería llena de nuestro preciado néctar; con funciones como3.days.ago, "String".classify, something.present? y muchos ejemplos más. Funciones, que sin duda, son de gran ayuda. Pero veamos la implementación de ActiveRecord del metodo present?[1]

def present?
    !blank?
end

Un poco obvio, pero qué hace blank? [2]

def blank?
    records.blank?
end

Es decir, que cada vez que ejecutamos current_user.activities.present? esta trayéndose consigo todas las actividades consigo por más de que no las usemos. Por ejemplo:

< % if current_user.activities.present? %>
    < %= link_to "Ir a actividades", activities_path %>
< % else %>
    No tienes actividades aún.
< % end %>

Traernos todas las actividades puede ser un potencial memory bloat, si la tabla activities es muy grande. Y créanme… rastrear este tipo de problemas, es algo que uno no quiere hacer.

Conclusiones

El azua sintáctico es muy útil, pero si uno no tiene cuidado con que es lo que utiliza, puede traer problemas muy serios. Llegar a encontrar problemas de performance como el que vimos, no es una tarea sencilla y puede llevarnos un buen par de días mirando código.