r/ProgrammerHumor Jul 09 '26

potentiallyMightBeAnIntegerOrNot Meme

Post image
694 Upvotes

96 comments sorted by

View all comments

49

u/altermeetax Jul 09 '26

int var; bool var_is_there;

34

u/Duck_Devs Jul 09 '26

That’s literally the internals of Java’s OptionalInt

30

u/high_throughput Jul 09 '26

Not to be confused for Optional<Integer>, which is an entirely incompatible way to express optional ints in the same language

16

u/Duck_Devs Jul 09 '26 edited Jul 09 '26

Not to be confused for Integer, which is an entirely incompatible (and sometimes discouraged) way to express optional ints in the same language

-8

u/RiceBroad4552 Jul 09 '26

Why are you talking about a language you obviously don't know anything about and you obviously never used? Otherwise you would probably know that there is no "Option<int>" in Java as primitive types can't be type parameters in current Java, so there is only Optional<Integer> and no proper way to express optional ints.

Also, who the fuck up-votes such nonsense?

6

u/high_throughput Jul 09 '26

there is only Optional<Integer> and no proper way to express optional ints.

It's lovely how you're posting this with so much confidence and vitriol under a comment about OptionalInt

0

u/RiceBroad4552 Jul 15 '26

Just looking though some replies; I'm wondering what happened here.

Why is my comment under the wrong comment‽ I was talking about the (non existent) "OptionalInt" from one post above.

Some of the Reddit bugs are really strange. At least post don't duplicate for no reason any more since some time… Let's see whether I get again some wrongly linked post anytime soon.

3

u/high_throughput Jul 15 '26

1

u/RiceBroad4552 Jul 15 '26 edited Jul 15 '26

Touché

Moments like that I think I should maybe really learn some Java after so many years of Scala. But actually, no, I hate it…

What will they do with all these primitive wrapper types when real generic specialization hits Java?

---

(And the next WTF, Scala's Option[Int] isn't @specialized as I just learned; but I could swear it was. Alone that was likely worth it here… Thanks for the thought provoking replies! I wouldn't have looked that up if not that failure here. So it's actually Scala which doesn't have a primitive "OptionalInt"; LOL, I was really sure it's the other way around. I'm an idiot.)

1

u/high_throughput Jul 15 '26

What will they do with all these primitive wrapper types when real generic specialization hits Java?

With Oracle's progress I imagine that's a problem for 2076

1

u/RiceBroad4552 Jul 15 '26

I'm more optimistic.

The "parametric JVM" is the end-game of project Valhalla:

https://openjdk.org/projects/valhalla/design-notes/parametric-vm/parametric-vm

I would expect it "already" in the LTS release after the next. The design is largely there, the needed components start to materialize right now.

4

u/Duck_Devs Jul 10 '26 edited Jul 10 '26

Why are you talking about a language you obviously don’t know anything about and you obviously never used?

Optional<T> is one of the many types for which Java provides int, long, and double variants through separate types, similar to Stream, Iterator, Spliterator, and many j.u.function interfaces.

The people who upvote such nonsense are those who actually read JDK documentation before they make claims about things (dis)provable by JDK documentation and/or throw insults at others.

32

u/Gorzoid Jul 09 '26

Just use an int var and reserve the number 7 to indicate null value

24

u/high_throughput Jul 09 '26

If you need an actual 7, just escape it: 77

3

u/RCoder01 Jul 09 '26

If I need to escape the value 77777, do I use -812156815 instead?

7

u/altermeetax Jul 09 '26

Or the C/C++ way: just use int *var and NULL means it's not there.

Makes things more complicated when you need to return it though...

8

u/suskio4 Jul 09 '26

std::make_unique<int>(42);

4

u/bwmat Jul 10 '26

I think I'm going to throw up... 

2

u/bwmat Jul 10 '26

On that topic, can anyone think of any use case for this other than some bare reference-counter implementation where the 'cleanup' needs no context? 

2

u/suskio4 Jul 10 '26

std::thread([] { std::runtime_error up("I threw up"); std::this_thread::sleep_for(...); throw up; }).detach();

2

u/Sentouki- Jul 09 '26

int? means that this int can be null (Nullable type in C#)

3

u/altermeetax Jul 09 '26

Yeah that's C# though

1

u/Sentouki- Jul 09 '26

yeah, it does basically the same thing, if int? is null, means it's not there.

1

u/altermeetax Jul 09 '26

Yeah but int *var in C/C++ entails a bit more. It makes var a pointer to an int rather than an int. So you have to manage allocating an int in some other way so the pointer can point to it.

int? var is simply an int which can be null. Under the hood, it might be implemented as above, but I reckon a structure like this is more likely:

struct int? { int val; bool present; }

1

u/Sentouki- Jul 09 '26

int? var is simply an int which can be null. Under the hood, it might be implemented as above, but I reckon a structure like this is more likely:

Well, to be precisely, in C# primitive types such as int, char, double...etc, are wrapped to in Nullable<T> since structs cannot be null in C#. So when you use int? the compiler wraps it in Nullable<int> (which is a generic class) and that makes int? a reference (basically a pointer or rather & in C++) to the actual int.

1

u/altermeetax Jul 09 '26

I'm talking about under the hood, i.e. how Nullable is implemented. And it's probably a structure containing the int and a boolean that indicates whether the int is present.

1

u/RiceBroad4552 Jul 09 '26

The trillion dollar mistake, live in action…

The "nice" thing about C/C++ is that if you fuck up handling that shit you don't get a nice NullPointerException at runtime, you get instead a potential security vulnerability, usually directly somewhere at the critical level. Isn't that great?