guest271314 (2019-06-14T17:38:05.000Z)
Is Case 1 equivalent to a briefer version of

```
   if (userName == undefined) {
       throw new Error(`Argument cannot be null:
${Object.keys({userName})[0]}`);
   }
```

?

If not, how is ```nameof``` different?

What is the difference between the use of
```message.hasOwnProperty(property)```
and ```nameof msg.expiration_utc_time```?

> You get more robust code.

How is "robust" objectively determined?




On Fri, Jun 14, 2019 at 5:21 PM Stas Berkov <stas.berkov at gmail.com> wrote:

> ES can befit from `nameof` feature the same way as TS. There is no TS
> specific in it.
> It was ask to introduce in TS as a workaround since TS is considered as
> extention of ES.
>
> Case 1. Function guard.
> ```
> function func1(param1, param2, param3, userName, param4, param5) {
>    if (userName == undefined) {
>        throw new ArgumentNullError(nameof userName); //
> `ArgumentNullError` is a custom error, derived from `Error`, composes error
> message like "Argument cannot be null: userName".
>    }
> }
> ```
>
> Case 2. Access extended information an object property.
> Assume a function
> ```
> function protoPropertyIsSet(message, property) {
>     return message != null && message.hasOwnProperty(property);
> }
> ```
> Then in code you use it as `if (protoPropertyIsSet(msg,
> "expiration_utc_time")) {... }`.
> Having `nameof` would allow you to do that `if (protoPropertyIsSet(msg,
> nameof msg.expiration_utc_time)) {... }`.
> You get more robust code.
>
> On Fri, Jun 14, 2019 at 5:46 PM Augusto Moura <augusto.borgesm at gmail.com>
> wrote:
>
>> Can you list the benefits of having this operators? Maybe with example
>> use cases
>>
>> If I understand it correctly, the operator fits better in compiled
>> (and typed) languages, most of the use cases don't apply to dynamic
>> Javascript
>> The only legit use case I can think of is helping refactor tools to
>> rename properties (but even mismatch errors between strings and
>> properties names can be caught in compile time using modern
>> Typescript)
>>
>> Em sex, 14 de jun de 2019 às 10:05, Stas Berkov
>> <stas.berkov at gmail.com> escreveu:
>> >
>> > Can we revisit this issue?
>> >
>> >
>> > In C# there is `nameof`, in Swift you can do the same by calling
>> >
>> > ```
>> >
>> > let keyPath = \Person.mother.firstName
>> >
>> > NSPredicate(format: "%K == %@", keyPath, "Andrew")
>> >
>> > ```
>> >
>> > Let's introduce `nameof` in ES, please.
>> >
>> >
>> > Devs from TypeScript don't want to introduce this feature in TypeScript
>> unless it is available in ES (
>> https://github.com/microsoft/TypeScript/issues/1579 )
>> >
>> > This feature is eagarly being asked by TypeScript community.
>> >
>> >
>> > I understand there are couple issues related to `nameof` feature in ES.
>> They are: minification and what to do if user already has `nameof` function.
>> >
>> >
>> > Minification.
>> >
>> > 1. If your code to be minimized be prepared that variable names will
>> also change.
>> >
>> > 2. (just a possibility) Minimizer can have option to replace
>> `nameof(someVar)` with result of `nameof` function.
>> >
>> >
>> >
>> > What if user already has `nameof` function.
>> >
>> > 1. To maintain status quo we can user `nameof` function having priority
>> over newly introduced language feature.
>> >
>> > 2. OR we can use `typeof` syntax, e.g. `nameof msg.userName` (//
>> returns "userName" string)
>> >
>> > _______________________________________________
>> > es-discuss mailing list
>> > es-discuss at mozilla.org
>> > https://mail.mozilla.org/listinfo/es-discuss
>>
>>
>>
>> --
>> Atenciosamente,
>>
>> Augusto Borges de Moura
>>
> _______________________________________________
> es-discuss mailing list
> es-discuss at mozilla.org
> https://mail.mozilla.org/listinfo/es-discuss
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.mozilla.org/pipermail/es-discuss/attachments/20190614/87272f2d/attachment.html>
guest271314 at gmail.com (2019-06-14T17:39:59.400Z)
Is Case 1 equivalent to a briefer version of

```
if (userName == undefined) {
  throw new Error(`Argument cannot be null: ${Object.keys({userName})[0]}`);
}
```

?

If not, how is ```nameof``` different?

At Case 2 what is the difference between the use of
```message.hasOwnProperty(property)```
and ```nameof msg.expiration_utc_time```?

> You get more robust code.

How is "robust" objectively determined?