Mismatch between the order of the type variable and the order of the SAM method formal parameters
Rémi Forax
forax at univ-mlv.fr
Fri Sep 16 05:54:36 PDT 2011
On 09/16/2011 02:44 PM, Yuval Shavit wrote:
> That makes sense, thanks Remi. Of course, if Java had currying *and*
> named parameters, we could have the best of all possible worlds... :-)
Java 8 will have no function type so I have some trouble to imagine
what you want exactly when you say that Java should have curry.
For named parameters, it's a good idea to see if the community want
something like that
and propose it as an item of Coin2 (the flip side).
Rémi
>
> On Fri, Sep 16, 2011 at 4:26 AM, Rémi Forax <forax at univ-mlv.fr
> <mailto:forax at univ-mlv.fr>> wrote:
>
> On 09/16/2011 01:09 AM, Yuval Shavit wrote:
>> Why should the lambda usually come last? I admit I'm fairly new
>> to functional programming, but it seems that functions/lambdas
>> often come first in methods, which can be useful when currying. I
>> realize that currying isn't part of this project, but it's
>> conceivable that Java would have it in the future.
>
> We talk about function that takes a lambda,
> because the lambda can have a body split on several lines,
> it's usually more readable to put the lambda at the end.
>
> You can compare:
> int sum = list.reduce(0, (sum, s) -> {
> if ("".equals(s)) {
> return 0;
> }
> return 1;
> });
>
> with:
> int sum = list.reduce((sum, s) -> {
> if ("".equals(s)) {
> return 0;
> }
> return 1;
> }, 0);
>
> The argument after the lambda is too far from the beginning of
> the method call.
>
> Rémi
>
>
>>
>> On Thu, Sep 15, 2011 at 12:00 PM, Rémi Forax <forax at univ-mlv.fr
>> <mailto:forax at univ-mlv.fr>> wrote:
>>
>> On 09/15/2011 05:56 PM, Brian Goetz wrote:
>> > In general, it is best if methods that have a single lambda
>> parameter have the lambda parameter last.
>>
>> I agree for Iterable.reduce, but here it's Reducer.reduce().
>>
>> Rémi
>>
>> >
>> >
>> > On Sep 15, 2011, at 12:30 AM, Rémi Forax wrote:
>> >
>> >> Hi all,
>> >>
>> >> Here is the declaration of a Reducer:
>> >>
>> >> interface Reducer<T, U> {
>> >> U reduce(U base, T t);
>> >> }
>> >>
>> >> and how to use it:
>> >>
>> >> Reducer<String, Integer> reducer = (Integer i, String
>> s) -> i +
>> >> s.length();
>> >>
>> >> As you see the order of the type argument<String, Integer>
>> is not
>> >> the same as the order of the type of the formal parameter
>> of the lambda
>> >> (Integer i, String s).
>> >> I think it will be simpler if the signature of reduce()
>> was changed to
>> >> swap the two
>> >> formal parameters.
>> >>
>> >> Rémi
>> >>
>> >>
>>
>>
>>
>
>
More information about the lambda-dev
mailing list