Renderingla

implendum

Declares a behavioral contract with method signatures.

Aliases: interface

Syntax: implendum <name> [<type-params>] <block>

Category

type

Related

Examples

examples/corpus/implendum/implendum.fab (canonical · keyword)

Declares a behavioral contract with method signatures.

# implendum definition and implementation
#
# implendum Nomen { functio opus() → <type> }
# genus Nomen implet Implendum { ... }
#
# GRAMMAR:
#   implendumDecl :← 'implendum' ident '{' methodSig* '}'
#   genusDecl     :← 'genus' ident 'implet' ident '{' ... '}'
#
# EXPECTED OUTPUT:
#   circulus radius: 25
#   quadratum latus: 15

implendum Figurabile {
    functio depinge() → vacuum
}

genus Circulus implet Figurabile {
    numerus radius = 10

    functio depinge() {
        nota "circulus radius: §"(ego.radius)
    }
}

genus Quadratum implet Figurabile {
    numerus latus = 5

    functio depinge() {
        nota "quadratum latus: §"(ego.latus)
    }
}

incipit {
    fixum _ circulus ← Circulus { radius = 25 }
    fixum _ quadratum ← Quadratum { latus = 15 }

    circulus.depinge()
    quadratum.depinge()
}

Expected output:

circulus radius: 25
quadratum latus: 15