if it helps, you can already "pattern-match" using string-concat like this
full-working-demo [1]
derived from a closed-source real-world example.
```html
<style>
*,
*:after,
*:before {
box-sizing: border-box;
}
body { background: #eee; display: flex; flex-flow: column; font-family: Arial,
Helvetica, sans-serif; margin: 0; padding: 10px;
}
body > div { background: #fff; border: 1px solid #ddd; margin-top: 10px;
padding: 10px; }
body > div:first-child { margin-top: 0; }
#panelBody1 { border: 0; display: flex; flex: 1; padding: 0; }
#panelBody1 > div { border: 1px solid #ddd; padding: 10px; }
#panelBody1 > #borderResize1 { background: #fbb; border: 0; cursor: ew-resize;
padding: 5px; }
</style>
<div id="header1">
#header1 - drag
<span style="background: #fbb; padding: 2px;">red-bar</span>
between #panelSidebar1 and #panelSidebar2 to resize
</div>
<div id="panelBody1">
<div id="panelSidebar1">#panelSidebar1 (width: <span>0</span>px)</div>
<div id="borderResize1"></div>
<div id="panelContent1" style="flex: 1;">#panelContent1 (width:
<span>0</span>px)</div>
</div>
<div id="footer1">#footer1</div>
<script>
/* jslint browser */
(function () {
"use strict";
var local;
local = {};
// init event-handling - resize panel
local.domOnEventDrag = function (event) {
/*
* this function will handle <event> to drag-and-drop
*/
// "pattern-match" with string-concat
switch (Boolean(local.domOnEventDragEvent) + "." + event.type) {
case "false.mousedown":
local.domOnEventDragEvent = event;
return;
case "true.mouseenter":
case "true.mouseup":
local.domOnEventDragEvent = null;
return;
case "true.mousemove":
switch (local.domOnEventDragEvent.target.id) {
case "borderResize1":
event.preventDefault();
event.stopPropagation();
document.querySelector(
"#panelContent1"
).style.width = "0";
document.querySelector(
"#panelSidebar1"
).style.width = event.x + "px";
local.domOnEventWindowResize();
// display resize-info
document.querySelectorAll(
"#panelContent1 span, #panelSidebar1 span"
).forEach(function (elem) {
elem.textContent = elem.parentElement.offsetWidth;
});
return;
}
return;
}
};
Array.from(document.querySelectorAll(
"#borderResize1"
)).forEach(function (elem) {
elem.addEventListener("mousedown", local.domOnEventDrag);
});
document.addEventListener("mouseenter", local.domOnEventDrag);
document.body.addEventListener("mousemove", local.domOnEventDrag);
document.body.addEventListener("mouseup", local.domOnEventDrag);
// init event-handling - resize window
local.domOnEventWindowResize = function () {
/*
* this function will handle <event> to resize window
*/
// resize body
document.body.style.height = window.innerHeight + "px";
// resize - #panelBody1 > div
document.querySelectorAll(
"#panelBody1 > div"
).forEach(function (elem) {
elem.height = elem.parentElement.clienthHeight + "px";
});
// display resize-info
document.querySelectorAll(
"#panelContent1 span, #panelSidebar1 span"
).forEach(function (elem) {
elem.textContent = elem.parentElement.offsetWidth;
});
};
window.addEventListener("resize", local.domOnEventWindowResize);
local.domOnEventWindowResize();
}());
</script>
```
[1] using pattern-match to resize html-panels
https://codepen.io/kaizhu256/pen/rRBLLP
> On 23 Oct 2018, at 03:57, Cyril Auburtin <[email protected]> wrote:
>
> I suggested it in https://github.com/tc39/proposal-pattern-matching/issues/48
> <https://github.com/tc39/proposal-pattern-matching/issues/48>, I think zkat
> extended the proposal since with
> https://github.com/tc39/proposal-pattern-matching/blob/latest/TO_INFINITY_AND_BEYOND.md
>
> <https://github.com/tc39/proposal-pattern-matching/blob/latest/TO_INFINITY_AND_BEYOND.md>
> On Mon, Oct 22, 2018 at 10:35 PM Isiah Meadows <[email protected]
> <mailto:[email protected]>> wrote:
> You might want to check out the proposal's repo and make the suggestion there
> (it's been considered already IIRC, and I believe it was already noted in the
> repo as a possible future extension):
> https://github.com/tc39/proposal-pattern-matching
> <https://github.com/tc39/proposal-pattern-matching>
> On Mon, Oct 22, 2018 at 15:38 Matthew Robb <[email protected]
> <mailto:[email protected]>> wrote:
> Perhaps the following form could eventually make sense for pattern matching
> in function declarations:
>
> ```js
> function sum_list(input, result = 0) case (input) {
> when [head, ...tail] -> {
> return sum_list(input, result + head);
> },
> when _ -> { return result; }
> }
> ```
>
>
> - Matthew Robb
>
>
> On Mon, Oct 22, 2018 at 8:48 AM Isiah Meadows <[email protected]
> <mailto:[email protected]>> wrote:
> As mentioned previously, the pattern matching proposal does a lot to help
> here:
>
> ```js
> function sum_list(input, result = 0) {
> case (input) {
> when [head, ...tail] -> return sum_list(input, result + head),
> when _ -> return result,
> };
> }
> ```
>
> -----
>
> Isiah Meadows
> [email protected] <mailto:[email protected]>
> www.isiahmeadows.com <http://www.isiahmeadows.com/>
>
> On Mon, Oct 22, 2018 at 3:08 AM bishwendu kundu <[email protected]
> <mailto:[email protected]>> wrote:
> >
> > Hi Kai Zhu,
> >
> > I agree with you the new proposition should be of value to a web developer
> > in daily work. If we observe the pattern it more closely resembles a more
> > declarative form of solution implementation which is easy to code and
> > understand. For example lets consider below piece of code:
> > ```js
> > function sum_list(input, result){
> > if(!input.length)
> > return result;
> > [head, ...input] = input;
> > return sum_list(input, result + head);
> > }
> > ```
> > Now the same code in the new proposal form
> >
> > ```js
> > function sum_list([head, ...tail], result){
> > result = result + head;
> > return sum_list(tail, result);
> > }
> >
> > function sum_list([], result){
> > return result;
> > }
> > ```
> >
> > This declarative model of coding also forces an immutable form of state
> > management allowing for removing a family of bugs.
> >
> > Thanks & Regards,
> > Bishwendu.
> >
> > On Wed, Oct 17, 2018 at 12:57 PM kai zhu <[email protected]
> > <mailto:[email protected]>> wrote:
> >>
> >> hi Bishwendu, javascript is first-and-foremost a tool designed for
> >> web-product-development, a growing field that has eclipsed low-level
> >> general-purpose programming (where jobs are harder and harder to find) in
> >> the IT industry.
> >>
> >> you need to give compelling reasons (for such significant language-change)
> >> why i, a web-developer would benefit from from having overloaded-functions
> >> in my (mostly expendable-code) web-projects, as opposed to creating
> >> confusion and maintennance-headaches, when i typically have to rewrite
> >> code multiple-times during the web-integration process.
> >>
> >> kai zhu
> >> [email protected] <mailto:[email protected]>
> >>
> >>
> >>
> >> On 17 Oct 2018, at 12:23 PM, bishwendu kundu <[email protected]
> >> <mailto:[email protected]>> wrote:
> >>
> >> Hello All,
> >>
> >> I have been a great fan of the evolution of JavaScript in the recent past.
> >> The language is steadily closing the gap to ideal functional paradigm. One
> >> of the things that I have liked the most about languages like
> >> Erlang/Elixir/Haskell is their ability to define functions with same name
> >> and different airty. The decision of invoking the correct
> >> function-argument pattern is dependent on the invocation of the function.
> >> Implicit pattern matching in aforementioned languages helps avoid costly
> >> cognitive loads introduced by explicit if/else based pattern of logic flow
> >> branching.
> >>
> >> The greatest power of the pattern matching which amazed me was, dropping
> >> the whole of looping construct, altogether. Elixir/Erlang have no LOOPS.
> >> Stack based recursive calls combined with JavaScript's closures suddenly
> >> strikes me as a very powerful programming model that not only increases
> >> readability of code but also promotes immutability of the data structures
> >> in use. The loops would continue to exist but more modern codes can be
> >> written leveraging the recursive model of JavaScript.
> >>
> >> With de-structuring of arrays & objects already in place in JavaScript,
> >> pattern-matching of functions can fit right in perfectly, thereby taking
> >> JavaScript another step closer to ideal functional programming model.
> >>
> >> Looking forward to your response.
> >>
> >> Thanks & Regards,
> >> Bishwendu.
> >> _______________________________________________
> >> es-discuss mailing list
> >> [email protected] <mailto:[email protected]>
> >> https://mail.mozilla.org/listinfo/es-discuss
> >> <https://mail.mozilla.org/listinfo/es-discuss>
> >>
> >>
> > _______________________________________________
> > es-discuss mailing list
> > [email protected] <mailto:[email protected]>
> > https://mail.mozilla.org/listinfo/es-discuss
> > <https://mail.mozilla.org/listinfo/es-discuss>
> _______________________________________________
> es-discuss mailing list
> [email protected] <mailto:[email protected]>
> https://mail.mozilla.org/listinfo/es-discuss
> <https://mail.mozilla.org/listinfo/es-discuss>
> _______________________________________________
> es-discuss mailing list
> [email protected] <mailto:[email protected]>
> https://mail.mozilla.org/listinfo/es-discuss
> <https://mail.mozilla.org/listinfo/es-discuss>
> _______________________________________________
> es-discuss mailing list
> [email protected]
> https://mail.mozilla.org/listinfo/es-discuss
_______________________________________________
es-discuss mailing list
[email protected]
https://mail.mozilla.org/listinfo/es-discuss