Write a custom override operator ? for a class with validation logic.

← Operators and Expressions · Ref: Q1089

Override ? before default operator to require all fields:

  override operator ? as pure
    <- rtn as Boolean: name? and email? and age?
  default operator

The override keyword is mandatory — every class inherits ? from its base type. 'default operator' must be the LAST item in the class body.

See Q1069 for mixing default with overrides. See Q1070 for which operators need override.

Example

#!ek9
defines module qa.operators.overrideoperatorisset

  defines class

    Registration
      name <- String()
      email <- String()
      age <- Integer()

      Registration()
        ->
          name as String
          email as String
          age as Integer
        this.name :=: name
        this.email :=: email
        this.age :=: age

      Registration()
        -> name as String
        this.name :=: name

      //Custom ?: require ALL fields before default operator
      override operator ? as pure
        <- rtn as Boolean: name? and email? and age?

      default operator

  defines program

    OverrideOperatorIsSetDemo()
      stdout <- Stdout()

      //Fully set — override ? returns true
      complete <- Registration("Bob", "bob@example.com", 30)
      stdout.println(`Complete set?: ${complete?}`)

      //Partially set — override ? returns false (not all fields set)
      partial <- Registration("Alice")
      stdout.println(`Partial set?: ${partial?}`)
Other ways to ask this
  • I need my Registration to be considered valid only when name, email, and age are all present
  • In Java I'd write a custom isValid() method. Write the EK9 equivalent with override operator ?
  • Given a class with three required fields, make operator ? enforce all-field checking
  • Implement an override operator ? that requires ALL fields to be set before the object is usable

Coming from another language?

Java: custom isValid() method. Python: __bool__ override. Rust: custom is_valid(). EK9: override operator ? before default operator.

Keywords: ?, all fields, custom, isSet, operator, override, validate