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
'default operator' alone already requires ALL fields. Add 'override operator ?' before it when you need different logic - for example treating a partially-filled object as set.
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 ? (all-field) + optional override ? (custom logic).
Keywords: any-field, isSet, choose, default, ?, all-field, semantics, override