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

解讀荷蘭DigiD應用程序非常高效的代碼重構

開發 前端
對于經驗豐富的開發人員來說,較短的版本可能需要幾秒鐘才能弄清楚發生了什么。如果代碼是幾周前編寫的,嗯,可能需要多花幾分鐘時間才能理解。

今天我在看到一個程序員發布了一個非常有趣的代碼片段(非常高效的代碼)。

這段代碼像病毒一樣傳播開來,你可能已經在不同的平臺上看到過它。

關于這個話題有許多爭論。一些人認為有更短(也許也更好)的版本來做同樣的工作。

例如,我請求ChatGPT重寫一個更短的版本,得到如下結果:

是不是越短越好?

說實話,我對原版的反應是,什么鬼?我暗自發笑,認為我可以在5分鐘內使用map或類似的巧妙技術對其進行重構。然而,喝了杯咖啡后,我又看了看代碼片段。我發現意圖非常明確,諷刺的是,map版本需要更多的時間閱讀。

對于經驗豐富的開發人員來說,較短的版本可能需要幾秒鐘才能弄清楚發生了什么。如果代碼是幾周前編寫的,嗯,可能需要多花幾分鐘時間才能理解。

原始代碼有什么問題?

盡管第一個版本的代碼看起來簡單明了,但它有一個缺點,就是不能將表示和業務邏輯結合起來。軟件被設計為具有靈活性和適應性,這個版本的代碼使得將來更難進行更改。

說它混合了表現和邏輯,我的意思是,如果明天我們想顯示一個紅點(而不是藍色的),我們必須修改相當多的地方。

除此之外,我想先解決一個與邏輯泄漏有關的小問題。你可能已經注意到,它多次重復precentage> x &&precentage<= y,我將提取一個函數,使其更具可讀性:

const isPercentageInRange = (number: number, low: number, high: number) =>
number > low && number <= high;

如果我將百分比檢查分成兩個函數,并將藍色和白色的點畫在兩個函數中,并將結果安排在新的getPercentageRounds中,代碼將如下所示:

const getBandByPercentage = (percentage: number) => {
if (percentage === 0) return 0;

if (isPercentageInRange(percentage, 0.0, 0.1)) return 1;
if (isPercentageInRange(percentage, 0.1, 0.2)) return 2;
if (isPercentageInRange(percentage, 0.2, 0.3)) return 3;
if (isPercentageInRange(percentage, 0.3, 0.4)) return 4;
if (isPercentageInRange(percentage, 0.4, 0.5)) return 5;
if (isPercentageInRange(percentage, 0.5, 0.6)) return 6;
if (isPercentageInRange(percentage, 0.6, 0.7)) return 7;
if (isPercentageInRange(percentage, 0.7, 0.8)) return 8;
if (isPercentageInRange(percentage, 0.8, 0.9)) return 9;
return 10;
};

const drawProgress = (percentage: number) => {
const band = getBandByPercentage(percentage);
return new Array(10).fill("", 0, band).fill("?", band, 10);
};

const getPercentageRounds = (percentage: number) => {
return drawProgress(percentage).join("")
}

函數getBandByPercentage將百分比映射到一個范圍(或級別),而drawProgress根據范圍繪制圓點。

讓演示更加靈活。

我們可以提取藍白色的點作為參數,讓進度條更加靈活。此外,為了保持當前行為,我們可以使用當前值作為默認值:

const drawProgress = (
percentage: number,
done: string = "",
doing: string = "?"
) => {
const band = getBandByPercentage(percentage);
return new Array(10).fill(done, 0, band).fill(doing, band, 10);
};

然后可以在命令行中創建一個進度條,如下所示:

const getPercentageRounds = (percentage: number) => {
return drawProgress(0.3, '#', '=').join("")
}

如果想讓進度條變寬,可以傳入一個較長的版本字符串,表示“完成”和“正在做”:

const getPercentageRounds = (percentage: number) => {
return drawProgress(0.3, '##', '==').join("")
}

所以我們可以有不同的進度條,短的和長的,藍色和紅色的。

代碼配置

