精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

請停止使用嵌套的 if,改為此方法

開發 前端
嵌套 if 的典型用例:您希望對某些數據執行各種檢查,以確保其有效,然后再最終對其進行有用的操作。

嵌套 if 的典型用例:您希望對某些數據執行各種檢查,以確保其有效,然后再最終對其進行有用的操作。

不要這樣做!:

// JavaScript


function sendMoney(account, amount) {
  if (account.balance > amount) {
    if (amount > 0) {
      if (account.sender === 'user-token') {
        account.balance -= amount;
        console.log('Transfer completed');
      } else {
        console.log('Forbidden user');
      }
    } else {
      console.log('Invalid transfer amount');
    }
  } else {
    console.log('Insufficient funds');
  }
}

這里有一個更好的方法:

// JavaScript


function sendMoney(account, amount) {
  if (account.balance < amount) {
    console.log('Insufficient funds');
    return;
  }
  if (amount <= 0) {
    console.log('Invalid transfer amount');
    return;
  }
  if (account.sender !== 'user-token') {
    console.log('Forbidden user');
    return;
  }
  account.balance -= amount;
  console.log('Transfer completed');
}

看看它清潔了多少?我們沒有嵌套 if,而是使用多個 if 語句來執行檢查,如果條件不滿足則立即返回。在這種模式中,我們可以將每個 if 語句稱為保護子句。

如果您經常使用 Node.js,您可能在 Express 中間件中看到過以下流程:

// JavaScript


function authMiddleware(req, res, next) {
  const authToken = req.headers.authorization;
  if (!authToken) {
    return res.status(401).json({ error: 'Unauthorized' });
  }
  if (authToken !== 'secret-token') {
    return res.status(401).json({ error: 'Invalid token' });
  }
  if (req.query.admin === 'true') {
    req.isAdmin = true;
  }
  next();
}

這比前面好多了,對吧?:

// JavaScript


function authMiddleware(req, res, next) => {
  const authToken = req.headers.authorization;


  if (authToken) {
    if (authToken === 'secret-token') {
      if (req.query.admin === 'true') {
        req.isAdmin = true;
      }
      return next();
    } else {
      return res.status(401).json({ error: 'Invalid token' });
    }
  } else {
    return res.status(401).json({ error: 'Unauthorized' });
  }
};

你永遠不會超出一層嵌套。我們可以避免回調地獄中出現的混亂情況。

如何將嵌套的 if 轉換為保護子句

這樣做的邏輯很簡單:

1.找到最里面的/成功if

這里我們可以清楚地看到它是 cond3 if。在此之后,如果我們不再進行任何檢查并采取我們一直想要采取的行動。

// JavaScript


function func(cond1, cond2, cond3) {
  if (cond1) {
    if (cond2) {
      if (cond3) {
        console.log('PASSED!');
        console.log('taking success action...');
      } else {
        console.log('failed condition 3');
      }
    } else {
      console.log('failed condition 2');
    }
  } else {
    console.log('failed condition 1');
  }
}

2.將最外層的if取反并返回

否定 if 條件以將 else 語句的主體放在那里并在后面添加 return。

