Proposal: computed (aka memoized) properties

I'm submitting a...


[ ] Regression (a behavior that used to work and stopped working in a new release)
[ ] Bug report  
[x] Feature request
[ ] Documentation issue or request
[ ] Support request => Please do not submit support request here, instead see https://github.com/angular/angular/blob/master/CONTRIBUTING.md#question

Current behavior

There is no real computed properties. Getters are bad for performance. Example https://plnkr.co/edit/TQMQFb?p=preview

Expected behavior

To be able to use computed properties as in vue or mobx

What is the motivation / use case for changing the behavior?

My proposal is to make change detection smarter by adding computed properties like in mobx or vue.

import {Computed, Reactive} from '@angular/core';
...

class MyCmp {
  age = 69;

  @Reactive firstName = 'hello';
  @Reactive lastName = 'angular';
  @Computed get fullName() {
     console.log('recomputed');
     return `${this.firstName} ${this.lastName}`;
  }
}

This will allow to have computed get property and be able to cache it, so it is computed only when needed. Currently this is not possible and getter is recomputed a lot of times, especially if using default change detection.