Lua - Function with Optional Parameters
In Lua, there is no direct support for optional parameters and named parameters in functions definition. But we've seen how to implement named parameters in Named Arguments chapter. In this chapter, we'll showcase how to add support for optional parameters and how to add default values to the parameters in case parameters are not passed to a function.
Adding Support for Optional Parameter
Let's revisit the example used in Named Arguments chapter. We've created a table named as shapeDetails and passed the same to the function as shown below −
main.lua
-- function to calculate area of a shape passed
function calculate(shapeDetails)
return shapeDetails.length * shapeDetails.width
end
shapeDetails = {type='Rect', length=2, width=4}
-- calculate area of rectangle
print('Area of Rectangle', calculate(shapeDetails))
Output
When we run the above code, we will get the following output−
Area of Rectangle 8
Now suppose, we want to add hight details of shape as well but keeep it optional. That's easy to handle now as a part of table.
shapeDetails = {type='Cuboid', length=2, width=4, height=10}
Handle the same in function as shown in code below−
function calculate(shapeDetails)
if shapeDetails.height then
return length * width * height
else
return length * breadth
end
end
Complete Example of Optional Parameter
Now specify length, width to function in one call and all three parameters in second call and verify the result.
main.lua
-- function to calculate area or volume of a shape passed
function calculate(shapeDetails)
if shapeDetails.height then
return shapeDetails.length * shapeDetails.width * shapeDetails.height
else
return shapeDetails.length * shapeDetails.width
end
end
shapeDetails = {length=2, width=4}
-- calculate area of rectangle
print('Area of Rectangle', calculate(shapeDetails))
shapeDetails = {length=2, width=4, height=10}
-- calculate volume of cuboid
print('Volume of Cuboid', calculate(shapeDetails))
Output
When we run the above code, we will get the following output−
Area of Rectangle 8 Volume of Cuboid 80
Default parameter Implementation
In similar way as we've defined optional parameter, we can set default value(s) to optional parameter(s) as shown in example below−
main.lua
-- function to calculate volume of a shape passed
function calculate(shapeDetails)
local length = shapeDetails.length
local width = shapeDetails.width
local height = 1 -- default value of height
-- if height is provided, then use the provided one
if shapeDetails.height then
height = shapeDetails.height
end
local area = length * width
local volume = length * width * height
return area, volume
end
shapeDetails = {length=2, width=4}
-- calculate area and volume(using default height)
area, volume = calculate(shapeDetails)
-- print area and volume
print(area, volume)
-- add height to the shape
shapeDetails.height=10
-- calculate area and volume(using provided height)
area, volume = calculate(shapeDetails)
-- print area and volume
print(area, volume)
Output
When we run the above code, we will get the following output−
8 8 8 80