3 ms·
But of course the real solution is to use a strong and composable type for your comparison result, rather than remove the entire thing because you originally de
by masklinn 4y ago
But of course the real solution is to use a strong and composable type for your comparison result, rather than remove the entire thing because you originally designed the API wrong.
- tialaramex 4y agoIndeed. 1) Get strong types 2) Make a type representing Ordering 3) Use this type everywhere for ordering things. Stop worrying about it. Using -1, 0 and 1 to represent these feels like something that was a clever trick for low level code on a PDP-11 and hasn't been a good idea since the 1970s.
- romac 4y agoI like how Rust does it with the `Ordering` type and associated combinators: https://doc.rust-lang.org/stable/std/cmp/enum.Ordering.html https://doc.rust-lang.org/stable/std/cmp/enum.Ordering.html For two values `x` and `y` of the same type with fields `a` and `b`, this lets you compare on `a` first and then on `b` by writing ``` x.a.cmp(&y.a).then(x.b.cmp(&y.b)) ```
- masklinn 4y agoIn fairness that was directly inspired by Haskell’s type of the same name: https://hackage.haskell.org/package/base-4.17.0.0/docs/Prelude.html#t:Ordering https://hackage.haskell.org/package/base-4.17.0.0/docs/Prelu...
- im3w1l 4y agoNot bad but I think python's way - using tuples is cleaner (x.a, x.b) < (y.a, y.b) btw you can format as code by indenting two spaces.