当前位置:天才代写 > tutorial > C语言/C++ 教程 > Code Style(代码的气势气魄)

Code Style(代码的气势气魄)

2017-11-05 08:00 星期日 所属: C语言/C++ 教程 浏览:483

副标题#e#

1.简介

2.什么是气势气魄?

3.代码的气势气魄为什么如此重要?

4.更少的事情,更多的文档?

5.推荐的代码气势气魄

6.简朴的文档

7.输出气势气魄

8.结论

简介

让我们面临一下吧…假如您是一个资深的措施员,那么您老是在最后期限下事情而且您的最终方针是完成您设计的软件。假如您是个新手,您的尽力是更多的研究、试验、虽然尚有错误和一心但愿您的措施可以象规划的那样运行。不管奈何,当您的措施真的如愿以偿的运行时那种乐成的感受令人十分振奋,但更多的措施员发明可以或许用精采的气势气魄生成措施内部代码时的那种孤高的感受更棒。

假如您是措施设计小组的成员可能假如您还在书写学校分派的任务,那么您会有时机被要求遵守某些必需遵守的气势气魄法则。 绝大大都的措施员思量气势气魄这件事就象一个10岁大的孩子对待就寝时间一样。但资深措施员和我所见过的小组率领及多年来利用很多气势气魄的措施员城市试图向您转达精采的代码气势气魄与您所自得的一些书写代码的能力同样重要。在这篇文章中我将实验包罗一些输出气势气魄的概念,这也许有助您的编程路程。

更少的事情,更多的文档?

因此气势气魄意味着要在代码的每一行加上注解,对吗?错。假如没有做对的话,注解也会酿成一场劫难。 我仍然但愿一个措施员学会喜欢输入注解或真正对注解有足够的重视。为了将来的可维护性必需强制本身正确的安排注解。所以怎么可以或许不利用注解?

显然对一个新手最坚苦的事是分明什么是好的变量定名。让我们看看以下的代码。您能汇报我下面的代码是做什么的吗?

float __fastcall TExampleForm::CalcAverageGrade(void)
 {
  int y=0;
  int i=0;
  for (i; i<x; i++) {
    y=y+g[i];
  }
  return float(y/x);
 }

在上面的例子中,您能很等闲的汇报我y代表什么呢?x又是什么呢?这段代码也许需要一些注释来表明这些变量的代表意义及代码中产生了什么?应用以上的代码气势气魄,看不出什么逻辑干系。此刻让我们看看应用更好的代码气势气魄今后,代码是多么容貌?

float __fastcall TExampleForm::CalcAverageGrade(void)
 {
  int total=0;
  for (int i=0; i<maxGrades; i++)
   {
    total+=Grades[i];
   } //求所有后果的和
   return float(total/maxGrades);
 } //计较平均后果

在您除错时以上两段代码孰优孰劣,已不必多说。此刻就让我们接头一些可以或许让您的代码更具有可维护性的推荐气势气魄吧。


#p#副标题#e#

推荐的代码气势气魄

1.利用有描写意义的变量名。

2.利用i, j, k, l, m作为轮回计数变量。这发源于Fortran,自始自终这都是事实上的家产尺度。

3.在闭合括号处为所有的声明和要领注释。这样在实验找到与此配对的上一个初始括号时更容易做抉择,尤其在声明很长时。

4.思量将if后头或轮回界说体的初始括号放在一个单独的行上。这真的有助于您找到与其对应的闭合括号。

5.利用适当的组合运算符 (+=, *=, 等等)。对自增(自减)变量利用++ 和 -–运算符。正确利用这些运算符会使您的代码更可读和更一致。这也淘汰了输入的字符数量。组合运算符也会辅佐编译器生成更快的代码。举例来说,i++发生的asm(汇编)代码是inc [i],而i=i+1将会发生如下的asm(汇编)代码mov eax,[i] inc eax mov [i],eax。

6.注解代码时,要明智些!假如一段代码的逻辑干系很巨大,注解将有助于别人领略代码的意图。但假如逻辑干系直线向前,制止加上并非必需的注解。要象维护您的代码一样维护您的注解!

