Implicitly return function result
// Before
function Pi() {
3.14;
}
// After
function Pi() {
return 3.14;
}
// Before
function abs(n) {
if (n > 0) {
1;
} else if (n < 0) {
-1;
} else {
0;
}
}
// After
function abs(n) {
if (n > 0) {
return 1;
} else if (n < 0) {
return -1;
} else {
return 0;
}
}
// Before
function sum(array) {
let result = 0;
for (let i = 0; i < array.length; i++) {
result += array[i]
}
}
// After
function sum(array) {
var _ret;
let result = 0;
for (let i = 0; i < array.length; i++) {
_ret = result += array[i];
}
return _ret;
}
// Before
function classFactory() {
class Thingy extends Thing {
constructor() {
super();
}
fn() {
() => 1;
}
static fn() {
class Other {};
}
}
}
// After
function classFactory() {
return class Thingy extends Thing {
constructor() {
return super();
}
fn() {
return () => 1;
}
static fn() {
return class Other {};
}
}
}
Your compiling enviroment must have support for:
$ npm install --save-dev babel-plugin-implicit-return
.babelrc
{
"plugins": ["implicit-return"]
}
$ babel --plugins implicit-return script.js
require("babel-core").transform("code", {
plugins: ["implicit-return"]
});
Due to JavaScript syntax limitations this plugin can't make a function to implicitly return:
This won't work:
function getObject() {
{ key1: value1, key2: value2 }; // Syntax Error
}
There're two workarounds:
// first - assign an object to a variable/constant
function getObject() {
const obj = { key1: value1, key2: value2 };
}
// second - wrap an object literal with braces
function getObject() {
({ key1: value1, key2: value2 });
}
This won't work:
function getFunction() {
function() {}; // Syntax Error
}
There're four workarounds:
// first - use arrow function
function getFunction() {
() => {};
}
// second - give your function a name
function getObject() {
function fn() {};
}
// third - assign a function to a variable/constant
function getObject() {
const fn = function() {};
}
// fourth - wrap a function with braces
function getObject() {
(function() {});
}
MIT