国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

提升代碼可讀性,減少 if-else 的幾個小技巧

開發 前端
本文主要是向大家傳遞一種思想,我們有很多的方法去優化我們的代碼,提高我們代碼的可讀性。對if else并沒有歧視的意思,只是希望在大家以后的代碼中不僅僅只有if else。

前言

相信大家或多或少都接觸過擁有龐大 if else 的項目代碼吧,多重嵌套的 if else 在維護的時候真的讓人很惱火,有時候一個 bug 排查下來,嚴重感覺身體被掏空。

本文并未有消滅或歧視 if else的意思,if else 的好用都知道,這里只是在某些特定場景為大家額外提供一種思路,增加我們代碼的可讀性??。

短路運算

Javascript 的邏輯或 || 的短路運算有時候可以用來代替一些比較簡單的 if else

邏輯或|| 的短路運算:若左邊能轉成true,返回左邊式子的值,反之返回右邊式子的值。

下面用一個簡單的案例來表述

let c
if(a){
c = a
} else {
c = b
}

大家看著上面的代碼會難受嘛(本人有一丟丟的強迫癥??),明明就是一個很簡單的判斷卻需要寫好幾行代碼才能實現。這個時候我們就可以用短路運算去簡化我們的代碼啦??。

let c = a || b

這樣看起來是不是就簡潔了很多??。

三元運算符

三元運算符我覺得大家應該都很熟悉吧,很多時候簡單的一些判斷我們都可以使用三元運算符去替代 if else,這里只推薦 一層 三元運算符,因為多層嵌套的三元運算符也不具備良好的可讀性??。

例子:條件為 true 時返回1,反之返回0:

const fn = (nBoolean) {
if (nBoolean) {
return 1
} else {
return 0
}

}

// 使用三元運算符
const fn = (nBoolean) {
return nBoolean ? 1 : 0
}

三元運算符使用的地方也比較多,比如:條件賦值,遞歸...

// num值在nBoolean為true時為10,否則為5
let num = nBoolean ? 10 : 5

// 求0-n之間的整數的和
let sum = 0;
function add(n){
sum += n
return n >= 2 ? add(n - 1) : result;
};
let num = add(10);//55

switch case

上述的兩種方式:短路運算跟三元運算雖然很好用,代碼也很簡潔,不過都只能用于簡單的判斷,遇到多重條件判斷就不能使用了??。

對于 switch case,雖然它的可讀性確實比 else if 更高,但是我想大家應該都覺得它寫起來比較麻煩吧??(反正我覺得很麻煩??)。

例:有A、B、C、D四種種類型,在A、B的時候輸出1,C輸出2、D輸出3,默認輸出0。

let type = 'A'

//if else if
if (type === 'A' || type === 'B') {
console.log(1);
} else if (type === 'C') {
console.log(2);
} else if(type === 'D') {
console.log(3);
} else {
console.log(0)
}

//switch case
switch (type) {
case 'A':
case 'B':
console.log(1)
break
case 'C':
console.log(2)
break
case 'D':
console.log(3);
break;
default:
console.log(0)
}

對象配置/策略模式

對象配置看起來跟 策略模式 差不多,都是根據不同得參數使用不同得數據/算法/函數。

策略模式就是將一系列算法封裝起來,并使它們相互之間可以替換。被封裝起來的算法具有獨立性,外部不可改變其特性。

接下來我們用對象配置的方法實現一下上述的例子

let type = 'A'

let tactics = {
'A': 1,
'B': 1,
'C': 2,
'D': 3,
default: 0
}
console.log(tactics[type]) // 1

接下來用幾個例子讓大家更加熟悉一點。

案例1 商場促銷價

根據不同的用戶使用不同的折扣,如:普通用戶不打折,普通會員用戶9折,年費會員8.5折,超級會員8折。

使用if else實現

// 獲取折扣 --- 使用if else
const getDiscount = (userKey) => {
if (userKey === '普通會員') {
return 0.9
} else if (userKey === '年費會員') {
return 0.85
} else if (userKey === '超級會員') {
return 0.8
} else {
return 1
}
}
console.log(getDiscount('普通會員')) // 0.9

使用對象配置/策略模式實現

// 獲取折扣 -- 使用對象配置/策略模式
const getDiscount = (userKey) => {
// 我們可以根據用戶類型來生成我們的折扣對象
let discounts = {
'普通會員': 0.9,
'年費會員': 0.85,
'超級會員': 0.8,
'default': 1
}
return discounts[userKey] || discounts['default']
}
console.log(getDiscount('普通會員')) // 0.9

從上面的案列中可以明顯看得出來,使用對象配置比使用if else可讀性更高,后續如果需要添加用戶折扣也只需要修改折扣對象就行??。

對象配置不一定非要使用對象去管理我們鍵值對,還可以使用 Map去管理??,如:

