To be honest, most larger IDEs also search for references in strings, and
even if it doesn't, any decent editor can do a regex replace of
`identifierName` without problem. I don't see much of a problem here. Also,
do you know of any other language that has this at the syntax level (not
macro)?

On Sat, Aug 8, 2015, 23:12 Ron Buckton <ron.buck...@microsoft.com> wrote:

> One of the main purposes of the `nameof` operator is to provide the string
> value of a symbol, so that if you perform a "Rename" refactoring of that
> symbol that the change is also reflected. This is primarily for cases where
> you perform precondition assertions tied to an argument:
>
> ```
>   ...
>   static void Method(string x) {
>     if (x == null) throw new ArgumentNullException(nameof(x));
>     ...
>   }
> ```
>
> Now, if I later rename `x`, I don't need to also find any string literals
> of "x" and manually update them.
>
> There are other uses of `nameof`, but they all boil down to roughly the
> same thing.
>
> Ron
> ------------------------------
> From: Isiah Meadows <isiahmead...@gmail.com>
> Sent: ‎8/‎8/‎2015 7:23 PM
> To: Behrang Saeedzadeh <behran...@gmail.com>; EcmaScript Discuss Mailing
> List <es-discuss@mozilla.org>
> Subject: Re: What do you think about a C# 6 like nameof() expression for
> JavaScript.
>
> Call me crazy, but I don't see anything that couldn't be done more
> concisely with a string literal. Is it supposed to be able to do this?
>
> ```js
> function foo(x) {
>   return nameof(x);
> }
>
> foo(bar); // "bar";
> ```
>
> In that case, the engine would have to keep track of usages as well, in a
> similar sense as `arguments.callee`, and if it were a function, it would
> make optimization quite difficult, as engines don't have the capacity to
> statically analyze that such a function is used.
>
> If it is like `typeof`, we now have a breaking change - a keyword that was
> a valid Identifier before.
>
> ```js
> // Error?
> function nameof(value) {
>   return value.name
> <https://na01.safelinks.protection.outlook.com/?url=http%3a%2f%2fvalue.name&data=01%7c01%7cron.buckton%40microsoft.com%7ca2e2c4d35400435810d008d2a061897d%7c72f988bf86f141af91ab2d7cd011db47%7c1&sdata=pwV45avF9RX6COETpoLIY4EF%2bmCVmk6kEEmLc2JXSCY%3d>
> ;
> }
>
> var bar = {name: 2};
> nameof(bar); // "bar" or 2?
> ```
>
> I don't think this is going to work out in practice, not in ECMAScript
> proper. You might appreciate Sweet.js, though.
>
> On Sat, Aug 8, 2015, 21:27 Behrang Saeedzadeh <behran...@gmail.com> wrote:
>
>> Forgot to mention that nameof works with local variables too:
>>
>> function foo() {
>>  var aNum = 1;
>>  console.log(nameof(aNmum), aNum);
>> }
>>
>>
>> On Sat, Aug 8, 2015 at 10:38 AM Behrang Saeedzadeh <behran...@gmail.com>
>> wrote:
>>
>>> So basically we could use it like this:
>>>
>>>
>>> function aFunc(aParam) {
>>>     throw new Error(nameof(aParam));
>>> }
>>>
>>>
>>> and nameof(aParam) would return the string "aParam".
>>>
>>>
>>> This is possible to do even right now using arguments.callee and some
>>> hacky code, but having it built-in to spec would be nicer IMHO.
>>> --
>>> Best regards,
>>> Behrang Saeedzadeh
>>>
>> --
>> Best regards,
>> Behrang Saeedzadeh
>> _______________________________________________
>> es-discuss mailing list
>> es-discuss@mozilla.org
>> https://mail.mozilla.org/listinfo/es-discuss
>> <https://na01.safelinks.protection.outlook.com/?url=https%3a%2f%2fmail.mozilla.org%2flistinfo%2fes-discuss&data=01%7c01%7cron.buckton%40microsoft.com%7ca2e2c4d35400435810d008d2a061897d%7c72f988bf86f141af91ab2d7cd011db47%7c1&sdata=7DHMx5gTd2OexSlKscSrKlMIxABMUkOKRC%2fuCbc6pWk%3d>
>>
>
_______________________________________________
es-discuss mailing list
es-discuss@mozilla.org
https://mail.mozilla.org/listinfo/es-discuss

Reply via email to