zoukankan      html  css  js  c++  java
  • 参数列表vs结构 CQ

    在给函数传值的时候,我们可以通过参数列表的方式,也可以通过定义一个结构的方式。在最近的工作中,我认为前一种方式更好。
    例如以下代码:

    //通过参数列表传递值
    public void Create(long param1, long param2,long param3)
    {
       ..
    }


    //通过结构传递值
    public sealed class ClassOjbect
    {
       
    public long param1;
       
    public long param2;
       
    public long param3;
    }

    public void Create(ClassObject obj)
    {
       ..
    }

    在第一种方法中,如果我们在参数列表中增加一个参数,那么我们就要修改项目中的其它很多地方,因为它是一个公有方法,立即编译,立即报错。
    在第二种方法中,如果我们在ClassObject中增加一个参数,那么我们似乎不需要修改什么地方,因为参数只是对ClassObject的地址进行引用,而不是里面的成员变量,所以在编译时,几乎不会出现什么错误。
    从表面上看,第二种方法更好一些,因为对系统作出修改后,系统本身没有什么不良反应。但是第二中方法却给bug的产生带来了可能。
    因为Create是一个公有方法,对它的调用带有全局性,我们必须能够保证所有调用Create方法的函数都能够为Create新增的参数赋值。而第二种方法不能够给于这种保证,因为系统没有什么反应,我们必须通过查找的方式来找到所有调用Create的地方,然后给ClassObject对象的新增成员变量赋值。
    而第一种方法却能够很好地解决这个问题,因为我们可以通过系统编译时产生的错误信息,准确地找到调用Create的地方。
    虽然第一种方法的改动很大,并且可能影响到其它的模块,但是它让所有的改动都被挡在了编译阶段。我想谁都不会希望由于改动系统中的某个地方而引入新的bug吧。

    但是话又要说两头,第二种方法还是有用武之地的。但是这个话题就到此为止了,希望各位同行也说说自己的看法。
  • 相关阅读:
    建模时选择SVM还是LR?
    decision_function详解
    HIVE SQL与SQL的区别
    数据不平衡如何处理
    Spring Boot 两步集成 日志收集ELK与分布式系统监控CAT
    Web Application Integrate with Box
    字符编解码的故事(ASCII,ANSI,Unicode,Utf-8区别)
    SharePoint Client Api Search user 几种方法
    C#,反射和直接调用的效率差别
    System.Data.SqlClient.SqlConnectionStringBuilder 链接字符串的问题
  • 原文地址:https://www.cnblogs.com/czy/p/778787.html
Copyright © 2011-2022 走看看