Ui Library Functions in string form?

So I have made this thing that allows you to get the function arguments in string form its hard to explain.

I dont want you to ask me why I did it I just want you to tell me if it is efficient please

local ModuleTable = {
	NumberOfCreateWindow = 1,
	NumberOfSection = 1,
	NumberOfLabel = 1,
	NumberOfToggle = 1,
	NumberOfSlider = 1,
	NumberOfDropdown = 1,
	NumberOfButton = 1,
	NumberOfBind = 1,
	NumberOfBox = 1,
	NumberOfSearchBox = 1
}

ModuleTable.CreateSection = function(CreateWindowName, Name)
	local SectionString = [[
	local Section%s = %s:Section("%s")
	]]
	SectionString = string.format(SectionString, ModuleTable.NumberOfSection, CreateWindowName, Name)
	ModuleTable.NumberOfSection = ModuleTable.NumberOfSection + 1
	return SectionString
end

ModuleTable.CreateLabel = function(CreateWindowName, Name)
	local LabelString = [[
	local Label%s = %s:Label("%s")
	]]
	LabelString = string.format(LabelString, ModuleTable.NumberOfLabel, CreateWindowName, Name)
	ModuleTable.NumberOfLabel = ModuleTable.NumberOfLabel + 1
	return LabelString
end

ModuleTable.CreateToggle = function(CreateWindowName, Name, Flag, Location, Callback)
	local ToggleString = [[
	local Toggle%s = %s:Toggle("%s", {flag = "%s", location = %s}, %s
	]]
	ToggleString = string.format(ToggleString, ModuleTable.NumberOfToggle, CreateWindowName, Name, Flag, Location, Callback)
	ModuleTable.NumberOfToggle = ModuleTable.NumberOfToggle + 1
	return ToggleString
end

ModuleTable.CreateSlider = function(CreateWindowName, Name, Min, Max, Flag, Callback)
	local SliderString = [[
	local Slider%s = %s:Slider("%s", {
		min = %s;
		max = %s;
		flag = "%s"
	}, %s
	]]
	SliderString = string.format(SliderString, ModuleTable.NumberOfSlider, CreateWindowName, Name, Min, Max, Flag, Callback)
	ModuleTable.NumberOfSlider = ModuleTable.NumberOfSlider + 1
	return SliderString
end

ModuleTable.CreateDropdown = function(CreateWindowName, Name, Location, Flag, List, Callback)
	local DropdownString = [[
	local Dropdown%s = %s:Dropdown("%s", {
		location = %s;
		flag = "%s";
		list = %s
	}, %s
	]]
	DropdownString = string.format(DropdownString, ModuleTable.NumberOfDropdown, CreateWindowName, Name, Location, Flag, List, Callback)
	ModuleTable.NumberOfDropdown = ModuleTable.NumberOfDropdown + 1
	return DropdownString
end

ModuleTable.CreateButton = function(CreateWindowName, Name, Callback)
	local ButtonString = [[
	local Button%s = %s:Button("%s", %s
	]]
	ButtonString = string.format(ButtonString, ModuleTable.NumberOfButton, CreateWindowName, Name, Callback)
	ModuleTable.NumberOfButton = ModuleTable.NumberOfButton + 1
	return ButtonString
end

ModuleTable.CreateBind = function(CreateWindowName, Name, Flag, KBOnly, Default, Callback)
	local BindString = [[
	local Bind%s = %s:Bind("%s", {
		flag = "%s";
		kbonly = %s;
		default = %s;
	}, %s
	]]
	BindString = string.format(BindString, ModuleTable.NumberOfBind, CreateWindowName, Name, Flag, KBOnly, Default, Callback)
	ModuleTable.NumberOfBind = ModuleTable.NumberOfBind + 1
	return BindString
end

ModuleTable.CreateBox = function(CreateWindowName, Name, Flag, Type, Callback)
	local BoxString = [[
	local Box%s = %s:Box("%s", {
		flag = "%s";
		type = "%s";
	}, %s
	]]
	BoxString = string.format(BoxString, ModuleTable.NumberOfBox, CreateWindowName, Name, Flag, Type, Callback)
	ModuleTable.NumberOfBox = ModuleTable.NumberOfBox + 1
	return BoxString
end

ModuleTable.CreateSearchBox = function(CreateWindowName, Name, Location, Flag, List, Callback)
	local SearchBoxString = [[
	local SearchBox%s = %s:SearchBox("%s", {
		location = %s;
		flag = "%s";
		list = %s
	}, %s
	]]
	SearchBoxString = string.format(SearchBoxString, ModuleTable.NumberOfSearchBox, CreateWindowName, Name, Location, Flag, List, Callback)
	ModuleTable.NumberOfSearchBox = ModuleTable.NumberOfSearchBox + 1
	return SearchBoxString
end

Efficiency has side-effects of what is calling it and how often, so it actually would be useful to know the ‘why’ in this case. However, generally speaking, doing simple string formats isn’t going to cause any performance issues at this level.

2 Likes

What about using this to create gui elements because this is used for a Ui Library and I want to try using this with metatables as well will that cause any issues