<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1256">
<meta content="text/html; charset=utf-8">
</head>
<body>
<div>
<div style="font-family:Calibri,sans-serif; font-size:11pt">While its true most IDE's can search for references in strings, `nameof` takes some of the guesswork out of determining whether a substring that matches a symbol refers to the symbol or is merely part
 of the sentence.<br>
<br>
That said, `nameof` is primarily a convenience for an IDE.<br>
<br>
Ron<br>
<br>
Sent from my Windows Phone</div>
</div>
<div dir="ltr">
<hr>
<span style="font-family:Calibri,sans-serif; font-size:11pt; font-weight:bold">From:
</span><span style="font-family:Calibri,sans-serif; font-size:11pt"><a href="mailto:isiahmeadows@gmail.com">Isiah Meadows</a></span><br>
<span style="font-family:Calibri,sans-serif; font-size:11pt; font-weight:bold">Sent:
</span><span style="font-family:Calibri,sans-serif; font-size:11pt">8/8/2015 8:57 PM</span><br>
<span style="font-family:Calibri,sans-serif; font-size:11pt; font-weight:bold">To:
</span><span style="font-family:Calibri,sans-serif; font-size:11pt"><a href="mailto:Ron.Buckton@microsoft.com">Ron Buckton</a>;
<a href="mailto:behrangsa@gmail.com">Behrang Saeedzadeh</a>; <a href="mailto:es-discuss@mozilla.org">
EcmaScript Discuss Mailing List</a></span><br>
<span style="font-family:Calibri,sans-serif; font-size:11pt; font-weight:bold">Subject:
</span><span style="font-family:Calibri,sans-serif; font-size:11pt">Re: What do you think about a C# 6 like nameof() expression for JavaScript.</span><br>
<br>
</div>
<div>
<p dir="ltr">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)? </p>
<br>
<div class="gmail_quote">
<div dir="ltr">On Sat, Aug 8, 2015, 23:12 Ron Buckton <<a href="mailto:Ron.Buckton@microsoft.com">Ron.Buckton@microsoft.com</a>> wrote:<br>
</div>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex; border-left:1px #ccc solid; padding-left:1ex">
<div>
<div>
<div style="font-family:Calibri,sans-serif; font-size:11pt">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:<br>
<br>
```<br>
  ...<br>
  static void Method(string x) {<br>
    if (x == null) throw new ArgumentNullException(nameof(x));<br>
    ...<br>
  }<br>
```<br>
<br>
Now, if I later rename `x`, I don't need to also find any string literals of "x" and manually update them.<br>
<br>
There are other uses of `nameof`, but they all boil down to roughly the same thing.<br>
<br>
Ron</div>
</div>
<div dir="ltr">
<hr>
<span style="font-family:Calibri,sans-serif; font-size:11pt; font-weight:bold">From:
</span><span style="font-family:Calibri,sans-serif; font-size:11pt"><a href="mailto:isiahmeadows@gmail.com" target="_blank">Isiah Meadows</a></span><br>
<span style="font-family:Calibri,sans-serif; font-size:11pt; font-weight:bold">Sent:
</span><span style="font-family:Calibri,sans-serif; font-size:11pt">8/8/2015 7:23 PM</span><br>
<span style="font-family:Calibri,sans-serif; font-size:11pt; font-weight:bold">To:
</span><span style="font-family:Calibri,sans-serif; font-size:11pt"><a href="mailto:behrangsa@gmail.com" target="_blank">Behrang Saeedzadeh</a>;
<a href="mailto:es-discuss@mozilla.org" target="_blank">EcmaScript Discuss Mailing List</a></span><br>
<span style="font-family:Calibri,sans-serif; font-size:11pt; font-weight:bold">Subject:
</span><span style="font-family:Calibri,sans-serif; font-size:11pt">Re: What do you think about a C# 6 like nameof() expression for JavaScript.</span><br>
<br>
</div>
</div>
<div>
<div>
<p dir="ltr">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?</p>
<p dir="ltr">```js<br>
function foo(x) {<br>
  return nameof(x);<br>
}</p>
<p dir="ltr">foo(bar); // "bar";<br>
```</p>
<p dir="ltr">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.</p>
<p dir="ltr">If it is like `typeof`, we now have a breaking change - a keyword that was a valid Identifier before.
</p>
<p dir="ltr">```js<br>
// Error?<br>
function nameof(value) {<br>
  return <a href="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" target="_blank">
value.name</a>;<br>
}</p>
<p dir="ltr">var bar = {name: 2};<br>
nameof(bar); // "bar" or 2?<br>
```</p>
<p dir="ltr">I don't think this is going to work out in practice, not in ECMAScript proper. You might appreciate Sweet.js, though.
</p>
<br>
<div class="gmail_quote">
<div dir="ltr">On Sat, Aug 8, 2015, 21:27 Behrang Saeedzadeh <<a href="mailto:behrangsa@gmail.com" target="_blank">behrangsa@gmail.com</a>> wrote:<br>
</div>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex; border-left:1px #ccc solid; padding-left:1ex">
<div dir="ltr">Forgot to mention that nameof works with local variables too:
<div><br>
</div>
<div>function foo() {</div>
<div> var aNum = 1;</div>
<div> console.log(nameof(aNmum), aNum);</div>
<div>}</div>
<div><br>
</div>
</div>
<br>
<div class="gmail_quote">
<div dir="ltr">On Sat, Aug 8, 2015 at 10:38 AM Behrang Saeedzadeh <<a href="mailto:behrangsa@gmail.com" target="_blank">behrangsa@gmail.com</a>> wrote:<br>
</div>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex; border-left:1px #ccc solid; padding-left:1ex">
<div dir="ltr">
<p style="margin:0px 0px 0.357142857142857em; padding:0px; font-size:14px; line-height:1.42857142857143em; color:rgb(34,34,34); font-family:verdana,arial,helvetica,sans-serif">
So basically we could use it like this:</p>
<p style="margin:0px 0px 0.357142857142857em; padding:0px; font-size:14px; line-height:1.42857142857143em; color:rgb(34,34,34); font-family:verdana,arial,helvetica,sans-serif">
<br>
</p>
<pre style="margin-top:0.357142857142857em; margin-bottom:0.357142857142857em; padding:4px 9px; border:1px solid rgb(238,238,210); border-radius:2px; overflow:auto; color:rgb(34,34,34); line-height:normal"><code style="font-family:monospace,monospace; margin:0px 2px; border:0px; border-radius:2px; word-break:normal; display:block; font-size:1em; line-height:1.42857142857143em; padding:0px!important; background-color:transparent">function aFunc(aParam) {
    throw new Error(nameof(aParam));
}
</code></pre>
<p style="margin:0.357142857142857em 0px; padding:0px; font-size:14px; line-height:1.42857142857143em; color:rgb(34,34,34); font-family:verdana,arial,helvetica,sans-serif">
<br>
</p>
<p style="margin:0.357142857142857em 0px; padding:0px; font-size:14px; line-height:1.42857142857143em; color:rgb(34,34,34); font-family:verdana,arial,helvetica,sans-serif">
and <code style="font-family:monospace,monospace; margin:0px 2px; padding:0px 4px; border:1px solid rgb(238,238,210); border-radius:2px; white-space:nowrap; word-break:normal; line-height:1em">nameof(aParam)</code> would return the string <code style="font-family:monospace,monospace; margin:0px 2px; padding:0px 4px; border:1px solid rgb(238,238,210); border-radius:2px; white-space:nowrap; word-break:normal; line-height:1em">"aParam"</code>.</p>
<p style="margin:0.357142857142857em 0px; padding:0px; font-size:14px; line-height:1.42857142857143em; color:rgb(34,34,34); font-family:verdana,arial,helvetica,sans-serif">
<br>
</p>
<p style="margin:0.357142857142857em 0px; padding:0px; font-size:14px; line-height:1.42857142857143em; color:rgb(34,34,34); font-family:verdana,arial,helvetica,sans-serif">
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.</p>
</div>
<div dir="ltr">-- <br>
</div>
<div dir="ltr">Best regards,
<div>Behrang Saeedzadeh</div>
</div>
</blockquote>
</div>
<div dir="ltr">-- <br>
</div>
<div dir="ltr">Best regards,
<div>Behrang Saeedzadeh</div>
</div>
_______________________________________________<br>
es-discuss mailing list<br>
<a href="mailto:es-discuss@mozilla.org" target="_blank">es-discuss@mozilla.org</a><br>
<a href="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" rel="noreferrer" target="_blank">https://mail.mozilla.org/listinfo/es-discuss</a><br>
</blockquote>
</div>
</div>
</div>
</blockquote>
</div>
</div>
</body>
</html>