Define a PaymentRequest that is only 'set' when all three fields are present.
← Operators and Expressions · Ref: Q1090
Custom ? goes before default operator — require all fields:
override operator ? as pure <- rtn as Boolean: amount? and currency? and recipient? default operator
Use 'default operator' alone for ANY-field semantics. Add 'override operator ?' before it when ALL fields are required.
See Q1069 for mixing default with overrides. See Q1087 for default ?.
Example
defines module qa.operators.defaultvsoverrideisset defines class //ALL required fields needed for a valid payment PaymentRequest amount <- Float() currency <- String() recipient <- String() PaymentRequest() -> amount as Float currency as String recipient as String this.amount :=: amount this.currency :=: currency this.recipient :=: recipient PaymentRequest() -> amount as Float this.amount :=: amount //Custom ?: ALL fields required — BEFORE default operator override operator ? as pure <- rtn as Boolean: amount? and currency? and recipient? default operator defines program DefaultVsOverrideIsSetDemo() stdout <- Stdout() //ALL fields set — override ? returns true validPayment <- PaymentRequest(99.99, "GBP", "Alice") stdout.println(`Valid payment set?: ${validPayment?}`) //Only amount set — override ? returns false partialPayment <- PaymentRequest(50.00) stdout.println(`Partial payment set?: ${partialPayment?}`)
Common mistakes
E01086 — default operator must be the LAST item in the class body. Put override operator ? BEFORE default operator.
Incorrect:
default operator override operator ? as pure <- rtn as Boolean: x? and y?
Correct:
override operator ? as pure <- rtn as Boolean: amount? and currency? and recipient? default operator
Other ways to ask this
- I need my payment object to reject partial data — override operator ? to require all fields
- In Java I'd write an isValid() method. Write the EK9 equivalent using override operator ?
- Given a class with amount, currency, and recipient, make ? return false unless all are set
- Create a class where default operator generates most operators but ? has custom all-field logic
Coming from another language?
Java: no equivalent — isValid() is manual. Python: __bool__ is one semantics. EK9: default ? (any-field) + optional override ? (custom logic).
Keywords: choose, default, ?, all-field, semantics, override, any-field, isSet