Стендап Сьогодні
📢 Канал в Telegram @stendap_sogodni
🦣 @stendap_sogodni@shevtsov.me в Федиверсі

🤖🚫 AI-free content. This post is 100% written by a human, as is everything on my blog. Enjoy!

17.09.2025

Коли не треба очікувати впорядкованості

Є такий момент у програмуванні, що оскільки ми можемо перелічити колекцію, то це натякає на наявність порядку. Бо перелік завжди відбувається в якомусь порядку! Важливо памʼятати, що не всяка колекція має порядок, та знати, які приклади з твого середовища його не мають (або навпаки, мають.)

Проблема ускладнюється тим, що рідко яка колекція повертає елементи у випадковому порядку. Навпаки, більшу частину часу ми будемо бачити саме той порядок, який очікуємо. Наприклад, порядок, в якому ми додавали елементи. Аж поки у підступний момент не випаде інший та не зіпсує нам всю логіку.

Наприклад: структура даних словник (вона ж hash) наче зазвичай не є впорядкованою. Але в ній можна перебрати елементи. Та скоріше за все, вони повернуться в порядку додавання. Тільки покладатися на це не можна. Чи можна? В Ruby та Python цей порядок гарантований мовою! А в JavaScript чи Go - ні. Ото й кажу — знай своє оточення.

Також реляційні бази даних не мають ніякого “порядку за замовчуванням”, а вертають результат запиту в довільному, зручному для бази порядку. Може це в порядку за ключем. А може, це лише збіг, бо насправді — в порядку додавання. А взагалі не варто відгадувати, треба явно задавати порядок командою ORDER BY, якщо він тобі потрібний.

Коли архітектор серйозно ставиться до цієї проблеми, то порядок перебору буде дійсно випадковий, щоб на нього ніколи не можна було покластися. Мені відомо, що саме так робить Go - ось живий приклад, де кожен запуск дасть інший порядок ключів.