Стендап Сьогодні 📢 Канал в Telegram @stendap_sogodni

🤖🚫 Контент вільний від AI. Цей пост на 100% написаний людиною, як і все на моєму блозі. Насолоджуйтесь!

27.12.2023

Дев-адвент 27: форматування та одиниці виміру

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

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

Таким чином, зробив конвертацію одиниць виміру частиною форматування. Чудовий привід відрефакторити форматування, бо до цього часу по коду були розсипані шаблони на кшталт "%0.1f kg". А тепер повсюди одна бібліотечна функція.

Самі одиниці виміру я беру з Apple Health; звідти відомо, які одиниці обрав користувач, тож не доведеться про це питати. Єдине, що конвертування вбудованими засобами дуже повільно, бо це треба створити HKQuantity та викликати в неї doubleValue(for: unit). В циклі для графіка це непіднімно. На щастя, одиниці виміру ваги конвертуються множенням на коефіцієнт, а його можна дізнатись викликом:

HKQuantity(unit: kiloUnit, doubleValue: 1.0).doubleValue(for: preferredUnit)