风格、设计与实现 2007.10
风格、设计与实现 风格、设计与实现 高壮 2007.10
class风格 命名 My Type语句; Mype注释; My Type文档; My Type参考文献; public 风格0; 风格0;
class 风格 { private: private: MyType 命名; MyType 语句; MyType 注释; MyType 文档; MyType 参考文献; public: public: 风格(); ~风格(); };
风格风格O 额外的工作量为了减少工作量 So it is a tradeoff! Good points 阅读别人的代码方便; 自己的代码适合别人学习,别人=?=几个月或者 几年后的自己 Bad point: 风格要付出额外的劳动—增加输入量; 人们经常忽略风格,或者不能达成共识 没有风格有利于代码的保密⑧
风格.风格() 额外的工作量为了减少工作量 额外的工作量为了减少工作量 So it is a tradeoff So it is a tradeoff! Good Points Good Points: 阅读别人的代码方便; 阅读别人的代码方便; 自己的代码适合别人学习,别人 自己的代码适合别人学习,别人=?=几个月或者 几年后的自己。 几年后的自己。 Bad Point Bad Point: 风格要付出额外的劳动 风格要付出额外的劳动—增加输入量; 人们经常忽略风格,或者不能达成共识; 人们经常忽略风格,或者不能达成共识; 没有风格有利于代码的保密 没有风格有利于代码的保密/
风格风格O 我们必须培养良好的代码风格: ■现在处于学习阶段,不能太懒 团队合作要求统一的风格 从最切身的利益讲:有利于助教或者老师 批改;② 所以我们的代码需要风格
风格.风格() 我们必须培养良好的代码风格: 我们必须培养良好的代码风格: 现在处于学习阶段,不能太懒; 现在处于学习阶段,不能太懒; 团队合作要求统一的风格; 团队合作要求统一的风格; 从最切身的利益讲:有利于助教或者老师 从最切身的利益讲:有利于助教或者老师 批改;☺ 所以我们的代码需要风格 所以我们的代码需要风格
风格风格O 两个程序片段 Int qg, 1,1, tot, pre -g9tot是什么? anf(%od", &qg while (-qq >=0) memset(stock, 0, sizeof(stock) anf(%/od%od",&side, &n); -max,min哪里来的? min scanf(o/od",&i) ++stock stock又是哪里的 f G> max)max =j if i< min) min=1
风格.风格() 两个程序片段: int main() { int qq, i, j, tot, pre; , i, j, tot, pre; ------------------ ------------------qq,tot是什么? scanf("%d scanf("%d", &qq); while ( while (--qq >= 0) { { memset(stock memset(stock, 0, sizeof(stock sizeof(stock)); scanf("%d%d scanf("%d%d", &side, &n); ", &side, &n); max = 0; max = 0; --------------------- ---------------------max,min哪里来的? min = 10; min = 10; tot = 0; tot = 0; for (i = 0; i max) max = j; if (j > max) max = j; if (j < min) min = j; if (j < min) min = j; tot += j * j; tot += j * j;
风格风格O bool Case: Cutable(COORDINATE leftTop int piece) if(left Top. first+pieceSizelpiece] >totalsize II left Top. second+piece Sizelpiecel>totalsize for(int row=leftTop first; row >caseNum while((caseNum--)>0) cutCake. Input
风格.风格() bool Case::Cutable(COORDINATE leftTop,int leftTop,int piece) { if(leftTop.first+pieceSize[piece if(leftTop.first+pieceSize[piece]>totalSize totalSize || leftTop.second+pieceSize[piece leftTop.second+pieceSize[piece]>totalSize totalSize) return false; return false; for(int for(int row=leftTop.first;row>caseNum; Case cutCake cutCake; while((caseNum--)>0) { cutCake.Input cutCake.Input(); cutCake.Output cutCake.Output(); } }
风格命名 命名是程序风格中最重要的部分,也是初 学者最容易忽略(甚至不屑)的部分。 个好的变量命名应该满足: )词能达意: COORDINATE leftTop b)表明身份:变量?函数?全局?局部?常 ?类?宏 存储类型:int?foat?char?
风格.命名 命名是程序风格中最重要的部分,也是初 命名是程序风格中最重要的部分,也是初 学者最容易忽略(甚至不屑)的部分。 学者最容易忽略(甚至不屑)的部分。 一个好的变量命名应该满足: 一个好的变量命名应该满足: a) 词能达意: COORDINATE COORDINATE leftTop leftTop b) 表明身份:变量?函数?全局?局部?常 表明身份:变量?函数?全局?局部?常 量?类?宏?… c) 存储类型:int?float?char?
风格命名 词能达意 ”获得字符串的长度“的函数,下面两个名称 hdzfcdcd O getLength () 孰优孰劣,一目了然! 这里我们不提倡“爱国”,不要用拼音,尤其 是拼音首字母组合米
风格.命名 词能达意: ”获得字符串的长度 获得字符串的长度“的函数,下面两个名称: 的函数,下面两个名称: hdzfcdcd hdzfcdcd() getLength getLength() 孰优孰劣,一目了然! 孰优孰劣,一目了然! **这里我们不提倡 这里我们不提倡“爱国”,不要用拼音,尤其 ,不要用拼音,尤其 是拼音首字母组合 是拼音首字母组合**
风格命名 表明身份: ■ ariable: 局部变量 variable:全局变量 m variable:成员变量 dosomething:函数 CONSTANT VARIABLE:常量 assume 类 MACRO0法宏 vErtex:全局变量,并且是指向顶点的指针
风格.命名 表明身份: variable variable:局部变量 g_variable g_variable:全局变量 m_variable m_variable:成员变量 doSomething doSomething():函数 CONSTANT_VARIABLE CONSTANT_VARIABLE:常量 ClassName ClassName:类 MACRO(): MACRO():宏 g_pVertex g_pVertex:全局变量,并且是指向顶点的指针 全局变量,并且是指向顶点的指针
风格命名 存储类型(匈牙利命名法) ■ Char charac ■ bOoL eNable Int nLength ■ WORD WPOS ■ LONG OFfset ■ DWORD dwRange 指针pDoc 远指针 lpszName 32位字符串指针1 pszName 32位常量字符串指针 lpszName ■ Windows对象句柄hWnd
风格.命名 存储类型(匈牙利命名法): 存储类型(匈牙利命名法): Char chGrade chGrade BOOL bEnable bEnable Int nLength nLength WORD wPos LONG lOffset lOffset DWORD dwRange dwRange 指针 pDoc 远指针 lpszName lpszName 32位字符串指针 lpszName lpszName 32位常量字符串指针 位常量字符串指针 lpszName lpszName Windows Windows对象句柄 hWnd