85 lines
1.7 KiB
Markdown
85 lines
1.7 KiB
Markdown
# Exemples / DO-DON'T — Chapitre 24 — Casts et conversions
|
|
|
|
> Document compagnon non normatif tant qu'une règle n'est pas explicitement référencée comme normative par le chapitre.
|
|
|
|
## Exemples actuellement présents dans le chapitre
|
|
|
|
### Exemple 1
|
|
|
|
```text
|
|
conversion de valeur
|
|
cast de hiérarchie nominale
|
|
bitcast de représentation binaire
|
|
```
|
|
|
|
### Exemple 2
|
|
|
|
```text
|
|
int8 small = ...;
|
|
int32 large = small; // ERROR
|
|
int32 explicitLarge = small::toInt32(); // OK
|
|
```
|
|
|
|
### Exemple 3
|
|
|
|
```text
|
|
Dog dog = ...;
|
|
Animal animal = dog;
|
|
Serializable serializable = dog;
|
|
```
|
|
|
|
### Exemple 4
|
|
|
|
```text
|
|
Animal animal = ...;
|
|
|
|
if (animal is Dog) {
|
|
// animal est raffiné en Dog ici.
|
|
}
|
|
```
|
|
|
|
### Exemple 5
|
|
|
|
```text
|
|
toTarget()
|
|
conversion exacte et totale
|
|
|
|
tryToTarget()
|
|
conversion exacte pour la valeur courante, récupérable si impossible
|
|
|
|
roundToTarget()
|
|
perte de précision explicitement acceptée, conversion totale
|
|
|
|
tryRoundToTarget()
|
|
perte de précision explicitement acceptée, mais conversion pouvant échouer
|
|
|
|
saturateToTarget()
|
|
saturation explicite lorsqu'aucun arrondi supplémentaire n'est nécessaire
|
|
|
|
saturatingRoundToTarget()
|
|
arrondi + saturation explicitement annoncés
|
|
|
|
wrapToTarget()
|
|
wrapping entier explicite
|
|
```
|
|
|
|
### Exemple 6
|
|
|
|
```text
|
|
tryExactToInt32()
|
|
tryFloorToInt32()
|
|
tryCeilToInt32()
|
|
tryRoundToInt32()
|
|
tryTruncateToInt32()
|
|
```
|
|
|
|
### Exemple 7
|
|
|
|
```text
|
|
annexes/A-numeric-conversions.md
|
|
```
|
|
|
|
## DO / DON'T / WHY / compiler error / edge cases
|
|
|
|
La couverture structurée de cette section sera enrichie au fur et à mesure de la fermeture des règles du chapitre. La migration `0.2.12` conserve volontairement les exemples historiques dans le chapitre afin de ne perdre aucun contexte normatif.
|