养成良好的写代码习惯

第一讲, 养成良好的写代码习惯

  Any fool can write code that a computer can understand. 
  Good programmers write code that humans can understand.
  傻瓜写计算机能理解的代码。优秀的程序员写人类能读懂的代码。

在写代码的时候,养成良好的代码风格,可以避免很多bug。然后,我帮你们找bug的时候,也能更快的看懂代码。emmm,,,,
或者说以后,团队一起研发项目,你写的代码也不能太任性,要让团队里面其他人能看懂。
第一讲我就先讲一下良好的代码习惯

1. 缩进格式

(1)遇到大括号就回车

例如:
for(int i=1;i<=n;i++)
{
          ...
}
或者
for(int i=1;i<=n;i++){
          ...
}
个人推荐使用第一种,第一种方式更显而易见的排查出不小心漏掉的括号。

(2)代码对齐

#include 
using namespace std;
#include 
#include
int main()
{
	int a,b,c,d,p;
		double s;
	while(cin>>a>>b>>c)
	{
			p=(a+b+c)/2;
	    d=(double)p*(p-a)*(p-b)*(p-c);
       		 s=sqrt(d);
	    cout<<setiosflags(ios::fixed)<<setprecision(2)<<s<<'\n';
}
	return 0;
}
这串代码是我在oj上随便找的一题
①第10行和第15行的代码没对齐
②while里面内容,参差不齐,是很不友好的习惯

(3)if语句,for语句不管有没有多个语句,都用花括号括起来

eg.:
int main()
{
	int flag=1;
	if(flag==1)
//	{
		cout<<"Yes";
//	}
	else
//	{
		cout<"nO";
//	}
}
if语句,for语句里面只有一条语句的时候,花括号可以忽略,但是极度不推荐省略!~

2. 常数名,变量名,函数名,类名都取有意义的字眼。

(1). 常量名,全部取大写字母

例如 
#define PI 3.1415926
const double E=2.71828;
const int N=1024;

(2). 变量名,做到见名之意

名字能告诉我们它要做什么,为什么存在,以及是如何工作的。选择能够表达意图的名字,将更有利于自己或别人理解代码。
不要怕在选择名字上花时间。
例如表示时分秒,用hour,mintue,second,求和sum,平均数ave,最大值max,长度length 。。。
诸如此类,用英文单词;
求周长C,求面积S,求体积V,这类变量命名可以依照数学习惯,也可以用英文单词;
避免使用a,b,c,d,e,qq,aa,bb这种没有意义的变量名称(oj上敲题可以适当随意)

此外,有一些固定的搭配:

  • ①标记变量,使用f,flag
我觉得有必要说一下什么是标记变量。
eg.:
有一个数组a[10]={5,2,1,2,6,3,4,1,10,4},检查这个数组里面有没有4,可以这样写代码
int main()
{
  int a[10]={5,2,1,2,6,3,4,1,10,5};
  int flag=0;//在编程语言里面0是假,1是真;定义flag=0;意思等同于先假设数组里面没有4这个元素
  for(int i=0;i<10;i++) //遍历数组
  {
  	if(a[i]==4)		//如果存在一个元素等于4,
  	{
  		flag=1;		//让flag=1,
  		break;		//如果flag=1,我们已经知道数组里面有4这个元素了,就没必要再去检测后面的元素了,加个brak语句,跳出循环。
  	}
  }
  if(flag==1)			//flag=1,说明数组里面有4,输出Yes;
  {
  	cout<<"Yes";
  }
  else				//反之,如果数组里面没有4,输入No
  {
  	cout<<"No";
  }
}
这个例子中,flag起到了一个标记的作用,可以称做作标记变量。
标记变量,一般使用f或者flag命名。
  • ② 临时变量,使用t,temp
临时变量,我们把为了做一件事而临时创建的一个变量叫做临时变量,一般用作临时的中间过渡。
eg.:
把a,b的值互相交换
int main()
{
	int a=2,b=3;	//随便定义两个变量a,b
	int temp;	//定义临时变量,不用初始化

	temp=a;	//把a赋值给temp
	a=b;//把b赋值给a	
	b=temp;//把temp(其实里面是原来a的值)赋值给b
}
比如a杯子里装的苹果汁,b杯子里面装的醋,如果让苹果汁和醋交换。
我们需要拿一个c杯子,
先把a杯的苹果汁倒入c杯;
再把b杯的醋倒入a杯;
然后把c杯的苹果汁倒入a杯;

这里的c杯就和temp一样,起一个临时过渡的作用,temp我们就成为临时变量;
临时变量,一般用t,temp命名
  • ③ 计数器 id,count
 eg.:
