• 代码整洁之道(一)


    在这里我要对一个知识点做出解释

    隔指令 与询问

    函数要么做什么事,要么回答什么事,但二者不可得兼。函数应该修改某对象的状态,或是返回该对象的有关信息。两样都干常会导致混乱。看看下面的例子:

    public boolean set (String attribute, String value) ;

    该函数设置某个指定属性,如果成功就返回true,如果不存在那个属性则返回false。 这样就导致了以下语句:

    if (set ("username", "unclebob"))...从读者的角度考虑- -下吧。这是什么意思呢?它是在问usemame属性值是否之前已设置为unclebob吗?或者它是在问username属性值是否成功设置为unclebob呢?从这行调用很难判断其含义,因为set 是动词还是形容词并不清楚。作者本意,set 是个动词,但在if语句的上下文中,感觉它像是个形容词。该语句读起来像是说“如果username属性值之前已被设置为uncleob",而不是“设置username属性值为unclebob,看看是否可行,然后.....”。要解决这个问题,可以将set 函数重命名为setAndCheckIfExists,但这对提高if 语句的可读性帮助不大。真正的解决方案是把指令与询问分隔开来、防止混淆的发生。使用异 常替代返回错误码从指令式函数返回错误码轻微违反了指令与询问分隔的规则。它鼓励了在if语句判断中把指令当作表达式使用。

    if (deletePage (page) == E_ 0K)

    这不会引起动词/形容词混淆,但却导致更深层次的嵌套结构。当返回错误码时,就是在要求调用者立刻处理错误。
    if (deletePage (page) == E _0K) {
    if (registry. deleteReference (page .name) == E_ 0K) {
    if (configKeys .deleteKey (page . name .makeKey()) ==E _0K) {
    logger .1og ("page deleted") ;

    是多疑还是去相信 谎言背后的忠心 或许是自己太执迷 命题游戏 沿着他的脚步 呼吸开始变得急促 就算看清了面目 设下埋伏 真相却居无定处 I swear I'll never be with the devil 用尽一生孤独 没有退路的路 你看不到我 眉眼焦灼却不明下落 命运的轮轴 伺机而动 来不及闪躲 沿着他的脚步 呼吸开始变得急促 就算看清了面目 设下埋伏 真相却居无定处 I swear I'll never be with the devil 用尽一生孤独 没有退路的路 你看不到我 眉眼焦灼却不明下落 命运的轮轴 伺机而动 来不及闪躲 你看不到我 眉眼焦灼却不明下落 命运的轮轴 伺机而动 来不及闪躲 黑夜和白昼 你争我夺 真相被蛊惑 心从不退缩 这天堂荒漠 留给孤独的猎手
  • 相关阅读:
    第6章分支语句和逻辑运算符
    第2章开始学习C++
    第09章内存模型和名称空间
    JS的流程控制语句之循环语句
    JS的字符串类型
    JS的数据类型转换
    JS的布尔值类型
    JS的运算符
    JS的数字类型
    JS的流程控制语句之分支语句
  • 原文地址:https://www.cnblogs.com/muailiulan/p/11071299.html
Copyright © 2020-2023  润新知