下面是对结对编程队友12061166 宋天舒的code review

五个优点:

1.代码的风格优秀,注释不多,但是必要的注释还是有的,比如:

//  三种模式
// mode1仅统计单个单词
// mode2额外统计连续的两个单词
// mode3额外统计连续的三个单词
enum modes { mode1, mode2, mode3 };
// 指示模式的静态变量,供各个函数使用
static modes mode;
// 简单模式中收集单词-词频信息的容器
static ArrayList words = new ArrayList();
// 扩展模式中搜集单词-词频信息的容器
static ArrayList wordsEx = new ArrayList();
// 在简单模式中存储Word对象的哈希表
static Dictionary<Word, Word> hashWords = new Dictionary<Word, Word>();
// 单词-单词映射,其中键是单词的大写形式,值是忽略大小写的单词中字典序最前的形式
static Dictionary<Word, Word> hashWordsEx = new Dictionary<Word, Word>();
// 目录路径
static string directoryPath;

2.代码健壮性良好,能够对多种特殊情况进行错误处理并输出错误信息,比如:

        //  命令行格式错误的退出函数
static void oops1()
{
System.Console.WriteLine(usage);
Environment.Exit(-1);
}
        //  命令行参数错误的退出函数
static void oops2()
{
System.Console.WriteLine("Invalid directory path");
Environment.Exit(-2);
}

3.Main函数短小精悍,函数之间耦合度底,聚合度高,一个函数尽量只处理一种情况

//  入口函数
static void Main(string[] args)
{
// 先检查格式
checkFormat(args);
// 再检查参数
config(args);
// 再统计单词
countWords();
// 再对统计结果进行排序
// 第一关键字是出现次数,从大到小,第二关键字是string,字典序
sortWords();
// 再写到文件中
writeFile();
}

4.对正则表达式的使用驾轻就熟。

5.最终版程序放弃了之前用多线程完成的一版代码,明智的选择!

三个小瑕疵:

1.有的函数虽然被定义了但是从没有被引用过,也没有加相应注释表面函数无用

public int Compare(Object wa, Object wb)
{
if (((Word)wa).times == ((Word)wb).times)
{
return ((Word)wa).word.CompareTo(((Word)wb).word);
}
else
{
return ((Word)wb).times - ((Word)wa).times;
}
}

2.命名规则基本能够遵从帕斯卡命名范式,但是有的地方略有瑕疵,比如:

        static Regex re1p = new Regex(" [a-zA-Z]{3}[a-zA-Z0-9]*");
// 模式2,单词+一个空格+单词
static Regex re2 = new Regex(@"(_|\b)[a-zA-Z]{3}[a-zA-Z0-9]* [a-zA-Z]{3}[a-zA-Z0-9]*");
// 模式2前加一个空格,供模式3寻找连续单词时使用
static Regex re2p = new Regex(" [a-zA-Z]{3}[a-zA-Z0-9]* [a-zA-Z]{3}[a-zA-Z0-9]*");

re2和re2p无法顾名思义,好在有注释,但是命名规范不好

3.同样对于上面的代码,可以看出想要在extend模式中按照空格来找下一个匹配的短语,但是由于正则匹配效率比较低下,没有必要再开一个Regex来匹配带空格的单词+空格+单词,只需将匹配下标转移到一家匹配到的字符串中的空格处继续向下寻找匹配短语即可,使用正则的机会降低了一半,可以提升一定的时间性能。

4.Word类的定义一条注释也没有,建议补充必要注释

两个小建议:

1.没必要再造一个函数来完成排序,只需将相应compare函数重载之后用下列语句就可以简洁的完成排序输出操作中的排序操作,大大减少代码量:

                var collection = from word in a
orderby word descending
select new StringBuilder(word.wordtodisplay).Append(": ").Append(word.Frequency);

2.工程完成之后,已经注释掉的无用代码可以考虑删去,使代码风格更加优美,方便维护人员查看代码

