Add Structures
102
Structures.md
Normal file
102
Structures.md
Normal file
@@ -0,0 +1,102 @@
|
||||
Structures allow coders to define their own types. They are similar to lists, but they do have a few key differences:
|
||||
|
||||
- Each field of a set can be called at any time
|
||||
- You can define functions within the structure, which can be called by using `!struct.fun`.
|
||||
- The fields of a structure are unordered
|
||||
|
||||
Let's have a look at how you can create a structure.
|
||||
|
||||
## The Basics
|
||||
For our example, we will be making a point structure. This will store a point on the Cartesian plane.
|
||||
|
||||
Let's create the framework for the struct:
|
||||
```
|
||||
struct -point
|
||||
|
||||
endstruct
|
||||
```
|
||||
All this does is create a new structure, named point.
|
||||
|
||||
## Defining Fields
|
||||
A field is, to put it simply, the parts that make up a structure. To define a field, use `init &fieldname -type`.
|
||||
|
||||
For our example, we want to store two variables that store a double: one for the x-position, and one for the y-position. So our fields will be xpos and ypos.
|
||||
|
||||
```
|
||||
struct -point
|
||||
init &xpos -double
|
||||
init &ypos -double
|
||||
|
||||
endstruct
|
||||
```
|
||||
Now we have a complete structure!
|
||||
|
||||
## Defining a variable as a structure
|
||||
We have a point, but how can we set a variable as a point? It is pretty simple: just use `init &myPoint -point`.
|
||||
|
||||
To modify the xpos and ypos of the `myPoint` variable, you can use `set &myPoint.xpos $value` and `set &myPoint.ypos $value`.
|
||||
```
|
||||
struct -point
|
||||
init &xpos -double
|
||||
init &ypos -double
|
||||
|
||||
endstruct
|
||||
|
||||
init &myPoint -point
|
||||
set &myPoint.xpos 3
|
||||
set &myPoint.ypos 4
|
||||
```
|
||||
This stores the point (3, 4).
|
||||
|
||||
And now you know the basics of making a structure! You know how to define a structure, its fields, and how to define a variable as a structure. But there is more you can do...
|
||||
|
||||
## Member Functions
|
||||
One trick you can do is to define functions within the structure. Typically these will be getting some value related to the structure.
|
||||
|
||||
For our example, we will find the distance of the point from the origin. Let's first build the framework.
|
||||
|
||||
```
|
||||
struct -point
|
||||
init &xpos -double
|
||||
init &ypos -double
|
||||
|
||||
fun -double !modulus
|
||||
|
||||
endfun
|
||||
endstruct
|
||||
```
|
||||
|
||||
The distance from the origin, by the Pythagorean Theorem, is $$\sqrt{x^2+y^2}$$. We can simply use `$xpos` and `$ypos` to find the respective values when the function is called.
|
||||
|
||||
We will import the math function to use the square root function.
|
||||
|
||||
```
|
||||
struct -point
|
||||
init &xpos -double
|
||||
init &ypos -double
|
||||
|
||||
fun -double !modulus
|
||||
multiply $xpos $xpos &x2
|
||||
multiply $ypos $ypos &y2
|
||||
add $x2 $y2 &z2
|
||||
pusharg $z2
|
||||
!math:sqrt &z
|
||||
return $z
|
||||
endfun
|
||||
endstruct
|
||||
```
|
||||
|
||||
Now, if we run `!myPoint.modulus`, we can get the modulus of the vector represented by `($myPoint.xpos, $myPoint.ypos)`.
|
||||
|
||||
And that's all you need to know!
|
||||
|
||||
## Other examples of structures
|
||||
|
||||
- A user account for a messaging service
|
||||
```
|
||||
struct -user
|
||||
init -string &username
|
||||
init -string &password
|
||||
init -bool &isBanned
|
||||
endfun
|
||||
```
|
||||
Reference in New Issue
Block a user