Code Retreat总结

来源:互联网 发布:淘宝投诉怎么撤销 编辑:程序博客网 时间:2024/05/20 20:02

                                            Code Retreat总结

概述:上一个周六,参加了一个由大连华信公司组织的Code Retreat活动,抱着去见识一下真实企业的想法,就报名参加了,活动很好,组织者很nice,总之收获了很多,算是我人生中第一次参加这样的程序员社区活动,现在就活动收获作如下总结。

1.接触到测试的概念
    JUnit测试工具, 的确很有意思,在敲完一些东西后, 自己写几个Test Case测试下自己的代码后, 再继续向前敲, 这给人一种比较踏实的感觉。

2.TDD(Test Drive Development)测试驱动开发
    
    指导老师着重介绍了这种编程方式, 这个方式就是:在没有完成实际的代码开发的时候,先将问题的大致框架(本质的那几个步骤)想明白,然后写出对应的测试方法和测试用例,然后再由这些测试方法,去驱动开发完善对应的实际的代码,当完成一个实际代码并且通过测试以后,再继续完成后续的实际的代码。这种思想和以前的思想是截然相反的。

    个人理解是,当采用这种方式编程去解决一个特定问题的时候,先写出测试方法和测试用例,会让你不会纠结于细节,是站着一个较高、较抽象的层面上去看这个问题(当然你需要是深入理解这个问题后,确定一些无论如何都绕不开的方法或者步骤,这些方法就该是你测试方法)。当你写完测试方法以后,那么此时你就需要对于每一个实际的方法,去纠结它的细节了,是用什么样的算法,什么样的数据结构等等,总之你最后能够完成这个实际方法并且通过测试即可,在完成这个实际方法的时候,你不用去考虑其他的方法是细节了,因为你知道其他的方法的代码肯定是正确的的,因为他们是严格测试过并且符合你的大体框架。

3.生命游戏 Game of Life
    
    这是活动中的题目,这个是英国数学家康威提出来的,具体介绍有维基百科。https://en.wikipedia.org/wiki/Conway's_Game_of_Life
    以下是LifeGame类的代码,这个问题就是按照TDD的编程方式一步一步写出来的,先写出了两个测试方法,然后对应的去实现细节。

    public class LifeGame {    private static int[][] life;    public LifeGame(int[][] originLife){        this.life = originLife;        Log.v("===TAG life===", life.toString());    }    public int[][] getNextGenLife(int[][] oldGenLife){        this.life = oldGenLife;        int[][] nextGen = new int[this.life.length][this.life[0].length];        for(int i = 0; i < life.length; i++)            for(int j = 0; j < life[i].length; j++ )                nextGen[i][j] = getNextGenStatus(i + 1, j + 1);        return nextGen;    }    /**     *     * @param x cell's row index (range 1 to r)     * @param y cell's clomun index (range 1 to c)     * @return the next status of the cell     */    private  final int getNextGenStatus(int x, int y){        //no life living off the edge        if((y == 1) || (y == life[0].length) || (x == 1 || x == life.length ))            return 0;        int neighborNums = getLivingNeighborNums(x, y);        //rule        if(neighborNums < 2 || neighborNums > 3 )            return 0;        if(neighborNums == 3)            return 1;        return life[x - 1][y - 1];    }    /**     * get the number of living neighbor by giving x, y     * @param x :the row index     * @param y : the column index     * @return the number of living neighbor     */    private final int getLivingNeighborNums(int x, int y){        int cnt = 0;        int[][] dir = {{-1,-1}, {-1,0}, {-1,1}, {1,-1}, {1,0}, {1,1},{0,-1}, {0,1}};        for(int i = 0; i < 8; i++){            int xx = dir[i][0] + x - 1;            int yy = dir[i][1] + y - 1;            cnt += life[xx][yy];        }        return cnt;    }}

    这里是关于这个问题的一个 Android Demo https://github.com/Spground/GameOfLife
0 0
原创粉丝点击