sort
Devuelve una lista ordenada completamente nueva a partir de un comparador — nunca muta su entrada.
Lección
sort recibe un comparador estándar de Dart — devuelve negativo si
a debe ir antes que b, positivo si va después, cero
si empatan — y produce un resultado ordenado. La diferencia importante con
Array.prototype.sort de JavaScript (y de FxTS) es que el
sort de FxDart nunca muta su entrada. Siempre
crea una List nueva (List.of(iterable)..sort(f)),
dejando el iterable original tal cual estaba. FxTS añadió más tarde
toSorted como alternativa no mutante a su sort
mutante; en FxDart, toSorted es simplemente un alias —
como sort ya era no mutante, no quedaba nada
que diferenciar.
Hay un matiz en la forma de cadena que conviene señalar
explícitamente: en la cadena síncrona Fx, .sort(f)
devuelve otro Fx<T> — no una List<T> —
porque Fx envuelve la lista ordenada subyacente para seguir
siendo encadenable. Sigues necesitando un terminal como
.toList() para obtener una
List concreta. La cadena asíncrona no tiene
esa peculiaridad: FxAsync.sort(f) ya es un
terminal que devuelve Future<List<T>> directamente,
porque FxAsync no puede devolverse a sí mismo desde algo que
necesita hacer await de todo el pipeline primero.
Recurre a sortBy en su lugar cuando
solo quieras ordenar por una clave que extraes, en vez de escribir el
comparador tú mismo.
Demo 1 · Fundamentos, sin mutación, y toSorted
Demo 2 · Asíncrono — ya es un terminal
Pruébalo tú
Ejercicio: ordena los números en orden descendente.