i'm not trolling. unlike javascript, most other languages deal near exclusively 
with blocking-code, which is only applicable to low-level library-code in 
javascript (that pretty much anyone can write).  at higher-level 
integration-stuff dealing with non-blocking io, these blocking-code 
design-patterns from other languages are pretty-much useless.  like say … 
*block-level scoping*, because it doesn’t mix well with closures, which are 
heavily used in integration-level javascript to keep track of states for 
non-blocking code.

e.g.
```
/*jslint
    bitwise: true,
    browser: true,
    maxerr: 8,
    maxlen: 200,
    node: true,
    nomen: true,
    regexp: true,
    stupid: true
*/
(function () {
    'use strict';

    var chunkList, request, response, timerTimeout;
    chunkList = [];
    // auto-timeout and cleanup closure-vars request and response after 30000 ms
    timerTimeout = setTimeout(function () {
        try {
            request.destroy();
        } catch (ignore) {
        }
        try {
            response.destroy();
        } catch (ignore) {
        }
        console.error('timeout error after 30000 ms');
    }, 30000);
    request = require('https').request(
        require('url').parse('https://www.example.com'),
        function (_response) {
            response = _response;
            response.on('data', function (chunk) {
                // append chunk to closure-var chunkList
                chunkList.push(chunk);
            });
            response.on('end', function () {
                // print closure-var chunkList to stdout
                console.log(Buffer.concat(chunkList).toString());
                // cancel closure-var timerTimeout,
                // after request successfully completes
                clearTimeout(timerTimeout);
            });
        }
    );
    request.end();



/*
output:

<!doctype html>
<html>
<head>
    <title>Example Domain</title>
...
</head>

<body>
<div>
    <h1>Example Domain</h1>
    <p>This domain is established to be used for illustrative examples in 
documents. You may use this
    domain in examples without prior coordination or asking for permission.</p>
    <p><a href="http://www.iana.org/domains/example";>More information...</a></p>
</div>
</body>
</html>
*/
}());
```

