Skip to content

Latest commit

 

History

History
186 lines (170 loc) · 2.76 KB

procedural_vs_poo.md

File metadata and controls

186 lines (170 loc) · 2.76 KB

Procedural

local function DrinkMilk(cat)
	cat.fur = cat.fur + 1
end
local cat = {fur = 4}
local function Test()
	for i = 1, 100000 do
		DrinkMilk(cat)
		DrinkMilk(cat)
		DrinkMilk(cat)
		DrinkMilk(cat)
		DrinkMilk(cat)
		DrinkMilk(cat)
		DrinkMilk(cat)
		DrinkMilk(cat)
		DrinkMilk(cat)
		DrinkMilk(cat)
	end
end

taken: 300ms

taken: 304ms

taken: 298ms

Metatable Class

local Cat = {fur = 4}
function Cat:NewCat()
	local obj = {}
	setmetatable(obj, self)
	self.__index = self
	self.fur = self.fur
	return self
end
function Cat:DrinkMilk()
	self.fur = self.fur + 1
end
local cat = Cat:NewCat({})
local function Test()
	for i = 1, 100000 do
		cat:DrinkMilk()
		cat:DrinkMilk()
		cat:DrinkMilk()
		cat:DrinkMilk()
		cat:DrinkMilk()
		cat:DrinkMilk()
		cat:DrinkMilk()
		cat:DrinkMilk()
		cat:DrinkMilk()
		cat:DrinkMilk()
	end
end

taken: 336ms

taken: 336ms

taken: 332ms

Function Class (private member)

local function Cat()
	local fur = 4
	local function DrinkMilk()
		fur = fur + 1
	end
	return {DrinkMilk = DrinkMilk}
end
local cat = Cat()
function Test()
	for i = 1, 100000 do
		cat.DrinkMilk()
		cat.DrinkMilk()
		cat.DrinkMilk()
		cat.DrinkMilk()
		cat.DrinkMilk()
		cat.DrinkMilk()
		cat.DrinkMilk()
		cat.DrinkMilk()
		cat.DrinkMilk()
		cat.DrinkMilk()
	end
end

taken: 294ms

taken: 299ms

taken: 290ms

Function Class (public member)

local function Cat()
	local self = {}
    self.fur = 4
    function self.DrinkMilk()
		self.fur = self.fur + 1
	end
	return self
end
local cat = Cat()
function Test()
	for i = 1, 100000 do
		cat.DrinkMilk()
		cat.DrinkMilk()
		cat.DrinkMilk()
		cat.DrinkMilk()
		cat.DrinkMilk()
		cat.DrinkMilk()
		cat.DrinkMilk()
		cat.DrinkMilk()
		cat.DrinkMilk()
		cat.DrinkMilk()
	end
end

taken: 379ms

taken: 380ms

taken: 376ms

POO Function Class (private member)

local function Cat()
	local Cat = {}
	local fur = 4
	function Cat:DrinkMilk()
		fur = fur + 1
	end
	return Cat
end
local cat = Cat()
local function Test()
	for i = 1, 100000 do
		cat:DrinkMilk()
		cat:DrinkMilk()
		cat:DrinkMilk()
		cat:DrinkMilk()
		cat:DrinkMilk()
		cat:DrinkMilk()
		cat:DrinkMilk()
		cat:DrinkMilk()
		cat:DrinkMilk()
		cat:DrinkMilk()
	end
end

taken: 298ms

taken: 299ms

taken: 299ms

POO Function Class (public member)

local function Cat()
	local Cat = {fur = 4}
	function Cat:DrinkMilk()
		self.fur = self.fur + 1
	end
	return Cat
end
local cat = Cat()
local function Test()
	for i = 1, 100000 do
		cat:DrinkMilk()
		cat:DrinkMilk()
		cat:DrinkMilk()
		cat:DrinkMilk()
		cat:DrinkMilk()
		cat:DrinkMilk()
		cat:DrinkMilk()
		cat:DrinkMilk()
		cat:DrinkMilk()
		cat:DrinkMilk()
	end
end

taken: 343ms

taken: 336ms

taken: 336ms