Skip to content

Custom Blocks (Procedures)

Use custom blocks to encapsulate repeated logic and optionally run it in warp mode.

Define a Procedure

ts
import {
  
defineProcedure
,
ifThen
,
procedureBoolean
,
procedureLabel
,
procedureStringOrNumber
,
say
,
whenFlagClicked
,
callProcedure
} from 'hikkaku/blocks'
sprite
.
run
(() => {
whenFlagClicked
(() => {
const
greet
=
defineProcedure
(
[
procedureLabel
('greet'),
procedureStringOrNumber
('name'),
procedureBoolean
('excited')
], ({
name
,
excited
}) => {
ifThen
(
excited
.
getter
(), () => {
say
(
name
.
getter
())
}) } )
callProcedure
(
greet
, [
{
reference
:
greet
.
reference
.
arguments
.
name
,
value
: 'Ada' },
{
reference
:
greet
.
reference
.
arguments
.
excited
,
value
: true }
]) }) })

Calling Procedures

Most projects should define and call procedures in one place.

callProcedure supports both low-level ID-based calls and safer reference-based calls from defineProcedure.

ts
import { 
callProcedure
,
defineProcedure
,
procedureLabel
,
procedureStringOrNumber
} from 'hikkaku/blocks'
const
greet
=
defineProcedure
([
procedureLabel
('greet'),
procedureStringOrNumber
('name')
]) // Recommended: reference-based invocation.
callProcedure
(
greet
, [
{
reference
:
greet
.
reference
.
arguments
.
name
,
value
: 'Ada' }
]) // Low-level: still available when you need to interop with existing code.
callProcedure
('greet %s', ['arg-id-1'], {
'arg-id-1': 'Ada' })