
Underscore is a keyword in Java 9, use this script to check your code (2015) - based2
https://blogs.oracle.com/sundararajan/entry/underscore_is_a_keyword_in
======
virtualwhys
Wonder what they'll do with `_`?

At last year's JLS the keynote mentioned that reserving underscore did _not_
mean that Java is becoming Scala. And yet, what else are they going to with it
other than to slowly integrate Scala idioms into the language?

If alternative JVM languages gain enough traction perhaps archaic boilerplate
like having to define Java getters/setters, equals, hashCode and toString on
data classes will replaced sooner than later with terse "modern" equivalents
found in C#, Scala, etc.

~~~
alblue
The use of _ as a discardable placeholder has been present in many languages
in the past, such as Haskell and Prolog. These aren't necessarily Scala-isms
that Java is adopting; they have a much richer history.

~~~
nilved
The way Scala uses them is very different from Haskell or Prolog. They are
used to create lambdas, not discardable placeholders. E.g. `List(1, 2, 3) map
(_ + 1)`.

~~~
pharrington
_ has a lot uses in Scala, one of them being to create lambdas, another as
placeholders when pattern matching. for example val List(a, b, _, d) = List(1,
2, 3, 4)

------
ivan_gammel
Looks like it was done here:
[https://bugs.openjdk.java.net/browse/JDK-8065599](https://bugs.openjdk.java.net/browse/JDK-8065599)

------
Sharlin
Java 8 already warns about the use of _.

------
jakub_g
Looking forward to have the same feature in JavaScript!

/sees the horror on the faces of all the lodash users/

Ok that was not a good idea

~~~
sratner
Interestingly, _ is already reserved in the node.js console, so you have to
import lodash under a different name.

~~~
Nullabillity
Seems to work fine for me.

    
    
        teo  ~  node -v                                                                                                                                                                                                                                 
        v7.3.0
        teo  ~  node                                                                                                                                                                                                                                    
        > _ = "hi"
        Expression assignment to _ now disabled.
        'hi'
        > _
        'hi'

~~~
sratner
That's a fluke ;)

    
    
        $ node
        > _ = "hi"
        'hi'
        > _
        'hi'
        > foo = "bar"
        'bar'
        > _
        'bar'
    

(See mattnewton's reply for explanation.)

~~~
Nullabillity

        > _ = "hi"
        Expression assignment to _ now disabled.
        'hi'
        > "bar"
        'bar'
        > _
        'hi'
        > foo = "bar"
        'bar'
        > _
        'hi'

~~~
sratner
Neat, looks like newer versions detect and correct for it. TIL.

------
gsylvie
Please give us goto and const back!

------
forinti
Will $_ still be valid? You could use that instead.

~~~
chvid
You have (almost) the full range of unicode at your disposal - have you
considered that maybe މ is more meaningful variable name?

~~~
yjftsjthsd-h
That's a bit harder to type.

~~~
ci5er
Not if you have a Thaana keyboard!

~~~
kps
Mixing RTL and LTR is a nuisance, though; that's why ℵ is a good variable name
and א is not.

~~~
ci5er
"consistency is the hobgoblin of little minds", said a well known and
frequently quoted man[0].

I can't speak to the pros and cons of ℵ-vs-א, but in other geographies I have
found mixing RTL and LTR to be a real PITA. Especially if one is touch-typing
and not eyeballing the screen from time-to-time. Of course, before Unicode, we
got to tell developers: "Just use ASCII for variable names. That's why God
gave us 127 keys."

[0] Some call him arrogant. Others say that I intentionally truncated the
quote for my own evil purposes. Who is to judge?

------
nrjdhsbsid
For a language I find as reasonably designed as Java, this is stupid.

Add a new key"word", don't deprecate a whole fucking character in a language
that's been around for twenty years.

It pains me to consider the horrific amount of code this will break. The
lifetimes of hours spent deleting _ that would have been writing whimsical
poetry in a moonlit garden or curing cancer.

I'm not surprised I guess given that Java is "owned" by Oracle now. Hopefully
they kill it off quickly so we can get the migrations to openjdk overwith.

~~~
ivan_gammel
Never seen single underscore as variable, field or method name and never seen
any naming convention that allowed that (and I've read a lot of open source
code too). Conclusion: it's a pain only for those who didn't care about
readability of their code and it's definitely not the end of the world.

~~~
sharpercoder
I've seen it popping up _a lot_ lately. It's used as an identifier for lambda
functions, indicating "i must use a variable identifier here, but I don't use
it"

someObject.doSomething(_ -> isDerp());

~~~
thechewanater
No it's not, it's illegal to use _ as a lambda parameter.

------
revelation
So I've looked for an explanation beyond "it's done", but save your time,
there is none.

This is Java, starting tomorrow it's a keyword because why not, but let's keep
in type erasure or the software on our Java Ring (TM) breaks.

