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

开心一笑

【甲:我用什么词都会造句。
乙:那么你用“希望”找一个句子。
甲:我不会用希望造句。
乙:你怎么又不会了呢?
甲:我照的就是:“我不会用希望造句”。】

提出问题

项目开发中如何简化函数调用???

解决问题

励志图片

以下来自《重构》的简单总结:

Rename Method(函数改名)

函数的名称皆是函数的用途。一个好的函数名称可以体现一个程序员的水平和素养。

Add Parameter(添加参数)

某个函数需要从调用端得到更多信息。为此函数添加一个对象参数。让该对象带进函数所需信息。

请记住,在之前的文章中有提到,如果一个函数的参数超过3个,那么这个函数就需要重构

Remove Parameter(移除参数)

函数本体不再需要这个参数,将该参数去除。(将多余参数删除,不要留下坏味道)

Separate Query from Modifier(将查询函数和修改函数分离)

某个函数既返回对象状态值,又修改对象状态。建立两个不同的函数,其中一个负责查询,另一个负责修改。

Parameterize Method(令函数携带参数)

若干函数做了类似的工作,但在函数主体中却包含了不同的值,建立单一函数,以参数表达那些不同的值

重构前:

class Employee{
    void tenPercentRaise(){
        salary *= 1.1;
    }
    
    void fivePercentRaise(){
        salary *= 1.05;
    }
}

重构后:

void raise(double factor){
    salary *= (1 + factor)
}

Replace Parameter with Explicit Methods(以明确函数取代参数)

你有一个函数,其中完全取决于参数值而采取不同行为。针对该参数的每一个可能值,建立一个独立函数。

Preserve Whole Object(保存对象完整)

你从某个对象中取出若干值,将它们作为某一次函数调用时的参数。改为传递整个对象。

重构前:

int low = daysTempRange().getLow();
int high = daysTempRange().getHigh();
withinPlan = plan.withinRange(low,high)

重构后:

withinPlan = plan.withinRange(daysTempRange())

Replace Parameter with Methods(以函数取代参数)

对象调用某个函数,并将所得结果作为参数,传递给另一个函数,而接受该参数的函数本身也能够调用前一个函数。让参数接受者去除该线参数,并直接调用前一个函数。

重构前

int basePrice = _quantity * _itemPrice;
discountLevel = getDiscountLevel();
double finalPrice = discountedPrice(basePrice,discountLevel);

重构后:

int basePrice = _quantity * _itemPrice;
double finalPrice = discountedPrice(basePrice);

Introduce Parameter Object(引入参数对象)

某些参数总是很自然地同时出现,以一个对象取代这些参数。

代码用一对值来表示一个范围。例如表示日期范围的开始和结束,表示数值范围的upper和lower等等。

Remove Setting Method(移除设置函数)

类中的某个字段应该在对象创建时被设置,然后就不再改变。

Hide Method(隐藏函数)

有一个函数,从来没有被其他任何类用到,将这个函数修改为private

Replace Contructor with Factory Method(以工厂函数取代构造函数)

你希望在创建对象时不仅仅是做简单的,建构动作,将构建函数替换为工厂函数。

Encapsulate Downcast(封装向下转型)

某个函数返回的对象,需要由函数调用者执行向下转型,将向下转型动作移到函数中。

Replace Error Code With Exception(以异常取代错误码)

某个函数返回一个特定的代码,用以表示某种错误情况。改用异常。

Replace Exception with Test(以测试取代异常)

面对一个调用者可以预先检查的条件,你抛出了一个异常。修改调用者,使它在调用函数之前先做检查。

重构前:

double getValueForPeriod(int periodNumber){
try{
    _values(periodNumber);
}catch(ArrayIndexOutOfBoundsException e){
    return 0;
}
    
}

重构后:
double getValueForPeriod(int periodNumber){
//在这里提前检查条件,而不是滥用异常
if(periodNumber >= _values.length) return 0
return _values(periodNumber);
}

不是一种意料外的事件,并不应该抛异常

读书感悟

来自史铁生《病隙碎笔》

  • 人有一种坏习惯,记得住倒霉,记不住走运,这实在有失厚道。
  • 生命就是这样一个过程,一个不断超越自身局限的过程,这就是命运,任何人都是一样,在这过程中我们遭遇痛苦、超越局限、从而感受幸福。所以一切人都是平等的,我们毫不特殊。
  • 人可以走向天堂,不可以走到天堂。走向,意味彼岸的成立。走到,岂非彼岸的消失?彼岸的消失即信仰的终结、拯救的放弃。因而天堂不是一处空间,不是一种物质性存在,而是道路,是精神的恒途。
  • 彻底的圆满只不过是彻底的无路可走。
  • 相信爱才是人类唯一的救助。 这爱,不单是友善、慈悲、助人为乐,它根本是你自己的福。 这爱,非居高的施舍,乃谦恭地仰望,接受苦难,从而走向精神的超越。

其他

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

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

推荐阅读更多精彩内容

  • 阅读《重构》的笔记献上。 重构的定义 重构是在不改变软件可观察行为的前提下改善其内部结构。 重构的节奏 以微小的步...
    陈宇明阅读 11,625评论 13 64
  • 1 Rename Method(函数改名) 修改函数名字以良好表达函数的用途。Motivation:各种大师特别推...
    hklbird阅读 513评论 0 0
  • 开心一笑 【唐僧4人西天取经。,一天,一位女施主缠着唐僧。唐山对孙悟空说:悟空啊,帮我鉴定一下,是人是妖。孙悟空用...
    架构师启示录阅读 540评论 1 9
  • 《重构》读书笔记 总览 第一部分 第一章从实例程序出发,展示设计的缺陷,对其重构可以了解重构的过程和方法。 第二部...
    白桦叶阅读 2,387评论 2 5
  • 有些事不是因为有意义而坚持,而是因为坚持了才有意义! 自从2月3日立春以来,自己坚持不断的每天更新一篇文章。117...
    薛静春阅读 524评论 2 3