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.
|