结对编程收获

结对编程收获

这次我们抽到了core组,相对那些抽到ui的组来说,可以算是轻松许多,因为ui组要学习心得知识,而我们只需要根据现有的c++和c的知识就可以进行代码的编写了。

收获一:任务前要进行细致的任务规划和划分

在进行开始项目之前,我们俩进行了大概半个小时的任务划分,我负责写generate函数的内容,而另外一个同学负责写计算表达式的结果,与处理异常,我们约定了一系列的参数设置(setting),由于我不会c++,那个同学就对我说会用类的方法把参数传递过来,于是我们就开始分开写。我是定义了一个全局的数组,每次生成的表达式就会在那个数组中,然后每次开始的时候都会把数组清空,这样就可以多次调用,生成多个不同的表达式了,但是在对接的时候吧,那个同学比较严格,因为全局变量不太安全,所以要求用函数返回字符串,由于对string接触的比较少,所以我采用返回指针的方式,但是这个时候就出了乱子,生成的表达式中有很多的乱码,最后我们费了很大的劲才把返回类型改成string类型的,如果在实现我知道要返回string类型的字符串,我肯定会在写的时候就注意,不必在对接的时候费劲了。

收获二:代码结构很重要

由于我们是相当于做一个产品,所以用户是什么样的我们无法预测(比如用户可能有各种奇葩的输入致使我们代码出bug),我的代码思路很简单将generate函数分成三个小函数,分别实现整数,分数与小数,我这个人写代码比较喜欢条例清晰

string expression;
	if (properFraction == 0 && decimalFraction == 0) {
		expression = generate1();
		return expression;
	}            //整数
	if (properFraction == 1 && decimalFraction == 0) {
		expression = generate2();
		return expression;
	}            //分数
	if (properFraction == 0 && decimalFraction == 1) {
		expression = generate3();
		return expression;
	}           //小数
}

  

,所以我的函数会比一般人多,大多数core组generate可能只有一个函数,不同的板块间的调用用if语句来实现。我的三个函数本来只是大体上相似,再具体函数的生成上,由于分数,小数结构与整数都不大相同,所以在生成上有着很大的不同,但是最后附加功能有表达式中要不能出现负数,所以很自然的思路就是前操作数减去后操作数若为负数,交换加括号,所以我要将三个生成函数逐一修改,非常的麻烦。所以我在改代码之前,先将整体架构更改了一下,这样子以后修改会更加的方便,修改一个函数就相当于修改三个。有一个好的架构,写代码会事半功倍。

收获三:要有完全重新写代码的觉悟

当助教说要在运算符左右两边加上空格后,我以为会很简单,在生成时加上就好,可是改了以后才发现,这并不简单,因为如果单是生成表达数,加上空格这一点实现很简单,但是我在实现附加功能的时候,是要更改原有表达式的,而且当时已经基本上我们core组的代码已经完成,在要改的话是非常麻烦的,由于要改很多地方,其实际难度不亚于重写一遍,在看了《人月神话》以后,我了解到,在实际团队项目中,重新写代码,重新开始项目是一件很正常的事情,有时候并不是你做好前期调研,做好一切准备就一定会成功的,因为总有出人意料的事情发生所以要随时做好重新开始的准备。

posted @ 2018-04-20 20:39  浩族至尊  阅读(146)  评论(1编辑  收藏  举报