Стендап Сьогодні 📢 Канал в Telegram @stendap_sogodni
🤖🚫 AI-free content. This post is 100% written by a human, as is everything on my blog. Enjoy!02.11.2022
Тип "дата" та його відсутність у різних мовах програмування
📆⏱️🙅♂️ Просуваюсь з HealthKit проєктом. Черговий раз стикаюсь з відсутністю типу даних для календарного дня, на цей раз у Swift. Поки терплю.
В чому моя проблема? Найбільш звичайний часовий тип в мовах програмування відповідає моменту часу. Навіть якщо при цьому називається Date. Так само в JavaScript та в Golang. Це добре, якщо ваша логіка працює з моментами, або довільними проміжками часу.
Але чимало логіки побудовано не на моментах, а на календарних датах. Це поняття очевидно для людини — всі ми знаємо, що таке понеділок, перше січня, та інше. Але перекласти дати на моменти часу не так просто — хоча б через різницю в часових поясах та явище літнього часу. Так само і проміжки часу погано працюють для проміжків дат.
Наприклад: будь-які підписки робляться в днях, а ніяк не в секундах чи іншому. Звісно, можна перекласти це на проміжки часу (та й всі так роблять), але потрібно завжди памʼятати, які операції безпечні, а де треба проконтролювати; можливо, пильнувати за тим, щоб кожне значення було початком дня — але це теж не панацея.
Ось в Ruby є окремий тип Date і це чудово. Для JavaScript я зробив бібліотеку dayjs-date. А у Swift поки нічого не знаю, роблю як є.
А ще — чи знаєте ви, що можна в ActiveRecord створити модель, що буде працювати не з таблицею, а з вьюхою (view)? Працюватиме так само — з усіма вигодами Arel, асоціаціями та таке інше. Тільки, зрозуміло, без можливості збереження змін. Це може статися до нагоди, якщо будуватиме складні запити, або щоб показати їх в ActiveAdmin тощо.