重構之后,表示和邏輯被拆分。我不喜歡使用這么大的if-else語句塊:

const getBandByPercentage = (percentage: number) => {
if (percentage === 0) return 0;

if (isPercentageInRange(percentage, 0.0, 0.1)) return 1;
if (isPercentageInRange(percentage, 0.1, 0.2)) return 2;
if (isPercentageInRange(percentage, 0.2, 0.3)) return 3;
if (isPercentageInRange(percentage, 0.3, 0.4)) return 4;
if (isPercentageInRange(percentage, 0.4, 0.5)) return 5;
if (isPercentageInRange(percentage, 0.5, 0.6)) return 6;
if (isPercentageInRange(percentage, 0.6, 0.7)) return 7;
if (isPercentageInRange(percentage, 0.7, 0.8)) return 8;
if (isPercentageInRange(percentage, 0.8, 0.9)) return 9;

return 10;
};

正如Martin Fowler的文章所討論的,在某些情況下,將“代碼”拆分到配置文件中是有益的。

我們可以將這個百分比移動到band mapping中,比如(甚至可以將bandConfig移動到JSON文件中):

const bandConfig: BandConfig[] = [
{
range: [-Infinity, 0.0],
band: 0,
},
{
range: [0.0, 0.1],
band: 1,
},
//...
];

然后getBandByPercentage可以簡化為

const getBandByPercentage = (percentage: number) => {
const config = bandConfig.find((c) => {
const [low, high] = c.range;
return isPercentageInRange(percentage, low, high)
});

return config?.band;
};

隨著復雜性轉移到配置文件,getBandByPercentage函數只剩下幾行了。

重用邏輯?

讓我再演示一個用例來展示拆分可以帶來什么。現在假設我們想在Web UI中使用進度條——例如ProgressBar組件。

導入drawProgress函數非常容易:

const ProgressBar = ({
percentage,
}: {
percentage: number;
done?: string;
doing?: string;
}) => {
return (
<>
{drawProgress(percentage).map((character) => (
<span>{character}</span>
))}
</>
);
};

在頁面上,我們可以看到這樣的內容:

我們可以輕松地更改組件中的句點字符,并使進度條更容易適應新的UI需求。

總結

最終的結果可能沒有原始結果那么“高效”。盡管如此,通過明確的關注點分離(表示和業務邏輯,以及邏輯和配置),它可以對新需求做出更積極的響應。

責任編輯:姜華 來源: 今日頭條
相關推薦

2015-10-21 13:57:09

WatchKit 要點開發

2023-10-25 10:46:56

Radius開源

2010-02-26 09:55:22

Python應用程序

2010-02-04 09:41:03

Android應用程序

2010-02-22 15:49:35

Python應用程序

2024-11-04 11:02:56

2010-01-25 10:57:57

Android系統應用

2024-02-26 00:01:01

RedisGolang應用程序

2011-07-21 16:19:30

iOS Twitter

2015-04-02 09:12:36

云計算Docker樂高積木

2012-04-06 14:23:53

技術門診Android

2017-11-30 11:19:12

重構微服務程序

2010-07-15 11:34:13

應用虛擬化桌面虛擬化基礎架構

2012-10-11 09:17:07

2022-06-17 09:58:23

JVM應用程序

2023-12-12 13:42:00

微服務生態系統Spring

2009-08-14 18:04:59

C#Windows應用

2022-05-31 16:15:23

低代碼

2015-04-01 11:03:39

2012-06-07 09:15:14

ibmdw
點贊
收藏

51CTO技術棧公眾號