> On Mar 22, 2018, at 2:31 AM, Christopher Thorn <morphc...@gmail.com> wrote:
> 
> This is just trolling that seems intended to derail the discussion.
> 
> On Wed, Mar 21, 2018 at 10:21 AM, kai zhu <kaizhu...@gmail.com 
> <mailto:kaizhu...@gmail.com>> wrote:
> how is any of this less-confusing than a simple style-guide of pre-declaring 
> all variables @ the beginning of a function?
> again, there’s zero legitimate reason why javascript even needs block-level 
> scoping of variables (and arguing because other languages have it is not a 
> reason).  you're just creating more needless javascript style-guide variance 
> that further confuses your team-members / project-successor.
> 
> ```
> /*jslint
>     bitwise: true,
>     browser: true,
>     maxerr: 8,
>     maxlen: 100,
>     node: true,
>     nomen: true,
>     regexp: true,
>     stupid: true
> */
> (function () {
>     'use strict';
>     // es5 best-practice of declaring all variables at beginning of function,
>     // and runtime-checked by 'use strict' pragma
>     var bar,
>         c0,
>         c1,
>         foo,
>         getTeamArray,
>         people,
>         v1,
>         xx,
>         yy;
> 
> 
> 
>     getTeamArray = function () {
>         return [1, 2, 3];
>     };
>     people = getTeamArray();
>     if (people.length > 2) {
>         console.log("it's a crowd", people.join(','));
>     } else if (people.length === 2) {
>         console.log("just a pair");
>     } else if (people.length === 1) {
>         console.log("solo");
>     } else {
>         console.log("none");
>     }
>     // output: it's a crowd 1,2,3
> 
> 
> 
>     bar = function () {
>         return 0;
>     };
>     foo = function () {
>         return 50;
>     };
>     (function () {
>         xx = foo();
>         if (xx < 50) {
>             console.log(xx); // yy is not available here
>             return;
>         }
>         yy = bar();
>         if (yy > 0) {
>             console.log(yy);
>             return;
>         }
>         // else
>         console.log(xx, yy);
>     }());
>     // output: 50 0
> 
> 
> 
>     c0 = null;
>     c1 = function (xx) {
>         return xx;
>     };
>     v1 = false;
>     // 'unset' xx
>     xx = undefined;
>     (function () {
>         if (c0) {
>             console.log(c0); // xx is not available here
>             return;
>         }
>         xx = v1;
>         if (c1(xx)) {
>             console.log(xx);
>             return;
>         }
>         // else
>         console.log(c0, xx);
>     }());
>     // output: null false
> }());
> ```
> 
>> On Mar 22, 2018, at 1:56 AM, Mike Samuel <mikesam...@gmail.com 
>> <mailto:mikesam...@gmail.com>> wrote:
>> 
>> 
>> 
>> On Wed, Mar 21, 2018 at 11:02 AM, Rodrigo <rodrigol...@gmail.com 
>> <mailto:rodrigol...@gmail.com>> wrote:
>> My proposal is to keep it simple and implement the if-assignment `if(
>> const o = ...; ! o ) { ... }` mimicking the `for(;;)` assignment
>> behavior.
>> 
>> Fair enough.  If the assignment is separate from the condition, then none of 
>> that matters.
>> That question only pertained to let/const declarations used for their value.
>> 
>> That way we can scope a variable to the `if` block and we can do that
>> *separately* from assignment.
>> 
>> Assigning and comparing at the same time opens up all sort of oddities
>> as the variable transitions from lvalue to comparison operand. This
>> already exists in the language and is definitely not good practice.
>> 
>> `if.value`, as proposed earlier is a bombshell similar to `this`,
>> which could easily get scrambled with the introduction of additional
>> `if` blocks.
>> 
>> The beauty of `if(;)` is that it makes scope blocks possible while
>> avoiding the asymmetric behavior caused by assigning and comparing in
>> one go.
>> 
>>         if( let people=getTeamArray(); people.length > 2 ) {
>>            console.log("it's a crowd", people.join(','));
>>        }
>>        else if( people.length == 2 ) {
>>            console.log("just a pair");
>>        }
>>        else if( people.length == 1 {
>>            console.log("solo");
>>        }
>>        else {
>>            console.log("none");
>>        }
>> 
>> IIUC, it sounds like the right side could be syntactic sugar for the left 
>> side.
>> If that's right, what about the left side warrants new syntax to enable the 
>> right?
>>  
>> 
>> Current      Proposed
>>   {
>>        let people = getTeamArray();
>>        if( people.length > 2 ) {
>>            console.log("it's a crowd", people.join(','));
>>        }
>>        else if( people.length == 2 ) {
>>            console.log("just a pair");
>>        }
>>        else if( people.length == 1 {
>>            console.log("solo");
>>        }
>>        else {
>>            console.log("none");
>>        }
>>   }
>>    if( let people = getTeamArray(); people.length > 2 ) {
>>        console.log("it's a crowd", people.join(','));
>>    }
>>    else if( people.length == 2 ) {
>>        console.log("just a pair");
>>    }
>>    else if( people.length == 1 {
>>        console.log("solo");
>>    }
>>    else {
>>        console.log("none");
>>    }
>> 
>> I can imagine that it might be nice when used later in an else-if chain:
>> 
>> if (c0) {
>>   ...
>> } else (let x = v1, c1(x)) {
>>   ...
>> } else ...
>> 
>> vs
>> 
>> if (c0) {
>>   ...
>> } else {
>>   let x = v1;
>>   if (c1(x)) {
>>     ...
>>   } else ...
>> }
>> 
>> Can you point at any particularly tricky code that could be simplified by 
>> this?
>> _______________________________________________
>> es-discuss mailing list
>> es-discuss@mozilla.org <mailto:es-discuss@mozilla.org>
>> https://mail.mozilla.org/listinfo/es-discuss 
>> <https://mail.mozilla.org/listinfo/es-discuss>
> 
> _______________________________________________
> es-discuss mailing list
> es-discuss@mozilla.org <mailto:es-discuss@mozilla.org>
> https://mail.mozilla.org/listinfo/es-discuss 
> <https://mail.mozilla.org/listinfo/es-discuss>
> 
> 

_______________________________________________
es-discuss mailing list
es-discuss@mozilla.org
https://mail.mozilla.org/listinfo/es-discuss

Reply via email to