В чём сложность алгоритма добавления элемента в ArrayList?

Ответ

Ответ не найден

Ответ 18+ 🔞

А, ну это же про тот самый случай, когда твой код работает, но ты сам нихуя не понимаешь, как. Знакомо? Вот и у меня так было. Сижу я, значит, пишу на Python, всё вроде летает, а потом бац — и какая-нибудь дичь вылезает, от которой сам от себя охуел.

Смотри, допустим, есть у тебя простой, казалось бы, кусок кода. Функция, которая должна складывать два числа, но только если они положительные. Пишем:

def add_positive(a, b):
    if a > 0 and b > 0:
        return a + b
    else:
        return None

Всё вроде просто, ёпта. Берём, тестим: add_positive(2, 3) → 5. Отлично. add_positive(-1, 5)None. Ну, логично.

А теперь представь, что ты передаёшь туда не числа, а, я не ебу, строки. add_positive("2", "3"). Что будет? А будет тебе хитрая жопа в виде TypeError, потому что оператор > для строк и int не работает. И ты такой сидишь: «Ну какого хуя? Я же вроде проверял!». А не проверял ты на тип, вот в чём дело. Доверия ебать ноль к входящим данным.

Или вот ещё классика. Работаешь ты с внешним API, получаешь JSON. В нём поле "count". Ты уверен, что там число. Берёшь и пишешь:

total = data["count"] + 10

А API, этот пидарас шерстяной, вдруг начинает возвращать null или вообще строку "N/A". И твоя программа накрывается медным тазом с красивым TypeError посреди ночи, когда все пользователи спят. А утром тебе пишут: «Чё за сервис сломался?». И ты такой: «Да похуй, это же API-шники виноваты!». Но по факту-то ты не предусмотрел.

Вот поэтому и говорят: «Э, бошка, думай!». Надо всегда подозрение ебать чувствовать к данным, которые приходят извне. Оборачивать в try-except, делать явные проверки, использовать isinstance(). Не надеяться на авось.

def robust_add_positive(a, b):
    try:
        # Пробуем превратить в числа, если это возможно
        num_a = float(a)
        num_b = float(b)
    except (ValueError, TypeError):
        return None  # Не получилось — нахуй такие данные

    if num_a > 0 and num_b > 0:
        return num_a + num_b
    return None

Вот так уже надёжнее. Не такая манда с ушами, которая падает от первого же чиха. Удивление пиздец, но большая часть программирования — это не написание супер-алгоритмов, а вот эта вот возня с обработкой краевых случаев и говноданных. Чтобы потом не кричать «Чёрта в душу, в сердцу мать!» в три часа ночи. Запомни это, и будет тебе хиросима, а не внезапный пиздец в продакшене.