Комментарии 22
На первый взгляд Svelte по DX теперь одна из вариаций React
контракт с магазином
Каким, ёжики пушистые, магазином?
Толи еще будет. Скоро и поддержку JSX добавят, ато шаблоны не нативно же! :)
Я использую svelte в 3х больших проектах, реактивность через `$:` часто работает не так как ожидаешь, так что это безусловно шаг вперёд. Да, как-будто бы заимствование из реакта, но свелт намного быстрее в разработке и с поддержкой typescript он стал моим любимым фреймворком. В целом я очень ожидаю это обновление.
Ничтожества. Столько лет вам понабилось на то, чтобы прийти к модели свойств JavaFX.
var width = new SimpleIntegerProperty();
var height = new SimpleIntegerProperty();
var area = Bindings.multiply(width, height);
area.addListener((observable, oldValue, newValue) -> {
System.out.println(newValue);
});
/s
Что придёт в newValue, когда произведение width и height выйдет за пределы инта?
В newValue придёт произведение примитивов, которые обёрнуты в SimpleIntegerProperty. Как эти примитивы перемножаются, что будет при переполнении, за это отвечает Java(или, скорее, JVM).
Ок, спрошу прямее: Что придёт в newValue, когда произведение width и height выкинет ArithmeticException?
ArithmeticException при переполнении не будет, это же Java. При любом другом исключении, Binding залогирует исключение и примет значение 0. Это же значение и будет передано в слушатель третьим параметром(newValue).
С 8 версии есть нормальное сложение.
Вы считаете 0 при исключениях адекватным поведением?
С 8 версии есть нормальное сложение.
Разве? Это включается каким-то флагом или как? По умолчанию, будет переполнение.
Вы считаете 0 при исключениях адекватным поведением?
Конкретно в случае с сахаром в виде Bindings.multiply/Bindings.divide, я считаю такое поведение оправданным. Если хочется самому обработать ошибку, то пожалуйста, есть Bindings.createIntegerBinding или его более низкоуровневый аналог IntegerBinding.
var width = new SimpleIntegerProperty();
var height = new SimpleIntegerProperty();
var area = Bindings.createIntegerBinding(
() -> {
try{
return width.get() / height.get();
}
catch (ArithmeticException e){
return ohNoTheHeightIsZero(width.get());
}
},
width, height // зависимости
);
var area = new IntegerBinding(){
{
bind(width, height); // зависимости
}
@Override
protected int computeValue() {
try{
return width.get() / height.get();
}
catch (ArithmeticException e){
return 42;
}
}
};
И на всякий случай скажу, что мой первый комментарий был сарказмом. Там даже плашечка в конце стоит. Само собой, я не считаю JavaFX верхом развития реактивного программирования.
Разве? Это включается каким-то флагом или как?
https://docs.oracle.com/javase/8/docs/api/java/lang/Math.html#multiplyExact-int-int-
я считаю такое поведение оправданным.
В следующий раз, когда банк-клиент вместо ошибки напишет, что у вас на счету 0 рублей, включите фронталку, вместе посарказмируем.
Не очень красиво, перепрыгивать с вычисления площади, до расчёта баланса.
Само собой, при расчёте баланса нужно будет учитывать и возможность деления на ноль, и все варианты выхода за пределы диапазона int. Это не ответственность Bindings.multiply, $derived и, скорее всего, UI в целом.
Да и о каком переполнении в контексте баланса может идти речь, когда при любых важных расчётах с деньгами, необходимо использовать BigInteger/BigDecimal.
Учитывая, что реактивность через $ сломана by design, мне очень тревожно за ваши проекты.
Тот же ref и computed из vue composition api? Или есть разница?
Где-то я уже такое видел. Зато как красиво продали "runes" :)
Svelte: Знакомство с рунами