MyException - 我的异常网
当前位置:我的异常网» VC/MFC » 关于敏捷开发和小函数,小弟我觉得纯属编程风格有关

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

www.MyException.Cn  网友分享于:2013-02-23  浏览:8次
关于敏捷开发和小函数,我觉得纯属编程风格问题,很多流行观点我并不认同
最近才看到敏捷开发的一点观点,一般我对这种纯理论讨论不太关心,程序员的编程风格哪个更好,完全是一个自己个人的东西,这个很难定论的。

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

刚才看了一个观点,函数不要超过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,几百行函数又算个什么?大括号自动给你标红,变量自动给你高亮,爽死你.

文章评论

 程序员的样子
程序员的样子
老美怎么看待阿里赴美上市
老美怎么看待阿里赴美上市
程序员都该阅读的书
程序员都该阅读的书
为啥Android手机总会越用越慢?
为啥Android手机总会越用越慢?
程序员必看的十大电影
程序员必看的十大电影
我跳槽是因为他们的显示器更大
我跳槽是因为他们的显示器更大
老程序员的下场
老程序员的下场
Web开发者需具备的8个好习惯
Web开发者需具备的8个好习惯
程序员的一天:一寸光阴一寸金
程序员的一天:一寸光阴一寸金
写给自己也写给你 自己到底该何去何从
写给自己也写给你 自己到底该何去何从
初级 vs 高级开发者 哪个性价比更高?
初级 vs 高级开发者 哪个性价比更高?
一个程序员的时间管理
一个程序员的时间管理
做程序猿的老婆应该注意的一些事情
做程序猿的老婆应该注意的一些事情
亲爱的项目经理,我恨你
亲爱的项目经理,我恨你
程序员最害怕的5件事 你中招了吗?
程序员最害怕的5件事 你中招了吗?
科技史上最臭名昭著的13大罪犯
科技史上最臭名昭著的13大罪犯
那些争议最大的编程观点
那些争议最大的编程观点
“肮脏的”IT工作排行榜
“肮脏的”IT工作排行榜
要嫁就嫁程序猿—钱多话少死的早
要嫁就嫁程序猿—钱多话少死的早
程序员应该关注的一些事儿
程序员应该关注的一些事儿
中美印日四国程序员比较
中美印日四国程序员比较
60个开发者不容错过的免费资源库
60个开发者不容错过的免费资源库
程序猿的崛起——Growth Hacker
程序猿的崛起——Growth Hacker
Java 与 .NET 的平台发展之争
Java 与 .NET 的平台发展之争
程序员周末都喜欢做什么?
程序员周末都喜欢做什么?
程序员眼里IE浏览器是什么样的
程序员眼里IE浏览器是什么样的
如何成为一名黑客
如何成为一名黑客
为什么程序员都是夜猫子
为什么程序员都是夜猫子
编程语言是女人
编程语言是女人
我是如何打败拖延症的
我是如何打败拖延症的
10个调试和排错的小建议
10个调试和排错的小建议
10个帮程序员减压放松的网站
10个帮程序员减压放松的网站
程序员的鄙视链
程序员的鄙视链
鲜为人知的编程真相
鲜为人知的编程真相
代码女神横空出世
代码女神横空出世
总结2014中国互联网十大段子
总结2014中国互联网十大段子
当下全球最炙手可热的八位少年创业者
当下全球最炙手可热的八位少年创业者
十大编程算法助程序员走上高手之路
十大编程算法助程序员走上高手之路
每天工作4小时的程序员
每天工作4小时的程序员
团队中“技术大拿”并非越多越好
团队中“技术大拿”并非越多越好
5款最佳正则表达式编辑调试器
5款最佳正则表达式编辑调试器
Java程序员必看电影
Java程序员必看电影
漫画:程序员的工作
漫画:程序员的工作
如何区分一个程序员是“老手“还是“新手“?
如何区分一个程序员是“老手“还是“新手“?
我的丈夫是个程序员
我的丈夫是个程序员
软件开发程序错误异常ExceptionCopyright © 2009-2015 MyException 版权所有