diff options
| author | Paul Buetow <paul@buetow.org> | 2026-05-24 13:47:39 +0300 |
|---|---|---|
| committer | Paul Buetow <paul@buetow.org> | 2026-05-24 13:47:39 +0300 |
| commit | edef5bf414f60704f2a18c0d41d4464f2fd7d2c0 (patch) | |
| tree | a40836e4b2e01f1b3d4e5b24a536e54b77525830 | |
| parent | fe811682d952e5322a5bc3c5e0bddfe8074b4cf9 (diff) | |
refactor(rpn): split ArithmeticOperator into 3 interfaces (task 9j)
The ArithmeticOperator interface bundled basic arithmetic (+, -, *, /, ^, %),
logarithmic operations (Log2, Log10, Ln), and metric conversion (Convert) into
a single interface, violating ISP and LSP.
Split into:
- ArithmeticOperator — Add, Subtract, Multiply, Divide, Power, Modulo
- LogarithmicOperator — Log2, Log10, Ln
- MetricOperator — Convert
Updated compile-time interface checks in operations.go and the trailing
comment in operations_interfaces.go. No behavioral change.
| -rw-r--r-- | internal/rpn/operations.go | 6 | ||||
| -rw-r--r-- | internal/rpn/operations_interfaces.go | 13 |
2 files changed, 15 insertions, 4 deletions
diff --git a/internal/rpn/operations.go b/internal/rpn/operations.go index a3d660c..ca57a42 100644 --- a/internal/rpn/operations.go +++ b/internal/rpn/operations.go @@ -19,8 +19,10 @@ type Operations struct { // Ensure Operations implements all operator sub-interfaces at compile time. var ( - _ ArithmeticOperator = (*Operations)(nil) - _ BooleanOperator = (*Operations)(nil) + _ ArithmeticOperator = (*Operations)(nil) + _ LogarithmicOperator = (*Operations)(nil) + _ MetricOperator = (*Operations)(nil) + _ BooleanOperator = (*Operations)(nil) _ HyperOperator = (*Operations)(nil) _ StackOperator = (*Operations)(nil) _ VariableOperator = (*Operations)(nil) diff --git a/internal/rpn/operations_interfaces.go b/internal/rpn/operations_interfaces.go index 5acce62..6a543b9 100644 --- a/internal/rpn/operations_interfaces.go +++ b/internal/rpn/operations_interfaces.go @@ -11,9 +11,17 @@ type ArithmeticOperator interface { Divide(stack *Stack) error Power(stack *Stack) error Modulo(stack *Stack) error +} + +// LogarithmicOperator defines the interface for logarithmic operators. +type LogarithmicOperator interface { Log2(stack *Stack) error Log10(stack *Stack) error Ln(stack *Stack) error +} + +// MetricOperator defines the interface for metric unit conversion. +type MetricOperator interface { Convert(stack *Stack) error } @@ -69,8 +77,9 @@ type PowerIntOperator interface { } // Operator implementations are split across focused sub-interfaces -// (ArithmeticOperator, BooleanOperator, HyperOperator, StackOperator, -// VariableOperator, ConstantOperator, PowerIntOperator) for clarity. +// (ArithmeticOperator, LogarithmicOperator, MetricOperator, BooleanOperator, +// HyperOperator, StackOperator, VariableOperator, ConstantOperator, +// PowerIntOperator) for clarity. // The combined Operator interface was removed — RPN is the sole client // and Operations is the sole implementor, so the interface added // indirection without practical benefit (ISP). |
