算法分析和设计 第一章 算法概论心得体会

C++规范规范(有搬运,总结)

一. 变量声明与命名风格

(1) 代码中的命名均不能以下划线或美元符号开始,也不能以下划线或美元符号结束。但也常以双下划綫标识类内部变量。

反例:_name / __name / $name / name_ / name$ / name__

(2)代码中的命名严禁使用拼音与英文混合的方式,更不允许直接使用中文的方式。 说明:正确的英文拼写和语法可以让阅读者易于理解,避免歧义。注意,即使纯拼音命名方式 也要避免采用。

正例:alibaba / taobao / youku / hangzhou 等国际通用的名称,可视同英文。

反例:DaZhePromotion [打折] / getPingfenByName() [评分] / int 某变量 = 3

(3) 变量名和函数名以小写字母开头,开头之后的部分每个单词以大写字母开头。

正例:short counter; / char itemDelimiter = ' ';

(4) 类名以大写字母开头。

正例:XmlService / User

(5) 常量命名全部大写,单词间用下划线隔开,力求语义表达完整清楚,不要嫌名字长。 正例:MAX_STOCK_COUNT

(6) 抽象类命名使用 Abstract 或 Base 开头;异常类命名使用 Exception 结尾;测试类 命名以它要测试的类的名称开始,以 Test 结尾。

(7) 避免短的或无意义的命名。使用尽量完整的单词 组合来表达其意。

正例::AtomicReferenceFieldUpdater。

反例:变量 int a 的随意命名方式。

(8) 枚举成员名称需要全大写,单词间用下划线隔开。

(9) 单个字符的变量名只适用于用来计数的临时变量,因为此时该变量的用途十分明显

(10) 声明每一个变量都要用独立的一行

正例:int height; / int width;

(11) 当一个变量被用到时再声明它。

(12) 对于指针或引用,在类型名和*或&之间用一个空格,但是在*或&和变量名之间没有空格

正例:char *x; / const QString &myString; / const char * const y = "hello";

(13) Qt的ui相关的,在ui里的变量也尽量要进行命名,特别是在代码中使用到的,反例:ui->frame,命名时注意添加该界面的标识性字段,尽量使得ui里所有变量名字在整个程序域中不重名,便于在QSS中控制。

正例:如在SE_ReportDialog.ui中的命名,m_reportFrame;在SE_CalculateWindow.ui中的命名:m_calculateFrame等。

(14) 如上个例子,在特定地方声明的变量应添加适当的前缀,如类的成员变量添加m_前缀;全局变量添加g_;局部变量添加l_。

(15) 接上一点,在前缀下划线后第一个字母,常为变量类型的缩写,如int为i,double为d。

正例:int m_iMonth; double l_dMoney;

二.代码格式

(1) 大括号的使用约定。如果是大括号内为空,则简洁地写成{}即可,不需要换行;如果 是非空代码块统一如下例:

if ( ... )

{

...

}

else

{

...

}

(2) 左小括号和字符之间不出现空格;同样,右小括号和字符之间也不出现空格

反例:if (空格 a == b 空格)

(3) if/for/while/switch/do 等保留字与括号之间都必须加空格。

正例:if (foo)

(4) 任何二目、三目运算符的左右两边都需要加一个空格。

正例:lineF == lineN

(5) 注释的双斜线与注释内容之间有且仅有一个空格。

正例: // 这是示例注释,请注意在双斜线之后有一个空格

(6) 方法参数在定义和传入时,多个参数逗号后边必须加空格。即逗号左边没有空格,逗号右边有一个空格。

正例:  QT_REQUIRE_VERSION(argc, argv, "4.0.2")

(7) 左引号的左边和右引号的右边都有一个空格,左引号的右边和右引号的左边都没有空格。如果右引号右边是右括号的话,它们之间没有空格。

正例: qDebug() << Q_FUNC_INFO << "was called with value1:" << value1 << "value2:" << value2;

