fbpx
Wikipedia

Código inflado

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.

Causas comunes

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:

  • Un uso excesivo de constructos de programación orientada a objetos (como clases y herencia) puede llevar a diseños desordenados y confusos, a menudo usando más líneas de código que la solución óptima.
  • Usos incorrectos de patrones de diseño, algunos programadores intentan “forzar” patrones a soluciones que no los necesitan (regla del martillo de oro).
  • No usar un encapsulamiento adecuado sobre problemas parciales permitiendo su reutilización y por lo tanto derivando en código duplicado.[1]
  • Utilizar un estilo de programación declarativa en un lenguaje de programación imperativa.
  • Excesivo desenroscado de bucles sin asegurar una mejora en el rendimiento.
  • Abusar de las instrucciones 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:

  • Código que es ejecutado pero cuyo resultado jamás es usado (código muerto).
  • Re-evaluar expresiones que han sido calculadas anteriormente. Estos cálculos redundantes suelen generarse al implementar verificaciones de límites para prevenir desbordamientos de buffer. Los compiladores más sofisticados hacen estos cálculos una sola vez, eliminando así los cálculos redundantes, usando eliminación de subexpresiones comunes y desplazamiento de invariantes de bucle.

Ejemplos

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" />'; } 

Densidad de código de diferentes lenguajes

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.

Reducir la inflamación

Algunas técnicas para reducir el código inflamando incluyen:[2]

  • Refactorizar secuencias de código de uso común en una subrutina y llamar dicha subrutina desde diferentes puntos del código en lugar de copiar y pegar el código en todos esos puntos.
  • Reutilizar subrutinas existentes (puede que con parámetros adicionales) en lugar de crear una nueva rutina desde cero.

Véase también

Referencias

  1. http://www.stevemcconnell.com/ieeesoftware/bp16.htm
  2. . DocForge. Archivado desde el original el 5 de marzo de 2016. Consultado el 30 de diciembre de 2009. 

Enlaces externos

  •   Datos: Q5140061

código, inflado, inflamado, conocido, como, code, bloat, inglés, consiste, generar, código, innecesariamente, largo, lento, hace, recursos, puede, causa, insuficiencias, lenguaje, código, está, escrito, insuficiencias, compilador, usado, para, compilarlo, mala. Codigo inflado o inflamado conocido como Code bloat en Ingles consiste en generar codigo innecesariamente largo lento o que hace un mal uso de recursos Puede ser causa de insuficiencias en el lenguaje en que el codigo esta escrito insuficiencias en el compilador usado para compilarlo o por malas practicas del programador Al hablar de codigo inflado normalmente es en referencia al tamano del codigo el producido por el programador pero a veces puede ser en referencia al codigo generado o al tamano de los archivos binarios Indice 1 Causas comunes 2 Ejemplos 3 Densidad de codigo de diferentes lenguajes 4 Reducir la inflamacion 5 Vease tambien 6 Referencias 7 Enlaces externosCausas comunes EditarHabitualmente el codigo inflado lo genera un programador que simplemente usa mas lineas de codigo de las que requiere la solucion optima al problema Algunas de las razones por las que un programador acaba generando codigo inflado son Un uso excesivo de constructos de programacion orientada a objetos como clases y herencia puede llevar a disenos desordenados y confusos a menudo usando mas lineas de codigo que la solucion optima Usos incorrectos de patrones de diseno algunos programadores intentan forzar patrones a soluciones que no los necesitan regla del martillo de oro No usar un encapsulamiento adecuado sobre problemas parciales permitiendo su reutilizacion y por lo tanto derivando en codigo duplicado 1 Utilizar un estilo de programacion declarativa en un lenguaje de programacion imperativa Excesivo desenroscado de bucles sin asegurar una mejora en el rendimiento Abusar de las instrucciones if en lugar de utilizar una tabla de busqueda Algunas implementaciones de plantillas de C son ejemplos de codigo inflado generado por el compilador Un compilador inadecuado podria generar una version de cada metodo de una plantilla por cada tipo de dato con que se use la plantilla Esto provoca que se compilen metodos que podrian no ser usados Los compiladores y enlazadores mas sofisticados detectan las copias no operativas y las descartan o incluso evitan generarlas reduciendo asi la inflamacion de codigo De esta manera el codigo generado con plantillas puede llevar a archivos binarios mas reducidos ya que el compilador puede eliminar este tipo de codigo muerto Algunos ejemplos de codigo inflado producido por el compilador incluyen Codigo que es ejecutado pero cuyo resultado jamas es usado codigo muerto Re evaluar expresiones que han sido calculadas anteriormente Estos calculos redundantes suelen generarse al implementar verificaciones de limites para prevenir desbordamientos de buffer Los compiladores mas sofisticados hacen estos calculos una sola vez eliminando asi los calculos redundantes usando eliminacion de subexpresiones comunes y desplazamiento de invariantes de bucle Ejemplos EditarEl siguiente algoritmo de JavaScript tiene gran cantidad de variables redundantes logica innecesaria y concatenacion ineficiente de cadenas function TK2getImageHTML tamano zoom sensor marcadores var strImagenFinal var strInicioHTML lt img src var strFinalHTML alt The map gt var strURL http maps google com maps api staticmap center var strTamano amp size tamano var strZoom amp zoom zoom var strSensor amp sensor sensor strURL marcadores 0 latitude strURL strURL marcadores 0 longitude strURL strTamano strURL strZoom strURL strSensor for var marcador 0 marcador lt marcadores length marcador strURL marcadores marcador addMarker strImagenFinal strInicioHTML strURL strFinalHTML return strImagenFinal La misma logica se puede expresar de manera mas 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 amp size tamano amp zoom zoom amp sensor sensor for var marcador 0 marcador lt marcadores length marcador url push marcadores marcador addMarker return lt img src url join alt The map gt Densidad de codigo de diferentes lenguajes Editar Este articulo o seccion necesita referencias que aparezcan en una publicacion acreditada Este aviso fue puesto el 19 de mayo de 2014 La diferencia en densidad de codigo entre varios lenguajes de programacion es tan grande que habitualmente se requiere menos memoria para un lenguaje compacto como un lenguaje especifico de dominio Codigo empaquetado de Microsoft o Codigo enhebrado que para un lenguaje escrito en lenguaje maquina Reducir la inflamacion EditarAlgunas tecnicas para reducir el codigo inflamando incluyen 2 Refactorizar secuencias de codigo de uso comun en una subrutina y llamar dicha subrutina desde diferentes puntos del codigo en lugar de copiar y pegar el codigo en todos esos puntos Reutilizar subrutinas existentes puede que con parametros adicionales en lugar de crear una nueva rutina desde cero Vease tambien EditarSobrecarga en polimorfismo Software inflado Minimalismo Referencias Editar http www stevemcconnell com ieeesoftware bp16 htm Codigo inflado DocForge Archivado desde el original el 5 de marzo de 2016 Consultado el 30 de diciembre de 2009 Enlaces externos EditarEsta obra contiene una traduccion derivada de Code bloat de la Wikipedia en ingles concretamente de esta version publicada por sus editores bajo la Licencia de documentacion libre de GNU y la Licencia Creative Commons Atribucion CompartirIgual 3 0 Unported Datos Q5140061Obtenido de https es wikipedia org w index php title Codigo inflado amp oldid 134131608, wikipedia, wiki, leyendo, leer, libro, biblioteca,

español

, española, descargar, gratis, descargar gratis, mp3, video, mp4, 3gp, jpg, jpeg, gif, png, imagen, música, canción, película, libro, juego, juegos