рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рд╢реАрд▓рддрд╛ рдХреНрдпрд╛ рд╣реИ?

рдПрдореНрдмрд░ рдСрдХреНрдЯреЗрди рдореЗрдВ рдмрдбрд╝реА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рдирдИ рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВ рджрд┐рдЦрд╛рдИ рджреА рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЙрдирдореЗрдВ рд╕реЗ рдХреЛрдИ рднреА рдореЗрд░реЗ рд▓рд┐рдП рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдЯреНрд░реИрдХрд┐рдВрдЧ (рдСрдЯреЛрдЯреНрд░реИрдХрд┐рдВрдЧ) рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдЕрдзрд┐рдХ рд░реЛрдорд╛рдВрдЪрдХ рдирд╣реАрдВ рд╣реИ ред рдСрдЯреЛ рдЯреНрд░реИрдХрд┐рдВрдЧ рдПрдореНрдмрд░ рдХреА рдирдИ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдкреНрд░рдгрд╛рд▓реА рд╣реИ, рдЬреЛ рдПрдореНрдмрд░ рдХреЛ рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреА рд╣реИ рдХрд┐ рд░рд╛рдЬреНрдп рдХреЗ рдорд╛рди (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЪрд┐рд╣реНрдирд┐рдд рдЧреБрдг @tracked) рдмрджрд▓ рдЧрдП рд╣реИрдВред рдпрд╣ рд╣реБрдб рдХреЗ рдиреАрдЪреЗ рдПрдХ рдмрдбрд╝рд╛ рдЕрджреНрдпрддрди рдерд╛, рдЬрд┐рд╕рдореЗрдВ рдирдП рдХрд░реНрдиреЗрд▓ рдХреЗ рд╢реАрд░реНрд╖ рдкрд░ рдХреБрдЫ рд╕рдмрд╕реЗ рдкреБрд░рд╛рдиреЗ рдПрдореНрдмрд░ рдЕрдореВрд░реНрдд рдХрд╛ рдкреВрд░рд╛ рдкреБрдирд░реНрд▓реЗрдЦрди рд╢рд╛рдорд┐рд▓ рдерд╛ред


рдПрдХ рдЕрдиреБрд╡рд╛рджрдХ рд╕реЗ: рдХреНрд░рд┐рд╕ рдЧреИрд░реЗрдЯ - рд▓рд┐рдВрдХреНрдбрдЗрди рдХреЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдФрд░ рдПрдореНрдмрд░ рдЬреЗрдПрд╕ рдврд╛рдВрдЪреЗ рдореЗрдВ рдореБрдЦреНрдп рдпреЛрдЧрджрд╛рдирдХрд░реНрддрд╛рдУрдВ рдореЗрдВ рд╕реЗ рдПрдХ рд╣реИред рдЙрдиреНрд╣реЛрдВрдиреЗ рдлреНрд░реЗрдорд╡рд░реНрдХ рдХреЗ рдирдП рд╕рдВрд╕реНрдХрд░рдг - рдПрдореНрдмрд░ рдСрдХреНрдЯреЗрди рдХреЛ рдмрдирд╛рдиреЗ рдореЗрдВ рд╕рдХреНрд░рд┐рдп рднрд╛рдЧ рд▓рд┐рдпрд╛ред рдЗрд╕ рддрдереНрдп рдХреЗ рдмрд╛рд╡рдЬреВрдж рдХрд┐ рдЙрдирдХреА рд╢реНрд░реГрдВрдЦрд▓рд╛ рдПрдореНрдмрд░ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЗ рд▓рд┐рдП рд▓рд┐рдЦреА рдЧрдИ рдереА, рдпрд╣ рдЙрди рдЕрд╡рдзрд╛рд░рдгрд╛рдУрдВ рдкрд░ рдЫреВрддреА рд╣реИ рдЬреЛ рд╕рднреА рд╡реЗрдм рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рд╣реИрдВред

рдкрд╣рд▓реА рдирдЬрд╝рд░ рдореЗрдВ рдСрдЯреЛ рдЯреНрд░реИрдХрд┐рдВрдЧ, рдПрдХ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдореЙрдбрд▓ Ember Classic(рдЧрдгрдирд╛ рдХреА рдЧрдИ рд╕рдВрдкрддреНрддрд┐рдпреЛрдВ, рдкрд░реНрдпрд╡реЗрдХреНрд╖рдХреЛрдВ рдФрд░ Ember.set()) рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдмрд╣реБрдд рд╕рдорд╛рди рд╣реИ ред рдпрджрд┐ рдЖрдк рдЙрдиреНрд╣реЗрдВ рджреЛ рддрд░рдл рд╕реЗ рддреБрд▓рдирд╛ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдореБрдЦреНрдп рдЕрдВрддрд░ рд╡рд╣ рд╣реИ рдЬрд╣рд╛рдВ рдПрдиреЛрдЯреЗрд╢рди рд░рдЦрд╛ рдЬрд╛рддрд╛ рд╣реИред рдСрдХреНрдЯреЗрди рдореЗрдВ, рдЖрдк рдЙрди рдЧреБрдгреЛрдВ рдХреЛ рдПрдиреЛрдЯреЗрдЯ рдХрд░рддреЗ рд╣реИрдВ, рдЬрд┐рди рдкрд░ рдЖрдк рдирд┐рд░реНрднрд░ рд╣реИрдВ, рдЬрдмрдХрд┐ рдХреНрд▓рд╛рд╕рд┐рдХ рдореЗрдВ, рдЖрдк рдЧреЗрдЯрд░реНрд╕ рдФрд░ рд╕реЗрдЯрд░реНрд╕ рдХреЛ рдПрдиреЛрдЯреЗрдЯ рдХрд░рддреЗ рд╣реИрдВред


