优雅编程之这样写函数,你就“正常”了(二)

开心一笑

【儿子和爸爸看电视,剧中男主角跪下向女主角求婚。 儿子好奇地问:“爸爸,你向妈妈求婚时有没有下跪?” 爸爸:“没有。你妈妈说以后跪的机会多着呢,不差这一次。】

提出问题

代码整洁之道对函数整洁的几点总结和观点????

解决问题

下面是看《代码整洁之道》后,自己总结的几点关于函数整洁之道的总结:

1)Function should do one thing. They should do it well. They should do it only. "
(函数只应该做一件事情,把一件事情做好,而且只由它来做这一件事情);

例:

/**
 * 只做好一件事
 */
public void onlyDoOneThing(){
    
}

2)短小,以行数来要求似乎有些苛刻,一个行数在20行以内被称为小函数,或是要在5行以内才是小函数,有一些极端.

3)函数中的缩进层级不应该多于一层或者两层;

例:

/**
 * 只做一件事
 */
public void onlyDoOneThing(){
    String ay = "";
    Boolean flag = true;
    /** 第一层级 不错 **/
    if(flag){

        /** 第二层级 还能接受 **/
        if(flag){

            /** 第三层级 没法接受了 **/
            if(flag){
                
            }
        }
    }
}

4)函数参数:应该少于2个,如果函数超过2元:应该将其中的某些参数封装成类;

例:

/**
 * 只做一件事
 * @param arg1  参数1
 */
public void onlyDoOneThing(String arg1){
    
    System.out.println("一个参数,不错!!!");
}

/**
 * 只做一件事
 * @param arg1  参数1
 * @param arg2  参数2
 */
public void onlyDoOneThing(String arg1,String arg2){
    
    System.out.println("两个参数,能接受和理解!!!");
}

/**
 * 只做一件事
 * @param arg1  参数1
 * @param arg2  参数2
 * @param arg3  参数3
 * @param arg4  参数4             
 */
public void onlyDoOneThing(String arg1,String arg2,String arg3,String arg4){

    System.out.println("3个或3个以上的参数,没法接受!!!");
}

解决方法

Class XXX{
    private String arg3;
    privte  String arg4;
    //省略set get方法
}

5)一个函数要么做一件事(指令),要么回答一件事(询问)

package com.hwy.test;

/**
 * 代码整洁之道
 * Created by Ay on 2016/7/11.
 */
public class CodeCleanTest {

    public static void main(String[] args) {

        /** 约会 **/
        engagementWithMe();
        /** 表白(询问) **/
        boolean isMerryMe =  canMerryMe();

        if(isMerryMe){
            /** 结婚(指令)  **/
            getMarried();
        }

    }

    /**
     * 约会
     */
    public static void engagementWithMe(){
        System.out.println("约会");
    }

    /**
     * 表白
     */
    public static boolean canMerryMe(){
        return true;
    }

    /**
     * 结婚
     */
    public static void getMarried(){
        System.out.println("结婚");
    }


}

6)使用描述性的名字,函数名字:动/名词形式;

7)分离try/catch块:集中在一个函数中;

例:

package com.hwy.test;

/**
 * 代码整洁之道
 * Created by Ay on 2016/7/11.
 */
public class CodeCleanTest {

    public static void main(String[] args) {

        try{
            /** 约会 **/
            engagementWith();
            
        }catch (Exception e){
            logError(e);
        }
    }

    /**
     * 约会
     */
    public static void engagementWith(){
        System.out.println("约会");
    }

    /**
     * 处理异常
     * @param e
     */
    public static void logError(Exception e){
        System.out.println(e.getMessage());
    }

}

8)使用异常代替返回错误码:这样错误代码可以从主路径代码中分离出来,避免嵌套;

/**
 * 更新决策
 * @param dePolicyDecisionDTO
 * @return
 * @throws IllegalAccessException
 * @throws NoSuchMethodException
 * @throws InvocationTargetException
 */
@Override
public DePolicyDecisionDTO update(DePolicyDecisionDTO dePolicyDecisionDTO) throws IllegalAccessException, NoSuchMethodException, InvocationTargetException {
    DePolicyDecision exists = policyDecisionRepository.findByMatterNameAndType(dePolicyDecisionDTO.getMatterName(), dePolicyDecisionDTO.getType());
    if(exists!=null&&!exists.getId().equals(dePolicyDecisionDTO.getId())){
        /** 这里使用异常,错误代码可以从主路径代码中分离出来,BusinessExceptio是公司自己封装的异常类 **/
        throw new BusinessException(ErrorCode.De.alreadyTypeExists);
    }
    DePolicyDecision dePolicyDecision = new DePolicyDecision();
    PropertyUtils.copyProperties(dePolicyDecision, dePolicyDecisionDTO);
    policyDecisionRepository.saveAndFlush(dePolicyDecision);
    return policyDecisionDAO.findDtoById(dePolicyDecisionDTO.getId());
}

9)阅读代码,自顶向下规则:每个函数后面都跟着下一个抽象层的函数;

努力

读书感悟

来自《解忧杂货店》

  • 心,一旦离开了,就再不会回来。
  • 人与人之间情断义绝,并不需要什么具体的理由。就算表面上有,也很可能只是心已经离开的结果,事后才编造出的借口而已。因为倘若心没有离开,当将会导致关系破裂的事态发生时,理应有人努力去挽救。如果没有,说明其实关係早已破裂。
  • 这么多年咨询信看下来,让我逐渐明白一件事。很多时候,咨询的人心里已经有了答案,来咨询只是想确认自己的决定是对的。所以有些人读过回信后,会再次写信过来,大概就是因为回答的内容和他的想法不一样。
  • 就算是恨,也是一种很抽象的感情。

其他

如果有带给你一丝丝小快乐,就让快乐继续传递下去,欢迎转载,点赞,顶,欢迎留下宝贵的意见,多谢支持!

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 219,490评论 6 508
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,581评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 165,830评论 0 356
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,957评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,974评论 6 393
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,754评论 1 307
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,464评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,357评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,847评论 1 317
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,995评论 3 338
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,137评论 1 351
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,819评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,482评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,023评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,149评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,409评论 3 373
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,086评论 2 355

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 172,185评论 25 707
  • 函数是代码组合的基本单位,高级编程语言的发展从结构化到面向对象,再到最近大有要复兴之势的函数式编程,函数都是组成这...
    TheAlchemist阅读 2,172评论 6 21
  • 我喝一杯我不能喝的酒 晕眩后 打碎一件琉璃雕塑 那是一支血红的玫瑰 我知道,这是罪行 我想要,你给我一支烟, 我想...
    瓦力LY阅读 244评论 2 2
  • 图片发自简书App 1 前几日的头条一直被南方日报成希强奸实习生的丑闻牢牢霸占,稳居第一,随之而来的舆论,总是让人...
    诗意黯然的痞子阅读 3,265评论 14 20
  • 身体不适终于恢复,运动也继续high起来。再次调整运动时间,中午加入45分钟午休后,神清气爽,起来运动简直棒棒棒!...
    阿米尼90阅读 153评论 0 0