The compiler uses the older-style Annotation system from Java (later versions allow parameter values without keys). In other words, callouts=false
exists only because callouts=true
exists, and both must be honored because of how the @future
annotation is written in the source code. It doesn't matter that one of those values are default, the compiler must allow both of them, because that's how the run-time works.
There's no practical purpose of writing callouts=false
, unless you really want to be explicit that there are no callouts. However, in professional code, you'd rarely, if ever, see such an explicit statement, because it is already the default value. Anyone writing callouts=false
would probably be seen by more experienced developers to be a novice, because experienced developers already know the default is false.
It should also be noted that with sharing
and without sharing
is not a Boolean value; the default is "inherit" mode, which means the current sharing state doesn't change from whatever it's current set to. This is actually a performance benefit, as there is a material cost (CPU time) to specifying with sharing
or without sharing
.