mirror of
https://github.com/HeyPuter/puter
synced 2024-11-14 22:06:00 +00:00
47 lines
1.4 KiB
Markdown
47 lines
1.4 KiB
Markdown
# Notes about ES6 Class Syntax
|
|
|
|
## Document Meta
|
|
|
|
> **backend focus:** This documentation is more relevant to
|
|
> Puter's backend than frontend, but is placed here because
|
|
> it could apply to other areas in the future.
|
|
|
|
## Expressions as Methods
|
|
|
|
One important shortcoming in the ES6 class syntax to be aware of
|
|
is that it discourages the use of expressions as methods.
|
|
|
|
For example:
|
|
|
|
```javascript
|
|
class ExampleClass extends SomeBase {
|
|
intuitive_method_definition () {}
|
|
|
|
constructor () {
|
|
this.less_intuitive = some_expr();
|
|
}
|
|
}
|
|
```
|
|
|
|
Even if it is known that the return type of `some_expr` is a function,
|
|
it is still unclear whether it's being used as a callback or
|
|
as a method without other context in the code, since this is
|
|
how we typically assign instance members rather than methods.
|
|
|
|
We solve this in Puter's backend using a **trait** called
|
|
[AssignableMethodsTrait](../../packages/backend/src/traits/AssignableMethodsTrait.js)
|
|
which allows a static member called `METHODS` to contain
|
|
method definitions.
|
|
|
|
### Uses for Expressions as Methods
|
|
|
|
#### Method Composition
|
|
|
|
Method Composition is the act of composing methods from other
|
|
constituents. For example,
|
|
[Sequence](../../packages/backend/src/codex/Sequence.js)
|
|
allows composing a method from smaller functions, allowing
|
|
easier definition of "in-betwewen-each" behaviors and ways
|
|
to track which values from the arguments are actually read
|
|
during a particular call.
|