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.
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.
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)`.
_ 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)
Good question; to me _ has no obvious meaning. And in general Java is verbose - ie. the keyword for private is "private" rather than some shorthand or symbol. Maybe they should just not use it.
...we are certainly NOT going to do
Scala's "wunderbar". However, things it might be used for include things like
"I don't want to give this variable a name" (such as catch parameters that are
never used.)
"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?
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.
The sheer amount of Java code written is nearly unfathomable. Maybe 3 million developers each churning out 20000 lines a year. That's about 60 billion lines of Java code per year. There could easily be over a trillion lines of Java out there.
I more of a C++ guy, but I like Java very much and have used it extensively in the past. I personally like a good C/C++ joke and can't understand why the Java devs are so serious. Apparently nobody is allowed to joke about Java, it's serious business :D
For what it's worth, you should _always_ be using triple-equals in Javascript unless you have an overwhelmingly good reason not to. Many of the weird Javascript-isms people like to complain about are due to surprising type coercions, which don't happen with triple-equals (which behaves as you would expect- value equality without type coercion for primitive types and reference equality otherwise.)
For someone who uses a more than one language on a regular basis, triple equals is an annoying break with convention. It shouldn't be that easy to make a mistake by simply missing an extra character. This is one of many reasons I've taken to using TypeScript for all of my web frontend projects.
You mean NaN != NaN. null == null is true, and null != null is false.
NaN != NaN is surprising, but is not unique to JavaScript. As far as I know, this is the case in every language, and is mandated by the IEEE 754 specification.
However, it does come up in JavaScript more often than other places, since NaN is really easy to get (+{} => NaN, 1 - '' => NaN, etc, etc).
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.
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"
That's exactly what they're doing. And exactly why many languages are hesitant to add new keywords ever, since you could be using anything as a variable name. (Hence the practice of reserved words which might become keywords in the future.)
> 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.
What makes you think that OpenJDK isn't owned by Oracle, or that OpenJDK won't add the _ keyword, given that it's part of the Java 9 spec?
I'll admit the last part was just using a good opportunity to diss Oracle. The longer the keyword the less name collisions there will be in general, using a single character is absolute worst case if you want to avoid breaking code
I highly doubt that, seems like you'd get a lot more name collisions if you make something commonly used as a variable (such as index or length) a keyword instead of the seldomly-used underscore.
48 comments
[ 2.8 ms ] story [ 106 ms ] threadI will have a word with Ryan Gosling.
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.
http://git.net/ml/lambda-development-java/2013-07/msg00350.h...
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?
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.
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.
that's... quite a lot of _
Here is something I made to lighten the mood: https://i.imgur.com/qzOPn85.png
.. or maybe this is even scarier. I'm not sure.
edit: downvotes from java devs incoming :D
Edit: I'm a Java guy too, don't get why some people get so butthurt over things :)
At least it's not JavaScript with infinity,null,undefined, and NaN. Oh and null!=null which is hilarious
I more of a C++ guy, but I like Java very much and have used it extensively in the past. I personally like a good C/C++ joke and can't understand why the Java devs are so serious. Apparently nobody is allowed to joke about Java, it's serious business :D
NaN != NaN is surprising, but is not unique to JavaScript. As far as I know, this is the case in every language, and is mandated by the IEEE 754 specification.
However, it does come up in JavaScript more often than other places, since NaN is really easy to get (+{} => NaN, 1 - '' => NaN, etc, etc).
someObject.doSomething(_ -> isDerp());
That's exactly what they're doing. And exactly why many languages are hesitant to add new keywords ever, since you could be using anything as a variable name. (Hence the practice of reserved words which might become keywords in the future.)
> 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.
What makes you think that OpenJDK isn't owned by Oracle, or that OpenJDK won't add the _ keyword, given that it's part of the Java 9 spec?
Almost none.
_ was never encouraged, promoted, it wouldn't really fit with any sort of Java coding practice at all.
So I don't think it will be a huge issue.
/sees the horror on the faces of all the lodash users/
Ok that was not a good idea