QT_REQUIRE_VERSION(argc, argv, "4.0.2")

(8) 不同逻辑、不同语义、不同业务的代码之间插入一个空行分隔开来以提升可读性。

(9) 当条件语句的执行部分多于一句的时候才使用花括号。然而在if-else语句块中,如果if或else中的一个包含了多行,另一个为了对称性原则,也要用花括号。

正例:if (address.isEmpty())

return false;

(10) 每行代码不多于100个字符,超出需要换行。换行时:第二行相对第一行缩进 4 个空格,从第三行开始,不再继续缩进。运算符与下文一起换行。方法调用的点符号与下文一起换行。方法调用中的多个参数需要换行时,在逗号后进行。

正例:if (longExpression

+ otherLongExpression

+ otherOtherLongExpression) { }

三.类相关

(1)避免通过一个类的对象引用访问此类的静态变量或静态方法,无谓增加编译器解析成 本,直接用类名来访问即可。

(2)构造方法里面禁止加入任何业务逻辑,如果有初始化逻辑,请放在 init 方法中。

(3)类内方法定义的顺序依次是:公有方法->公有槽->信号->保护方法->私有方法->私有槽。

(4)当一个类有多个构造方法,或者多个同名方法,这些方法应该按顺序放置在一起, 便于阅读。

(5)成员变量一般为名词。函数成员一般为动词/动词+名词,当返回值为Bool型变量时,函数名一般以前缀’is’开头。

正例:void setDirty(bool b);  / bool isDirty() const;

(6)每一个对象,只要它不是基础类型(int, float, bool, enum, or pointers),都应该以常量引用的形式传递。这条使得代码运行得更快。

正例:QString myMethod(const QString &foo, const QPixmap &bar, int number);

(7)为了使构造函数被错误使用的可能性降到最小,每一个构造函数(除了拷贝构函数)都应该检查自己是否需要加上explicit 符号。

(8)尽量减少在头文件中包含其他头文件的数量,可以用前置声明法。

正例:class KBar;

class KFoo : public KFooBase

{ … };

(9)假如你有一个Foo类,有Foo.h文件和Foo.cpp文件,在你的Foo.cpp文件中,要先包含Foo.h文件再包含其他头文件。

正例:// .h文件

class Foo

{ …};

 // .cpp文件

#include "foo.h"

#include "bar.h"

四. 控制相关

(1) case标签和switch在同一列。每一个case语句的末尾都要有一个break语句或return语句。在一个 switch 块内,都必须包含一个 default 语句并且 放在最后,即使空代码。

(2) 除常用方法(如 getXxx/isXxx)等外,不要在条件判断中执行其它复杂的语句,将 复杂逻辑判断的结果赋值给一个有意义的布尔变量名,以提高可读性

五. 注释相关

(1) 方法内部单行注释,在被注释语句上方另起一行,使用//注释。方法内部多行注释 使用/* */注释,注意与代码对齐。

(2) 对于注释的要求:第一、能够准确反应设计思想和代码逻辑;第二、能够描述业务含 义,使别的程序员能够迅速了解到代码背后的信息。完全没有注释的大段代码对于阅读者形同 天书,注释是给自己看的,即使隔很长时间,也能清晰理解当时的思路;注释也是给继任者看 的,使其能够快速接替自己的工作。

(3) 好的命名、代码结构是自解释的,注释力求精简准确、表达到位。避免出现注释的 一个极端:过多过滥的注释,代码的逻辑一旦修改,修改注释是相当大的负担。

(4) 建议每个文件、每个类、每个函数,尤其是接口API部分,使用doxygen语法标注。

1. 命名规范

  • 变量、函数、类和文件名应该简明易懂,使用英文单词或单词缩写,并使用下划线或驼峰命名法。
  • 变量名应该使用名词,函数名应该使用动词,类名应该使用名词或名词短语,文件名应该使用有意义的名称。
  • 举例:

