Closed. This question is opinion-based。它当前不接受答案。
                            
                        
                    
                
                            
                                
                
                        
                            
                        
                    
                        
                            想改善这个问题吗?更新问题,以便editing this post用事实和引用来回答。
                        
                        去年关闭。
                                                                                            
                
        
每当我需要三个以上的参数时,我总是对函数使用一个数组参数。

示例:考虑这样的函数调用。

processSecondStage($stepTitle, $round, $entryId, $formId, $stepType, $stepAfterApproved, $assigneees, $stageToMove);

我总是喜欢下面的一个。

processSecondStage(array( 'stepTitle' => $title, 'round' => $round, 'stepAfterApproved' => $stepAfterApproved, 'entryId' => $_entryId, 'assigneees' => (array)$_POST['flow-asignee'], 'stageToMove' => $currentStep, 'formId' => $targetFormId, 'stepType' => 'approval'));

优势(我可能错了):

a)可以增加更多的参数

b)可读性

c)订单可以轻松更改

d)默认参数处理更容易

坏处 :

a)特别是当我们的参数少于3-4个时,代码长度会增加。

谁能帮我知道使用array参数的更多缺点吗?

每当我更改其他开发人员代码时(就像我现在要做的那样),我就会觉得使用array作为参数存在一些主要缺点,因为如果不是这种情况,那应该是一种标准做法。

尽管我已经给出了PHP的示例,但是我也可以用其他语言找到它。

谢谢。

最佳答案

当您要传递的内容紧密相关且没有意义时,数组可用作参数。一个经典的例子是由Colorbluegreen(可能还有red)定义的gamma。将这些参数组合成一个数组(或javascript中的对象),可以轻松地将其换出。

始终将数组用作函数的单个参数会使您松散IDE可以给您的参数列表。对于阅读代码的人来说,弄清楚需要传递给函数的内容真是一个地狱。这也为将来的发展打开了大门(哦,这个功能只为我煮咖啡,但是如果我添加另一个可选参数,它也可以让我喝茶。哦,也许我可以让它为我做饭。为什么不添加也可以订购攻击直升机的功能)。

在常规参数列表中,您可以通过引用(function pushElement(array &$sortableArray, $element))传递内容。如果可能的话,在常规数组中也不希望这样做。

关于默认值的一点是有争议的。普通参数列表允许类型提示和默认值:

function action(string $action = 'tickle', string $target = 'Polar bear') {
  print "I {$action} a {$target}";
}


作为数组的单个参数可能仅在传递某种静态配置时才真正发光。您可以使用它来将某些东西的配置与实际代码分开,从而使修改配置变得更加容易。同时,您利用了不必以非常特定的顺序发送20个参数这一事实。



在您的情况下,您给出的参数列表千差万别,篇幅太长,这表明您的函数执行的太多了。它的一部分可能应该移到构造函数,一部分应该应该移到某种Form类。

关于javascript - 使用数组作为参数的缺点? ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/50189161/

10-12 12:46
查看更多