zoukankan      html  css  js  c++  java
  • 一段代码的感情色彩和心理活动

            同事希望我讲一讲代码规范(尤其是代码注释规范),还希望我进一步讲讲软件开发和心理学的关系,那我就先讲一个C++编码规范中的例子:在一个函数中,如果经过复杂的条件判断,最终执行业务逻辑,这有两种常见的编程风格,一个是逐个判非,如果不满足条件都返回false,一个是逐层判是,最终执行业务逻辑,就像下面这个表格。我称之为悲观盲目模式和乐观保守模式,好像有点不符合中文的逻辑,貌似都是悲观保守和盲目乐观呀,怎么这里不符合中文惯例呀?

    悲观盲目模式

    乐观保守模式

    if(! cond1)

      return false ;

    if(! cond2)

      return false ;

    if(! cond3)

      return false ;

    if(! cond4)

      return false ;

    DoSomething();

    return true ;

    bool bFoo = false ;

    if( cond1)

      if( cond2)

         if( cond3)

           if( cond4)

           {

            DoSomething();

            bFoo = true ;

           }

      return bFoo ;

            我在北航上学时,曾经有位老师说英文是最适合做软件设计、描述软件架构的,不过是老先生是个香蕉人,成长在美国,工作在香港,客串在大陆,老人家用了10分钟描述一个“船到桥头自然直”的意思,最后大家明白了,一个同学告诉他这个成语,老教授才不再说中文的不是了。

            闲话少提,我起的名字没有错,逐个返回false的貌似很谨慎,很悲观,出一点儿问题就说“我干不了了”,逐层判断的这位可好,象是一个大爷一样,不断提出需求,满足了再提出一个需求,直到最后才给你办事,大家如果办过房贷或者和其他税务局、工商局打过交道的就明白了,第一次去告诉你需要去A部门开证明1,等你第二次带着证明1去了,他让你去B部门开证明2,如此这般,非把你折腾的没脾气了,凑足所有的条件,最后他挑不出毛病了,才给你办事。

            可是大家仔细看,两者对于执行业务的逻辑的真正保护又是如何呢?前者采用排除异常的模型,可是有多少种异常呢?又或者说有多少种异常的组合呢?排除法是否排除了所有的异常,不能,它最大的可能是排除了已知的异常,遗漏了未知的、将来的异常,反之,第二种模式,层层保护,反倒是只在满足已知条件时执行业务,所以就开发者的心理活动而言,写第一种时心里是悲观的,结果是盲目的,第二种是乐观的,结果反倒是保守的。

            讲过几次了,我还需要再讲一次,关于这段代码的心理暗示问题。大家都看电影,有人爱看喜剧,有人爱看悲剧,我就喜欢看喜剧,前些年还爱看周星驰的无厘头,为什么呢?生活已经够紧张的了,再看勾心斗角的宫斗戏、谍战戏都觉得累的慌,还有人爱看悲剧,可能是看着还有更悲惨的事,让人更加的珍惜现在吧。同样的true和false在代码中同样有心理暗示,if(true) 代表顺利,if(false)代表不顺利,所以逐个判非的心理暗示是不顺利,是悲观,当然不排除苦尽甘来,柳暗花明的说法,而逐层判true则是乐观,虽然其else子句可能还是有设置false的语句,但还是完成重点工作的扫尾的含义,当然也不可大意。

  • 相关阅读:
    网页快捷键
    2016年5月3日15:55:23笔记
    【编程的乐趣-用python解算法谜题系列】谜题一 保持一致
    重温离散系列②之良序原理
    重温离散系列①之什么是证明
    浅谈栈和队列
    [leetcode]16-最接近的三数之和
    [leetcode] 4-寻找两个有序数组的中位数
    英语句子的基本结构【转】
    [leetcode] 11-盛最多水的容器
  • 原文地址:https://www.cnblogs.com/fanzhenyong/p/6188805.html
Copyright © 2011-2022 走看看