[všetky jazyky] Filozofická debata - ako navrhnúť API pre konverzie? rubrika: Programování: Jiné

7 xxar3s
položil/-a 9.1. 15:45
 
upravil/-a 9.1. 15:47

Ahojte. Dajme tomu že máme typ a ten typ obsahuje možnosť konvertovať typ na iný (napr typ DateTime na time_t (unixový timestamp) alebo time_point).

V niektorých jazykoch vieme overloadnúť operátor konverzie tak aby sa dala použiť

  1. implicitná konverzia:

time_t timestamp = DateTime::Now();

  1. explicitná konverzia:

auto timestamp = static_cast<time_t>(DateTime::Now());

  1. Metódu s názvom konverzie: To{CieľovýNázovTypu}

auto timestamp = DateTime::Now().ToTimestamp()

Prvé dve možnosti sú kompaktnejšie. A keď programátor používa IDE nezavadzajú mu pri autocomplete zbytočné metódy. Posledná možnosť je zase názorná. Pri autocomplete hneď vidíme aké typy konverzie máme k dispozícii. Nevýhoda je že nám zavadzajú v rozhraní zbytočné metódy. A tiež že zaćínajúci programátor to mu nemusí úplne pochopiť.

Ktorý spôsob konverzie by ste použili? Keby ste pracovali na libke ktorú budú používať okrem Vás aj mnohí iní programátori? Niektorí budú znalosťami ďaleko pod vašim levelom.
Ja sa prikláňam skôr k tej poslednej možnosti. Kôli tomu že je názorná jednoznačná a blbuvzdorná (aj pre začínajúcich programátorov). No dnes už máme dilemu lebo mnohé IDEčká zobrazujú aj overloadnuté operátory. Hľadám teda kompromis medzi názornosťou a preplneným API. Možnosť by bola aj pridať obidva spôsoby ale touto cestou sa nechcem uberať, lebo tým spojím nevýhody oboch riešení a okrem toho ...načo?

odkaz
5 vit.herman
odpověděl/-a 10.1. 22:05

Explicitní konverze nebo konverze metodou bych vždy upřednostnil před implicitní konverzí. A mezi těma dvěma explicitními způsoby už vidím rozdíly jen kosmetické. Jinak pokud by se jednalo o návrh knihovny, tak bych knihovnu navrhoval minimalisticky tak, aby pracovala jen s jedním typem. Aby si případné konverze zajistil konzument. Tedy k otázkám, které kladete ani nedojdu a nemusím je tedy řešit.

Pro zobrazení všech 4 odpovědí se prosím přihlaste:

Rychlé přihlášení přes sociální sítě:

Nebo se přihlaste jménem a heslem:

Zadejte prosím svou e-mailovou adresu.
Zadejte své heslo.