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 01:26:58 PDT 2011
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