一个大函数,有好处,有坏处。总体来说,坏处大于好处。所以要拆分。听起来很简单,做起来就发现问题。原函数运行正常,拆分之后就错了,还不知道哪里有问题,也没有人问。怎么办?
近日因为工作关系,拆分了一个大函数。有了一些体会。写出来,也许有人需要呢?咱这也是全网首发了。
拆分大函数,难题就是如何把变量变成小函数的参数。象C这样的有指针的还好说,一个指针下去就万事大吉。对于JAVA这种语言就很麻烦:值传下去容易,问题是变量会变。这种情形有两种办法:
- 搞一个结构体。一般不使用这种方法,因为这表示进入函数就要新建一个对象;而且仅仅为了当前函数,浪费。
- 把参数变成字段。如果是静态函数就转变为成员函数。一般推荐这种办法。
在传递过程开发中,为了确保正确,有两个技巧:
- 参数变为字段后,就把参数从原函数删除(在调用之前,可以使用一个init()把这些字段赋值)。这样函数内修改时全部修改的字段,不会产生歧义。
- 小函数的参数,要加上final/const,表示禁止修改。避免修改了还不知道,出错了也不好查。