Hi Nicolas.

We had discussion on operator <=> in original case where SortFunction was
integrated
https://pharo.fogbugz.com/f/cases/17728/Integrate-Travis-Griggs-TAG-SortFunctions
.


2017-11-05 0:37 GMT+01:00 Nicolas Cellier <
[email protected]>:

> Hi all,
> I started a discussion with Denis in a pull request
> https://github.com/pharo-project/pharo/pull/430
> But since it's going beyond simple code review, it probably has a better
> place here.
>
> First, I want to say thanks for enriching this original work of Travis
> Griggs.
> http://objology.blogspot.fr/2010/11/tag-sortfunctions-redux.html
> http://objology.blogspot.fr/2010/11/tag-sortfunctions.html
> <http://objology.blogspot.fr/2010/11/tag-sortfunctions-redux.html>
>
> Of course, I'm never satisfied.
> So I don't really appreciate the rewrite of space ship operator <=> into a
> more heavy threeWayCompareTo:
>
> In my eyes, it's so obvious that <=> means < or = or > in the context of
> SortFunction
> And also that the order matches the signs
> < = >
> -1 0 1
> IOW result will be -1 if receiver is <, 0 if equal, +1 if superior
>
> #threeWayCompareTo: does not tell as well.
> But maybe It's a question of taste and I don't have the same eyes as Pharo
> people?
> To me it's also a question of respect to the original author, don't change
> a good selector for the sake of changing.
>
> Apart this detail, I wanted to speak about SortByPropertyFunction.
> SortByProperty is super usefull for composing / chaining like this:
>
>     population sortBy: #name ascending , #age descending.
>
> But currently, SortByPropertyFunction is allways using the default
> hardcoded collation <=> ... He he, it's also notice it's shorter to write ;)
>
> Imagine that my properties are neither String nor Magnitude, or they are,
> but I want a different collation policy, because in French $é must not be
> sorted too far from $e.
>
> It could be written quite simply with:
>
>    c sortBy: #name collatedInFrench ascending , #age descending
>
> With current implementation, collatedInFrench would have to use a block
> (thru a CollatorBlockFunction which is a proxy to the block in a
> SortFunction disguise):
>
>     Symbol>>collatedInFrench
>         "interpret self as a property"
>         ^[:a :b | FrenchCollator collate: (self value: a) with: (self
> value: b)]
>
> But IMO SortByPropertyFunction should better feed a reified
> CollatorFunction, or said differently a SortFunction, as Denis said.
>
>     Symbol>>collatedInFrench
>         ^FrenchCollator new onProperty: self
>
>     SortFunction>>onProperty: aValuable
>         ^SortByPropertyFunction sortProperty: aValuable with: self
>
> What do you think?
>
> Nicolas
>
>

Reply via email to