All streams
Search
Write a publication
Pull to refresh
1
0

Пользователь

Send message

Все бы так игры "забрасывали" и глядишь — коммунизм бы наступил

Сначала подумал, что автор статьи под polling имеет ввиду long polling, но нет, в статье описывается именно обычный polling и его недостатки, тогда как телеграм использует именно long polling.
Отсюда делаю вывод, что автор не вникал в предмет статьи и/или вовсе написал статью используя нейросеть

Тоже такой вариант сразу на ум пришёл. На мой вкус, это явно лучше атрибута со строковым ключом, который разработчику придётся брать непонятно откуда.

А вот явное внедрение реализации вместо интерфейса, чревато тем, что тестировать код станет сложнее. Если в некоторых языках ещё можно mock'ать классы, то, насколько знаю, в NET это сделать невозможно.

Почему, а главное зачем?

engine = create_async_engine(
   SQLALCHEMY_DATABASE_URL,
   **(dict(pool_recycle=900, pool_size=100, max_overflow=3))  # ??? 
)

В этом есть какой-то практический смысл?

Интересно, если бы кандидат в качестве ответа на данный вопрос написал такую регулярку: @, то его бы попросили вон или сразу бы сделали сеньором-помидором?

Ну к примеру про ошибки формата Copy-Paste не подсказывает, ну это в принципе было логично

Не совсем. По какой-то странной причине, IDEA не обнаруживает подобные ошибки при сравнении через ==, но ругается при использовании Objects.equals(obj, obj) или `obj.equals(obj)

Зачем ждать релиза Mojo, когда Cython уже существует?

Автор статьи тоже не дурак и в самом начале кода прописал from __future__ import annotations , что включает Postponed Evaluation of Annotations

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

Смотрю я на все эти ухищрения, для того, чтобы итераторы нормально работали и меня охватывает тоска. Вот поддерживала бы jvm генераторы или разработчики kotlin реализовали бы их сами на уровне генерации байткода(не знаю, насколько это реализуемо, но компилятор C# именно так и делает), столько лишней работы можно было бы избежать. Например, реализация flatten стала бы настолько простой, что даже как-то смешно.

fun <T> Iterable<Iterable<T>>.flatten(): Iterable<T>{
    for(iterable in this){
        for(item in iterable){
            yield item
        }
    }
}

И производительность при этом проседать не должна, так как по сути при генерации получился бы такой же код, как и в ручной реализации, а при наличии поддержки yield со стороны JVM, ещё бы и прибавку в скорости могли получить.

Спасибо! Ваши советы помогли мне наконец отрефакторить мой код должным образом.

Чистый код, как он есть
# в этом файле мы считываем пользовательский ввод и складываем числа


chislo = 0
# складываем числа введённые пользователем используя встроенный оператор сложения +
# цикл помогает нам сэкономить количество строк
for vyrazhenie in ['input("Введите число 1")', 'input("Введите число 2")', 'input("Введите число 3")', 'input("Введите число 4")', 'input("Введите число 5")', 'input("Введите число 6")', 'input("Введите число 7")', 'input("Введите число 8")']:
    import matematika
    chislo = matematika.plus(chislo, eval(vyrazhenie))

# заменяем числа на буквы если возможно для крутости
# если вдруг понадобится вывести число в одну строку, то тот кто вызывывает код может перехватить вывод и сделать всё как надо!
for zyfra in str(chislo):
    if zyfra == '0':
        print('O')
    elif zyfra == '1':
        print('l')
    elif zyfra == '3':
        print('')
    elif zyfra == '4':
        print('Ч')
    elif zyfra == '6':
        print('Б')
    elif zyfra == '8':
        print('B')
    elif zyfra == '9':
        print('Я')
    else:
        print(zyfra+'(NOT COOL)')

Не очень красиво, перепрыгивать с вычисления площади, до расчёта баланса.
Само собой, при расчёте баланса нужно будет учитывать и возможность деления на ноль, и все варианты выхода за пределы диапазона int. Это не ответственность Bindings.multiply, $derived и, скорее всего, UI в целом.
Да и о каком переполнении в контексте баланса может идти речь, когда при любых важных расчётах с деньгами, необходимо использовать BigInteger/BigDecimal.

С 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 верхом развития реактивного программирования.

ArithmeticException при переполнении не будет, это же Java. При любом другом исключении, Binding залогирует исключение и примет значение 0. Это же значение и будет передано в слушатель третьим параметром(newValue).

В newValue придёт произведение примитивов, которые обёрнуты в SimpleIntegerProperty. Как эти примитивы перемножаются, что будет при переполнении, за это отвечает Java(или, скорее, JVM).

Ничтожества. Столько лет вам понабилось на то, чтобы прийти к модели свойств 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

Было бы у человека 12 пальцев, была бы двенадцатеричная система.
Было бы у человека 60 пальцев, была бы шестидесятеричная система.

Действительно. Сначала хотел написать, мол это babel такой плохой, но прочитав это issue понял, что:

PEP 498 completely ignores localization as if you never need to use localized programs with string interpolation.

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

Раньше такие срачи имели место быть, но после появления f-строк есть резон использовать другие варианты?
Минусов у f-строк не много. Например, они не подходят для динамического форматирования(с заранее неизвестным форматом строки и, возможно, набором переменных), но это редкий случай использования(само собой, речь идёт о простых строках, где jinja это слишком).
И нельзя отметить, что автодополнение и подсветка ошибок вашей среды разработки, будет прекрасно работать для f-строк.

f-строки и есть тот самый obvious way. Конкуренты проигрывают по всем возможным пунктам настолько, что не использовать f-строки глупо.

Information

Rating
4,445-th
Registered
Activity