敲碗敲到碗快破了嗎?是的,【#針對遺留代碼加入單元測試的藝術】今年十一月梯次,預計加入支援 #Python 與 #Kotlin 了!
課程介紹與報名:https://dotblogs.com.tw/hatelove/2020/05/08/Unit-testing-effectively-with-legacy-code-202011
—
Kotlin 本身的語言特性讓單元測試沒那麼容易寫,然而框架則優雅地解決了這問題。
Python 本身的語言特性則讓單元測試非常好寫,但因為 Python 寫法太自由,所以因應不同的寫法,要有對應不一樣的解決方式。(例如其他語言都以 class/struct 為基底, Python 跟 JavaScript 卻可以直接以 function 為基本元素)
—
#註:因為十一月梯次開始的內容同時支援 C#, Java, Kotlin, PHP, Python 五個語言,上課示範將以學員使用最多的語言進行 live coding,以及若在該 lab 不同語言可能有特別值得一提的關注點,也會額外拉出來講解。
各種語言我都會提供對應的 repository 與每個step 的 commit history, 每個段落也都有每一步的操作影片,供上課時學員可以對著 commit history 在 IDE 上練習,所以請不用擔心跟不上,或是聽懂卻無法跟著實作的問題。
重點在概念,上課或課後的實作練習,有完整的 branch, commit history (重點筆記都在 commit comments 上了),以及對應的影片可以參考。
不怕你練,怕你不練。不怕你問,怕你不問。
—
需求跟問題是中性的,是不分語言的。撇除語言特性不說,在 legacy code 上要加入單元測試,會碰到的問題萬變不離其宗,學會這個核心的概念,你就不會再怕 legacy code 了。
—
今天晚上我會把 python 的內容也補上該課程介紹中。
該梯次目前只剩下 #四個位置,錯過就等2021 吧。
同時也有10000部Youtube影片,追蹤數超過2,910的網紅コバにゃんチャンネル,也在其Youtube影片中提到,...
「c語言class struct」的推薦目錄:
- 關於c語言class struct 在 91 敏捷開發之路 Facebook 的最佳解答
- 關於c語言class struct 在 コバにゃんチャンネル Youtube 的最讚貼文
- 關於c語言class struct 在 大象中醫 Youtube 的精選貼文
- 關於c語言class struct 在 大象中醫 Youtube 的最佳貼文
- 關於c語言class struct 在 Re: [問題] struct 和class的差別- 看板C_and_CPP - 批踢踢實業坊 的評價
- 關於c語言class struct 在 C++ Struct 教學 的評價
- 關於c語言class struct 在 Put C++ class in C-struct for for use in C++ function (C/C++ ... 的評價
c語言class struct 在 コバにゃんチャンネル Youtube 的最讚貼文
c語言class struct 在 大象中醫 Youtube 的精選貼文
c語言class struct 在 大象中醫 Youtube 的最佳貼文
c語言class struct 在 C++ Struct 教學 的推薦與評價
Structure. C++中的struct 和class 基本是通用的,唯有幾個細節不同: 使用class 時,類中的成員默認都是private 屬性的;而使用struct 時,結構體中 ... ... <看更多>
c語言class struct 在 Re: [問題] struct 和class的差別- 看板C_and_CPP - 批踢踢實業坊 的推薦與評價
※ 引述《magic15 (小花)》之銘言:
: 想請問一下
: 如果是要表示一些有相關的變數
: 用struct或是class都可以
: 而且用法也差不多
: (如果class data member都是public)
: 如果碰到這種問題
: 大部分的人都會用哪種方式來儲存這些變數
: 謝謝
如果你的資料本身就是介面
那麼你可以選擇 struct
或者選擇 class 然後將全部資料宣告為 public
其餘情況下 你應該選擇 class 然後將所有資料都宣告為 private
什麼情況下資料本身就是介面呢?
那就是資料之間有性質相關
但是沒有相依性的時候
舉例來說
表示一個抽象的長方形
你可以這樣做
struct Rectangle {
unsigned int w;
unsigned int h;
};
你也可以為他添加成員函數計算周長
struct Rectangle {
unsigned int w;
unsigned int h;
unsigned int circumference() {return 2*(w + h);}
};
但是如果資料互相之間有相依性
你就不應該將裸露的資料當作介面了
因為這些資料可能被他人不恰當地更動
而失去了原有的相依性
例如
當你要表示一個直角座標上的長方形時
你不宜這樣做
struct Rectangle {
int leftX;
int rightX;
int bottomY;
int topY;
};
不應該這樣做的原因是.......
假如有人無意間將 leftX 設為一個比 rightX 還大的值
不只是語意不符而已
基於這個 struct 設計的其他演算可能因此而失效或敗壞
例如某個演算法可能會依序巡訪從 leftX 到 rightX 的所有作標點
如果 leftX 實際上大於 rightX
那電腦就陷入無窮迴圈中了............
所以你應該這樣做
class Rectangle {
public:
int leftX() {return leftX_;}
int rightX() {return rightX_;}
int bottomY() {return bottomY_;}
int topY() {return topY_;}
void setRangeX(int x1, int x2) {
if (x1 <= x2) {
leftX_ = x1;
rightX_ = x2;
} else {
leftX_ = x2;
rightX_ = x1;
}
}
void setRangeY(int y1, int y2) {
if (y1 <= y2) {
bottomY_ = y1;
topY_ = y2;
} else {
bottomY_ = y2;
topY_ = y1;
}
}
private:
int leftX_;
int rightX_;
int bottomY_;
int topY_;
};
經由一層介面函數的封裝
你就可以避免資料敗壞的風險
上面的例子當然不是很好
畢竟 setRangeX(x1, x2); setRangeY(y1, y2); 的介面不是很直觀
改善的設計可能是
先將座標點設計為一個叫做 Point 的 struct
再以兩個 Point 去決定座標上的一個長方形.....
但是不管怎樣 藉由上面的例子
相信你應該可以瞭解 struct 和 class 的主要適用情況了
最後
class 的成員變數全部都應該是 private
所以一定會有做為介面的成員函數存在
然而就如同上面的例子所述
將裸露的資料當作介面的 struct 一樣可以包含成員函數
那倒是沒有什麼不便之處
當然
在 c++ 中 struct 與 class 的唯一差別
只是預設為 public 或 private 的不同而已
不過上面的選擇方式
可以視為一種良好的 coding style
它給出一種暗示
讓人明白資料之間是否存在相依關係
一般而言
class 的使用情況較 struct 廣
--
直接閱讀《琴劍六記》
https://gs.cathargraph.com/p/list.html
《琴劍六記》Facebook專頁
https://www.facebook.com/GSannals
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 219.85.214.250
※ 編輯: pnpncat 來自: 219.85.214.250 (07/23 01:27)
... <看更多>