malyj_gorgan: (Default)
[personal profile] malyj_gorgan
Блін, чому я все життя роблю такі тупі помилки?
Оце тільки що: колись давно написав скрипт, який час від часу отримує масив даних input_array про недавні логіни певного типу юзерів і щось з ним робить. Зберігаючи в локальному списку array_size довжинu масиву, len(input_array), тому, що залежно від того, чи останній раз функція повернул масив довжиною більше 50 тисяч, ми відкладаємо наступний запуск коду лише на годину, коли більше 40 тисяч -- на дві, і т.п., аж до того, що коли масив має менше тисячі елементів, ми чекаємо цілу добу.

І все працювало, але мене попросили забрати зайві порогові значення, залишити лише оде: > 50 тисяч або ні. І все перестало працювати! Я облазив все, що міг, в таблиці вхідних юзерів -- ну явно ж, якщо щось таке помінялося, то проблема на вході, нє?... Бо мого коду там було піврядка, нема де помилитися!

І лише після кількох днів дурної роботи я зрозумів, що коли робив останню заміну, я замість написати порівняння
array_size[-1] >= 50000
написав
len(array_size) >= 50000

Отакий я дурень :(

P.S. Хто не знає, в Пітоні вираз x[-1] означає останній елемент впорядкованого масиву (списку) x.

Date: 2025-05-28 09:21 pm (UTC)
From: [personal profile] ichthuss
А в нормальній мові це б не скомпілювалося.

Date: 2025-05-28 10:32 pm (UTC)
juan_gandhi: (Default)
From: [personal profile] juan_gandhi
Exactly.

Date: 2025-05-29 06:05 am (UTC)
bytebuster: (ITCrowd-Cartoon)
From: [personal profile] bytebuster
А array_size, звісно, містить не array size, а сам array.
Ну-ну. :)

Date: 2025-05-29 01:06 pm (UTC)
bytebuster: (ITCrowd-Cartoon)
From: [personal profile] bytebuster
Це я так знущаюся. Просто вважаю, що нейминг — наше всьо. І що коли через 10 років хтось читатиме код, буде довго не врубатися у те, що то за array, в якому містяться sizes of якихось інших input arrays.

Date: 2025-05-29 05:17 pm (UTC)
bytebuster: (ITCrowd-Cartoon)
From: [personal profile] bytebuster
Саме так. "Довжина вектору довжин." Не повинно бути двох "довжин". Повинна бути "mass", "arity", "weight", "amount".
"Beauty", врешті-решт (як у квантовій фізиці).

Це така само семантична помилка, як назвати member класу size або len, зробити масив із таких об'єктів, і потім дивуватися помилкам виду ts.len замість ts[0].len

Там вище у коментарі вже написали: воно не повинно компілюватися. І треба докладати зусиль, щоб воно _не_ компілювалося.

Date: 2025-05-29 05:02 pm (UTC)
bytebuster: (ITCrowd-Cartoon)
From: [personal profile] bytebuster
Antisemantic, так. :)

Насправді, всюди є винятки.

Змінні i, j, k, lhs, rhs, ret і іжє — цілком утворюють власний паттерн.

Окрім того, конструкції виду
int s=0; // running sum
…вже давно обробляються IDE і, як мінімум, показуються на tooltip.

Date: 2025-05-30 06:32 pm (UTC)
From: [personal profile] mprotsenko
Просто вважаю, що нейминг — наше всьо.

+100500

There are two hard problems in software engineering:

* cache invalidation,
* naming things,
* and off-by-1 errors.


А так підпишуся під кожним словом - в 98% треба економити не зайві 4 байта, і не час на написання імені змінної - економити треба час і зусилля на прочитання того, що написано.

Date: 2025-05-30 08:11 pm (UTC)
bytebuster: (ITCrowd-Cartoon)
From: [personal profile] bytebuster
+ concurrent write

а якщо строго казати, то й
+ mutability взагалі

Profile

malyj_gorgan: (Default)
malyj_gorgan

January 2026

S M T W T F S
     1 23
45678910
11121314151617
18192021222324
25262728293031

Style Credit

Expand Cut Tags

No cut tags
Page generated Jan. 6th, 2026 01:00 pm
Powered by Dreamwidth Studios