67 lines
1.5 KiB
Markdown
67 lines
1.5 KiB
Markdown
![]() |
---
|
||
|
title: "Pipelines"
|
||
|
excerpt: "Documentation of the KCL language for the Zoo Design Studio."
|
||
|
layout: manual
|
||
|
---
|
||
|
|
||
|
It can be hard to read repeated function calls, because of all the nested brackets.
|
||
|
|
||
|
```norun
|
||
|
i = 1
|
||
|
x = h(g(f(i)))
|
||
|
```
|
||
|
|
||
|
You can make this easier to read by breaking it into many declarations, but that is a bit annoying.
|
||
|
|
||
|
```norun
|
||
|
i = 1
|
||
|
x0 = f(i)
|
||
|
x1 = g(x0)
|
||
|
x = h(x1)
|
||
|
```
|
||
|
|
||
|
Instead, you can use the pipeline operator (`|>`) to simplify this.
|
||
|
|
||
|
Basically, `x |> f(%)` is a shorthand for `f(x)`. The left-hand side of the `|>` gets put into
|
||
|
the `%` in the right-hand side.
|
||
|
|
||
|
So, this means `x |> f(%) |> g(%)` is shorthand for `g(f(x))`. The code example above, with its
|
||
|
somewhat-clunky `x0` and `x1` constants could be rewritten as
|
||
|
|
||
|
```norun
|
||
|
i = 1
|
||
|
x = i
|
||
|
|> f(%)
|
||
|
|> g(%)
|
||
|
|> h(%)
|
||
|
```
|
||
|
|
||
|
This helps keep your code neat and avoid unnecessary declarations.
|
||
|
|
||
|
## Pipelines and keyword arguments
|
||
|
|
||
|
Say you have a long pipeline of sketch functions, like this:
|
||
|
|
||
|
```norun
|
||
|
startSketchOn(XZ)
|
||
|
|> line(%, end = [3, 4])
|
||
|
|> line(%, end = [10, 10])
|
||
|
|> line(%, end = [-13, -14])
|
||
|
|> close(%)
|
||
|
```
|
||
|
|
||
|
In this example, each function call outputs a sketch, and it gets put into the next function call via
|
||
|
the `%`, into the first (unlabeled) argument.
|
||
|
|
||
|
If a function call uses an unlabeled first parameter, it will default to `%` if it's not given. This
|
||
|
means that `|> line(%, end = [3, 4])` and `|> line(end = [3, 4])` are equivalent! So the above
|
||
|
could be rewritten as
|
||
|
|
||
|
```norun
|
||
|
startSketchOn(XZ)
|
||
|
|> line(end = [3, 4])
|
||
|
|> line(end = [10, 10])
|
||
|
|> line(end = [-13, -14])
|
||
|
|> close()
|
||
|
```
|