Alexander Kuklev (akuklev) wrote,
Alexander Kuklev
akuklev

React.scala.js?

GUI-компоненты это одно из редчайших мест, где classical OOP (мутабельная объектно-ориентированность с наследованием и типизированными интерфейсами) уместна, оправдана и полезна. Если честно, это не просто одно из редчайших мест, а "других таких мест я не знаю".*

Недавно (как я выяснил благодаря комментарию bvlb) вышел React v0.13, где описания компонентов выглядят уже очень близко к тому, как мне кажется надо в идеальном мире:
export class Counter extends React.Component {
  constructor(props) {
    super(props);
    this.state = {count: props.initialCount};
  }
  tick() {
    this.setState({count: this.state.count + 1});
  }
  render() {
    return (
      <div onClick={this.tick.bind(this)}>
        Clicks: {this.state.count}
      </div>
    );
  }
}
Ещё лучше я могу себе это представить только на какой-нибудь слеюдущей версии Scala.js:
export class Counter(initialCount = 0) extends React.Component {
  var count: Int = initialCount;
  def tick() {
    count = count + 1
  }
  renders {
    <div onClick={tick()}>
      Clicks: {count}
    </div>
  }
}
Вот оно, вот оно где Scala-классы с их var'ами и валентностями к месту!


* Кроме GUI-компонентов, ещё в Actor Systems наследование и типизированные интерфейсы полезны, но мутабельность там должна быть тщательно обёрнутая (в STM или монадки), то есть всё скальные радости (особенно миксин-наследование и cake pattern) там очень к месту, а вот необёрнутое состояние, т.е. "var"-поля, совершенно не к месту.

Во всех остальных известных мне местах требуются только иммутабельные структуры и работа с потоками/сигналами.
Subscribe

  • Прогресс

    Десять дней назад, вторая ступень SpaceX'овского корабля Starship своим ходом слетала своим ходом на десять километров вверх, и усмепшно приземлилась…

  • О водосбережении

    Как известно, питьевая вода во многих странах дефицитный ресурс. И даже в дождливой Германии летом иногда случаются засухи, в результате которых она…

  • 36

    Традиционный деньрожденный пост. Год выдался необычный. :)

  • Post a new comment

    Error

    default userpic

    Your reply will be screened

    Your IP address will be recorded 

    When you submit the form an invisible reCAPTCHA check will be performed.
    You must follow the Privacy Policy and Google Terms of use.
  • 39 comments

  • Прогресс

    Десять дней назад, вторая ступень SpaceX'овского корабля Starship своим ходом слетала своим ходом на десять километров вверх, и усмепшно приземлилась…

  • О водосбережении

    Как известно, питьевая вода во многих странах дефицитный ресурс. И даже в дождливой Германии летом иногда случаются засухи, в результате которых она…

  • 36

    Традиционный деньрожденный пост. Год выдался необычный. :)