# Lua/Functions

Lua modules based on the Scribunto/Lua extension are stored in resource pages using the Module: namespace. Each module uses a table to hold functions and variables, and that containing table is returned at the end of the module code. Functions are code structures used to encapsulate a series of statements that may be called as needed. This lesson will show you how to use functions in your scripts.

## Prerequisites

This lesson assumes you have already completed the Loops lesson.

## Create a Lua Script with Functions

To create a Lua script with functions:
* Navigate to Module:Sandbox.
* Clear all existing code.
    It's a sandbox. Everyone is free to play in the sandbox. But if you find another user is actively editing the sandbox at the same time, you may also use Module:Sandbox/Username, where Username is your Wikiversity username.
* Add the following code and save the page:

## Test Your Lua Script

To test your Lua script:
* Navigate to either the Module_talk:Sandbox page, the Wikiversity:Sandbox page, or your own user or sandbox page.
* Add the following code and save the page:
The result should be:

   ### Fahrenheit to Celsius

       0 °F is -17.8 °C
       10 °F is -12.2 °C
       20 °F is -6.7 °C
       30 °F is -1.1 °C
       40 °F is 4.4 °C
       50 °F is 10.0 °C
       60 °F is 15.6 °C
       70 °F is 21.1 °C
       80 °F is 26.7 °C
       90 °F is 32.2 °C
       100 °F is 37.8 °C

   ### Celsius to Fahrenheit

       0 °C is 32.0 °F
       10 °C is 50.0 °F
       20 °C is 68.0 °F
       30 °C is 86.0 °F
       40 °C is 104.0 °F
       50 °C is 122.0 °F
       60 °C is 140.0 °F
       70 °C is 158.0 °F
       80 °C is 176.0 °F
       90 °C is 194.0 °F
       100 °C is 212.0 °F

## Understand Your Lua Script

To understand your Lua script toCelsius function:
* local function toCelsius(f) declares a local function named toCelsius that accepts a single parameter f, which is the Fahrenheit temperature to be converted.
    Declaring the function as local prevents it from being called from outside the module.
* return (f - 32) * 5 / 9 converts the Fahrenheit temperature into Celsius and returns the result.
* end ends the function.
To understand your Lua script toFahrenheit function:
* local function toFahrenheit(c) declares a local function named toFahrenheit that accepts a single parameter c, which is the Celsius temperature to be converted.
    Declaring the function as local prevents it from being called from outside the module.
* return c * 9 / 5 + 32 converts the Celsius temperature into Fahrenheit and returns the result.
* end ends the function.
To understand your Lua script functions function:
* function p.functions declares a function named functions.
    This function is not declared local, so it can be called from outside the module.
* local and the following code defines the variables temperature and result. Both are nil.
* result = ';Fahrenheit to Celsius\n' assigns a string literal value to the variable result.
* for temperature = 0, 100, 10 do creates a loop code block that will vary the value of the variable temperature from 0 to 100 by 10.
* toCelsius(temperature) calls the toCelsius function and passes in the current value of temperature as the temperature to be converted.
* string.format calls the string library format function to format the returned Celsius temperature.
* '%.1f' indicates that the resulting format (%) should be a single decimal place (.1) floating point (f) value.
* toFahrenheit(temperature) calls the toFahrenheit function and passes in the current value of temperature as the temperature to be converted.
* string.format calls the string library format function to format the returned Fahrenheit temperature.
* '%.1f' indicates that the resulting format (%) should be a single decimal place (.1) floating point (f) value.
* return result returns the current value of result as the result of the function.
It should be noted that this script makes use of three different function types:
* locally accessible functions (toCelsius, toFahrenheit)
* globally accessible functions (functions)
* library functions (string.format).

## Conclusion

Congratulations! You've now created, tested, and understood a Lua script with functions. Continue on to the Tables lesson.

## See Also

* Wikipedia: Subroutine