Re: [RFC] Enumerations, Round 2

From: Date: Mon, 04 Jan 2021 22:04:16 +0000
Subject: Re: [RFC] Enumerations, Round 2
References: 1 2 3 4 5 6 7 8 9  Groups: php.internals 
Request: Send a blank email to internals+get-112754@lists.php.net to get a copy of this message
> On Jan 4, 2021, at 9:05 AM, Rowan Tommins <rowan.collins@gmail.com> wrote:
> 
> On 04/01/2021 11:15, Markus Fischer wrote:
>> On 03.01.21 12:01, Mike Schinkel wrote:
>>> So in my perfect world this:
>>> 
>>> enum BookingStatus {
>>>       case PENDING;
>>>       case CONFIRMED;
>>>       case CANCELLED;
>>> }
>>> 
>>> Would be equivalent to:
>>> 
>>> enum BookingStatus {
>>>       case PENDING = "PENDING";
>>>       case CONFIRMED = "CONFIRMED";
>>>       case CANCELLED = "CANCELLED";
>>> }
>> 
>> I'm with Mikes' suggesting here, see also my previous messages [1] [2].
>> 
>> I don't know how to back this up with numbers, but the way I see it the majority of
>> use cases will have a benefit of being able to directly use the literal values derived from the
>> lexical ones and the ability to have custom values is feature next to it.
> 
> 
> I would personally be OK with this if it was allowed but opt-in, e.g. adding the ":
> string" would default the values in that way, or even something magic like ": auto".
> 
> I'm still not a fan of having values *always* defined, because I want to be able to pick
> case labels without worrying about whether they make sense as values.

> 
> For instance, there's a similar maintenance issue to named parameters: having a default
> value means if I write "case PENDING;" in v1.0, I can't change that to "case
> PENDING='P';" or "case PENDING=1;" in v1.1, in case somebody is relying on
> the value being 'PENDING', which was never intended.

You make a good point about being able to define without defaults, and for being opt-in instead.

A use-case I am thinking about is a long list of application-specific error codes where you
don't want to have to come up two values for each error code and/or worry about keeping them
the same.


I don't quit get how you are thinking of with ": string"; can you give an example?

Conversely, (something like) this might be a viable way to opt-in default values:

enum defaults BookingStatus {
      case PENDING;
      case CONFIRMED;
      case CANCELLED;
}

-Mike


Thread (52 messages)

« previous php.internals (#112754) next »