code review作业的更多相关文章

  1. 如何在python脚本开发做code review

    在软件项目开发中,我们经常提到一个词“code review”.code review中文翻译过来就是代码评审或复查,简而言之就是编码完成后由其他人通过阅读代码来检查代码的质量(可编译.可运行.可读. ...

  2. 探究代码审查(Code review)

    Code review 是什么 对软件源代码的系统性检查,查找软件源代码质量,结构,漏洞等问题. PS:Code review  ≍ Code inspections ≥ Code walkthrou ...

  3. 我们是怎么做Code Review的

    前几天看了<Code Review 程序员的寄望与哀伤>,想到我们团队开展Code Review也有2年了,结果还算比较满意,有些经验应该可以和大家一起分享.探讨.我们为什么要推行Code ...

  4. Code Review 程序员的寄望与哀伤

    一个程序员,他写完了代码,在测试环境通过了测试,然后他把它发布到了线上生产环境,但很快就发现在生产环境上出了问题,有潜在的 bug. 事后分析,是生产环境的一些微妙差异,使得这种 bug 场景在线下测 ...

  5. Git和Code Review流程

    Code Review流程1.根据开发任务,建立git分支, 分支名称模式为feature/任务名,比如关于API相关的一项任务,建立分支feature/api.git checkout -b fea ...

  6. 如何搭建开源code review gerrit服务器

    搭建环境:Ubuntu 14.04 一.环境准备 1.Java环境 gerrit依赖,用于安装gerrit环境. 下载:jdk-7u79-linux-x64.tar.gz http://www.ora ...

  7. Code Review Tools

    Code Review中文应该译作“代码审查”或是“代码评审”,这是一个流程,当开发人员写好代码后,需要让别人来review一下他的代码,这是一种有效发现BUG的方法.由此,我们可以审查代码的风格.逻 ...

  8. 15个最佳的代码评审(Code Review)工具

    代码评审可以被看作是计算机源代码的测试,它的目的是查找和修复引入到开发阶段的应用程序的错误,提高软件的整体素质和开发者的技能.代码审查程序以各种形式,如结对编程,代码抽查等.在这个列表中,我们编制了1 ...

  9. Code Review 五问五答

    Code Review 是什么? Code Review即代码审查,程序猿相互审核对方的代码. Code Review能获得什么好处? 提高代码可维护性 你写的代码不再只有编译器看了,你得写出审核人能 ...

随机推荐

  1. code project 上的内存管理的示例代码

    /******************************************************************** created: 2014/03/17 18:53 file ...

  2. 第一章 删掉centos原有的openjdk并安装sun jdk

    一.卸载原有openjdk rpm -qa | grep java 之后,将展示出来的全部卸载掉,我这里是5个 rpm -e --nodeps java-1.7.0-openjdk-1.7.0.111 ...

  3. DUILIB 实现微信气泡聊天效果

    最近由于项目原因,需要做一个产品内嵌的IM聊天系统.而且要象微信类似的效果:界面也要比较炫: 开始考虑用MFC,但MFC的控件自绘很麻烦,后来又考虑QT,倒是使用控件使用方便,但QT库太大,所以也放弃 ...

  4. lamp php的ssl,ssh支持

    Php支持ssl,ssh扩展: 准备:可以成功解析php 1.curl的安装 [root@localhost~]# cd /usr/local/src/ [root@localhost~]# wget ...

  5. MYSQL常用内置函数详解说明

    函数中可以将字段名当作变量来用,变量的值就是该列对应的所有值:在整理98在线字典数据时(http://zidian.98zw.com/),有这要一个需求,想从多音字duoyinzi字段值提取第一个拼音 ...

  6. postgreSQL 统计语句

    pg_stat_statements 是 postgresql 的一个扩展,用来统计查询语句,类似于 mysql 的 慢查询. 安装二进制文件 有些发行版可能没有附带这个扩展,则需要用户自己安装, 本 ...

  7. String,StringBuffer

    String类代表不可变的字符序列. String s1 = "hello"; String s2 = "hello"; s1 == s2  ==> tr ...

  8. 两种方法实现用CSS切割图片只取图片中一部分

    切割图片这里不是真正的切割,只是用CSS取图片中的一部分而已,主要有两种方式,一是做为某一元素的背景图片,二是用img元素的属性.下面有个不错的示例,大家可以参考下 切割图片这里不是真正的切割,只是用 ...

  9. Python中获取异常(Exception)信息

    异常信息的获取对于程序的调试非常重要,可以有助于快速定位有错误程序语句的位置.下面介绍几种python中获取异常信息的方法,这里获取异常(Exception)信息采用try...except...程序 ...

  10. [学习笔记]坚果云网盘,SVN异地代码管理

    SVN的好处不必多说了.但是如果希望有一份自己的用来学习和储备的代码仓库,那么能够异地同步是必不可少的了. 参考作者Mike_QSJ的文章,但是实际上做了很大的改动.一方面使用更常见的windows系 ...