// 獲取折扣 -- 使用對象配置/策略模式
const getDiscount = (userKey) => {
// 我們可以根據用戶類型來生成我們的折扣對象
let discounts = new Map([
['普通會員', 0.9],
['年費會員', 0.85],
['超級會員', 0.8],
['default', 1]
])
return discounts.get(userKey) || discounts.get('default')
}
console.log(getDiscount('普通會員')) // 0.9

案例2 年終獎

公司的年終獎根據員工的工資基數和績效等級來發放的。例如,績效為A的人年終獎有4倍工資,績效為B的有3倍,績效為C的只有2倍。

假如財務部要求我們提供一段代碼來實現這個核算邏輯,我們要怎么實現呢?

這不是很簡單嘛,一個函數就搞定了。

const calculateBonus = (performanceLevel, salary) => { 
if (performanceLevel === 'A'){
return salary * 4
}
if (performanceLevel === 'B'){
return salary * 3
}
if (performanceLevel === 'C'){
return salary * 2
}
}
calculateBonus( 'B', 20000 ) // 輸出:60000

可以發現,這段代碼十分簡單,但是 calculateBonus函數比較龐大,所有的邏輯分支都包含在if else語句中,如果增加了一種新的績效等級D,或者把A等級的倍數改成5,那我們必須閱讀所有代碼才能去做修改???♂?。

所以我們可以用對象配置/策略模式去簡化這個函數??

let strategies = new Map([
['A', 4],
['B', 3],
['C', 2]
])
const calculateBonus = (performanceLevel, salary) => {
return strategies.get(performanceLevel) * salary
}
calculateBonus( 'B', 20000 ) // 輸出:60000

至此,這個需求做完了,然后產品經理說要加上一個部門區分,假設公司有兩個部門D和F,D部門的業績較好,所以年終獎翻1.2倍??,F部門的業績較差,年終獎打9折??。

改造以上代碼,把狀態值拼接,然后存入Map中

// 以績效_部門的方式拼接鍵值存入
let strategies = new Map([
['A_D', 4 * 1.2],
['B_D', 3 * 1.2],
['C_D', 2 * 1.2],
['A_F', 4 * 0.9],
['B_F', 3 * 0.9],
['C_F', 2 * 0.9]
])
const calculateBonus = (performanceLevel, salary, department) => {
return strategies.get(`${performanceLevel}_${department}`) * salary
}
calculateBonus( 'B', 20000, 'D' ) // 輸出:72000

結尾

本文主要是向大家傳遞一種思想,我們有很多的方法去優化我們的代碼,提高我們代碼的可讀性。

對if else并沒有歧視的意思,只是希望在大家以后的代碼中不僅僅只有if else??。

責任編輯:武曉燕 來源: 前端YUE
相關推薦

2017-10-30 15:22:29

代碼可讀性技巧

2024-04-07 10:13:57

C++代碼if-else

2021-10-09 10:24:53

Java 代碼可讀性

2020-11-08 14:36:27

pandas數據分析pipe()

2022-08-29 00:37:53

Python技巧代碼

2022-08-23 14:57:43

Python技巧函數

2024-01-31 08:04:43

PygmentsPython

2024-10-07 10:00:00

Python代碼編碼

2021-04-01 16:43:05

代碼可讀性開發

2023-11-14 08:10:06

高級函數Python

2019-06-06 08:48:14

代碼函數編程語言

2015-08-27 13:11:18

JavaScript代碼

2025-03-17 00:55:00

2024-04-23 08:01:20

面向對象C 語言代碼

2025-07-29 09:01:35

if-else代碼

2025-05-12 10:00:00

JavaScript代碼編碼

2024-08-02 16:20:06

2021-12-08 23:38:25

Python工具代碼

2019-12-03 09:32:32

JavaScript代碼開發

2010-09-02 10:43:24

CSS文件
點贊
收藏

51CTO技術棧公眾號