亚洲成人手机在线观看| 麻豆av一区| 国产免费无码一区二区视频| 国产精品x8x8一区二区| 日韩欧美亚洲成人| 99亚洲精品视频| 欧洲成人午夜精品无码区久久| 亚洲毛片亚洲毛片亚洲毛片| 欧美天堂一区二区| 亚洲一区二区三区精品在线| 日韩欧美三级一区二区| 中文字幕网站在线观看| 你懂的视频在线免费| 久久狠狠亚洲综合| 国模视频一区二区| 午夜黄色福利视频| 免费日韩一区二区三区| 欧美日韩一区二区三区在线看| 国产一线二线三线女| av在线资源网| 99久久精品国产精品久久| 国产美女被下药99| 女人十八岁毛片| 综合久久婷婷| 精品国产一区二区三区久久| 日韩精品电影一区二区| 97se亚洲国产一区二区三区| 欧美日韩国产另类不卡| 国产aaa一级片| 国产探花在线观看| 亚洲天堂网中文字| 亚洲国产日韩欧美| 欧美69xxxxx| 不卡av在线网| 国产99在线播放| 五月天中文字幕| 911精品美国片911久久久| 国产亚洲精品va在线观看| 亚洲av无码一区二区三区网址 | 性xxxx视频| 国产精品1区2区3区在线观看| 国产精品视频播放| 啪啪小视频网站| 久久五月激情| 人妖精品videosex性欧美| 亚洲精品77777| 国产1区在线观看| 伊人成人网在线看| 欧美俄罗斯乱妇| 国产精品 欧美激情| 91亚洲一区| www.日韩欧美| av激情在线观看| 午夜精品一区二区三区国产| 日韩中文字幕视频在线观看| 国精产品一区一区| 欧美成人自拍| 欧美成人在线影院| 国产一级特黄毛片| 亚洲国产高清一区| 81精品国产乱码久久久久久| 成年免费在线观看| 噜噜爱69成人精品| 国产国语videosex另类| 中文字幕在线观看1| 日韩av电影天堂| 国产欧洲精品视频| 国产色视频在线| 粉嫩一区二区三区在线看| 国产欧美日韩视频一区二区三区| 污视频网站在线播放| 久久精品夜夜夜夜久久| 亚洲国产一区二区在线| 高清全集视频免费在线| 亚洲综合色噜噜狠狠| 丰满少妇大力进入| 欧美xxxxx精品| 99re8这里有精品热视频免费| 亚洲成人教育av| 法国伦理少妇愉情| 日韩精品2区| www日韩欧美| 国产稀缺真实呦乱在线| 男人的天堂成人在线| 国产精品色悠悠| www.欧美国产| 久久久久久久久一| 丰满女人性猛交| 大香伊人久久| 在线亚洲欧美专区二区| 深爱五月综合网| 男人的天堂久久| 色偷偷9999www| 久久久精品国产sm调教| 美女黄色成人网| 国产精品久久久久四虎| 粉嫩av免费一区二区三区| 欧美挠脚心网站| √…a在线天堂一区| 玩弄中年熟妇正在播放| 日本免费在线一区| 亚洲国产黄色片| 欧美福利在线视频| 亚洲国产午夜| 成人乱色短篇合集| 欧美成人综合在线| 一区二区三区产品免费精品久久75| av7777777| 91精品一久久香蕉国产线看观看| 亚洲国产精彩中文乱码av在线播放| 天天躁夜夜躁狠狠是什么心态| 欧美成人tv| 国产精品爽爽爽| 全部免费毛片在线播放网站| 亚洲婷婷综合久久一本伊一区| 春日野结衣av| 超碰在线一区| 久久国产精品亚洲| 中文在线免费看视频| av午夜一区麻豆| 91免费网站视频| 黄色精品视频| 日韩精品一二三四区| 麻豆亚洲av熟女国产一区二| 麻豆成人av在线| 青娱乐一区二区| 麻豆理论在线观看| 欧美成va人片在线观看| 手机av在线看| 久久99国产精品免费| 欧美精品一区二区三区久久| 国产精品xx| 精品盗摄一区二区三区| 在线免费观看亚洲视频| 看国产成人h片视频| 亚州欧美一区三区三区在线| 色香欲www7777综合网| 日韩av网站电影| 日韩三级一区二区三区| 成人精品视频网站| 免费cad大片在线观看| 欧美成年网站| 欧美成人精品h版在线观看| 国产偷国产偷亚洲高清97cao| 国产福利小视频在线观看| 欧美日韩性生活视频| 中文字幕乱码一区| 夜夜嗨av一区二区三区网站四季av| 成人动漫视频在线观看免费| 在线看三级电影| 日韩一区二区高清| 久久r这里只有精品| 国产成+人+日韩+欧美+亚洲| 91精品国产毛片武则天| 亚洲va欧美va人人爽成人影院| 九九久久国产精品| 性一交一乱一色一视频麻豆| 亚洲综合在线视频| 国产女人18毛片水真多18| 极品日韩av| 久久精品人人做人人爽电影| 欧洲一区精品| 在线看日韩欧美| 91亚洲国产成人精品一区| 综合久久综合久久| 性高潮免费视频| 亚洲精品九九| 欧美一级二级三级九九九| 向日葵视频成人app网址| 在线丨暗呦小u女国产精品| 亚洲图片小说视频| 一区二区三区91| 欧美一区二区免费在线观看| 亚洲一区日韩在线| 日本一区高清不卡| 国产精品色婷婷在线观看| 欧美激情中文网| 欧美偷拍视频| 欧美精品久久天天躁| 国产小视频在线看| 337p粉嫩大胆色噜噜噜噜亚洲| 爱情岛论坛vip永久入口| 先锋资源久久| 精品久久久久久一区| 国产麻豆久久| 色中色综合影院手机版在线观看| 天堂a中文在线| 欧美日韩高清一区二区三区| 久久免费视频6| 国产欧美一区二区精品性色超碰 | 国产精品蜜芽在线观看| 国产亚洲精品久久| 精品免费久久久| 欧美性猛交xxxx久久久| 午夜激情福利网| 99re这里只有精品6| 亚洲成人福利在线| 在线综合欧美| 久久99国产精品一区| 婷婷综合成人| 亚洲a区在线视频| 偷拍视频一区二区三区| 欧美成人性色生活仑片| 国产一区二区影视| 精品欧美乱码久久久久久| 波多野结衣在线观看一区| 亚洲免费伊人电影| 强伦人妻一区二区三区| 丰满岳乱妇一区二区三区| 999精彩视频| 男女av一区三区二区色多| 人人妻人人澡人人爽欧美一区双| 日韩欧美网址| 欧美日韩精品中文字幕一区二区| 亚洲精品福利| 成人高h视频在线| 免费观看一级欧美片| 欧美精品福利在线| 免费黄色网页在线观看| 国产一区二区三区视频| 日本精品久久久久| 日韩精品一区二区三区在线| 亚洲一区二区三区高清视频| 色视频一区二区| 国产女同在线观看| 亚洲国产精品嫩草影院| 天天综合天天做| 国产精品情趣视频| 亚洲黄色免费视频| 国产亚洲综合av| 女~淫辱の触手3d动漫| 成人黄色网址在线观看| 日韩久久久久久久久久久| 开心九九激情九九欧美日韩精美视频电影| 日韩av一二三四| 性8sex亚洲区入口| 春日野结衣av| 久久99伊人| 亚洲 高清 成人 动漫| 99精品视频免费观看视频| 欧美黑人在线观看| 午夜国产一区| 国产肉体ⅹxxx137大胆| 黑丝一区二区| 99久久国产综合精品五月天喷水| 国产在线日韩| 国产不卡一区二区视频| 国产亚洲欧洲| 波多野结衣家庭教师视频| 免费一级欧美片在线播放| 无码人妻精品一区二区三区在线| 国产农村妇女毛片精品久久莱园子 | 神马久久久久久久久久| 亚洲国模精品私拍| 色播色播色播色播色播在线| 国产视频欧美视频| 国产午夜在线观看| 中文字幕亚洲二区| 麻豆免费在线视频| 九九久久综合网站| mm视频在线视频| 国产91在线播放精品91| 蜜桃视频成人m3u8| 成人av资源在线播放| 精品一区二区三区中文字幕| 成人情视频高清免费观看电影| 亚洲国产精品免费视频| 韩国一区二区三区美女美女秀 | 在线观看免费av片| 色婷婷av一区二区三区软件| 中文字幕精品一区二区精| 91精品欧美福利在线观看| 国内爆初菊对白视频| 亚洲欧美成人一区二区在线电影| 高清国产福利在线观看| 久热在线中文字幕色999舞| 欧美xxxx免费虐| 欧洲成人免费视频| 欧美啪啪网站| 国产精品一区二区欧美黑人喷潮水| 亚洲人成网亚洲欧洲无码| 亚洲一区二区四区| 伊人久久亚洲热| 中文字幕第80页| 国产成人精品1024| 91精彩刺激对白露脸偷拍| 亚洲欧美综合另类在线卡通| 亚洲a∨日韩av高清在线观看| 亚洲成人一区在线观看| 91精品在线观| 99久久香蕉| 欧美日韩一区二区三区在线视频 | 欧美美女操人视频| 亚洲天堂av在线| 成人免费看吃奶视频网站| 开心激情综合| 91手机视频在线| 国产一区二区三区的电影 | 国产美女视频一区二区| 久久久人人爽| 伊人青青综合网| 蜜臀久久99精品久久久酒店新书| 国产精品综合二区| 欧美三级视频网站| 午夜一区二区三区视频| 国产又粗又黄又爽的视频| 亚洲男人7777| 九色91在线| 成人网欧美在线视频| 欧美精品一区二区三区中文字幕| 国产玉足脚交久久欧美| 精品写真视频在线观看| 醉酒壮男gay强迫野外xx| 亚洲永久免费av| 国产剧情久久久| 一本一道久久a久久精品逆3p| 电影k8一区二区三区久久| 91亚洲精品久久久久久久久久久久| 国产精品一区2区3区| 青青草视频在线免费播放| 国产另类ts人妖一区二区| 99久久99久久精品免费看小说.| 欧美日韩国产黄| 嫩草影院一区二区| 欧美国产日本高清在线 | 精品少妇一区二区三区日产乱码| 粉嫩av一区| 日韩免费av片在线观看| 免费萌白酱国产一区二区三区| 国产制服91一区二区三区制服| 免费高清视频精品| 成人免费无遮挡无码黄漫视频| 欧美日韩国产区| 四虎免费在线观看| 性欧美视频videos6一9| 福利在线一区| 国产日韩av网站| 成人美女视频在线看| 国产在线一区视频| 欧美一区二区三区视频在线| 国产精品刘玥久久一区| 成人xvideos免费视频| 99精品在线观看| 日本一二三四区视频| 亚洲精品免费在线| 精品人妻一区二区三区换脸明星| 久久国产视频网站| 91精品短视频| 欧美不卡在线播放| k8久久久一区二区三区| 日韩和一区二区| 亚洲老头同性xxxxx| 写真福利精品福利在线观看| 亚欧洲精品在线视频免费观看| 久久成人久久爱| 91在线播放观看| 精品久久久久久久人人人人传媒| av影视在线| 蜜桃视频在线观看91| 免费在线观看一区二区三区| 亚洲av无一区二区三区| 日韩欧美黄色影院| 免费毛片b在线观看| 欧洲成人一区二区| 久久精品国产一区二区| 麻豆明星ai换脸视频| 精品国产一区二区三区久久久蜜月| 国产乱码精品一区二三赶尸艳谈| 免费亚洲精品视频| 久久99国产精品麻豆| 欧美成人免费观看视频| 亚洲成色www8888| 日本综合久久| 日本一本草久p| 成人高清视频在线观看| 91视频久久久| 久久国产精品久久精品| 欧美wwwsss9999| 色啦啦av综合| 亚洲高清三级视频| 成年人在线观看网站| av激情久久| 日韩精品一级二级 | 亚洲人成在线影院| 成人午夜福利一区二区| 欧美福利电影网| 午夜久久中文| 亚洲国产精品女人| 久久久久久亚洲综合| 91人妻一区二区三区| 亚洲精品日产精品乱码不卡| 色综合成人av| 亚洲综合在线小说| 欧美一级二区| 免费无遮挡无码永久在线观看视频| 要久久爱电视剧全集完整观看 | 亚洲一区二区三区777| 亚洲日本久久| 亚洲天堂一级片| 亚洲欧美国内爽妇网|