Sfairadora

  • Referenční příručka

Typové konverze

V praxi často vyvstává potřeba převést hodnotu jednoho datového typu na jiný. Z toho důvodu jsou mezi spřízněnými typy definovány konverze. Například konverzí celého čísla 5 na typ „reálné číslo“ se získá hodnota 5.0. Podle svého účelu se konverze dělí na silné a slabé.

Slabé konverze

Účelem slabých konverzí je umožnit automatický převod hodnoty jednoho typu na typ jiný a to pouze v případě, že korespondence hodnot je jednoznačná a pociťovaná jako jejich identita. Slabá konverze je například konverze mezi celým číslem a reálným číslem. Naopak slabou konverzi z reálného čísla na celé číslo lze provést pouze tehdy, když výchozí hodnota skutečně je celým číslem. Slabé konverze se automaticky řetězí. Existuje-li slabá konverze z typu A na B a z B na C a požaduje slabá konverze A na C, automaticky se provede i mezikonverze na B.
Slabé konverze se používají především ve výrazech jazyka Enki, pokud není konverze typu výslovně vynucena. Smyslem je umožnit záměnné užívání obdobných typů, ale pouze tak, aby automaticky provedenou konverzí nemohlo docházet k nezáměrným chybám.

Silné konverze

Silné konverze jsou naproti tomu určeny pro maximální možné zachování výchozích dat. Aplikují se při změně typu datové položky dokumentu (např. změny typu sloupce tabulky) nebo při explicitně požadované konverzi ve výrazech jazyka Enki. Silné konverze se mezi sebou automaticky neřetězí, mohou se však zřetězit se slabými. Například, pokud se požaduje silná konverze z A na C a taková neexistuje, existuje však slabá konverze z A na B a silná z B na C, složí se takto silná konverze ze dvou základních.
Lze shrnout, že vlastnosti obou typů konverzí slouží k zamezení ztrát dat. V obou případech však v různém smyslu. V případě slabé konverze se zabraňuje nechtěné ztrátě tak, že se konverze automaticky neprovede, nebyla-li by veškerá zdrojová data zahrnuta do výsledku. V případě silné konverze, která se neprovádí automaticky, ale na požádání, se převádějí veškerá převoditelná data, byť jsou převedena jen z části (např. konverzí formátovaného řetězce znaků na neformátovaný se převedou znaky, formát se však ztratí; nebo převodem reálného čísla na celé se číslo zaokrouhlení na nejbližší celé a tak dojde případně ke ztrátě přesnosti).
Pokud pro složené typy neexistuje přímá konverze, konvertují se po složkách tak, že se přiřadí stejnojmenné složky resp. složky se stejným indexem.
Pokud vznikne typ B pojmenováním typu A, automaticky existuje slabá konverze B na A a silná konverze A na B.