LEARN VOID / DATA & BEHAVIOR

Receiver methods

Keep behavior close to the data it uses.

Complete program for the synchronous entry adapter. The result below is the returned integer.

methods.voidDownload source
value struct point:
    x: i32
    y: i32

func (position point) move(dx: i32, dy: i32):
    position.x += dx
    position.y += dy

func (position point) distance_squared() -> i32:
    return position.x * position.x + position.y * position.y

func entry(steps: i32) -> i32:
    var cursor = point(x = 0, y = 0)
    cursor.move(steps, steps)
    const final_position = cursor
    return final_position.distance_squared()
Input 5Expected result 50

Name the receiver

The receiver position identifies the point used by each method. move updates its coordinates through that named receiver; distance_squared only reads them.

Move before measuring

The cursor starts at the origin and moves equally along both axes. Input 5 produces position (5, 5) and squared distance 25 + 25 = 50. This is squared distance, not a square-root calculation.

Read through a readonly value

const final_position = cursor makes a readonly value copy. The non-mutating measurement method is allowed through that binding. A call to final_position.move would be rejected. Ordinary assignment/passing of a value struct still copies its storage.