Bienvenidos sean a este post, hoy hablaremos sobre un tema que vimos en este post como son las tablas con valores predeterminados, en ese caso vimos una tecnica particular y comentamos que otras dos tecnicas necesitaban tablas debiles asi que lo pospusimos.

Anuncios

Hoy continuaremos con estos temas porque estas dos tecnicas para valores predeterminados son en realidad aplicaciones particulares de las dos tecnicas generales que hemos visto en posts anteriores:

Anuncios

Para la primer solucion usamos una tabla debil para asociar a cada tabla su valor predeterminado:

local defaults = {}
setmetatable(defaults, {__mode = "k" }
local mt = {__index = function(t) return defaults[t] end}
function setDefault(t, d)
	defaults[t] = d
	setmetatable(t, mt)
end

En este caso defaults si no tiene ninguna clave debil anclara todas las tablas con valores predeterminados dentro de existencia permanente.

Anuncios

Para la segunda solucion, usamos distintas metatablas para valores predeterminados distintos pero reusamos la misma metatabla cuando repetimos el valor predeterminado, el siguiente caso es un tipico uso de memoizar:

local metas = {}
setmetatable(metas, {__mode="v"})
function setDefault(t,d)
	local mt = metas[d]
	if mt == nil then
		mt = {__index = function() return d end)
		metas[d] = mt
	end
	setmetatable(t, mt)
end

Para este caso usamos valores debiles para permitir la recoleccion de metatablas que no son usada nunca mas.

Anuncios

Con estas dos implementaciones para valores predeterminados, cuales de ellas es la mejor? Como ocurre habitualmente depende, ambas tienen una complejidad similar y una performance similar, la primera necesita algunas palabras de memoria para cada tabla con un valor predeterminado (una entrada en defaults), en cambio la segunda implementacion algunas docenas de palabras de memoria para cada valor predeterminado distinto (una nueva tabla, un nuevo cierre, ademas de una nueva entrada en metas).

Anuncios

Por lo tanto, si tu aplicacion tiene cientos de tablas con unos pocos valores predeterminados distintos la segunda implementcion es claramente superior, en cambio si pocas tablas comparten predeterminados comunes deberas optar por la primera implementacion.

Anuncios

En resumen, hoy hemos visto un tema pendiente de tablas con valores predeterminados, para que se usan realmente, como implementarlas, cuales son sus beneficios, y cual es mas util dependiendo el ambito donde queramos implementarla, espero les haya sido util sigueme en Twitter o Facebook para recibir una notificacion cada vez que subo un nuevo post en este blog, nos vemos en el proximo post.

Tengo un Patreon donde podes acceder de manera exclusiva a material para este blog antes de ser publicado, sigue los pasos del link para saber como.

Tambien podes donar

Es para mantenimiento del sitio, gracias!

$1.00