精華區beta C_and_CPP 關於我們 聯絡資訊
很多人都會用 m_XXX 我想在這再多談一下 當作閒聊就好 我想有必要說明一下物件導向「物必有屬」的程式寫作 物必有屬是說 程式裏的東東一定會有它的所屬者 在程式寫作裏充分表現這件事 可以讓程式的使用者易於使用與瞭解這隻程式 先舉個反例 如: void User::SendMessage(std::string message) { SaveMessage(message); ShowMessage(name, message); SendMessageToServer(name, message); lastMessage = message; } 假設我們不是這個程式的作者 而是閱讀者 我們並不瞭解 User 這個 class 的全貌 這看到這個程式 你一定在猜 SaveMessage 是 User 的 method 嗎 還是外部函式 ? ShowMessage ... ? SendMessageToServer ... ? name ... lastMessage ... ? ??? 的確 加 this-> 與 :: 對於程式寫作而言 真的是很麻煩 但這卻能讓程式的閱讀者清晰地瞭解你的程式 如: void User::SendMessage(std::string message) { this->SaveMessage(message); ::ShowMessage(this->name, message); ::SendMessageToServer(this->name, message); this->lastMessage = message; } 是不是好多了呢 this-> 清楚地點出了哪些 variable 與 function 是屬於 User 的 member :: 則清楚地跟你說 你不用猜了 ShowMessage, SendMessageToServer 都是外部函式 而且是 global 的 然而這還不夠好 ::ShowMessage 和 ::SendMessageToServer 都是 global 函式 讓它們有個歸宿會讓整個程式更有條理 如: void User::SendMessage(std::string message) { this->SaveMessage(message); Monitor::ShowMessage(this->name, message); NetClient::SendMessageToServer(this->name, message); this->lastMessage = message; } 現在 ShowMessage 是 Monitor class 的 static function SendMessageToServer 是 NetClient 的 static function 你更清楚知道程式在表達什麼 而當你對 ShowMessage 與 SendMessageToServer 有疑惑的時候 你知道要去哪裏找他們 讓每個東西都有所屬 不僅是讓程式清晰 也是一種程式碼管理 物件的聚合 namespace 都在體現這件事 你看 SendMessage 前面也加了 User:: 基於這種思維:「物必有屬」 我都會在 class 的 method 裏用 this-> 點出 class 的 attribute 因此 對我而言 m_ 是不需要的 有些人很會說 打 this-> 好麻煩 用 m_ 很簡潔 我的想法是 m_ 太人工了 this-> 很天然 而且體現了「物必有屬」的寫作思維 : ) -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 61.228.217.108
tomex:你寫得真好! 感動...我們理念相同! 140.119.52.211 08/21
> -------------------------------------------------------------------------- < 作者: khoguan (Khoguan Phuann) 看板: C_and_CPP 標題: Re: [閒聊] 物件導向「物必有屬」的寫作 時間: Sat Aug 20 13:29:19 2005 ※ 引述《renderer (rendering)》之銘言: : 然而這還不夠好 ::ShowMessage 和 ::SendMessageToServer 都是 global 函式 : 讓它們有個歸宿會讓整個程式更有條理 如: : void User::SendMessage(std::string message) : { : this->SaveMessage(message); : Monitor::ShowMessage(this->name, message); : NetClient::SendMessageToServer(this->name, message); : this->lastMessage = message; : } : 現在 ShowMessage 是 Monitor class 的 static function : SendMessageToServer 是 NetClient 的 static function : 你更清楚知道程式在表達什麼 : 而當你對 ShowMessage 與 SendMessageToServer 有疑惑的時候 : 你知道要去哪裏找他們 : 讓每個東西都有所屬 不僅是讓程式清晰 也是一種程式碼管理 : 物件的聚合 namespace 都在體現這件事 : 你看 SendMessage 前面也加了 User:: : 基於這種思維:「物必有屬」 : 我都會在 class 的 method 裏用 this-> 點出 class 的 attribute : 因此 對我而言 m_ 是不需要的 : 有些人很會說 打 this-> 好麻煩 用 m_ 很簡潔 : 我的想法是 m_ 太人工了 : this-> 很天然 而且體現了「物必有屬」的寫作思維 : ) 哇,r大好嚴謹哦! (崇拜的眼神 @^_^@...) 我都沒寫過什麼大程式,都不寫 m_xxx。除了要 disambiguate 外, 也不寫 this->xxx , 原則上,就是出現在 member function 內的, 要嘛就是 local variable(包含 parameter), 不然就是 data member. 應該都是很容易找到並分辨的。來自外部的東西,才比較有需要加 qualifier, 這樣就分得出了。 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 220.130.208.168 > -------------------------------------------------------------------------- < 作者: renderer (rendering) 看板: C_and_CPP 標題: Re: [閒聊] 物件導向「物必有屬」的寫作 時間: Sat Aug 20 13:40:44 2005 ※ 引述《khoguan (Khoguan Phuann)》之銘言: : 哇,r大好嚴謹哦! (崇拜的眼神 @^_^@...) : 我都沒寫過什麼大程式,都不寫 m_xxx。除了要 disambiguate 外, : 也不寫 this->xxx , 原則上,就是出現在 member function 內的, : 要嘛就是 local variable(包含 parameter), 不然就是 data member. : 應該都是很容易找到並分辨的。來自外部的東西,才比較有需要加 : qualifier, 這樣就分得出了。 嗯 k 大說的是 不過 鳴鳴鳴 ~~~ 在維護過別人寫的程式之後 才深深覺得這種嚴謹是對於閱讀者的一種仁慈 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 61.228.217.108 ※ 編輯: renderer 來自: 61.228.217.108 (08/20 14:03)