puter/doc/uncategorized/es6-note.md
2024-06-23 17:35:19 -04:00

1.4 KiB

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:

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