first_name = "John"

last_name = "Doe"

(1)使用驼峰命名法

解释

def calculateSalary():

    pass

    class CustomerOrder:

    pass

(2)使用有意义的文件名

customer_order.py

2. 格式化规范

  • 代码行长度应该不超过80个字符。
  • 使用一致的缩进和空格以使代码更易于阅读
  • 在两个操作符之间使用空格,例如赋值、比较和算术操作符
  • 举例:

(1)代码行长度不超过80个字符

def calculate_discount(price, discount_percentage):

    return price * discount_percentage / 100

(2)使用一致的缩进和空格

解释

if user_age < 18:

    print("You are a minor")else:

    print("You are an adult")

(3)在赋值、比较和算术操作符之间使用空格

age = 25if age == 18:

    print("You are a young adult")

3. 注释规范

  • 注释应该清晰、有意义,并解释代码的目的,而不是显而易见的东西。
  • 注释应该写在需要注释的代码上面,并在需要的地方使用空行分隔。
  • 举例:

def calculate_discount(price, discount_percentage):

(1)计算折扣后的价格

return price * discount_percentage / 100

(2)两行空行分隔

class CustomerOrder:

4. 函数的长度规范

  • 尽量保持函数的短小精悍,以提高代码的可读性和可维护性。
  • 函数应该只做一件明确的事情,如果函数过于复杂,则需要将其拆分成较小的函数。
  • 举例:

def process_customer_order(customer, order_items):

(1)检查客户地址的有效性

 check_address(customer.address)

(2)检查订单是否有足够的库存

for item in order_items:

    check_stock(item.product_code, item.quantity)

(3)保存订单

 save_order(customer, order_items)

(4)较短函数

def check_address(address):

(5)检查地址的有效性

def check_stock(product_code, quantity):

(6)检查库存是否充足

    pass

def save_order(customer, order_items):

(7) 保存订单

5. 错误处理规范

  • 带有适当错误处理的代码不仅更可靠,而且更容易调试。
  • 尽可能使用异常处理来处理错误。
  • 举例:

(1)试图打开一个不存在的文件

try with open("non_existing_file.txt", "r") as f:

    content = f.read()

(2)捕获文件不存在的异常

except FileNotFoundError:

    print("File not found")

6. 冗余代码规范

  • 尽管DRY(不要重复自己)原则已经很出名了,但它仍然是一个很好的编程实践,可以减少冗余代码和错误数量。
  • 尽可能使用现有的代码或函数,而不是编写新的代码。
  • 举例:

解释

if user_age < 18:

    print("You are a minor")else:

    print("You are an adult")

不需要重复代码

解释

if is_minor(user_age):

    print("You are a minor")else:

    print("You are an adult")

可以使用函数

def is_minor(age):

    return age < 18

7. 通用开发模式规范

  • 在编程实践中尽量使用通用的设计模式,以提高代码的可维护性。
  • 使用面向对象编程的原则如高内聚、低耦合等。
  • 举例:

解释

class Customer:

    def __init__(self, name, email, phone):

        self.name = name

        self.email = email

        self.phone = phone

解释

class Order:

    def __init__(self, customer, items):

        self.customer = customer

        self.items = items

8.数学之美读后感

读了这本书,我才第一次惊讶的发现,数学原来并不只是枯燥的考试题,

而是人类理解世界最重要的一种工具数学不仅真的很美,而且真的很

有用这本书最大的价值就在于,它没有直接告诉你答案,而是让你带

着新的启示、新的方法以及新的眼光、新的境界来重新理解这个世界

世界太复杂了,必须分步、分类从而化繁为简,数学就是一件非常有力的工具

我觉得数学是非常重要的,他见证着历史的进程,为科技的进步发展打下了坚实的基础,没有数学的话,人类的进程也没有那么快。所以每个人应该重视数学的学习。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值