# Functions

This draws a house:

```void setup()
{
size(500, 500);
background(255);
smooth();
noLoop();
}

void draw()
{
triangle(15, 0, 0, 15, 30, 15);
rect(0, 15, 30, 30);
rect(12, 30, 10, 15);
}
```

We can put the instructions in a function that can be reused multiple times and makes the code more readable:

```
void setup()
{
size(500, 500);
background(255);
smooth();
noLoop();
}

void draw()
{
house();
}

void house()
{
triangle(15, 0, 0, 15, 30, 15);
rect(0, 15, 30, 30);
rect(12, 30, 10, 15);
}```

We can add parameters (aka arguments) to generalize the house drawing function making our code more flexible:

```void setup()
{
size(500, 500);
background(255);
smooth();

noLoop();
}

void draw()
{
house(200, 200, 255, 0, 0);
}

void house(int x, int y, int r, int g, int b)
{
triangle(x + 15, y, x, y + 15, x + 30, y + 15);
rect(x, y + 15, 30, 30);
rect(x + 12, y + 30, 10, 15);
}
```

Now add 3 more parameters to make the fill color customizable.

Returning values
Functions are more useful when they return values.
Void is used when a function doesn’t return anything.

```float distance(float x1, float y1, float x2, float y2) {
float dx = x1 - x2;
float dy = y1 - y2;
float d = sqrt(sq(dx) + sq(dy));
return d;
}
```
Posted in