【问题标题】:What is a common and sensible parameter order for functions?函数的常见且合理的参数顺序是什么?
【发布时间】:2011-05-29 14:43:13
【问题描述】:

假设它们都是强制性的:

function search (haystack, needle)
function search (needle, haystack)

function placeObject (object, column, row)
function placeObject (column, row, object)

function newObject (parent, width, height, isVisible)
function newObject (isVisible, width, height, parent)
function newObject (width, height, isVisible, parent)

我认为这通常是个人选择的问题,应该在整个项目中保持一致。但我想知道是否有更深层次的逻辑来规定每个案例的顺序。

【问题讨论】:

  • 你说过,一致性是关键
  • +1 表示问题。这必须提供见解。

标签: language-agnostic function coding-style parameter-passing


【解决方案1】:

尝试发音预期的调用。

function search (needle, haystack)

大海捞针。

function placeObject (object, column, row)

将对象放置在(列、行)处。

newObject 很难:尽量保持与你的框架一致,如果有的话,把通用参数放在第一位。我将isVisible 放在最后只是因为它是布尔值,并且很难从布尔文字中推断出它的作用。对于多个布尔值,我更喜欢将它们组合成整数类型的标志对象,使用位掩码(或键值字典或字符串,取决于语言)构建以获得可读性:

openFile(path, READ | LOCKED | COMPRESSED | ...)

【讨论】:

    【解决方案2】:

    我能想到一些事情,尽管没有一个是“规则”。它们只是我觉得方便的东西。

    1. 一致性。例如,如果您有复制对象的函数,则与指定源和目标的顺序保持一致。您可以利用人们可能存在的现有偏见(例如,汇编程序 MOV 指令中的操作数顺序或 C 标准库 strcmp 函数的顺序参数)。

    2. 分组。将逻辑上“分组”的事物放在一起很有用。例如如果您的函数正在打开与数据库的连接,则用户名和密码应该放在一起(并且可能也是按照这个顺序)。

    3. 可读性。进行操作的“大”参数应该在较小的参数之前。例如draw_line(canvas, x0, y0, x1, y1) 而不是 draw_line(x0, y0, x1, y1, canvas)。

    4. 将函数视为其参数的前缀运算符也很有用,然后尝试将其转换为中缀以查看什么是自然的。

    如果您的语言支持关键字参数,通常最好使用它们(除非参数和顺序非常明显)。

    【讨论】:

      【解决方案3】:

      我有一种感觉,通常的逻辑是时间的函数。你看,如果你有一个函数:

      public Pizza makePizza(cheese, sauce){}
      

      然后你创建一个变量来确定数组中的顶部数字:

      int toppingNo = 3;
      

      您可能也想将它发送到您的函数,对吧?

      public Pizza makePizza(cheese, sauce, topping){}
      

      我的儿子,这就是参数的诞生方式!

      撇开讽刺不谈,我一直都是这样做的,除非您有明显需要分组的参数,因为它们的相似性,例如坐标系。

      【讨论】:

        猜你喜欢
        • 2016-08-27
        • 2016-08-27
        • 2019-01-28
        • 2020-06-07
        • 2021-05-13
        • 1970-01-01
        • 2012-02-26
        • 1970-01-01
        相关资源
        最近更新 更多