AVt天堂网 手机版,亚洲va久久久噜噜噜久久4399,天天综合亚洲色在线精品,亚洲一级Av无码毛片久久精品

當(dāng)前位置:首頁(yè) > 科技  > 軟件

我們一起聊聊如何簡(jiǎn)化多個(gè) if 的判斷結(jié)構(gòu)

來(lái)源: 責(zé)編: 時(shí)間:2024-03-29 17:16:57 221觀看
導(dǎo)讀多少算太多?有些人認(rèn)為數(shù)字就是一,你應(yīng)該總是用至少一個(gè)三元運(yùn)算符來(lái)代替任何單個(gè) if 語(yǔ)句。我并不這樣認(rèn)為,但我想強(qiáng)調(diào)一些擺脫常見的 if/else 意大利面條代碼的方法。我相信很多開發(fā)人員很容易陷入 if/else 陷阱,不是因

多少算太多?

有些人認(rèn)為數(shù)字就是一,你應(yīng)該總是用至少一個(gè)三元運(yùn)算符來(lái)代替任何單個(gè) if 語(yǔ)句。我并不這樣認(rèn)為,但我想強(qiáng)調(diào)一些擺脫常見的 if/else 意大利面條代碼的方法。58f28資訊網(wǎng)——每日最新資訊28at.com

我相信很多開發(fā)人員很容易陷入 if/else 陷阱,不是因?yàn)槠渌鉀Q方案的復(fù)雜性,而是因?yàn)樗裱@樣的自然語(yǔ)言模式:if 執(zhí)行此操作, else 執(zhí)行此操作。58f28資訊網(wǎng)——每日最新資訊28at.com

等等,什么是三元運(yùn)算符?

三元運(yùn)算符與 if/else 并沒有革命性的區(qū)別,因?yàn)樗鼈兌际菞l件操作,但三元運(yùn)算符會(huì)返回一個(gè)值,因此可以直接用于賦值。58f28資訊網(wǎng)——每日最新資訊28at.com

const greaterThanFive = (8 > 5) ? 'yep' : 'nope';console.log(greaterThanFive); // 'yep'

基本模式只是一個(gè)條件,如果為真則返回一個(gè)值,如果為假則返回另一個(gè)值。58f28資訊網(wǎng)——每日最新資訊28at.com

(condition) ? isTruthy : isFalsy

IF/ELSE 的替代方案

讓我們從一個(gè)場(chǎng)景開始,逐步了解不同解決方案的示例。58f28資訊網(wǎng)——每日最新資訊28at.com

我們將從用戶輸入中獲取顏色,并需要將它們轉(zhuǎn)換為一些預(yù)設(shè)的顏色代碼來(lái)匹配,以便我們可以更改背景顏色。因此,我們將檢查顏色名稱字符串,并在匹配時(shí)設(shè)置顏色代碼。58f28資訊網(wǎng)——每日最新資訊28at.com

const setBackgroundColor = (colorName) => { let colorCode = ''; if(colorName === 'blue') {  colorCode = '#2196F3'; } else if(colorName === 'green') {  colorCode = '#4CAF50'; } else if(colorName === 'orange') {  colorCode = '#FF9800'; } else if(colorName === 'pink') {  colorCode = '#E91E63'; } else {  colorCode = '#F44336'; }; document.body.style.backgroundColor = colorCode;};

這個(gè) if/else 就完成了工作。但是我們背負(fù)著大量重復(fù)邏輯比較 colorName 和重復(fù)賦值 colorCode。58f28資訊網(wǎng)——每日最新資訊28at.com

Switch  ?

現(xiàn)在我們可以更恰當(dāng)?shù)貙⑵涓臑?nbsp;switch 語(yǔ)句。它更符合我們正在嘗試做的事情的概念;我們有幾種想要匹配的字符串情況,如果沒有一種情況匹配,則有一個(gè)默認(rèn)值。58f28資訊網(wǎng)——每日最新資訊28at.com

const setBackgroundColor = (colorName) => { let colorCode = ''; switch(colorName) {  case 'blue':   colorCode = '#2196F3';   break;  case 'green':   colorCode = '#4CAF50';   break;  case 'orange':   colorCode = '#FF9800';   break;  case 'pink':   colorCode = '#E91E63';   break;  default:   colorCode = '#f44336'; }; document.body.style.backgroundColor = colorCode;};

但是 switch 仍然帶有大量我們可以不需要的樣板文件和重復(fù)代碼。58f28資訊網(wǎng)——每日最新資訊28at.com

Lookup Table  查找表

