zoukankan      html  css  js  c++  java
  • 『重构--改善既有代码的设计』读书笔记----Remove Assignments to Parameters

    C++存在按值传递和按引用传递两种传递方式,Java严格按照按值传递这种方式来进行。以按值传递方式的角度来说,如果你

    int test(int a)
    {
        if (a > 50)
        {
            a = 1;
        }
    
        return a;
    }

    对于传入参数a进行再次赋值就违反了这个规则。因为你对传入参数进行重新赋值会让代码阅读者产生歧义,他们搞不清甚至看不懂你参数到底代表什么含义,甚至会对你这个参数的稳定性表示担忧。当然,如果在C语言中,对于传出参数

    int test(int a, int *ok)
    {
        if (a > 50)
        {
            a = 1;
            *ok = 1
        }
    
        return a;
    }

    指针这种,我们不必遵循这个规则。

    做法:

    • 建立一个临时变量,把待处理的参数值赋给他。
    • 在对参数赋值之后为界,将之后对参数的引用全部改成对这个临时变量的引用。
    • 修改赋值语句,改为对临时变量赋值。
    • 编译,测试

    所以,我们最终的例子应该改为

    int test(int a, int *ok)
    {
        int res = a;
    
        if (a > 50)
        {
            res = 1
        }
    
        return res;
    }

    保证不对参数进行赋值,可以让函数行为更加清晰。当然在C++或者Java中你可以使用const和final来做限制保护。

  • 相关阅读:
    状态机的常见问题
    基于quartus的高级时序分析
    FPGA中的时钟域问题
    quartus中的时序约束常用方法
    时序约束与时序分析
    FPGA的PCB设计
    AXI4的主机协议代码分析
    selenium 笔记 场景判断
    Codeforces Round #676 (Div. 2) XORwice、Putting Bricks in the Wall、Palindromifier
    Trap HDU
  • 原文地址:https://www.cnblogs.com/rickyk/p/4155244.html
Copyright © 2011-2022 走看看