7.定名变量时,利用有描写意义的大写。简朴变量(譬喻,int, long, String)应该以小写字符开始。巨大变量(譬喻,工具、布局、数组)应该以大写开始。变量名称中包括的所有单词都应该大写开头。这会让读(写)代码的人对所会见的数据范例有一个清晰的第一印象。

8.制止在变量名中利用下划线。绝大大都的编译器中,它都有非凡的意义。

9.尽大概(而不是猖獗的)将代码模块化。公道的话,将代码放入函数中去。这答允更好的代码重用性和可读性。

10.利用正确的轮回。假如代码最少要执行一次,利用do-while轮回,不然利用while-do轮回。假如确切的轮回执行次数已知,利用for轮回。

11.在事件产生的数量高出两种时,只要大概就利用switch声明。同时,无论何时只要大概就包括一个switch default(缺省开关),这样总会有一个选项被触发。Switch声明很容易除错,并且比组合的多重if声明执行速度更快。

12.在您代码中的逻辑步调之间加上一个空行(譬喻,界说变量、轮回、等等)。

#p#分页标题#e#

13.声明变量的位置很是重要。变量应该声明的位置险些没有随意性。当变量用于整个(类)工具可能必需在工具外可见的时候,变量应放在头文件中。姑且变量假如不需要在if声明或轮回体外被会见的话,就应在它们内部声明。不正确的安排变量声明会导致执行速度减慢、错误、可能引起误导的代码。

14.初始化所有的变量。

15.假如您有非空返回(带返回值)的函数,确保所有的退出点都利用了return。对编译器发生的告诫"function should return a value"(函数应该返回一个值)要引起足够重视。这是严重告诫而且大概导致您的软件产生随机错误。

16.在两个差异范例的变量间赋值时,应对变量举办强制转换计较来制止编译器的告诫(譬喻:int x; float y; … y=float x;)。这么做可以防备"Conversion may loose significant digits"的告诫。作为一个措施员您的方针应该尽大概的淘汰告诫的数量。而强制范例转换将消除个中的大大都。

17.永远在删除后将指针设为NULL。

18.只管仔细的观测以制止“闭门造旧车”。颠末证明的函数与措施利用时优先于新写的代码。这会让您有更多的时间去写真实的逻辑代码而且很是有助于维护。尽量尽量动态链表的书写很是有趣,它早已被完成了!

19.正确的拼写很重要。假如拼写有错的话,未来的搜索会很坚苦。

20.永远不要利用两个只有巨细写差异的变量名字。

21.在您建设代码时就输入注解,而不是今后。在您修改代码的时候,保持对注解的维护。

22.假如您在调试或除错时注解(rem)了一段代码的话,确保您最后将被注解的代码删除。

23.最后最重要的是…保持气势气魄的一致。

#p#副标题#e#

简朴的文档

平凡的文档在建设一个可维护的系统是却十分有效。您应该配置一个尺度来为您的文档注解模板划定文件的开始处应该安排的内容。这里是某些应该在您的模板中完成的对象:

1.原创作者名字

2.原始建设日期

3.文件的用途

4.包罗利用指导在内的主要内容列表

5.包罗修订日期的修订汗青记录。同时应该说明修订时发明并修复的bug。

文件注解应该放在文档头部,并只管简明。下面是我们此刻的应用措施的一个例子。这个例子较量巨大。

