Files
modeling-app/docs/kcl-lang/pipelines.md
Nick Cameron 0621e1a53e Docs content (#6792)
* Add documentation to modules, and some constants and types

Signed-off-by: Nick Cameron <nrc@ncameron.org>

* Improve the language reference

Signed-off-by: Nick Cameron <nrc@ncameron.org>

---------

Signed-off-by: Nick Cameron <nrc@ncameron.org>
2025-05-11 19:32:33 +12:00

1.5 KiB

title, excerpt, layout
title excerpt layout
Pipelines Documentation of the KCL language for the Zoo Design Studio. manual

It can be hard to read repeated function calls, because of all the nested brackets.

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.

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

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:

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

startSketchOn(XZ)
 |> line(end = [3, 4])
 |> line(end = [10, 10])
 |> line(end = [-13, -14])
 |> close()