In Sway, functions are the core building blocks for performing operations, they can modify data, execute computations, and return results.
fn): These are functions defined and used within the smart contract and cannot be called from outside.abi): These are public interfaces of the smart contract that can be called from outside.ref mut:ref mut is a keyword in Sway used to create a mutable reference, allowing a function to modify the argument passed to it.In the provided code, we define a smart contract named MyContract with an external function called test_func that returns a tuple containing a u64 type and a bool type.
eq to compare whether two u64 values are equal.inc that takes a mutable reference ref mut num and increments its value by 1.swap_mut that takes a mutable reference ref mut pair and swaps the values it contains.swap that takes two u64 values and returns a tuple with the values swapped.The test_func function of the smart contract demonstrates how to use these functions. It first uses the eq function to assert the equality of two values. Then, it uses the inc function to increment a number and asserts the result. Next, it uses the swap_mut function to swap the values in a tuple and asserts the outcome. Finally, it uses the swap function to swap two variables and asserts the results.
The test_func function of this smart contract ultimately returns the tuple (123, true). This simple example is intended to show you how to use internal and external functions, ref mut, and functions that return multiple outputs in Sway. We hope this tutorial helps you better understand functions in Sway.
contract;
// Structs
// - Create, read and update
// - Shorthand notation
// - Destructure
struct Point {
x: u64,
y: u64,
}
// Nested struct
struct Line {
p0: Point,
p1: Point,
}
abi MyContract {
fn test_func() -> Line;
}
impl MyContract for Contract {
fn test_func() -> Line {
// Create, read and update
let mut p0 = Point { x: 1, y: 2 };
p0.x = 11;
// Shorthand
let x: u64 = 123;
let y: u64 = 123;
let p1 = Point { x, y };
// Nested structs
let line = Line { p0, p1 };
// Destructure
let Line {
p0: Point { x: x0, y: y0 },
p1: Point { x: x1, y: y1l },
} = line;
line
}
}