# Exemples / DO-DON'T — Chapitre 22 — Collections et itération > Document compagnon. Les exemples illustrent les règles du chapitre ; la formulation normative reste dans le chapitre lui-même. ## Exemples extraits du chapitre ### Exemple 1 ```text T primitif -> valeur by-value T struct -> valeur by-value T class -> référence de classe ``` ### Exemple 2 ```text Array values = [1, 2, 3]; Array empty = []; ``` ### Exemple 3 ```text Array::filled(uint64 length, T value) ``` ### Exemple 4 ```text User firstUser = ...; User otherUser = ...; Array users = Array::filled(3, firstUser); users[1] = otherUser; // OK si l'accès n'est pas const ``` ### Exemple 5 ```text Array::empty() ``` ### Exemple 6 ```text StaticArray values = [10, 20, 30]; StaticArray empty = []; ``` ### Exemple 7 ```text StaticArray::filled(T value) ``` ### Exemple 8 ```text Array values = ...; Slice part = values::slice(10..<20); part[0] = 42; // modifie values[10] ``` ### Exemple 9 ```text reste attachée à la portion qu'elle désigne conserve une longueur fixe n'est pas redimensionnable n'est pas déplaçable vers une autre portion peut modifier les éléments uniquement si l'accès source l'autorise ne peut jamais augmenter les droits de mutabilité de la source ``` ### Exemple 10 ```text const Array users = ...; const Slice part = users::slice(0..<4); part[0] = otherUser; // ERROR part[0]::setName("Alice"); // ERROR part[0]::getName(); // OK ``` ### Exemple 11 ```text Iterable ↓ Collection ↓ List ↓ SettableList ↓ ResizableList ``` ### Exemple 12 ```text count() -> uint64 isEmpty() -> bool contains(const T value) -> bool ``` ### Exemple 13 ```text ordre stable indexation positionnelle en lecture length() -> uint64 ``` ### Exemple 14 ```text count() == length() ``` ### Exemple 15 ```text list[index] = value; ``` ### Exemple 16 ```text SettableList users = ...; const SettableList readonly = users; ``` ### Exemple 17 ```text StaticArray List SettableList pas ResizableList Array List SettableList pas ResizableList Slice List SettableList pas ResizableList Vector List SettableList ResizableList ``` ### Exemple 18 — `Iterator` ```text interface Iterable { const method iterator() -> Iterator; } interface Iterator { method next() -> Option; } ``` ### Exemple 19 — `View` ```text interface View extends Iterable { const method count() -> uint64; const method isEmpty() -> bool; } ``` `View` n'impose pas `contains()`. ### Exemple 20 — Set ```text ResizableSet::add(T value) -> bool ResizableSet::remove(const T value) -> bool ResizableSet::clear() -> uint64 ``` ### Exemple 21 — Map ```text map[key] -> V // strict map::get(key) -> Option // conditionnel map[key] = value // remplacement seulement map::insert(key, value) // clé nouvelle, DuplicateKeyFault sinon map::remove(key) // clé existante, KeyNotFoundFault sinon map::clear() -> uint64 ``` ### Exemple 22 — Vues de Map ```text map::keys() -> View map::values() -> View map::entries() -> View> ``` ### Exemple 23 — Ordre ```text enum Ordering { Less, Equal, Greater } Comparable Comparator SortedSet SortedMap ``` ### Exemple 24 — Factories ordonnées ```text TreeSet::natural() TreeSet::withComparator(comparator) TreeMap::natural() TreeMap::withComparator(comparator) ``` ## Exemples Range ```text a..b [a, b] bornes basse et haute incluses a>..b (a, b] borne basse exclue, borne haute incluse a.... ids = 1..100; ``` ### Range 2 ```text NaN interdit comme borne +Infinity interdit comme borne -Infinity interdit comme borne valeur finie autorisée ``` ### Range 3 ```text a..a contient exactement a a>..a vide a.... intervalle ordonné RangeIterable parcours canonique vers l'avant RangeStep parcours avant avec pas explicite RangeReverse parcours canonique vers l'arrière RangeReverseStep parcours arrière avec pas explicite RangeProgression valeur de progression produite ``` ### Range 6 ```text (range)::step(step) ``` ### Range 7 ```text RangeStep RangeStep RangeStep RangeStep ``` ### Range 8 ```text (range)::reverse() (range)::reverse()::step(step) ``` ### Range 9 ```text range [::reverse()] [::step(step)] ``` ### Range 10 ```text (250u8..255u8)::step(2u8) ``` ### Range 11 ```text 250 252 254 ``` ### Range 12 ```text (1..10)::step(4) ``` ### Range 13 ```text 1 5 9 ``` ## DO / DON'T / WHY / compiler error / edge cases À consolider progressivement avant la baseline publique V3 et à transformer, lorsque pertinent, en tests de conformité de la toolchain.