那么我們真正想要實(shí)現(xiàn)什么目標(biāo)呢?我們需要將十六進(jìn)制顏色代碼分配給顏色名稱,因此讓我們創(chuàng)建一個(gè)將顏色名稱作為鍵、將顏色代碼作為值的對(duì)象。然后我們可以使用 object[key] 通過顏色名稱查找顏色代碼。我們需要一個(gè)默認(rèn)值,因此如果沒有找到鍵,則返回默認(rèn)值的短三元運(yùn)算符將在創(chuàng)建對(duì)象的默認(rèn)部分時(shí)執(zhí)行此操作。58f28資訊網(wǎng)——每日最新資訊28at.com

const colorCodes = { 'blue'   : '#2196F3', 'green'  : '#4CAF50', 'orange' : '#FF9800', 'pink'   : '#E91E63', 'default': '#F44336'};const setBackgroundColor = (colorName) => { document.body.style.backgroundColor = colorCodes[colorName]  ? colorCodes[colorName]  : colorCodes['default'];};

現(xiàn)在我們有了一個(gè)查找表,可以整齊地列出我們的輸入和可能的輸出。58f28資訊網(wǎng)——每日最新資訊28at.com

這并不是奇跡般地減少了“代碼行數(shù)”(LOC)(我們從 15 行減少到 20 行,再減少到 12 行)。事實(shí)上,其中一些解決方案可能會(huì)增加您的 LOC,但我們提高了可維護(hù)性、易讀性,并且實(shí)際上通過僅對(duì)默認(rèn)回退進(jìn)行一次邏輯檢查來(lái)降低復(fù)雜性。58f28資訊網(wǎng)——每日最新資訊28at.com

數(shù)據(jù)的交易邏輯

在 if/else 或 switch 上使用查找表的最重要成就是我們將比較邏輯的多個(gè)實(shí)例轉(zhuǎn)換為數(shù)據(jù)。代碼更具表現(xiàn)力;它將邏輯顯示為操作。代碼更具可測(cè)試性;邏輯被減少了。而且我們的比較更容易維護(hù);它們被合并為純數(shù)據(jù)。58f28資訊網(wǎng)——每日最新資訊28at.com

讓我們將五個(gè)比較邏輯運(yùn)算減少為一個(gè),并將我們的值轉(zhuǎn)換為數(shù)據(jù)。58f28資訊網(wǎng)——每日最新資訊28at.com

場(chǎng)景:我們需要將成績(jī)百分比轉(zhuǎn)換為對(duì)應(yīng)的字母成績(jī)。58f28資訊網(wǎng)——每日最新資訊28at.com

if/else 很簡(jiǎn)單;我們從上到下檢查成績(jī)是否高于或等于匹配字母成績(jī)所需的成績(jī)。58f28資訊網(wǎng)——每日最新資訊28at.com

const getLetterGrade = (gradeAsPercent) => { if(gradeAsPercent >= 90) {  return "A"; } else if(gradeAsPercent >= 80) {  return "B"; } else if(gradeAsPercent >= 70) {  return "C"; } else if(gradeAsPercent >= 60) {  return "D"; } else {  return "F" };};

但我們一遍又一遍地重復(fù)相同的邏輯運(yùn)算。58f28資訊網(wǎng)——每日最新資訊28at.com

因此,讓我們將數(shù)據(jù)提取到一個(gè)數(shù)組中(以保留順序)并將每個(gè)等級(jí)的可能性表示為一個(gè)對(duì)象。現(xiàn)在我們只需對(duì)對(duì)象進(jìn)行一次 >= 比較,并找到數(shù)組中第一個(gè)匹配的對(duì)象。58f28資訊網(wǎng)——每日最新資訊28at.com

const gradeChart = [ {minpercent: 90, letter: 'A'}, {minpercent: 80, letter: 'B'}, {minpercent: 70, letter: 'C'}, {minpercent: 60, letter: 'D'}, {minpercent: 0,  letter: 'F'}];const getLetterGrade = (gradeAsPercent) => { const grade = gradeChart.find(  (grade) => gradeAsPercent >= grade.minpercent ); return grade.letter;};

開始將您的比較想象為數(shù)據(jù)

當(dāng)你需要比較或“檢查”數(shù)值時(shí),很自然地會(huì)想到 if/else,這樣你就可以用語(yǔ)言逐步解決問題。但下一次,請(qǐng)?jiān)囍伎既绾螌⒛闹当硎緸閿?shù)據(jù),并通過簡(jiǎn)化邏輯來(lái)解釋這些數(shù)據(jù)。58f28資訊網(wǎng)——每日最新資訊28at.com

您的代碼最終將變得更具可讀性、可維護(hù)性和目的性,并且其所代表的概念清晰分離。58f28資訊網(wǎng)——每日最新資訊28at.com