class OctaneGreeter {
  @tracked name = 'Liz';

  get greeting() {
    return `Hi, ${this.name}!`;
  }
}

class ClassicGreeter {
  name = 'Liz';

  @computed('name')
  get greeting() {
    return `Hi, ${this.name}!`;
  }
}

рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдЖрдк рдЧрд╣рд░рд╛рдИ рд╕реЗ рдЦреБрджрд╛рдИ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рдкрд╛рдПрдВрдЧреЗ рдХрд┐ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдЯреНрд░реИрдХрд┐рдВрдЧ рдЕрдзрд┐рдХ рд▓рдЪреАрд▓реА рдФрд░ рд╢рдХреНрддрд┐рд╢рд╛рд▓реА рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЖрдк рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреЛ рдЯреНрд░реИрдХ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ , рдЬреЛ рдПрдореНрдмрд░ рдХреНрд▓рд╛рд╕рд┐рдХ рдореЗрдВ рд╕рдВрднрд╡ рдирд╣реАрдВ рдерд╛ред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдПрдХ рд╕рд╛рдзрд╛рд░рдг 2d рд╡реАрдбрд┐рдпреЛ рдЧреЗрдо рдХреЗ рд▓рд┐рдП рдПрдХ рдореЙрдбрд▓ рд▓реЗрдВ:


class Tile {
  @tracked type;

  constructor(type) {
    this.type = type;
  }
}

class Character {
  @tracked x = 0;
  @tracked y = 0;
}

class WorldMap {
  @tracked character = new Character();

  tiles = [
    [new Tile('hills'), new Tile('beach'), new Tile('ocean')],
    [new Tile('hills'), new Tile('beach'), new Tile('ocean')]
    [new Tile('beach'), new Tile('ocean'), new Tile('reef')],
  ];

  getType(x, y) {
    return this.tiles[x][y].type;
  }

  get isSwimming() {
    let { x, y } = this.character;

    return this.getType(x, y) === 'ocean';
  }
}

, isSwimming , character ( x / y). , , getType, . CP (. .: Computed Properties тАФ Ember Classics), - . .


, Ember Classic. ! , , Ember , Octane.


-, , . , . , . , , , , .


7 . , ┬л ┬╗, , :


  1. ? тЖР
  2. ?
  3. тАФ TrackedMap
  4. тАФ @localCopy
  5. тАФ RemoteData
  6. тАФ effect()

, , Octane. -, , , ! Discord.


: ┬л┬╗?



, ┬л ┬╗, , . . , .


: .

┬л┬╗ , ┬л ┬╗ ┬л ┬╗. , ┬л Ember┬╗ ┬л Vue┬╗, , . , .


, ! .

( (streams))


, , , , : ┬л┬╗ (declarative) ┬л┬╗ (state). ┬л ┬╗ , ┬л┬╗ ┬л┬╗ ? "" (state)? , , .


(state)


┬л┬╗ ┬л┬╗. , , ; , "". JavaScript :


  • , let const
  • , Map Set

, (root state), , . , , , . :


let a = 1;
let b = 2;

function aPlusB() {
  return a + b;
}

aPlusB() , a b. , . , , a b, aPlusB(). , a b , aPlusB() , .



, ┬л┬╗, ┬л┬╗ ┬л┬╗, , , . , :


, , , .
, - .

┬л┬╗ , (). , тАФ ┬л ┬╗? , , , , , , , ( , ).


aPlusB. , , :


  1. ( ).
  2. a + b.

let a = 1;
let b = 2;

let aPlusB = a + b;

, , . , a b. aPlusB , :


let a = 1;
let b = 2;

let aPlusB = a + b;

//  `a`
a = 4;
aPlusB = a + b;

//  `b`
b = 7;
aPlusB = a + b;

, . , a, aPlusB. API , , :


export default class Counter extends Component {
 count = 0;

  @action
    incrementCount() {
    this.count++;
    this.rerender();
  }
}

, rerender() , , . , , - , , .


, ┬л┬╗ . aPlusB().


let a = 1;
let b = 2;

function aPlusB() {
  return a + b;
}

, , , . , ┬л┬╗ , . , aPlusB() , . , , , .


, , Ember, Vue Svelte, (, ) JSX , , JSX . HTML тАФ , , , . HTML, , . ┬л┬╗ , , , DOM, , DOM , .


FP (Functional Programming)?


. ┬л┬╗ ┬л┬╗ ┬л┬╗. , . , HTML, , - , .


( FP), . ┬л┬╗ тАФ .


let a = 1;
let b = 2;

function plus(first, second) {
  return first + second;
}

//  a + b;
plus(a, b);

. , , .



, ( ). , FP , , , . , , , .


, . , , , .


, , . , ┬л┬╗ FP, - (, , . ┬л ┬╗, !). , .



, :


  1. ┬л┬╗ ┬л ┬╗. , , , .
  2. ┬л┬╗ , . ( , ):
    • , , , .
    • тАФ , , , .
  3. ┬л ┬╗ , , , . HTML , тАФ , . , , .

. , , , - , - . , , ┬л┬╗ .


: , . , , )


All Articles