Renderingla

membrum

Dot, bracket, chained, and optional member access expressions.

Syntax: <expr>.<field> | <expr>[<index>] | <expr>?.<field>

Category

expression

Related

Examples

examples/corpus/membrum/membrum.fab (canonical · concept)

Dot, bracket, chained, and optional member access expressions.

# membrum — dot, bracket, chained, and optional access
#
# expr.<field>        -- dot access on genus records
# expr[index]         -- bracket access on listas and tabulae
# expr?.<field>       -- optional chaining (see optionalis/optionalis.fab)
#
# GRAMMAR:
#   memberExpr :← primary ('.' ident | '[' expr ']' | '?.' ident)*
#
# EXPECTED OUTPUT:
#   membrum.expected — chained access samples.

genus Punctum {
    numerus x
    numerus y
}

genus Forma {
    textus nomen
    numerus valor
}

genus Imum {
    textus imum
}

genus Medium {
    Imum medium
}

genus Extra {
    Medium extra
}

genus Datum {
    lista<textus> res
}

genus Adest {
    numerus valor
}

genus Forsitan {
    Adest adest
}

incipit {
    # --- Dot accessus ---

    fixum _ punctum ← Punctum { x = 10, y = 20 }
    nota punctum.x
    nota punctum.y

    # --- Bracket accessus on lista ---

    fixum _ numeri ← [1, 2, 3]
    nota numeri[0]
    nota numeri[2]

    # --- Bracket accessus on tabula ---

    fixum tabula<textus, numerus> tab ← { "nomen": 1, "valor": 42 }
    nota tab["nomen"]
    nota tab["valor"]

    # --- Chained member access ---

    fixum _ nidum ← Extra { extra = Medium { medium = Imum { imum = "inventum" } } }
    nota nidum.extra.medium.imum

    # --- Mixed dot and bracket ---

    fixum _ datum ← Datum { res = ["primus", "secundus", "tertius"] }
    nota datum.res[0]
    nota datum.res[2]

    # --- Accessus optionalis ---

    fixum _ forsitan ← Forsitan { adest = Adest { valor = 100 } }
    nota forsitan?.adest?.valor

    # Accessus optionalis on nihil binding
    fixum _ vacuum ← nihil
    nota vacuum?.absens
}

Expected output:

10
20
1
3
1
42
inventum
primus
tertius
100
nihil