首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VC/MFC >

关于敏捷开发和小函数,小弟我觉得纯属编程风格有关问题,很多流行观点小弟我并不认同

2012-02-22 
关于敏捷开发和小函数,我觉得纯属编程风格问题,很多流行观点我并不认同最近才看到敏捷开发的一点观点,一般

关于敏捷开发和小函数,我觉得纯属编程风格问题,很多流行观点我并不认同
最近才看到敏捷开发的一点观点,一般我对这种纯理论讨论不太关心,程序员的编程风格哪个更好,完全是一个自己个人的东西,这个很难定论的。

就像当年在学校的时候,所谓哪种学习方法更好。我一般看到诸如学习法的讨论都是一笑而过,每个学习成绩好的学生都不需要看这种东西,或者就是了解一下,每个人都会有自己的一套方法,而这个方法很难用语言表述给别人,别人即使按你的方法做了,也未必要那样的效果。

刚才看了一个观点,函数不要超过7行,超过7行就拆分为函数。问题是如果代码只存在于一处,从来不需要在别处运行,而且,这个代码只完成一种非常单一的功能,我认为就完全没有必要拆分。上一个我随便找到的函数:

C/C++ code
    bool Create(DWORD port,int bufsize)    {        if(mVT->m_lSize) return 0;    //实例非空        if(bufsize<=0) return 0;    //大小非法        bufsize += 4;        CString name;        name.Format(GUID_VIRTMEM_MX_SEND,port);        name += L"_MUTEX";    //生成Recv端Mutex。        mVT->m_hMutex = ::CreateMutex(0,0,name);        DWORD err = ::GetLastError();        if(err!=0){//如果已经生成(此端口发送端已经生成)或者生成失败,返回 0 。            CString msg;            extlib::GetSystemMsg(err,msg);            extlib::Print(L"CreateMutex failed: %s",(LPCWSTR)msg);            CloseHandle(mVT->m_hMutex);            mVT->m_hMutex = 0;            return 0;        }        name.Format(GUID_VIRTMEM_MX_RECV,port);    //生成接收端 Mutex 的名称        name += L"_MUTEX";        mVT->m_sMutex = name;        name.Format(GUID_VIRTMEM_FS,port);    //生成此端口使用的内存块        if(!mVT->m_VMemory.Alloc(bufsize,name)){            Close();            return 0;        }        mVT->m_lSize = bufsize;        name.Format(GUID_VIRTMEM_MX_RECV,port);    //此端口的接听同步 Event 名称        mVT->m_sEventRecv = name;        name.Format(GUID_VIRTMEM_MX_SEND,port);    //此端口的发送同步 Event 名称        mVT->m_sEventSend = name;        name.Format(GUID_VIRTMEM_MX_RETU,port);    //此端口的返回值同步 Event 名称        mVT->m_sEventReturn = name;        mVT->m_hEventRecv = ::CreateEvent(0,0,0,mVT->m_sEventRecv);    //初始状态阻塞        mVT->m_hEventSend = ::CreateEvent(0,0,1,mVT->m_sEventSend);    //初始状态非阻塞        mVT->m_hEventReturn = ::CreateEvent(0,0,0,mVT->m_sEventReturn);    //初始状态阻塞        if((mVT->m_hEventSend==0)||(mVT->m_hEventRecv==0)||(mVT->m_hEventReturn==0)){            Close();            return 0;        }        mVT->m_bExit = 0;        return 1;    }


这个函数顺序的读下来我觉得没有任何的障碍,如果拆分成几个函数,未见得就更清晰,如果需要,我宁可把代码分段注释,这样出来避免函数开销,还可以节省行数(行多了就要翻页),用一行注释取代一个函数我觉得无论从可读性还是运行上都更好。

我不介意语句的长度,看到很多代把比较长的语句换行,我大多都把他们重新写到一行,这样从逻辑上一行代码一个功能,清晰而且不用站很多行,我屏幕宽屏,真没那么长。所谓的看不到代码,需要左右拖的确是非常讨厌的,问题是,这种代码一般我不需要看后面,比如那个if语句,即使有10个我也会写一行,我很少改它,或者看它。我知道它是干什么的就行了。如果按照某些人的思路把这种东西写成函数的话,是查找函数方便呢?还是向右拖一下滚动条方便呢?

不是所有代码都是关键代码,不是所有代码都需要仔细反复查看,这种情况下,行的长度不是问题。最极端的比如一段数百字节的字串,写好之后是不需要动的。一行很好。有人可能建议这种做出资源,问题是这需要额外的操作,直接写到代码里是最快捷的。

我的观点是,很多人为了追求所谓的结构化,美观,风格等东西,有些过头了。适度效率最高。高端技术,往往得不偿失,因为越复杂的技术额外的开支往往更多,用最简单的技术,最直接的方法解决问题是最好的。追求概念,架构,技术的新颖其实往往是简化了一个问题,复杂化了N个问题。

[解决办法]
敏捷开发还是可以的,但过于遵守,就有点教条主义了

[解决办法]
7行的话觉得可以理解为功能函数,如果是拷贝字符串之类的代码的话,多上几行也是没有办法的事情,有些结构体成员就10多个,一次都得赋值。
[解决办法]
函数超过一百行,应该考虑拆分了。7行就拆有点过度设计。

[解决办法]
有些好的编码风格还是可以借鉴一下啊~毕竟一个东西存在就又它存在的理由~
[解决办法]
另人总结出来的东西,还是有一些参考价值的。

至于那个七行的,估计不是用于C或C++。。。
[解决办法]
个人不赞成现在很多人所说的敏捷,因为在国内,大多数人所说的敏捷,只是个噱头而已。

但LZ的观点仔细读了一遍,感觉并没有进行过大量代码的编写,以及项目架构的分析。


[解决办法]
拆函数并不能使单个cpp文件减少行数,不要拆晕了头.使代码的逻辑更清晰才是重点.借助ide,几百行函数又算个什么?大括号自动给你标红,变量自动给你高亮,爽死你.


[解决办法]
7 行,是太过分了点;不过要是几百行还不拆分的话,以后的维护通常会很困难
[解决办法]
俺相当讨厌敏捷开发,吹与装的过分,另外说小函数,有些业务是无法拆分的更小的,必须在一个函数内部反复。

[解决办法]
7行?简直是变态啊!
一个for循环就占3行,一个if else 就占6行。

要是汇编的话,我靠,那得多少个函数
[解决办法]
函数太小,就可能一个函数要传递很多个参数,否则就要使用全局变量,但好像不赞同使用很多全局变量,一是名字冲突,二是代码重用不便。
[解决办法]

探讨
但LZ的观点仔细读了一遍,感觉并没有进行过大量代码的编写,以及项目架构的分析。

[解决办法]
有些东西能拆,有些东西不能拆,能不能拆全看程序本身的,个人认为如果一段代码要很多地方用,就必须要拆!当然就三句五句的就算了!还不够麻烦的

[解决办法]
非常感谢。
[解决办法]
看看!!!!!!!!!!!
[解决办法]
没听说过函数7行的说法,100行以内应该可以接受,多了应该分拆。
任何好的理论都必须看具体适应场合,比如敏捷开发很多理论说的是中小项目和小团队开发。
教条主义般的遵守是一种愚蠢的表现。没必要讨论。
[解决办法]
这很大程度上取决于个人的爱好和习惯。
我的原则是如果有两处或以上的代码重复了,我就会考虑是否把重复代码写在一个函数里。
而且随着编程经验的积累,我更倾向于这样做。
1.逻辑清晰。
2.利于维护和扩展。

一点点意见!
[解决办法]
教条主义的遵守是一种愚蠢的表现,我很赞同;
[解决办法]
想看看这个敏捷开发。。。
[解决办法]
其实我们也不必那么较真,技术言论,一切皆视为参考,而非信仰。

热点排行