原文:https://dreith.com/blog/theres-such-a-thing-as-using-too-many-ifs/58f28資訊網(wǎng)——每日最新資訊28at.com

本文鏈接:http://www.tebozhan.com/showinfo-26-80517-0.html我們一起聊聊如何簡(jiǎn)化多個(gè) if 的判斷結(jié)構(gòu)

聲明:本網(wǎng)頁(yè)內(nèi)容旨在傳播知識(shí),若有侵權(quán)等問題請(qǐng)及時(shí)與本網(wǎng)聯(lián)系,我們將在第一時(shí)間刪除處理。郵件:2376512515@qq.com

上一篇: 深入理解Java虛擬機(jī):堆詳解

下一篇: []byte與string的兩種轉(zhuǎn)換方式和底層實(shí)現(xiàn)

標(biāo)簽:
  • 熱門焦點(diǎn)
  • MIX Fold3包裝盒泄露 新機(jī)本月登場(chǎng)

    小米的全新折疊屏旗艦MIX Fold3將于本月發(fā)布,近日該機(jī)的真機(jī)包裝盒在網(wǎng)上泄露。從圖上來(lái)看,新的MIX Fold3包裝盒在外觀設(shè)計(jì)方面延續(xù)了之前的方案,變化不大,這也是目前小米旗艦
  • 不容錯(cuò)過的MSBuild技巧,必備用法詳解和實(shí)踐指南

    一、MSBuild簡(jiǎn)介MSBuild是一種基于XML的構(gòu)建引擎,用于在.NET Framework和.NET Core應(yīng)用程序中自動(dòng)化構(gòu)建過程。它是Visual Studio的構(gòu)建引擎,可在命令行或其他構(gòu)建工具中使用
  • Java NIO內(nèi)存映射文件:提高文件讀寫效率的優(yōu)秀實(shí)踐!

    Java的NIO庫(kù)提供了內(nèi)存映射文件的支持,它可以將文件映射到內(nèi)存中,從而可以更快地讀取和寫入文件數(shù)據(jù)。本文將對(duì)Java內(nèi)存映射文件進(jìn)行詳細(xì)的介紹和演示。內(nèi)存映射文件概述內(nèi)存
  • 使用LLM插件從命令行訪問Llama 2

    最近的一個(gè)大新聞是Meta AI推出了新的開源授權(quán)的大型語(yǔ)言模型Llama 2。這是一項(xiàng)非常重要的進(jìn)展:Llama 2可免費(fèi)用于研究和商業(yè)用途。(幾小時(shí)前,swyy發(fā)現(xiàn)它已從LLaMA 2更名為L(zhǎng)la
  • .NET 程序的 GDI 句柄泄露的再反思

    一、背景1. 講故事上個(gè)月我寫過一篇 如何洞察 C# 程序的 GDI 句柄泄露 文章,當(dāng)時(shí)用的是 GDIView + WinDbg 把問題搞定,前者用來(lái)定位泄露資源,后者用來(lái)定位泄露代碼,后面有朋友反
  • 小紅書1周漲粉49W+,我總結(jié)了小白可以用的N條漲粉筆記

    作者:黃河懂運(yùn)營(yíng)一條性教育視頻,被54萬(wàn)人“珍藏”是什么體驗(yàn)?最近,情感博主@公主是用鮮花做的,火了!僅僅憑借一條視頻,光小紅書就有超過128萬(wàn)人,為她瘋狂點(diǎn)贊!更瘋狂的是,這
  • 慕巖炮轟抖音,百合網(wǎng)今何在?

    來(lái)源:價(jià)值研究所 作者:Hernanderz“難道就因?yàn)樽约旱囊粋€(gè)產(chǎn)品牛逼了,從客服到總裁,都不愿意正視自己產(chǎn)品和運(yùn)營(yíng)上的問題,選擇逃避了嗎?”這一番話,出自百合網(wǎng)聯(lián)合創(chuàng)
  • 外交部:美方應(yīng)停止在網(wǎng)絡(luò)安全問題上不負(fù)責(zé)任地指責(zé)他國(guó)

      中國(guó)外交部今天(16日)舉行例行記者會(huì)。會(huì)上,有記者問,美國(guó)情報(bào)官員稱,他們正在阻攔來(lái)自中國(guó)以及其他國(guó)家的黑客獲取相關(guān)科研成果。 中方對(duì)此有何評(píng)論?對(duì)此
  • 北京:科技教育體驗(yàn)基地開始登記

      北京“科技館之城”科技教育體驗(yàn)基地登記和認(rèn)證工作日前啟動(dòng)。首批北京科技教育體驗(yàn)基地?cái)M于2023年全國(guó)科普日期間掛牌,后續(xù)還將開展常態(tài)化登記。  北京科技教育體驗(yàn)基
Top