Methods: Difference between revisions

From Legacy Roblox Wiki
Jump to navigationJump to search
>Flurite
Created page with "Methods are unique functions which belong to a particular object or can be custom made. Although standard Lua doesn't have them, they're a major focus of Roblox Lua. Some com..."
 
m Text replacement - "<SyntaxHighlight code="lua">" to "<syntaxhighlight lang="lua">"
 
(16 intermediate revisions by 4 users not shown)
Line 1: Line 1:
Methods are unique functions which belong to a particular object or can be custom made.  Although standard Lua doesn't have them, they're a major focus of Roblox Lua. Some common examples of methods include 'Destroy()', 'Clone()', and 'FindFirstChild()'. You can find a full list of methods [http://wiki.roblox.com/index.php/Category:Methods here].
Methods are unique functions which belong to a particular object or can be custom made.  They are a major focus of Roblox Lua. Some common examples of methods include 'Destroy()', 'Clone()', and 'FindFirstChild()'. You can find a full list of methods [http://wiki.roblox.com/index.php/Category:Methods here].


Methods act like a function stored within an object.  The method itself is accessed in the same way a [[Functions|function]] in a table is accessed.  However, a special property of methods changes how they are called.
A method acts like a {{type|function}} stored within an object.  The method itself is accessed in the same way a {{type|function}} in a {{type|table}} is accessed.  However, a special property of methods changes how they are called.


These two lines of code are equivalent, calling the function <code>a</code> with the parameter <a>b</b>.
These two lines of code are equivalent, calling the {{type|function}} <var>a</var> with the parameter <var>b</var>.


b.a(b)  
<syntaxhighlight lang="lua">
b:a()
b.a(b)  
b:a()
</syntaxhighlight>


The second is briefer and more concise. Methods can increase typing speed, because there is less need to retype variable names.
The second is briefer and more concise. Methods can increase typing speed, because there is less need to retype variable names.
Line 16: Line 18:
*Make your tables more dynamic
*Make your tables more dynamic


{{EmphasisBox|This tutorial-like section assumes you have a good knowledge of table terminology and functions.}}
{{EmphasisBox|This tutorial-like section assumes you have a good knowledge of table terminology and understand functions.}}


First, we need a table to ''apply'' the method to. I'm going to make a checkbox. It doesn't actually do anything, but it's an application example. Feel free to make this work.
First, we need a table to ''apply'' the method to. I'm going to make a checkbox. It doesn't actually do anything, but it's an application example. Feel free to make this work.


Checkbox = {
{{code|=
    Checked = false,
Checkbox = {
    CheckedImage = "Image",
Checked = false;
    UncheckedImage = "Image",
CheckedImage = "Image";
    ImageButton = ...,
UncheckedImage = "Image";
    ChangeState = function(self)
ImageButton = ...;
        self.Checked = not self.Checked
ChangeState = function(self)
    end
self.Checked = not self.Checked
}
end
Checkbox.ImageButton.MouseButton1Down:connect(function()
}
    Checkbox:ChangeState()
Checkbox.ImageButton.MouseButton1Down:connect(function()
end)
Checkbox:ChangeState()
end)
}}


You might think you could type
You might think you could type


Checkbox.ImageButton.MouseButton1Down:connect(Checkbox.ChangeState)
{{code|=Checkbox.ImageButton.MouseButton1Down:connect(Checkbox.ChangeState)}}


However, that would call <code>Checkbox.ChangeState(x, y)</code> when the event fired. We need to call <code>Checkbox.ChangeState(Checkbox)</code>.
However, that would call <syntaxhighlight lang="lua">Checkbox.ChangeState(x, y)</syntaxhighlight> when the event fired. We need to call <syntaxhighlight lang="lua">Checkbox.ChangeState(Checkbox)</syntaxhighlight>.


When you call a function as a method, you automatically pass an argument as the TABLE ITSELF. For example,
When you call a {{type|function}} as a method, you automatically pass an argument as the TABLE ITSELF. For example,


function ReturnTable(Num)
{{code|=
    return {
function ReturnTable(Num)
        Num,
return {
        PrintNum = function(self)  
Num = Num;
            print(self.Num)  
PrintNum = function(self)  
        end
print(self.Num)  
    }
end
end
}
end
Tabl = ReturnTable(5)
Tabl:PrintNum()
}}


Tabl = ReturnTable(5)
That will output 5 because we passed in the {{type|table}}, so the {{type|function}} will receive the {{type|table}} it's located in. Because we called it as a method, it passed "Tabl" as an argument. You can do it with a dot, but it looks kind of stupid:
Tabl:PrintNum()


That will output 5 because we passed in the table, so the function will receive the table it's located in. Because we called it as a method, it passed "Tabl" as an argument. You can do it with a dot, but it looks kind of stupid:
{{code|=Tabl.PrintNum(Tabl)}}
 
Tabl.PrintNum(Tabl)

Latest revision as of 06:02, 27 April 2023

Methods are unique functions which belong to a particular object or can be custom made. They are a major focus of Roblox Lua. Some common examples of methods include 'Destroy()', 'Clone()', and 'FindFirstChild()'. You can find a full list of methods here.

A method acts like a function stored within an object. The method itself is accessed in the same way a function in a table is accessed. However, a special property of methods changes how they are called.

These two lines of code are equivalent, calling the function a with the parameter b.

b.a(b) 
b:a()

The second is briefer and more concise. Methods can increase typing speed, because there is less need to retype variable names.

Making your own

Making your own methods can

  • Make your code look cool
  • Make your tables more dynamic
This tutorial-like section assumes you have a good knowledge of table terminology and understand functions.

First, we need a table to apply the method to. I'm going to make a checkbox. It doesn't actually do anything, but it's an application example. Feel free to make this work.

Checkbox = {
	Checked = false;
	CheckedImage = "Image";
	UncheckedImage = "Image";
	ImageButton = ...;
	ChangeState = function(self)
		self.Checked = not self.Checked
	end
}
Checkbox.ImageButton.MouseButton1Down:connect(function()
	Checkbox:ChangeState()
end)

You might think you could type

Checkbox.ImageButton.MouseButton1Down:connect(Checkbox.ChangeState)

However, that would call

Checkbox.ChangeState(x, y)

when the event fired. We need to call

Checkbox.ChangeState(Checkbox)

.

When you call a function as a method, you automatically pass an argument as the TABLE ITSELF. For example,

function ReturnTable(Num)
	return {
		Num = Num;
		PrintNum = function(self) 
			print(self.Num) 
		end
	}
end
Tabl = ReturnTable(5)
Tabl:PrintNum()

That will output 5 because we passed in the table, so the function will receive the table it's located in. Because we called it as a method, it passed "Tabl" as an argument. You can do it with a dot, but it looks kind of stupid:

Tabl.PrintNum(Tabl)