使用多个参数

詹扬

尽管我知道可以使用多个参数,但我只是想知道是否建议使用多个参数,我的意思是多个〜20。我的几个函数将使用约20个参数。

我正在用这些替换全局变量,是否可以使用任何选项。但是,我们不允许使用数组。

示例代码:(鉴于给定的代码,它返回一个项目的数量,我认为实现此功能是主要功能,但这并不理想,因为我需要多次getItemQty代码。

long getItemQty (int nItemCode, int* lQty1001, int* lQty1002, int* lQty1003, int* lQty1004, int* lQty1005, int* lQty1006, int *lQty1007, int* lQty2001, int* lQty2002, int* lQty2003, int* lQty2004, int* lQty2005, int* lQty2006, int *lQty2007, int* lQty3001, int* lQty3002, int* lQty3003, int* lQty3004, int* lQty4001, int* lQty4002, int* lQty4003, int* lQty4004, int* lQty4005, int* lQty4006) {
switch (nItemCode) {
        case 1001: return *lQty1001;
        case 1002: return *lQty1002;
        case 1003: return *lQty1003;
        case 1004: return *lQty1004;
        case 1005: return *lQty1005;
        case 1006: return *lQty1006;
        case 1007: return *lQty1007;
        case 2001: return *lQty2001;
        case 2002: return *lQty2002;
        case 2003: return *lQty2003;
        case 2004: return *lQty2004;
        case 2005: return *lQty2005;
        case 2006: return *lQty2006;
        case 2007: return *lQty2007;
        case 3001: return *lQty3001;
        case 3002: return *lQty3002;
        case 3003: return *lQty3003;
        case 3004: return *lQty3004;
        case 4001: return *lQty4001;
        case 4002: return *lQty4002;
        case 4003: return *lQty4003;
        case 4004: return *lQty4004;
        case 4005: return *lQty4005;
        case 4006: return *lQty4006;
    }
}
linuxfan说恢复莫妮卡

这个问题很好奇,我怀疑还有什么要揭晓的。因此,这个答案也很好奇,我怀疑它可以揭开新的面纱。

我想到的一个(较差的)想法是使事情更具可读性,例如:

long getItemQty(int nItemCode, int q1, int q2, int q3, int q4, int q5, int q6, int q7) {
    switch (nItemCode % 1000) {
        case 1: return q1;
        case 2: return q2;
        case 3: return q3;
        case 4: return q4;
        case 5: return q5;
        case 6: return q6;
        case 7: return q7;
    }
}

if (nItemCode < 5000) res = getItemQty(nItemCode, lQty4001, lQty4002, lQty4003, lQty4004, lQty4005, lQty4006, 0);
if (nItemCode < 4000) res = getItemQty(nItemCode, lQty3001, lQty3002, lQty3003, lQty3004, 0,         0,       0);
if (nItemCode < 3000) res = getItemQty(nItemCode, lQty2001, lQty2002, lQty2003, lQty2004, lQty2005, lQty2006, lQty2007);
if (nItemCode < 2000) res = getItemQty(nItemCode, lQty1001, lQty1002, lQty1003, lQty1004, lQty1005, lQty1006, lQty1007);

在这两种情况下,原始版本都具有较长的开关和许多参数,而该版本具有较少的参数,则可以使用一些宏;对于短参数版本,此宏:

#define FUNC(code, nf) \
  if (code < 5000) res = nf(code, lQty4001, lQty40002... \
  ...(basically the same four lines above)...

可以用

res = FUNC(nItemCode, getItemQty);

但是,一切都取决于最终的应用程序。宏也可以用于生成长声明和getItemQty()中的长开关,或者用OR代替。宏可以(并且应该)用于避免过多重复。

- 编辑 -

实际上,宏可能会更通用:它可以避免引用可能未声明的“ res”变量;但似乎不太好。

有两种可能的方法:

  1. 将该宏保持不变,并在主体中使用类似以下内容的宏:

    int res; FUNC(itemcode_im_interested_in,func_to_call)//将扩展为res = func_to_call(...)

  2. 重新定义宏,如下所示:

#define FUNC(res, code, nf) \
if (code < 5000) res = nf(code, lQty4001, lQty40002... \
...

然后用

int res = FUNC(res, nItemCode, getItemQty);

出于审美原因,我更喜欢第一种形式,但是第二种形式更干净,用途更广。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

jQuery使用多个参数拆分

来自分类Dev

使用多个参数创建问题

来自分类Dev

使用.htaccess传递多个参数

来自分类Dev

Haskell正确使用多个参数

来自分类Dev

使用React Router的多个参数

来自分类Dev

使用React Router的多个参数

来自分类Dev

拒绝使用多个getopts参数

来自分类Dev

在 WHERE 中使用多个参数

来自分类Dev

如何使用Caret包调整多个参数?

来自分类Dev

使用多个参数运行Jar文件

来自分类Dev

Typescript,使用JQuery.on的多个参数

来自分类Dev

使用Express检索多个GET参数

来自分类Dev

使用Numpy测试多个参数的相等性

来自分类Dev

如何使用多个参数映射函数

来自分类Dev

如何传递多个参数并使用它们?

来自分类Dev

如何使用多个参数调用ManagementObject?

来自分类Dev

使用参数创建多个节点和关系

来自分类Dev

使用docopt包含多个参数列表

来自分类Dev

Java MethodHandle; 在多个位置使用参数

来自分类Dev

MySQL存储过程无法使用多个参数

来自分类Dev

.htaccess使用多个查询参数重定向

来自分类Dev

使用多个SET参数更新表

来自分类Dev

对Angular UI Router使用多个regexp参数

来自分类Dev

对多个类使用通用/参数化Java

来自分类Dev

GoJS:在转换函数中使用多个参数

来自分类Dev

如何使用多个排序参数进行排序?

来自分类Dev

WordPress-使用多个参数重写规则

来自分类Dev

映射多个参数-使用pmap_dfr

来自分类Dev

在RMarkdown YAML字段中使用多个参数