Spaces:
Sleeping
Sleeping
| # 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. | |