JavaScript:如果函数返回null,则快速返回

时间:2019-06-20 10:01:24

标签: javascript typescript ecmascript-6

有没有办法缩短这段代码?

<!DOCTYPE html>
<html lang="fr">
    <head>
        <meta charset="utf-8">
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
        <meta name="viewport" content="width=device-width, initial-scale=1">
        <title>TITLE</title>
        <link rel="stylesheet" type="text/css" href="css/styles.css">
    </head>

    <body>

    <?php

set_time_limit (0);
$row1= array();
$row =array();
$rowFinal = array();
$testcsv = fopen('file1.csv', 'a+');
$fichierFinal = fopen('totale.csv', 'w');

while($row=fgetcsv($testcsv, 99999,';')){
    $ID_product = intval($row[0]);

    $testcsv2 = fopen('file2.csv', 'a+');
    while($row1=fgetcsv($testcsv2, 99999,';')){
        $ID_combination = intval($row1[0]);
        if($ID_product == $ID_combination ){


            $fprice = $ID_product + $ID_combination;
            //echo $fprice;
            $rowFinal[]= $fprice;
            echo $fprice . "  "; 
        }

    }
    fclose($testcsv2);

}

fputcsv($fichierFinal, $rowFinal, ";");

?>

    </body>
</html>

我的代码中经常包含很多这样的内容,并且愿意做类似的事情:

const result = getResult();
if (!result) {
    return;
}

// Work with result

编辑: 我只想保留可转换输入。

const result = getResult() || return;

// Work with result

我知道我可以给转换器打电话两次。但我想避免这种情况:

const parseInput = (input: string): void => {
   const convertedInput = convert(input);
   if (!convertedInput) {
       return;
   }

   persist(convertedInput);
}

3 个答案:

答案 0 :(得分:1)

您可以做到

const result =  "default value" || getResult();

如果getResult为null或未定义,那么您将获得result作为“默认值”。如果那是您想要的

function getResult() {
   return null;
}
const result =  "okay" || getResult();
console.log(result)

当未定义getResult时,您得到

const result =  "okay" || getResult();
console.log(result)

基本上,语法是

null || undefined || null || 0 || "okay" || "defined" // "okay" 

从左到右,选择最相关的值

答案 1 :(得分:1)

您的代码效果很好,但是,如果您想尝试一下功能样式,则可以将值包装到“ monad”中,仅在值不为零时才调用附加函数。 。这是一个玩具实现:

function maybe(x) {
    return {
        value: x,
        apply(fn) {
            if (this.value)
                this.value = fn(this.value)
            return this;
        }
    }
}

使用此maybe,您的示例如下所示:

const parseInput = input => maybe(convert(input)).apply(persist)

有关更严肃的方法,请参见Oliver's answer

答案 2 :(得分:0)

我真的不知道这个答案是否会给您带来令您满意的东西,但在我看来,这可能为解决未知结果提供了一种可能的解决方案。

Maybe是具有这种内置检查的结构。如果.map()中没有值,则下面的Maybe将不会被调用,因此使用它的代码不需要检查是否存在值。

这确实意味着您必须更改处理这些值的方式,并且,除非您要编写自己的方法,否则这意味着使用库。因此,这并不是一个理想的解决方案,但我希望它至少可以提供一个选择。

const { None, Some } = Monet;

const getResult = () => Math.random() > 0.5
  ? None()
  : Some(1);

const test = getResult()
  .map(x => x + 2);
  
console.dir(test.val);
<script src="https://cdn.jsdelivr.net/npm/monet@0.9.0/dist/monet.min.js"></script>