Código inflado
De Wikipedia, la enciclopedia libre
De Wikipedia, la enciclopedia libre
Código inflado (o inflamado) conocido como Code bloat en Inglés consiste en generar código innecesariamente largo, lento o que hace un mal uso de recursos. Puede ser causa de insuficiencias en el lenguaje en que el código está escrito, insuficiencias en el compilador usado para compilarlo o por malas prácticas del programador. Al hablar de código inflado, normalmente es en referencia al tamaño del código (el producido por el programador), pero a veces puede ser en referencia al código generado o al tamaño de los archivos binarios.
Habitualmente, el código inflado lo genera un programador que simplemente usa más líneas de código de las que requiere la solución óptima al problema.
Algunas de las razones por las que un programador acaba generando código inflado son:
if
en lugar de utilizar una tabla de búsqueda.Algunas implementaciones de plantillas de C++ son ejemplos de código inflado generado por el compilador.
Un compilador inadecuado podría generar una versión de cada método de una plantilla por cada tipo de dato con que se use la plantilla. Esto provoca que se compilen métodos que podrían no ser usados. Los compiladores y enlazadores más sofisticados detectan las copias no operativas y las descartan o incluso evitan generarlas, reduciendo así la inflamación de código. De esta manera el código generado con plantillas puede llevar a archivos binarios más reducidos ya que el compilador puede eliminar este tipo de código muerto.
Algunos ejemplos de código inflado producido por el compilador incluyen:
El siguiente algoritmo de JavaScript tiene gran cantidad de variables redundantes, lógica innecesaria y concatenación ineficiente de cadenas.
function TK2getImageHTML(tamano, zoom, sensor, marcadores)
{
var strImagenFinal = "";
var strInicioHTML = '<img src="';
var strFinalHTML = '" alt="The map"/>';
var strURL = "http://maps.google.com/maps/api/staticmap?center=";
var strTamano = '&size='+ tamano;
var strZoom = '&zoom='+ zoom;
var strSensor = '&sensor='+ sensor;
strURL += marcadores[0].latitude;
strURL += ",";
strURL += marcadores[0].longitude;
strURL += strTamano;
strURL += strZoom;
strURL += strSensor;
for (var marcador = 0; marcador < marcadores.length; marcador++)
{
strURL += marcadores[marcador].addMarker();
}
strImagenFinal = strInicioHTML + strURL + strFinalHTML;
return strImagenFinal;
};
La misma lógica se puede expresar de manera más eficiente como el siguiente:
TK2.getImageHTML = function(tamano, zoom, sensor, marcadores)
{
var url =
[
'http://maps.google.com/maps/api/staticmap',
'?center=', marcadores[0].latitude, ',', marcadores[0].longitude,
'&size=', tamano,
'&zoom=', zoom,
'&sensor=', sensor
];
for (var marcador = 0; marcador < marcadores.length; marcador++)
{
url.push(marcadores[marcador].addMarker());
}
return '<img src="' + url.join('') + '" alt="The map" />';
}
La diferencia en densidad de código entre varios lenguajes de programación es tan grande que habitualmente se requiere menos memoria para un lenguaje compacto (como un lenguaje específico de dominio, Código empaquetado de Microsoft o Código enhebrado) que para un lenguaje escrito en lenguaje máquina.
Algunas técnicas para reducir el código inflamando incluyen:[2]
Seamless Wikipedia browsing. On steroids.
Every time you click a link to Wikipedia, Wiktionary or Wikiquote in your browser's search results, it will show the modern Wikiwand interface.
Wikiwand extension is a five stars, simple, with minimum permission required to keep your browsing private, safe and transparent.