Files
saselang-bible/examples/024-casts-et-conversions-examples.md
2026-09-13 10:20:16 +02:00

2.4 KiB

Exemples / DO-DON'T — Chapitre 24 — Casts et conversions

Document compagnon. Les exemples illustrent les règles du chapitre ; la formulation normative reste dans le chapitre lui-même.

Conversion explicite

int8 small = ...;
int32 large = small;                     // ERROR
int32 explicitLarge = small::toInt32(); // OK

Widening total

int8 value = ...;
int32 larger = value::toInt32();

Aucun tryToInt32() parallèle n'est nécessaire si toutes les valeurs source sont exactement représentables.

Narrowing exact avec Fault

int32 value = ...;
int8 smaller = value::toInt8();

La signature Core peut déclarer :

toInt8() -> int8
    faults NumericConversionFault

OutOfRange est produit lorsque la valeur ne tient pas dans int8.

Politiques distinctes

value::toInt8()       // exact, peut fault
value::saturateToInt8()
value::wrapToInt8()

Ces opérations coexistent seulement lorsque leur résultat peut réellement différer.

Flottant vers entier

float64 value = ...;

int32 exact = value::toInt32();

La conversion exige une valeur finie, intégrale et dans la plage.

Pour choisir explicitement une politique mathématique :

value::floor()::toInt32()
value::ceil()::toInt32()
value::round()::toInt32()
value::truncate()::toInt32()

Pour choisir la politique de plage :

value::floor()::saturateToInt32()
value::round()::wrapToInt32()

Entier vers flottant

int64 value = ...;

float64 exact = value::toFloat64();
float64 approximated = value::roundToFloat64();

toFloat64() exige l'exactitude ; roundToFloat64() accepte explicitement la perte de précision.

Flottant vers flottant

toFloatXX()
    exige l'exactitude

roundToFloatXX()
    accepte l'arrondi canonique
    peut fault OutOfRange sur une valeur finie

saturatingRoundToFloatXX()
    accepte l'arrondi canonique
    sature une valeur finie hors domaine

Les catégories suivantes sont préservées :

NaN       -> NaN
+Infinity -> +Infinity
-Infinity -> -Infinity
+0        -> +0
-0        -> -0

NumericConversionFault

NumericConversionFault extends Fault

Codes :

NotFinite
NotIntegral
OutOfRange
Inexact

DON'T : introduire mécaniquement :

tryToTarget() -> Result<Target,NumericConversionError>

si cette méthode ne ferait que dupliquer toTarget() faults NumericConversionFault.