编写babel-plugin 模拟kotlin中的also等扩展方法

写js的时候,会经常怀念kotlin中的各种奇淫技巧,
特别是also,let之类的扩展方法 以及Elvis操作符等。

显然,为Object添加属性是实现扩展方法的可选方案,
然而,那样做不好。

于是就想到了,借助babel插件,模拟这些kotlin扩展方法

使用方式

一:安装

npm install --save-dev babel-plugin-kotlish-also

二:在.babelrc添加如下plugin

{
  "plugins": [
    "kotlish-also"
  ]
}

使用场景

来看下面这段代码

function foo(o) {
  return o.a().b.c
}

如果我们调试时想要输出 oo.a() 等,
通常情况下,我们不得不做出如下改变

// if we want to print o or o.a etc
function foo(o) {
  console.log(o)
  const t = o.a()
  console.log(t)
  return t.b.c
}

当调试完毕,又要改回原有代码,
也算是相当麻烦,
当使用了 kotlish-also 后,可以写成这样

function fooFull(o) {
  return o.also(i => console.log(i))
    .a().also(i => console.log(i))
    .b.c
}

或者使用'it'省略匿名函数也可以

function foo(o) {
  return o.also(console.log(it))
    .a().also(console.log(it))
    .b.c
}

插件最终会将代码转换成如下形式

function foo(o) {
  return function (_o) {
    (function (it) {
      return console.log(it);
    })(_o);

    return _o;
  }(function (_o) {
    (function (it) {
      return console.log(it);
    })(_o);

    return _o;
  }(o).a()).b.c;
}

除了also,
kotlish-also 同时提供的方法还有let,takeIf,takeUnless等,
它们都是仿照kotlin编写的,其具体语法可参考 kotlin stdlib functions

原文出处
Github

你可能感兴趣的:(编写babel-plugin 模拟kotlin中的also等扩展方法)