/*

Written by(作者): Scott Cross

Date originally Completed(原始完成日期): 9/18/99

Purpose(用途): Main routine for NY Billing.This logic calculates the installments and provides all data necessary to print, display, and report billing status.The form will display the billing information.The main structure, InvoiceInfo, has all information including detail of Installments and Payment activities.Although the main object is a form, the form need not be shown in order to get billing information.This is the only billing logic for this version of the system.All billing inquiries should go through this routine.

Usage(用法): Nothing will be performed during the OnCreate event with the exception of setting some reference variables.All calculations are done by calling the main routine LoadAcctInfo.This routine can be called many times for different policies since it is fully initialized on each call.There are 5 parameters for the main functions and their usage is as follows:

bool LoadAcctInfo(
   String policyNo - Supplies the logic with the targeted PolicyNo.
 bool printInvoice - Set to true if you want to print the invoice.
 bool nightRunning - If being called from the night, set to true.
 bool payableRunning - If being called by accounting rpt, set to true.
 String masterPrintDate - This is a date.For more info on usage, see cpp.
 );

No preliminary logic needs to be performed and the function will return true in most cases.No structures are passed since the main structure is public.It is imperative that the LoadAcctInfo be called prior to displaying the screen or unexpected results can occur since the main structures will not be initialized.

struct InvoiceInfoStruct{
 PaymentHistoryStruct Payments[30]; - Payment History
   int paymentCount; - Count of Payments
 InstallmentStruct Installments[30]; - Installment Information
 int installmentCount; - Count of Installments
 int currInstall; - The current due installment
   float totalPaid; - The total paid on file *
   float totalDue; - Total due on file
   float pastDue; - Total amount past due
   float totalBilled; - Total amount billed on file
   float totalApplied; - Amount applied to installments **
   String equityDate; - The date the premium is paid to
   String dateDue; - Date the file is due a payment
   float annualizedPremium; - the annualized premium ***
   };

* Restricted to masterPrintDate

** Should equal total paid

*** What the annualized premium is for the policy as stored in the tables if rated for one year.

Update History(更新汗青):

09/18/1999 – Scott – Completed

02/01/2000 – Scott – Fixed totalPaid error on cancelled file

*/

#p#副标题#e#

输出气势气魄

#p#分页标题#e#

输出气势气魄没有尺度。在我的见识中,编程最出色的部门是措施的设计。您可以有本身的选择,从什么是好的或坏的直到系统的外观和感受。尽量如此,仍有些有助于您的设计的发起。

1.选择统一的字体。

2.把界面设计成可以在差异判别率和差异配置下正常事情。启用/不消大字体,然后测试您的软件。并假定用户仍在windows的VGA设定下运行(640X480 16色)。

3.在多种颜色方案下测试软件。

4.实验维护传神的3D结果。大大都环境下,初始的form(页面)应该是凸起的并带有一种附加的下凹结果。尽量这看起来有点小儿科,但这使得措施有了深度并很是有助于支解页面。

5.紧记输出结果的机能。在处理惩罚器会合的轮回中,更新越简朴,执行就越快。

6.只管制止在界面中利用太多的噱头组件和结果。这会给人不专业的感受,也大概伤害用户的信心,除非工程要求浮华的设计。

7.设计登录屏幕,让用户无须鼠标行动就可以得到更多。

8.您的用户也许浏览绝不混乱的情况,但也要紧记这依靠用户的设置,多屏大概会使系统太慢。实验在速度和可用性之间找到均衡吧。

9.在任何时候利用弹出提示和提示条都是符合的。从一开始就就记着要将页面配置成这样的。

10.领导范例的界面临巨大的多步调进程时十分符合。这使得软件可以指导用户一步步的走过这些步调。找一个好的NoteBook(条记本)组件吧。

11.在举办长时间的操纵时,应该老是挪用Application->ProcessMessages();保持界面更新并让windows知道您的应用措施仍然处于勾当状态且可以或许响应动静。

12.最后最重要的是…保持系统气势气魄的一致。

结论

编程的气势气魄要比很多措施员想像的更重要的多。您想让此外措施员瞥见您此刻的工程中的代码吗?您是不是对您的代码和您的系统一样孤高呢?此刻花点时间来抉择想在您的代码中回收何种气势气魄并开始天天利用这种气势气魄。记着,用6个礼拜来成长一个习惯,不管它是好的照旧坏的。

祝 好运!

原著:Scott Cross

翻译:cker

版权说明:

海内的网站上,有很多关于C++Builder的内容,但多以软件、组件为主。论坛里也多半不能令人满足,很空虚的感受。书籍又都昂贵,内容却有抢钱之嫌。对银子不敷的初学者、自学者关爱不足,因而想尽本身的绵薄之力。

文中的所有资料都是从海外网站上收集而来。因为E文不利便,所以翻成中文。又因为English和计较机都不长短常好,文中的错误在所不免。若各人以为有用的话,我打算不绝汇集翻译一些有用的对象。

有任何意见和发起请mailto:[email protected]

您可以随意复制、分发、下载此文档。但未经本人同意,您不行以截取、窜改本文片段,或用本文谋取任何形式的好处.

 

    关键字:

天才代写-代写联系方式