Incidentally, flatMap is called SelectMany in C#, and is apparently used
without any real problem.  Are our C# cousins that much more advanced?

On Sun, Jul 29, 2012 at 9:24 PM, Reinier Zwitserloot <[email protected]>wrote:

> Actually, this flatMap snippet shows exactly why it's a horrible fit for
> java. This introduces the concept of flatMap which is a gigantic can of
> worms. Yes, people who are used to functional languages find this as
> obvious and effortless to read, write, and understand as a java programmer
> who sees 'while'. It's an entirely different way of thinking, a _HUGE_
> mental burden.
>
> You are not Joe Java. Joe Java does not read this and instagrok what's
> going on here. This is a problem. A show-stopper, even.
>
> Any language proposal to hoist nullity into the type system surely should
> also come with various useful riders attached, such as elvis operators and
> the like. Then the code snippet becomes something Joe Java would, in fact,
> grok just fine:
>
> A? varAMightBeNull = methodThatMayProduceA();
> B? varBMightBeNull = varAMightBeNull.?getB();
>
>
> note that your code snippet involves a static method call called
> 'tryToGetBFromA', which can _OF COURSE_ check if the incoming param is null
> and if so, return null. So, your actual snippet doesn't even _NEED_ option.
> I'm not sure if you did this because you are just not aware of what
> idiomatic java looks like, or if you had to write extremely convoluted java
> code in order for your flatMap example to work. I don't know the specific
> of flatMap, but I'm guessing that, if tryToGetBFromA was a no-args instance
> method, your flatMap wouldn't work as written.
>
>
> On Friday, July 27, 2012 2:30:17 AM UTC+2, clay wrote:
>>
>> Here is a simple example that illustrates the benefit of Option beyond
>> avoiding null exceptions:
>>
>> Here is a traditional piece of logic using traditional null if-checks.
>> This is using Scala syntax but would be equivalent in Java.
>>
>> val variableAMayBeNull: A = methodThatMayProduceA();
>> if (variableAMayBeNull != null) {
>> val variableBMayBeNull: B = tryToGetBFromA(**variableAMayBeNull);
>>
>> if (variableBMayBeNull != null) {
>>  doSomethingWithNonNullB(**variableBMayBeNull);
>> }
>> }
>>
>> Same logic using Option. This is Scala syntax. Java can do this but not
>> as nicely until it gets lambdas.
>>
>> val variableAMayBeNull: Option[A] = methodThatMayProduceA();
>> val variableBMayBeNull: Option[B] = variableAMayBeNull.flatMap(**
>> tryToGetBFromA);
>> variableBMayBeNull.foreach(**doSomethingWithNonNullB);
>>
>> Both blocks are logically equivalent, but the Option route is much more
>> concise, elegant, and maintainable. The if-logic is moved from the end
>> application code to inside of the Option class. Since this type of logic is
>> so common in application code, the code simplification benefits are quite
>> large.
>>
>>   --
> You received this message because you are subscribed to the Google Groups
> "Java Posse" group.
> To view this discussion on the web visit
> https://groups.google.com/d/msg/javaposse/-/L_ZlenOaaM4J.
>
> To post to this group, send email to [email protected].
> To unsubscribe from this group, send email to
> [email protected].
> For more options, visit this group at
> http://groups.google.com/group/javaposse?hl=en.
>

-- 
You received this message because you are subscribed to the Google Groups "Java 
Posse" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/javaposse?hl=en.

Reply via email to