New candidate JEP: 443: Unnamed Patterns and Variables (Preview)

Holo The Sage Wolf holo3146 at gmail.com
Wed Mar 22 13:31:21 UTC 2023


Indeed, the emphasis I tried to make was about making it *implicit* unnamed

On Wed, Mar 22, 2023, 14:37 Red IO <redio.development at gmail.com> wrote:

> I think he suggests to get rid of the variable entirely like in his
> example:
>
> try {
>
> } catch (Exception) //<- nothing here
> {
> }
>
> And try (new AutoclosableImpl()) {//<- no assignment to a variable
>
> }
>
> Great regards
> RedIODev
>
>
> On Wed, Mar 22, 2023, 13:19 Brian Goetz <brian.goetz at oracle.com> wrote:
>
>>
>>
>> On 3/21/2023 5:39 PM, Holo The Sage Wolf wrote:
>>
>> Is there a reason not to allow implicit Unnamed Variables in
>> try-with-resources and Catch-block?
>>
>>
>> The JEP already describes these cases:
>>
>> Unnamed variables
>>
>> The following kinds of declarations can introduce either a named variable
>> (denoted by an identifier) or an unnamed variable (denoted by an
>> underscore):
>>
>>    - A local variable declaration statement in a block (JLS 14.4.2),
>>    - A resource specification of a try-with-resources statement (JLS
>>    14.20.3),
>>    - The header of a basic for statement (JLS 14.14.1),
>>    - The header of an enhanced for loop (JLS 14.14.2),
>>    - An exception parameter of a catch block (JLS 14.20), and
>>    - A formal parameter of a lambda expression (JLS 15.27.1).
>>
>>
>> Try with resources, and catch blocks, are listed as places where you can
>> use unnamed variables.  Am I undersatnding your question properly?
>>
>>
>>
>> To allow:
>>
>>     try (Scope.open()) {
>>         ...
>>     }
>> ---
>>     try { ... }
>>     catch (Exception) { ... }
>>
>> to be implicitly
>>
>>     try (var _ = Scope.open()) {
>>         ...
>>     }
>> ---
>>     try { ... }
>>     catch (Exception _) { ... }
>>
>> Unlike a normal expression, and expression on the RHS of a
>> try-with-resources variable has an explicit context, there is no fear of
>> someone forgetting the result of the expression by mistake.
>>
>> In a Catch block the exception is uniquely accessible through the
>> variable declared in the declaration of the block, so there is no fear that
>> someone will get confused by this implicitness.
>>
>> This implicitness will make stuff like logging context, which is far from
>> a niche use case, much more elegant.
>>
>> On Tue, Mar 21, 2023 at 9:17 PM Mark Reinhold <mark.reinhold at oracle.com>
>> wrote:
>>
>>> https://openjdk.org/jeps/443
>>>
>>>   Summary: Enhance the Java language with unnamed patterns, which match
>>>   a record component without stating the component's name or type,
>>>   and unnamed variables, which can be initialized but not used. Both
>>>   are denoted by an underscore character, _. This is a preview language
>>>   feature.
>>>
>>> - Mark
>>
>>
>>
>> --
>> Holo The Wise Wolf Of Yoitsu
>>
>>
>>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://mail.openjdk.org/pipermail/amber-dev/attachments/20230322/0a76db94/attachment-0001.htm>


More information about the amber-dev mailing list