推 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)
很多人都會用 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