The by keyword sets up a "delegate": an object that will serve as an intermediary for your property.

by lazy allows you to declare the contents of a val via a lambda expression. When the property is first read, the lambda expression is evaluated and its result is used as the initial property value.

You can learn more about this in:
Run Edit