精品欧美一区二区三区在线观看 _久久久久国色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技術棧公眾號

欧美国产一二三区| 国内精品视频在线| 一级日本黄色片| 秋霞在线午夜| 久久久www成人免费毛片麻豆| 国产精品扒开腿做爽爽爽的视频| 可以免费看av的网址| 亚洲码欧美码一区二区三区| 性欧美大战久久久久久久久| 神马影院我不卡午夜| 亚洲国产精品久久人人爱潘金莲 | 国产激情精品久久久第一区二区 | 男人的天堂成人| 图片区 小说区 区 亚洲五月| 日本中文字幕一区| 97精品久久久| 国产探花在线播放| 欧州一区二区| 亚洲精品电影网| 一级淫片在线观看| 偷拍中文亚洲欧美动漫| 亚洲制服丝袜在线| 宅男av一区二区三区| 少妇性bbb搡bbb爽爽爽欧美| 国产一区二区91| 国产美女搞久久| 欧美一区二区三区网站| 亚洲午夜黄色| 久久成人一区二区| 337人体粉嫩噜噜噜| 久久激情av| 日韩欧美视频一区| 中文字幕亚洲影院| 成人午夜sm精品久久久久久久| 婷婷开心激情综合| 97在线免费视频观看| 日本在线免费看| 欧美高清在线视频| 欧美在线激情| 免费理论片在线观看播放老| av网站免费线看精品| 99电影在线观看| 精品免费久久久| 国产一区二区三区四区在线观看| 国产97在线播放| 欧美 日韩 精品| 国产精品一级| 欧美性做爰毛片| 日本熟女毛茸茸| 小嫩嫩精品导航| 欧洲日韩成人av| 国产婷婷色一区二区在线观看 | 久久久久久久国产精品视频| 538任你躁在线精品视频网站| 国产电影一区二区在线观看| 日韩在线激情视频| 日本免费网站视频| 91精品国产91久久久久久密臀 | 午夜激情福利电影| 久久伦理在线| 久久精品久久久久久| 中国特黄一级片| 国产国产精品| 久久天堂电影网| 国产精品成人免费观看| 午夜亚洲福利| 91精品国产91久久久久| av大片免费观看| 久久www成人_看片免费不卡| 国产精品久久97| 国产精品久久久久久久久毛片| 精品一区二区三区香蕉蜜桃 | 中文字幕成人在线视频| 色综合一区二区日本韩国亚洲 | 日本成人一区| 日本一区二区三区免费乱视频| 日韩在线三级| 国产超级va在线视频| 亚洲综合激情网| 麻豆av免费在线| 成人国产精品入口免费视频| 91精品国产手机| 稀缺呦国内精品呦| 激情五月综合网| 久久精品精品电影网| 久久免费视频6| 亚洲免费网址| 成人xxxxx| 亚洲国产日韩在线观看| 91香蕉视频mp4| 亚洲精品国产一区| 国产在线拍揄自揄拍视频| 精品久久久久久久久久久久久| 国产精品久久久久9999小说| 99久久这里有精品| 亚洲国产精品电影| 超碰人人人人人人人| 欧美视频日韩| 国产精品国产三级国产aⅴ浪潮| 97caocao| 久久亚洲一区二区三区明星换脸| 亚洲欧洲在线一区| 国产伦理精品| 91精品国产麻豆国产自产在线 | 蜜桃成人av| 欧美成人激情在线| 夜夜躁日日躁狠狠久久av| 成人看片黄a免费看在线| 日韩免费一区二区三区| bl视频在线免费观看| 欧美日韩国产首页| 中文字幕一区二区三区人妻不卡| 自产国语精品视频| 国产精品久久av| 四虎精品在线| 亚洲永久精品国产| 做a视频在线观看| 国产精品嫩模av在线| 国模视频一区二区三区| 国产麻豆免费观看| 国产清纯白嫩初高生在线观看91 | 精品国产一区二区亚洲人成毛片| 国产视频123区| 久久久久国产精品一区三寸| 国产女人水真多18毛片18精品| 黄色片免费在线观看| 欧美在线视频日韩| 少妇按摩一区二区三区| 亚洲网站在线| 成人欧美一区二区三区视频| 美女隐私在线观看| 欧美视频在线一区| 香蕉视频久久久| 久久免费国产| 蜜桃av噜噜一区二区三区| a'aaa级片在线观看| 日韩女优毛片在线| 激情综合五月网| 国产激情视频一区二区三区欧美 | 热re99久久精品国99热蜜月| 超碰99在线| 亚洲精品国产免费| 91九色丨porny丨肉丝| 丁香婷婷综合色啪| 日韩av中文字幕第一页| 国产精品x8x8一区二区| 国内久久久精品| 手机看片国产1024| 欧美日韩免费区域视频在线观看| 亚洲图片综合网| 一本色道久久综合亚洲精品不卡 | 97人妻精品一区二区三区免费 | 欧美激情久久久久久| 亚洲风情第一页| 亚洲国产精品一区二区www | 久久a级毛片毛片免费观看| 久久久久久免费精品| 天堂在线观看免费视频| 都市激情亚洲色图| 五月天综合视频| 美美哒免费高清在线观看视频一区二区| 日韩av高清在线播放| 亚洲四虎影院| 久久久久www| 午夜精品一区二区三| 亚洲福利视频三区| 91精品人妻一区二区| 日韩黄色在线观看| 免费在线观看污污视频| 91在线一区| 欧美亚洲在线视频| 日韩在线免费电影| 精品日韩在线观看| 国产一级一级国产| 成人免费在线视频| 色哟哟视频在线| 久久亚洲国产精品一区二区| 天堂av一区二区| 精品国产亚洲一区二区三区| 韩国视频理论视频久久| 成人高清网站| 日韩欧美在线综合网| 国内精品福利视频| 日韩一区日韩二区| 在线中文字日产幕| 青青草一区二区三区| 青青草综合视频| 国产一区二区三区日韩精品 | 欧美巨大xxxx| 国产精品直播网红| 国产色婷婷在线| 在线电影av不卡网址| 性生活免费网站| 日本精品免费观看高清观看| 国产午夜手机精彩视频| 99久久婷婷国产综合精品电影| 中文字幕第17页| 99精品视频免费观看| 亚洲国产另类久久久精品极度| 亚洲国产中文在线二区三区免| 热99精品里视频精品| 福利在线视频网站| 亚洲区中文字幕| 国产亲伦免费视频播放| 色狠狠一区二区三区香蕉| 日韩三级久久久| 久久亚洲精精品中文字幕早川悠里| 国产成人在线综合| 久热精品在线| 91精品国产91久久久久麻豆 主演| 欧洲福利电影| 久久96国产精品久久99软件| 亚洲成人a级片| 99精品黄色片免费大全| 久久人人爽人人| 二区三区在线播放| 亚洲白拍色综合图区| ,亚洲人成毛片在线播放| 午夜视频一区二区三区| 一起操在线播放| 国产婷婷色一区二区三区四区| 色悠悠在线视频| 国产一区二区三区综合| 污版视频在线观看| 亚洲成人直播| 激情五月婷婷六月| 欧美 日韩 国产 一区| 亚洲精品国产精品国自产观看| 国产精品探花在线观看| 蜜桃视频在线观看91| 国产福利一区二区精品秒拍| 国产一区二区视频在线观看| 日本在线中文字幕一区二区三区| 欧洲一区二区视频| 国产激情视频在线看| 国语自产精品视频在免费| 色婷婷av在线| 欧美激情精品久久久久久变态| www免费视频观看在线| 久久精品视频一| 精品孕妇一区二区三区| 久久精品中文字幕| 日本中文字幕电影在线免费观看| 色老头一区二区三区| 啊v在线视频| 一区二区三区回区在观看免费视频| 色综合久久网女同蕾丝边| 亚洲人成电影网站| 国产在线播放av| 在线观看日韩av| 欧美日本高清| 欧美精品中文字幕一区| 综合久久2o19| 久久久久这里只有精品| 妞干网免费在线视频| 26uuu另类亚洲欧美日本一| 日本在线影院| 国产精品久久久久久亚洲调教| 97欧美成人| 成人欧美一区二区三区黑人孕妇 | 顶级网黄在线播放| 欧美国产在线电影| 欧美亚洲日本精品| 国产精品久久久久免费a∨| xxxxx.日韩| 亚洲v日韩v综合v精品v| 国产成人精品福利| 免费在线观看一区二区| 欧美熟乱15p| 亚洲小视频在线播放| 狠久久av成人天堂| 黄色一级大片在线观看| 久久aⅴ国产欧美74aaa| 韩国三级hd中文字幕有哪些| av在线综合网| www.4hu95.com四虎| 一区二区三区四区蜜桃| 久久99精品波多结衣一区| 欧美亚洲动漫精品| www.热久久| 亚洲色图在线观看| 91精品久久| 51久久精品夜色国产麻豆| 久久久久黄色| 国产日韩一区欧美| 日韩激情图片| 国产精品久久久久7777| 日韩经典一区二区| 风韵丰满熟妇啪啪区老熟熟女| 久久综合色综合88| www青青草原| 91久久香蕉国产日韩欧美9色| hs视频在线观看| 国产一区二区三区免费视频| 色综合999| 国产精品一区=区| 免费福利视频一区| 艳母动漫在线免费观看| 久久激情视频| 精品人妻一区二区乱码| 国产日产欧美一区二区三区 | 亚洲精品四区| 中文字幕国产免费| 91美女在线视频| 国产高清在线免费观看| 色妹子一区二区| 人妻91麻豆一区二区三区| 色狠狠av一区二区三区香蕉蜜桃| 九色porny自拍视频在线观看| 亚洲www视频| 欧美亚洲在线日韩| 99久久久无码国产精品6| 国产精品1区2区3区| 美国黄色片视频| 色欧美日韩亚洲| 香蕉国产在线视频| 久久久久久亚洲| 久久久久久亚洲精品美女| 亚洲成人自拍视频| 久久精品一本| 欧美做受喷浆在线观看| 亚洲成人自拍一区| www.xxx国产| 久久综合久中文字幕青草| 美女写真久久影院| 欧美成人免费在线| 国产色综合网| 久久国产精品无码一级毛片| 亚洲成人精品一区| 亚洲老妇色熟女老太| 欧美成人在线网站| 最新亚洲国产| 一区二区三视频| 久久精品国产久精国产爱| x88av在线| 欧美中文字幕一区二区三区亚洲| 可以在线观看的av| 日韩免费在线播放| 啪啪亚洲精品| 欧美精品aaaa| 国产精品视频一二三区| 国产美女www| 永久免费精品影视网站| 国产精品亚洲d| 亚洲精品国产系列| 国模娜娜一区二区三区| 久久免费看少妇高潮v片特黄| 91精品国产综合久久久蜜臀图片| 麻豆传媒在线观看| 亚洲一区精品电影| 欧美黄在线观看| 精品人妻一区二区三区日产| 亚洲成人7777| 日韩黄色影片| 国产精品极品美女在线观看免费 | 亚洲婷婷在线视频| 99久久久国产精品无码免费| 欧美二区乱c黑人| 国产精品久久久久av蜜臀| 九九九九免费视频| 国产日韩欧美综合一区| 91麻豆国产在线| 欧美国产精品va在线观看| 卡一精品卡二卡三网站乱码| 男女av免费观看| 国产精品亲子乱子伦xxxx裸| 国产精品玖玖玖| 久久久久久中文| 伊人春色精品| 欧美wwwwwww| 亚洲国产精品嫩草影院| 欧美另类自拍| 91久久久久久久久久| 亚洲一级电影| 国产精久久一区二区三区| 这里是久久伊人| 国产高清中文字幕在线| 亚洲天堂电影网| 不卡高清视频专区| 中文字幕永久在线观看| 欧美日韩ab片| 一本久久青青| 杨幂一区二区国产精品| 欧美性生活大片免费观看网址| 午夜毛片在线| 精品免费视频123区| 麻豆一区二区三区| 日本中文字幕免费| 日韩视频中文字幕| 蜜桃久久久久| 亚洲免费成人在线视频| 五月婷婷久久综合| 日韩欧美小视频| 久久国产一区二区| 国产原创一区二区| 九九精品免费视频| 精品中文字幕在线2019| 精品无人区麻豆乱码久久久| www.四虎在线| 91精选在线观看|