Skip to content

Commit

Permalink
explainer: Pipes with method chaining in React example (tc39#236)
Browse files Browse the repository at this point in the history
  • Loading branch information
js-choi committed Sep 29, 2021
1 parent a59d2a1 commit 265f2f0
Showing 1 changed file with 41 additions and 74 deletions.
115 changes: 41 additions & 74 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -157,14 +157,12 @@ console.log(
and a placeholder token (`^`) standing in for the previous operation’s value:

```js
envars
|> Object.keys(^)
|> ^.map(envar =>
`${envar}=${envars[envar]}`)
|> ^.join(' ')
|> `$ ${^}`
|> chalk.dim(^, 'node', args.join(' '))
|> console.log(^);
Object.keys(envars)
.map(envar => `${envar}=${envars[envar]}`)
.join(' ')
|> `$ ${^}`
|> chalk.dim(^, 'node', args.join(' '))
|> console.log(^);
```

Now, the human reader can **rapidly find** the **initial data**
Expand All @@ -188,23 +186,20 @@ For example, using our previous modified
[real-world example from React][react/scripts/jest/jest-cli.js]:

```js
envars
|> Object.keys(^)
|> ^.map(envar =>
`${envar}=${envars[envar]}`)
|> ^.join(' ')
|> `$ ${^}`
|> chalk.dim(^, 'node', args.join(' '))
|> console.log(^);
Object.keys(envars)
.map(envar => `${envar}=${envars[envar]}`)
.join(' ')
|> `$ ${^}`
|> chalk.dim(^, 'node', args.join(' '))
|> console.log(^);
```

…a version using temporary variables would look like this:

```js
const envarKeys = Object.keys(envars)
const envarPairs = envarKeys.map(envar =>
`${envar}=${envars[envar]}`);
const envarString = envarPairs.join(' ');
const envarString = Object.keys(envars)
.map(envar => `${envar}=${envars[envar]}`)
.join(' ');
const consoleText = `$ ${envarString}`;
const coloredConsoleText = chalk.dim(consoleText, 'node', args.join(' '));
console.log(coloredConsoleText);
Expand Down Expand Up @@ -241,11 +236,9 @@ For example, our previous modified
could be re-written like this:
```js
let _;
_ = envars;
_ = Object.keys(_);
_ = _.map(envar =>
`${envar}=${envars[envar]}`);
_ = _.join(' ');
_ = Object.keys(envars)
.map(envar => `${envar}=${envars[envar]}`)
.join(' ');
_ = `$ ${_}`;
_ = chalk.dim(_, 'node', args.join(' '));
_ = console.log(_);
Expand Down Expand Up @@ -331,33 +324,12 @@ Using temporary variables, on the other hand, requires sequences of statements.
<tr>
<td>

```js
const numberedList = input
|> ^.map((each, i) => `${i + 1} - ${each}`)
|> ^.join('\n');
```

</td>
<td>

```js
let _ = input;
_ = _.map((each, i) => `${i + 1} - ${each}`)
_ = _.join('\n')
const numberedList = _;
```

</td>
</tr>
<tr>
<td>

```js
const envVarFormat = vars =>
Object.keys(vars)
|> ^.map(var => `${var}=${vars[var]}`)
|> ^.join(' ')
|> chalk.dim(^, 'node', args.join(' '));
.map(var => `${var}=${vars[var]}`)
.join(' ')
|> chalk.dim(^, 'node', args.join(' '));
```

</td>
Expand All @@ -366,8 +338,8 @@ const envVarFormat = vars =>
```js
const envVarFormat = (vars) => {
let _ = Object.keys(vars);
_ = _.map(var => `${var}=${vars[var]}`);
_ = _.join(' ');
.map(var => `${var}=${vars[var]}`);
.join(' ');
return chalk.dim(_, 'node', args.join(' '));
}
```
Expand Down Expand Up @@ -501,27 +473,23 @@ For example, using our previous modified
[real-world example from React][react/scripts/jest/jest-cli.js]:

```js
envars
|> Object.keys(^)
|> ^.map(envar =>
`${envar}=${envars[envar]}`)
|> ^.join(' ')
|> `$ ${^}`
|> chalk.dim(^, 'node', args.join(' '))
|> console.log(^);
Object.keys(envars)
.map(envar => `${envar}=${envars[envar]}`)
.join(' ')
|> `$ ${^}`
|> chalk.dim(^, 'node', args.join(' '))
|> console.log(^);
```

…a version using F# pipes instead of Hack pipes would look like this:

```js
envars
|> Object.keys
|> x=> x.map(envar =>
`${envar}=${envars[envar]}`)
|> x=> x.join(' ')
|> x=> `$ ${x}`
|> x=> chalk.dim(x, 'node', args.join(' '))
|> console.log;
Object.keys(envars)
.map(envar => `${envar}=${envars[envar]}`)
.join(' ')
|> x=> `$ ${x}`
|> x=> chalk.dim(x, 'node', args.join(' '))
|> console.log;
```

</details>
Expand Down Expand Up @@ -811,13 +779,12 @@ console.log(
);

// With pipes
envars
|> Object.keys(^)
|> ^.map(envar => `${envar}=${envars[envar]}`)
|> ^.join(' ')
|> `$ ${^}`
|> chalk.dim(^, 'node', args.join(' '))
|> console.log(^);
Object.keys(envars)
.map(envar => `${envar}=${envars[envar]}`)
.join(' ')
|> `$ ${^}`
|> chalk.dim(^, 'node', args.join(' '))
|> console.log(^);
```

From [ramda.js][].
Expand Down

0 comments on commit 265f2f0

Please sign in to comment.