# Hillel Wayne - Procedures and Macros :: Learn TLA+ (Highlights)

## Highlights
- Macros are the general catch-all code inliner.
- they can’t have labels, multiple assignments, while loops, etc.
- Macros must be defined after any `define` block and before any processes.
- This cannot be \in, only =
- The return just ends the procedure.
- a procedure can have internal variables. Two, you can have labels in them.
- you have to explicitly use `call Name(val1, ...);`, and the following line must be a label or a `return`
- If you want to use procedures you *must* `EXTEND Sequences`.
- Procedures must be defined after any macros and before any processes.
- Macros are faster and less complicated. If you can use them, use them. Use procedures when you have multiple separate processes that can do the same actions.
- The `define` block has to come before any macros, which has to come before any procedures, which has to come before any processes.