有一个数组a[10]={5,2,1,2,6,3,4,1,10,5},检查这个数组里面有几个4int main()
{
	int a[10]={5,2,1,2,6,3,4,1,10,5};
	int count=0; //计数器count初始化等于0
	for(int i=0;i<10;i++) //遍历数组
	{
		if(a[i]==4)		//每存在一个元素等于4,
		{
			count++;	//count就加1,这里也可以写成++count	
						//有些同学可能对++count和count++有迷惑,这个我在后面解释一下	
		}
	}
	cout<<"4的个数有"<<count<<"个";
	return 0;
}
或者oj做题经常遇到的
int main()
{
	int id=1;
	while(...)
	{
		.....
		.....
		cout<<"Case "<<id++<<":"endl  //这里id++不成写成++id
	}
	return 0;
}
上面两个例题,id,count的作用就是加1,计数。我们称这样的变量为计数器。
计数器,一般用id,count命名
  • ④for语句专用的i和j
这个不用多说
for(int i=1;i<=m;i++)
{
   for(int j=1;i<=n;j++)
   {
   	....
   }
}
i和j基本上就属于for,有时候i和j不够用了,可以用k,l,q,p,h等等
想到再补充

(3) 函数名

多个单词组成时第一个单词首字母小写,其他单词首字母大写,必要时使用下划线

例:
void work()
void print()
void sum()
int getTime()
void show_English_Score()
void showScore_Student()

这些函数的用途显而易见
不要像邓国烨那样sb(),aa(),bb()这样随便的定义函数名

(4)类名

首字母大写,例如class Student;
多个单词组成时所有单词首字母大写, 如class HelloWorld;
此外在写类中的成员函数时,有两种方式:

1,写在类外面
class Student
{
	public:
	Student(...)
	{
		...
	}
	void show(...);
	private:
		int score;
		....
}
Student::show(...)
{
	....
}
2,写在类里面
class Student
{
	public:
	Student(...)
	{
		...
	}
	void show(...)
	{
		...
	}
	private:
		int score;
		....
}
当然这两个方式都可以,我个人比较倾向于第二种,
写在里面我觉得更能凸显出类是一个整体,也便于排查;

3.下面说一下i++和++i的区别

我们C语言书,第24页最下面:
++是自增运算符,i++表示先取i的值,再将i的值加1;而++i是先把i的值加1,再使用。
所以,简单的说:
i++,是先引用再自加
++i,是先自加再引用

显然,上面一句话有两个关键字:引用 和 自加
看一个例子:

int main()
{
	int id;
	id=1;
	cout<<"case "<<id++<<":"<<endl;//这个时候,id先输出出去,id再自加
									//输出的时候,就是引用
	cout<<endl;

	id=1;
	cout<<"case "<<++id<<":"<<endl;//这个时候,id先自加,然后再输出


}

运行结果:
养成良好的写代码习惯_第1张图片
再分步看

先看i++


int main()
{
   int i=0,y;
   for(int k=1;k<=5;k++)  //循环5次
   {
   	y=i++;			 //每次执行这一步是,i的值先赋给y,i再自加1
   	cout<<y<<" ";
   }
}

运行结果:
养成良好的写代码习惯_第2张图片

再看++i


int main()
{
   int i=0,y;
   for(int k=1;k<=5;k++)  //循环5次
   {
   	y=i++;			 //每次执行这一步是,i的值先自加1,再赋给y
   	cout<<y<<" ";
   }
}

运行结果:
养成良好的写代码习惯_第3张图片

再回到刚刚才的代码

养成良好的写代码习惯_第4张图片
为什么这里count++和++count没有区别,以为它这里是个计数器啊,它有引用吗,没有啊。
++count的时候,先自加,再引用?没有引用
count++的时候,先引用?有引用吗?没有。那就自加

最后,

学会几个必备词汇(滑稽):
了解=听过名字;
熟悉=知道是啥
熟练=用过;
精通=做过东西。

讲几个关于程序员的段子:

  1. 问:程序员最讨厌康熙的哪个儿子。答:胤禩。因为他是八阿哥(bug)

  2. 程序员最憋屈的事情就是:你辛辛苦苦熬夜写了一个风格优雅的源文件,被一个代码风格极差的同事改了且没署名,以至于别人都以为你是写的。

  3. C程序员看不起C++程序员, C++程序员看不起Java程序员,
    Java程序员看不起C#程序员,C#程序员看不起美工,周末了,美工带着妹子出去约会了,一群程序员还在加班!

  4. 两程序员聊天,程序员甲抱怨:“做程序员太辛苦了,我想换行……我该怎么办?”程序员乙:“敲一下回车。”

  5. 程序员最讨厌的四件事:写注释、写文档、别人不写注释、别人不写文档……

  6. 女神:你能让这个论坛的人都吵起来,我今晚就跟你走。

    程序猿:C++语言是最好的语言!

    论坛炸锅了,各种吵架。

    女神:服了你了,我们走吧,你想干啥都行。

    程序猿:你走吧,我要让他们知道,C++才是最好的语言!

贴一句我很喜欢的话:
养成良好的写代码习惯_第5张图片

你可能感兴趣的:(其他题目)