亚洲亚洲人成综合网络| 亚洲免费毛片| 欧美激情自拍偷拍| 日本精品二区| 欧美人与动xxxxz0oz| 黑人巨大精品欧美一区二区一视频 | 91视频免费在线观看| 91精品国产乱码久久久竹菊| 精品久久久久久综合日本欧美| 免费观看视频www| 国产成人精品网址| 影音先锋欧美在线| 亚洲专区免费| 蜜桃在线一区二区三区精品| 午夜久久久久久电影| 天堂…中文在线最新版在线| 九色综合狠狠综合久久| 看欧美日韩国产| 亚洲在线一区| 久久涩涩网站| 亚洲一区区二区| 欧美电影h版| 国产青青草在线| 久久青草久久| 96pao国产成视频永久免费| 成人福利在线观看视频| 八戒八戒神马在线电影| 国产日韩一区二区三免费高清| 在线免费一区三区| 俺来也官网欧美久久精品| 亚洲人成人99网站| 99热这里只有精品在线播放| 日本三级亚洲精品| 国产精品日日摸夜夜摸av| 91国产成人在线| 久草在线青青草| 久久精品国产一区| 亚洲免费网站| 精品国产一区二区三| av一区二区三区黑人| 少妇**av毛片在线看| 毛片.com| 中文字幕二三区不卡| 午夜免费福利在线| 亚洲四区在线观看| 国产三级av在线| 在线日韩一区二区| wwww亚洲| 欧美富婆性猛交| 成人一区二区| 欧美tk丨vk视频| 色鬼7777久久| 岛国av一区二区三区| 夜色福利资源站www国产在线视频| 亚洲国产日韩精品| 日本三级在线视频| 中文字幕日韩欧美在线| 欧美国产极品| 久久精品一区二区三区不卡免费视频| 亚洲私拍自拍| 久久久久久久久久伊人| 依依成人综合视频| 尤物网址在线观看| 日韩视频在线观看免费| 自拍亚洲一区| 国模精品娜娜一二三区| 国产乱码精品1区2区3区| 777免费视频| 欧美一级在线视频| 这里视频有精品| 久久天天狠狠| 日本一区二区综合亚洲| 伊人在线视频| 九九视频这里只有精品| 激情自拍一区| 免费男同深夜夜行网站| 欧美性猛交xxxxxxxx| 不卡亚洲精品| 国产激情一区二区三区在线观看 | 伊人发布在线| 亚洲成人在线视频播放| 精品一区二区三区中文字幕老牛| 蜜桃av色综合| 亚洲免费av高清| 高清在线视频不卡| 国产精品 欧美在线| 国产酒店精品激情| 国产中文字幕在线播放| 久久91亚洲精品中文字幕奶水 | 成人高清网站| 91国语精品自产拍在线观看性色 | 欧美激情一区二区在线| 久久综合之合合综合久久| 97在线视频免费| 日本视频一区二区三区| 日本免费高清视频| gogogo高清在线观看免费完整版| 欧美一区二区视频观看视频| 国产精品69xx| 日本a级片电影一区二区| 久久精品99国产精品日本| 在线免费av网址| 久久韩国免费视频| 天堂在线一区二区| 视频一区二区三区在线看免费看| 少妇激情综合网| 全部av―极品视觉盛宴亚洲| 污网站在线看| 日韩av片永久免费网站| 久久色中文字幕| 日韩制服一区| 在线观看成人免费| 欧美精品第1页| 精品9999| 成人18在线| dy888夜精品国产专区| 五月天丁香久久| 成人三级视频| 特黄特色大片免费视频大全| 性色av一区二区三区免费| 99视频在线观看一区三区| 九九九伊在线综合永久| 日韩国产小视频| 一区二区三区国产在线观看| 国产美女精品人人做人人爽| 天堂√中文最新版在线| 正在播放亚洲| 亚洲欧美综合另类中字| 国产在线精品一区二区三区不卡| 欧美xxxx少妇| 欧美一级黄色录像片| 亚洲片av在线| 久久综合精品国产一区二区三区 | 精品乱人伦一区二区三区| 亚洲国产精品第一区二区| 嫩草研究院在线| 96pao国产成视频永久免费| 亚洲18女电影在线观看| 不卡一区2区| 一区二区三区四区在线免费视频| 国产精品日韩在线播放| 五月天中文字幕一区二区| 99久久99热这里只有精品| 亚洲综合色视频在线观看| 亚洲综合中文字幕在线| 欧美日韩国产一区| 久久草av在线| 亚洲wwww| 色多多视频在线播放| 国产+成+人+亚洲欧洲| 亚洲欧美国产三级| 久久亚洲成人| 高清免费电影在线观看| 亚洲激情免费视频| 久久99国产精品自在自在app| 亚洲国产经典视频| 成人免费在线播放| 最新国产在线观看| 黄色免费高清视频| 欧美成人合集magnet| 亚洲乱码中文字幕综合| 国模一区二区三区| 美女高潮视频在线看| 日韩毛片在线免费看| 国产精品中文字幕在线| 91精品啪在线观看国产60岁| 国产大陆a不卡| 成人18夜夜网深夜福利网| 99re99| av资源站久久亚洲| 亚洲日本欧美中文幕| 国产日韩欧美综合在线| 天天影视天天精品| h片在线观看视频免费免费| 日韩欧美xxxx| 亚洲999一在线观看www| 亚洲精品suv精品一区二区| 久久久久久久久97黄色工厂| 91精品一区二区三区综合在线爱| wwwwxxxx在线观看| 高清日韩av| 亚洲欧洲日本国产| 97成人在线视频| 欧美精品在欧美一区二区少妇| 成人网在线免费视频| 欧美一二区在线观看| 另类激情视频| 一二三区在线| 青青草国产精品视频| 91免费版黄色| 久久99精品国产99久久6尤物| 欧美日韩一区二区在线视频| 99re8在线精品视频免费播放| 综合久久久久| 中文字幕久久精品一区二区| 日本性爱视频在线观看| 性一爱一乱一交一视频| 毛片在线播放视频| 欧美主播一区二区三区美女 久久精品人 | 国产精品v欧美精品v日本精品动漫|