刪除 else 大括號(保留正文,它仍然包含以前嵌套的 if,并將右 if 大括號移到 return 之后。

所以:

// JavaScript


function func(cond1, cond2, cond3) {
  if (!cond1) { // ?? inverted if condition
    // ?? body of former else clause 
    console.log('failed condition 1'); 


    return; // ?? exit on fail
  }


  // ?? remaining nested ifs to convert to guard clauses
  if (cond2) {
    if (cond3) {
      console.log('PASSED!');
      console.log('taking success action...');
    } else {
      console.log('failed condition 3');
    }
  } else {
    console.log('failed condition 2');
  }
}

3. 對每個嵌套的 if 執行同樣的操作,直到成功 if

// JavaScript


function func(cond1, cond2, cond3) {
  if (!cond1) {
    console.log('failed condition 1');
    return;
  }
  if (!cond2) {
    console.log('failed condition 2');
    return;
  }


  // ?? remaining nested ifs to convert
  if (cond3) {
    console.log('PASSED!');
    console.log('taking success action...');
  } else {
    console.log('failed condition 3');
  }
}

最后:

// JavaScript


function func(cond1, cond2, cond3) {
  if (!cond1) {
    console.log('failed condition 1');
    return;
  }
  if (!cond2) {
    console.log('failed condition 2');
    return;
  }
  if (!cond3) {
    console.log('failed condition 3');
    return;
  }
  console.log('PASSED!');
  console.log('taking success action...');
}

提示:

安裝 JavaScript Booster 擴展后,在 VS Code 中反轉 if 語句很容易。

在這里,我們只需將光標放在 if 關鍵字上并激活“顯示代碼操作”命令(默認情況下為 Ctrl + .)

提示:

將保護子句拆分為多個函數以始終避免 else

如果我們在 if/else 中檢查數據后想做其他事情怎么辦?例如:

// JavaScript


function func(cond1, cond2) {
  if (cond1) {
    if (cond2) {
      console.log('PASSED!');
      console.log('taking success action...');
    } else {
      console.log('failed condition 2');
    }
    console.log('after cond2 check');
  } else {
    console.log('failed condition 1');
  }
  console.log('after cond1 check');
}

在此函數中,無論 cond1 的值如何,“after cond1 check”行仍將打印。如果 cond1 為 true,則 cond2 值也類似。

在這種情況下,使用保護子句需要做更多的工作:

如果我們嘗試使用保護子句,我們最終會重復 if/else 檢查之后的行:

function func(cond1, cond2) {
  if (!cond1) {
    console.log('failed condition 1');
    console.log('after cond1 check');
    return;
  }


  if (!cond2) {
    console.log('failed condition 2');
    console.log('after cond2 check');
    console.log('after cond1 check');
    return;
  }
  console.log('PASSED!');
  console.log('taking success action...');
  console.log('after cond2 check');
  console.log('after cond1 check');
}


func(true);

因為必須打印這些行,所以我們在返回之前在保護子句中打印它們。然后,我們在所有(!)以下保護子句中打印它。再次,在主函數體中,如果所有的保護子句都通過了。

那么我們能做些什么呢?我們怎樣才能在使用保護子句的同時仍然堅持 DRY 原則呢?

好吧,我們將邏輯拆分為多個函數:

// JavaScript
function func(cond1, cond2) {
  checkCond1(cond1, cond2);
  console.log('after cond1 check');
}


function checkCond1(cond1, cond2) {
  if (!cond1) {
    console.log('failed condition 1');
    return;
  }
  checkCond2(cond2);
  console.log('after cond2 check');
}


function checkCond2(cond2) {
  if (!cond2) {
    console.log('failed condition 2');
    return;
  }
  console.log('PASSED!');
  console.log('taking success action...');
}

讓我們將其應用到我們之前看到的 Express 中間件中:

// JavaScript


function authMiddleware(req, res, next) {
  checkAuthValidTokenAdmin(req, res, next);
}


function checkAuthValidTokenAdmin(req, res, next) {
  const authToken = req.headers.authorization;
  if (!authToken) {
    return res.status(401).json({ error: 'Unauthorized' });
  }
  checkValidTokenAdmin(req, res, next);
}
function checkValidTokenAdmin(req, res, next) {
  const authToken = req.headers.authorization;
  if (authToken !== 'secret-token') {
    return res.status(401).json({ error: 'Invalid token' });
  }
  checkAdmin(req, res, next);
}
function checkAdmin(req, res, next) {
  if (req.query.admin === 'true') {
    req.isAdmin = true;
  }
  next();
}

在某種程度上,我們用責任鏈模式替換了 if/else 語句。

當然,對于像基本 Express 請求中間件這樣的簡單邏輯來說,這可能有點過分了,但這里的優點是它將每個額外的檢查委托給一個單獨的函數,分離職責并防止過度嵌套。

總結

在代碼中使用嵌套的 if 可能會導致代碼復雜且難以維護。相反,我們可以使用保護子句來使我們的代碼更具可讀性和線性性。我們可以將保護子句應用于不同的場景,并將其拆分為多個功能,以避免重復和職責分割。通過采用這種模式,我們最終會編寫出更干凈、更易于維護的代碼。

責任編輯:華軒 來源: web前端開發
相關推薦

2024-05-10 12:29:30

接口類型

2020-10-23 09:57:23

TypeScriptany代碼

2023-05-05 00:03:29

forEach函數開發

2024-06-03 00:01:00

2020-04-14 12:12:20

JavaScriptIIFE函數

2013-09-22 17:08:37

RSA加密組件

2024-06-17 08:04:23

2024-09-28 10:13:14

2024-09-29 07:00:00

JavaScriptTypeScriptfor...of循環

2017-09-18 13:34:44

Facebook

2025-07-21 00:01:00

2024-05-11 18:48:40

技巧代碼技能

2025-06-09 01:30:00

2020-07-15 10:32:34

5G網絡華為

2022-03-16 00:07:55

OAuth2授權框架

2023-02-24 09:38:22

UbuntuFlatpak

2020-12-28 14:22:33

GoogleChromiumWindows 7

2012-09-19 15:30:59

2024-09-09 08:35:30

2024-09-03 08:36:21

點贊
收藏

51CTO技術棧公眾號

一区二区三区在线免费观看视频 | 久久在线观看视频| 999在线观看| 免费在线国产视频| 久久免费国产精品| 成人精品一区二区三区电影免费| 国产亚洲欧美精品久久久www| 六月丁香久久丫| 欧亚一区二区三区| 丁香色欲久久久久久综合网| 日韩专区一区二区| 国产在线视视频有精品| 欧洲亚洲免费视频| 成年人一级黄色片| 九九热线有精品视频99| 91精品欧美久久久久久动漫| 女性女同性aⅴ免费观女性恋| 最新电影电视剧在线观看免费观看| 国产精品69毛片高清亚洲| 欧美在线观看网址综合| 国内偷拍精品视频| 国产精品美女久久久久久不卡| 日韩一区二区在线看| 黑森林福利视频导航| 久久五月精品中文字幕| 国产精品免费久久久久| 久久久久久国产精品一区| 国产精品欧美激情在线| 另类av一区二区| 欧美国产视频一区二区| 国产精品久久久久久久av| 久久影视三级福利片| 91精品国产全国免费观看 | 日韩中文字幕一区二区三区| 欧美激情综合色| 人人干在线观看| 国产欧美亚洲精品a| 亚洲国产日韩欧美在线图片| 黄色a级三级三级三级| 九九热这里有精品| 91国偷自产一区二区三区成为亚洲经典 | 日韩国产一区久久| 色吊丝在线永久观看最新版本| 国产成人日日夜夜| 午夜伊人狠狠久久| 亚洲成人资源在线| 久久久久久九九| 内射后入在线观看一区| 国产剧情一区在线| 国产日韩欧美自拍| 一区二区视频播放| 日本成人在线电影网| 日本午夜精品理论片a级appf发布| 国产一级久久久| 女生裸体视频一区二区三区 | 欧美在线观看在线观看| 成人免费看黄yyy456| 91免费在线观看网站| 国产chinasex对白videos麻豆| 蜜桃在线一区二区三区| 国产精品女人久久久久久| 一级片在线免费播放| 久久久久久穴| 国产精品免费视频久久久| 亚洲精品国产无码| 轻轻草成人在线| 国产精品视频免费在线| 97精品久久人人爽人人爽| 久久99精品国产.久久久久| 成人网页在线免费观看| 国产老妇伦国产熟女老妇视频| 精品一二三四区| 亚洲一区久久久| 亚洲国产精品国自产拍久久| 成人夜色视频网站在线观看| 好吊色欧美一区二区三区四区| 日本高清中文字幕二区在线| 国产日韩成人精品| 在线观看成人av| av免费在线观| 午夜视频一区在线观看| 成年人免费在线播放| 午夜av成人| 欧美日韩第一区日日骚| 青青草原播放器| 99香蕉久久| 亚洲三级黄色在线观看| av片在线免费看| 欧美在线看片| 51ⅴ精品国产91久久久久久| 中文字幕在线观看免费| 国产福利精品导航| 蜜桃传媒视频第一区入口在线看| 欧美精品电影| 亚洲国产成人av好男人在线观看| 国产精品无码av无码| av在线国产精品| 亚洲国产小视频| 精品一区二区三区蜜桃在线| 欧美激情91| 日本亚洲欧美三级| 国产老头老太做爰视频| 国产亚洲欧美久久久久| 国产日韩欧美一区二区三区| 久久久精品欧美| 日韩成人免费观看| 久久精品国产秦先生| 国产精品夜夜夜一区二区三区尤| 玖玖综合伊人| 一区二区国产视频| 亚洲欧美另类动漫| 成人爽a毛片| 最近2019免费中文字幕视频三| 国产一级av毛片| 蜜桃久久精品一区二区| 国产美女精品在线观看| 免费超碰在线| 色哟哟国产精品免费观看| 伊人五月天婷婷| 国产欧美日韩在线观看视频| 性色av香蕉一区二区| 99在线精品视频免费观看20| 久久久久久久久岛国免费| 成年人看的毛片| 国产一区二区三区免费在线 | 黑人精品一区二区| 国产精品美女久久久久久久久久久| 黄网站欧美内射| 韩国三级大全久久网站| 中日韩美女免费视频网站在线观看| 国产精品16p| 国产在线精品免费| 亚洲高清乱码| 日韩欧美精品一区二区综合视频| 亚洲国产高潮在线观看| 免看一级a毛片一片成人不卡| 麻豆精品在线视频| 日韩jizzz| 自拍偷拍欧美视频| 日韩精品一区二区三区第95| 精品久久免费视频| 高清国产一区二区三区| 欧美一区二区三区综合| 精品午夜视频| 俺去了亚洲欧美日韩| 91在线精品入口| 中文子幕无线码一区tr| 婷婷丁香激情网| 国产影视一区| 国产精品久久999| 精品无吗乱吗av国产爱色| 色综合久久久网| 亚洲自拍偷拍一区二区| 久久精品一区二区三区中文字幕| 久久精品女人的天堂av| 悠悠资源网亚洲青| 亚洲欧美在线x视频| 亚洲图片在线视频| 久久久国产精品麻豆| 国产自偷自偷免费一区| 成人久久综合| 成人a免费视频| 超碰最新在线| 亚洲精品一区二区三区香蕉| 日本一区二区三区免费视频| 91蜜桃免费观看视频| 日本黄网站免费| 青青草国产免费一区二区下载 | 亚洲人成电影网站色| 亚洲av无码不卡| 国产精品不卡一区二区三区| 日日夜夜精品视频免费观看| 国产综合网站| 久久精品国产第一区二区三区最新章节 | 亚洲三级电影| 欧美裸体男粗大视频在线观看| 成人精品在线播放| 黑人与娇小精品av专区| 国产传媒在线看| 国产一区二区0| 欧美精品久久久久久久久久久| 中文有码一区| 国产欧美欧洲在线观看| 搞黄网站在线看| 亚洲人成人99网站| av中文字幕免费| 精品成人乱色一区二区| 亚洲天堂最新地址| 国产成人av在线影院| 日本黄色三级大片| 午夜免费一区| 国产无套精品一区二区| 国产精品天堂蜜av在线播放| 欧美大胆在线视频| 免费人成黄页在线观看忧物| 91精品国产一区二区三区| 天堂网一区二区三区| 中文字幕色av一区二区三区| 伊人网综合视频| 久久99精品国产麻豆不卡| 国产青青在线视频| 午夜精品毛片| 欧洲一区二区在线| 日韩三级网址| 国产精品毛片a∨一区二区三区|国| 最新黄网在线观看| 国产亚洲欧洲在线| 亚洲国产综合网| 欧美视频一二三区| 在线观看国产亚洲| 亚洲男人的天堂网| 亚洲色图欧美色| 99精品在线观看视频| 青青草精品在线| 丝袜美腿高跟呻吟高潮一区| 久久av综合网| 99久久婷婷这里只有精品| 欧美精品一区二区三区四区五区 | 国产精品青草久久久久福利99| 伦理av在线| 久久久成人精品视频| 每日更新在线观看av| 精品sm捆绑视频| 国产精品午夜福利| 欧美性猛交xxxxxx富婆| 青青国产在线观看| 亚洲国产一区二区在线播放| 国产三级aaa| 国产亚洲欧美中文| 女人被狂躁c到高潮| 国产91在线观看丝袜| 91网址在线观看精品| 久久国产福利国产秒拍| 色一情一乱一伦一区二区三区日本| 亚洲免费婷婷| 男人日女人逼逼| 在线亚洲国产精品网站| 中文精品无码中文字幕无码专区| 久久久久午夜电影| 亚洲视频在线二区| 日韩欧美高清在线播放| 日韩在线第一区| 国产尤物久久久| 青青草原亚洲| 国产欧美久久一区二区三区| 日本一区视频在线| 久久av中文| 日本高清久久一区二区三区| 蜜桃一区二区| 欧美精品一区二区三区四区五区| 人妖一区二区三区| 欧美另类高清视频在线| 国产欧美一区二区精品久久久| 欧美精品七区| 国产真实有声精品录音| 日本欧美精品久久久| 大片网站久久| 一区二区三区在线视频看| 天天久久综合| 精品免费久久久久久久| 影音先锋一区| 免费毛片小视频| 日本欧美大码aⅴ在线播放| 最新中文字幕2018| 韩国三级电影一区二区| 免费黄色在线播放| 成人av电影免费观看| 黄色a一级视频| 日本一区二区不卡视频| 紧身裙女教师波多野结衣| 一区二区三区在线观看欧美| 国产精品99精品无码视| 欧美日韩国产一中文字不卡 | 国产一区二区三区的电影| www.亚洲天堂网| 日本美女一区二区三区视频| 一起操在线视频| 国产a视频精品免费观看| 亚洲中文字幕一区| 国产日产欧产精品推荐色| 婷婷国产成人精品视频| 亚洲综合色婷婷| 成人午夜视频在线播放| 欧美日韩中文字幕精品| 精品久久国产视频| 日韩电影免费在线观看中文字幕| 第一福利在线| 欧美激情欧美激情| 国产精品专区免费| 91久久精品国产91性色| 国产精品99久久免费观看| 亚洲a∨一区二区三区| 欧美精品色网| 日韩一级在线免费观看| 国产高清精品久久久久| 精品久久久久久中文字幕人妻最新| 国产精品婷婷午夜在线观看| 久久久久99精品成人片毛片| 日本久久一区二区| 性色av蜜臀av| 国产一区二区日韩精品欧美精品| 青春草免费在线视频| 国产成人拍精品视频午夜网站| 亚洲精品国产九九九| 欧美中文娱乐网| 国产精品v亚洲精品v日韩精品| 亚洲一区二区蜜桃| 99久久久精品| 男女做暖暖视频| 在线视频欧美区| 欧美视频在线观看一区二区三区| 中文字幕欧美精品日韩中文字幕| a√中文在线观看| 91老司机精品视频| 欧美精品一区二区三区精品| www.国产在线视频| 极品少妇一区二区三区精品视频 | 正在播放欧美视频| 蜜桃麻豆av在线| 91在线免费看片| 91亚洲国产成人久久精品| 那种视频在线观看| 不卡一卡二卡三乱码免费网站| 欧美特黄一级片| 在线观看视频一区二区欧美日韩| 秋霞av鲁丝片一区二区| 欧美精品手机在线| 99久久这里有精品| 亚洲高清123| 日本中文字幕一区二区视频| 成人网站免费观看| 亚洲成人免费av| www.av网站| 久久偷看各类女兵18女厕嘘嘘| 色综合天天色| 日韩亚洲视频在线| 久久久久久久欧美精品| 一出一进一爽一粗一大视频| 午夜精品一区二区三区免费视频 | 久久se精品一区二区| 国产在线综合视频| 欧美亚洲动漫另类| wwwww在线观看免费视频| 国产成人精品在线视频| 精品av一区二区| 中文字幕第80页| 国产欧美va欧美不卡在线| 波多野结衣黄色网址| 亚洲性av在线| 成人看片网页| 性欧美精品一区二区三区在线播放| 日韩黄色在线观看| 特级西西人体高清大胆| 欧美日韩国产一级| 看黄网站在线| 亚洲a级在线观看| 中文字幕一区二区三区在线视频| 肉色超薄丝袜脚交| 一区二区三区91| 天堂中文在线官网| 欧洲成人午夜免费大片| 韩日一区二区三区| 乌克兰美女av| 亚洲图片欧美激情| www.xxx国产| 国内精品久久久久| 久操精品在线| www.99av.com| ●精品国产综合乱码久久久久| 精品国产伦一区二区三区| 久久久久久久久久久av| 亚洲永久精品唐人导航网址| 亚欧在线免费观看| 亚洲精品亚洲人成人网在线播放| 蜜桃91麻豆精品一二三区| 97视频免费观看| 日本一区二区免费高清| 91网址在线观看精品| 亚洲成人一区二区在线观看| 久久久久久女乱国产| 91精品久久久久久久久久久| 欧美精品国产| 超碰97人人干| 欧美日韩亚洲国产综合| 免费不卡av| 免费看成人午夜电影| 精品午夜一区二区三区在线观看| 免费一级黄色大片| 亚洲日韩中文字幕| 日本在线视频一区二区三区| 春日野结衣av| 中文字幕日韩一区| 网站黄在线观看| 国产精品视频一| 亚洲第一黄网| 91狠狠综合久久久久久| 精品乱人伦一区二区三区| 色综合天天色| 国产一区二区视频播放| 国产精品久久777777|