Mismatch between the order of the type variable and the order of the SAM method formal parameters

Yuval Shavit yshavit at akiban.com
Fri Sep 16 05:44:20 PDT 2011


That makes sense, thanks Remi. Of course, if Java had currying *and* named
parameters, we could have the best of all possible worlds... :-)

On Fri, Sep 16, 2011 at 4:26 AM, Rémi Forax <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> 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