[TDD][Codewars]Number of People in the Bus

Codewars 上隨機(jī)挑到的題目:Number of People in the Bus

【題目描述】

題目描述

看測(cè)試用例比較好懂:

test cases

題目解釋:每一個(gè) int[] 都有兩個(gè)正整數(shù),第一個(gè)代表上車的乘客數(shù),第二個(gè)代表下車的乘客數(shù)。最後的結(jié)果就是車子上還剩多少人。

Step 1: 新增測(cè)試用例,只有一個(gè) station
【測(cè)試代碼】

only 1 station test case

【生產(chǎn)代碼】

尚未實(shí)作的生產(chǎn)代碼

Step 2: hard-code 回傳 p[0][0] - p[0][1]

【生產(chǎn)代碼】

hard-code 計(jì)算單一 station

先針對(duì)單一個(gè) item hard-code 處理,等等只需要把 index = 0 的部分替換成 for loop 的 i 即可。

【重構(gòu)測(cè)試代碼】擷取方法,將驗(yàn)證行為封裝到 RemainPassengerShouldBe() 裡。

refactor test: extract assertion function

Step 3: 新增測(cè)試用例,有兩個(gè) station 的情況

【測(cè)試代碼】

2 stations test cases

【生產(chǎn)代碼】hard-code,當(dāng)還有第二個(gè) station 時(shí),累加 remainPassengerCount。

hard-code: sum the second station passengers

Step 4: 新增測(cè)試用例,有三個(gè) station 的情況

【測(cè)試代碼】重複了三次類似的處理,逼出生產(chǎn)代碼使用 loop。

3 stations test case

【生產(chǎn)代碼】一樣先 hard-code,通過(guò)測(cè)試用例後,再重構(gòu)出 for loop。

hard-code to handle the third station passengers

【重構(gòu)】擷取方法,將 remainPassgerCount 的計(jì)算抽到 RemainPassengerCountOfCurrentStation() 中,避免同樣的計(jì)算重複三份。

refactor: extract method

【重構(gòu)】以 for loop 取代 hard-code 的 [0], [1], [2] index。

refactor: loop to replace hard-code index

【通過(guò) Codewars 上所有測(cè)試用例】

pass all test cases at Codewars

【重構(gòu)】使用 LINQ 的 Aggregate() 來(lái)取代這個(gè) for loop 的行為,讓語(yǔ)意更加清楚。

refactor: use Aggregate()

一行搞定這個(gè) Aggregate 的行為!

結(jié)論

寫(xiě) LeetCode 久了,突然看到這樣的題目,一直在想是不是哪邊有陷阱。結(jié)果真的是一題單純到爆炸,單純考會(huì)不會(huì)寫(xiě)程式的考題。

但我還是決定用 TDD 一路驅(qū)動(dòng)跟重構(gòu)出最後版本的代碼,希望可以提供給剛?cè)腴T(mén)的朋友當(dāng)參考。

GitHub commi history: Codewars_NumberOfPeopleInTheBus


大部分的 LINQ 都是在封裝 foreach loop 的巡覽行為,賦予其更簡(jiǎn)單、有彈性、易讀的寫(xiě)法,這種先寫(xiě)出 loop 再重構(gòu)成 LINQ,是學(xué)習(xí) LINQ to object 本質(zhì)很重要的一個(gè)脈絡(luò)。練久了,你就有火眼金睛,看到那些看似複雜的 foreach loop, 可以對(duì)照到是否可以重構(gòu)成 LINQ 的 API 來(lái)表示。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容