Pull to refresh
-4
0.3
Дмитрий Карловский @nin-jin

Full Stack Overflow

Send message

Только у функции при этом теряется имя, поэтому приходится писать как-то так:


const myFuncion = Decorator(function myFuncion() { .... })
class Foo extends Object { 

  @log
  get bar() { return 5 }
  set bar(val: number) { }

  [Symbol.toStringTag]: string

}

function log<
  Host extends object,
  Field extends keyof Host,
  Value extends Host[Field]
>(
  host: Host,
  field: Field,
  descr: TypedPropertyDescriptor<Value>
) {

  return {

    ...descr,

    get(this: Host) {
      const val = descr.get!.call(this)
      console.log('%s.%s => %s', this, field, val)
      return val
    },

    set(this: Host, val: Value) {
      console.log('%s.%s <= %s', this, field, val)
      descr.set!.call(this, val)
    },

  }
}

const foo = new Foo
foo[Symbol.toStringTag] = 'foo'

foo.bar
foo.bar = 7
foo.bar

Playground Link

Какова вероятность, что три рандома подряд выдадут вам 3 нуля? Для 64-битного числа это будет 1/2**63**3 = 1/7e56. Если взять суперкомпьютер ближайшего будущего на 7 эксафлопс, то матожидание выпадения джекпота из [ 0 , 0 , 0 ] будет 1e38 секунд или 1e30 лет.


Но тут даже не настоящий рандом, а псевдорандом, где следующее значение является функцией от предыдущего, а это значит, что выдаёт он два одинаковых значения подряд примерно никогда.

  1. Декораторы и так-то не простые штуки. Не надо их ещё более усложнять разными сигнатурами. Лучше если будет одна понятная сигнатура. Вариант со скобками может быть легко расширен в будущем.
  2. А как их реализуют? Детектируют асинхронную функцию и заворачивают в асинхронную обёртку с эвейтом на оригинальной?

Порой нужны не только и не столько валидаторы, сколько нормализаторы. Например, вы распарсили урл, на входе у вас просто строки. Соответственно вам надо их преобразовать в числа, флаги, объекты. Не уверен насколько особенности парсинга урла должны быть в самом классе.

Ничего не понял. Вам на вход приходит дескриптор, у которого есть get/set — просто дёргаете их для получения/установки значения.

Не понял в чём проблема объявить свои get/set обработчики, которые выполняются всегда на экземпляре?


Чудесный пример безалаберности разработчиков. Кому-то показалась хорошей идея затащить в библиотеку валидации все варианты номеров телефонов со всего мира — довольно бесполезная штука в свете существования NAT от мира телефонии — добавочных номеров.

Речь о том, что есть куча разных апи для доступа к разным состояниям, а не одно, чтобы править всеми?

Люди помешались с этими "стейт-менеджерами", гребя в одну кучу совершенно разные вещи.


Реактивность — она про синхронизацию множества состояний.


Flux-like про то, чтобы не иметь множества состояний, а хранить всё в одной глобальной переменной.


RX-like вообще не про состояния, оно про потоки событий с фиксированной конфигурацией. На базе RX-like можно реализовать реактивность, а можно не реализовать.


MobX-like как раз именно про реактивность с динамической конфигурацией потоков данных.


К "управлению" состоянием ни то ни другое не относится. Управление — это мутаторы в моделях. Редьюсеры в redux-linke- это частный случай одного большого мутатора для одной большой модели.


Для прочищения сознания предлагаю взглянуть на NgRx — это этакий redux, который использует rx для уведомления об изменениях.


Источником истины в реактивной среде может быть как глобальная переменная (MST,vuex), так и нет. Более того, часто источником истины выступает внешнее состояние (location, history, localStorage, sessionStorage, server, p2p-net, indexedDB, page layout, dom-state).


Внешнее от внутреннего отличается лишь тем, что первое мы контролируем не полностью и оно может поменяться независимо от того, что мы написали в коде.


Всякие GraphQL — это про просто протокол общения с сервером. Я выше перечислил кучу состояний, которые являются внешними, но совсем не являются серверными апи. То же состояние DOM в иммутаблы ну никак не абстрагируется.

abstract class User {
    abstract lastName: string
    abstract firstName: string
}

const IVANOV = new class IvanUser extends User {
    readonly lastName = "Иванов"
    readonly firstName = "Иван"
}

Зато замечательно проматывается.

Сначала ведутся на хайп, а потом изобретают велосипеды. Всё давно уже придумано, нужно лишь вылезти из информационного пузыря: https://habr.com/ru/post/346066/

А можете поделиться этой страницей со 1200 коменатиями? Мне нужно для иллюстрации на конфе, как делать не надо.

Довольные разработчики ещё больше расслабятся и уже через пол года на вашем девайсе хорошо если 10 вкладок останутся не выгруженными и вы сможете почитать их в самолёте.

Заглянул в свой смартфон:


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

Там скорее букв нет. Каждый иероглиф — отдельное слово.

Нет, конечно, зачем генерировать бесполезные тесты?

Это покажет функциональный тест.

Information

Rating
2,213-th
Location
Санкт-Петербург, Санкт-Петербург и область, Россия
Date of birth
Registered
Activity

Specialization

Chief Technology Officer (CTO), Chief information officer (CIO)
Lead
From 8,000 €
OOP
Database
Designing application architecture