Questions tagged «functions»

函数是执行特定任务的代码块。

15
使函数本质上重命名内置函数是否不明智?
在某些情况下,我对最小和最大函数感到困惑。 在一种情况下,当您使用函数取两个值中的更大或更小值时,就没有问题。例如, //how many autographed CD's can I give out? int howManyAutographs(int CDs, int Cases, int Pens) { //if no pens, then I cannot sign any autographs if (Pens == 0) return 0; //I cannot give away a CD without a case or a case without a CD return min(CDs, …

12
为什么大多数编程语言都具有用于声明函数的特殊关键字或语法?[关闭]
大多数编程语言(动态和静态类型的语言)都具有特殊的关键字和/或语法,这些关键字和/或语法与用于函数声明的变量大不相同。我认为函数就像声明另一个命名实体一样: 例如在Python中: x = 2 y = addOne(x) def addOne(number): return number + 1 为什么不: x = 2 y = addOne(x) addOne = (number) => return number + 1 同样,使用Java之类的语言: int x = 2; int y = addOne(x); int addOne(int x) { return x + 1; } 为什么不: int x …

6
为什么“功能与数据之间的紧密耦合”不好?
我在第40页的“ Clojure的喜悦 ”中找到了这句话。32岁,但上周晚饭时有人对我说了同样的话,我在其他地方也听说过: [A]面向对象编程的缺点是函数和数据之间的紧密耦合。 我理解为什么不必要的耦合在应用程序中不好。我也很高兴地说,即使在面向对象的编程中,也应避免避免可变状态和继承。但是我看不到为什么在类上粘贴函数本质上是不好的。 我的意思是,向类添加功能似乎就像在Gmail中标记邮件,或将文件粘贴在文件夹中。这是一种组织技巧,可帮助您再次找到它。您选择一些条件,然后将类似的东西放在一起。在OOP之前,我们的程序几乎是文件中方法的一大包。我的意思是,您必须将函数放在某个地方。为什么不组织它们? 如果这是对类型的公开攻击,为什么他们不只是说将输入和输出的类型限制为一个函数是错误的?我不确定是否可以同意这一点,但是至少我对pro和con类型安全性论点很熟悉。在我看来,这似乎是一个主要的问题。 当然,有时人们会错误地将功能放在错误的类上。但是与其他错误相比,这似乎是一个很小的麻烦。 因此,Clojure具有名称空间。在OOP中将函数粘贴在类上与在Clojure中将函数粘贴在命名空间中有什么不同,为什么这么糟?请记住,类中的函数不一定只在该类的成员上运行。看一下java.lang.StringBuilder-它可以对任何引用类型进行操作,也可以通过自动装箱对任何类型进行操作。 PS此引用引用了一本书,但我没有读过:《Leda中的Multiparadigm编程》:Timothy Budd,1995年。


10
为什么Today()是不纯函数的示例?
看起来,当阅读类似于Wikipedia的有关“纯函数”的文章时,它们被Today()列为不纯函数的示例,但对我来说似乎很纯净。是否因为没有正式的输入参数?为什么在一天中的实际时间不被视为“函数的输入”,在这种情况下,如果您给它相同的输入,即一次执行today()两次,或者又返回原点以再次执行它(可能是一个假设: )),输出将是同一时间。Today()永远不会给您一个随机数。它总是给您一天中的时间。 维基百科的文章说“不同的时间会产生不同的结果”,但这就像说不同x sin(x)会给您带来不同的比率。并且sin(x)是他们纯函数的例子。

1
返回其参数的函数的名称?
不执行任何操作,不接受任何参数且不返回任何内容的函数在传统上称为noop或no-op。下面是一个noop的示例: function noop(){} http://en.wikipedia.org/wiki/NOP 那么,是否有一个函数名称仅用于返回其参数,而不做其他任何事情?这种功能的一个例子: function(a){return a}
34 functions 

6
闭包是否被视为不纯正的功能风格?
在函数式编程中,闭包是否被视为不纯? 似乎通常可以通过将值直接传递给函数来避免闭包。因此,应尽可能避免关闭? 如果它们是不纯的,并且我正确地指出可以避免使用它们,那么为什么这么多函数式编程语言支持闭包? 纯函数的标准之一是“在给定相同参数值的情况下,该函数始终求值相同结果值”。 假设 f: x -> x + y f(3)不会总是给出相同的结果。f(3)取决于的值y不是的参数f。因此f这不是一个纯粹的功能。 由于所有闭包都依赖于不是参数的值,所以任何闭包怎么可能是纯净的?是的,从理论上讲,封闭值可以是恒定的,但仅通过查看函数本身的源代码就无法知道。 这导致我想到的是,同一功能在一种情况下可能是纯净的,而在另一种情况下是不纯净的。不能总是通过研究其源代码来确定一个函数是否纯净。相反,在进行区分之前,可能必须在调用它时就其环境来考虑它。 我在想这个吗?

4
编程语言如何定义函数?
编程语言如何定义和保存函数/方法?我正在用Ruby创建一种解释型编程语言,并且试图弄清楚如何实现函数声明。 我的第一个想法是将声明的内容保存在地图中。例如,如果我做了类似的事情 def a() { callSomething(); x += 5; } 然后,我要在地图中添加一个条目: { 'a' => 'callSomething(); x += 5;' } 这样做的问题是它将变得递归,因为我必须parse在字符串上调用我的方法,该方法在parse遇到字符串时会再次调用doSomething,然后最终将耗尽堆栈空间。 那么,解释型语言如何处理呢?


6
方法提取与基本假设
当我将大方法(或过程或函数)拆分为特定于OOP的问题时,但由于我99%的时间都使用OOP语言,这是我最熟悉的术语,所以请分成许多小方法,我经常发现自己对结果不满意。与这些小方法只是大代码中的代码块相比,要推理这些方法变得更加困难,因为当我提取它们时,我失去了很多来自调用者上下文的基础假设。 后来,当我查看这段代码并看到各个方法时,我不立即知道它们从何处调用,而是将它们视为可以从文件中任何位置调用的普通私有方法。例如,想象一下一个初始化方法(构造方法或其他方法)分成一系列小的方法:在方法本身的上下文中,您清楚地知道对象的状态仍然无效,但是在普通的私有方法中,您可能会假设该对象已经初始化并且处于有效状态。 我所看到的唯一解决方案是whereHaskell中的子句,该子句允许您定义仅在“父”函数中使用的小函数。基本上,它看起来像这样: len x y = sqrt $ (sq x) + (sq y) where sq a = a * a 但是我使用的其他语言没有这样的东西-最近的事情是在本地范围内定义lambda,这可能会更加令人困惑。 因此,我的问题是-您是否遇到了这个问题,甚至看到了这个问题吗?如果这样做,通常如何解决,特别是在“主流” OOP语言中,例如Java / C#/ C ++? 编辑重复项:正如其他人所注意到的,已经有讨论拆分方法的问题和只有一线的小问题。我阅读了它们,他们没有讨论可以从调用者的上下文派生出来的基础假设的问题(在上面的示例中,对象已初始化)。这就是我的问题的重点,这就是为什么我的问题与众不同。 更新:如果您关注下面的问题和讨论,您可能会喜欢John Carmack的这篇文章,尤其是: 除了了解正在执行的实际代码外,内联函数还具有无法从其他位置调用该函数的好处。这听起来很荒谬,但是有一点是正确的。随着代码库在多年使用中的增长,将有很多机会采用快捷方式并仅调用仅执行您认为需要完成的工作的函数。可能有一个FullUpdate()函数调用PartialUpdateA()和PartialUpdateB(),但是在某些特定情况下,您可能意识到(或认为)您只需要执行PartialUpdateB(),并且通过避免使用其他方法可以提高效率。工作。大量的错误源于此。大多数错误是由于执行状态不完全符合您的想法而导致的。

2
为什么将大型匿名函数作为参数传递给其他函数,从而在JavaScript中得到如此广泛的接受?
我有一个观点(我肯定会与某些人共享),因为传递包含多行代码的匿名函数,因为其他函数的参数会极大地影响可读性和自我文档编制,以至于我认为对于任何可能使用该代码仅声明一个命名函数的人来说,它都要好得多。或者至少在声明主函数之前将该匿名函数分配给变量 但是,许多JavaScript库(jQuery,d3.js / NVD3.js)仅举几个例子,就以这种方式使用大型函数。 为什么这在JavaScript中如此广泛地被接受?它是一种文化的东西,还是我缺少的优势,这将使使用它比声明命名函数更可取?

6
Swift函数与计算属性
假设我有一个Event如下课程: class Event { private var attendees: [Person] = [] // Case 1 //******* // Should I use a func… func countOfAttendees() -> Int { return attendees.count } // …or a var var countOfAttendees: Int { return attendees.count } // Case 2 //******* // Should I use a func… func …

5
函数调用中的多个参数与单个数组
我有一个函数,它接受一组参数,然后将它们作为条件应用于SQL查询。但是,尽管我赞成包含条件本身的单个参数数组: function searchQuery($params = array()) { foreach($params as $param => $value) { switch ($param) { case 'name': $query->where('name', $value); break; case 'phone': $query->join('phone'); $query->where('phone', $value); break; } } } 我的同事更喜欢显式列出所有参数: function searchQuery($name = '', $phone = '') { if ($name) { $query->where('name', $value); } if ($phone) { $query->join('phone'); $query->where('phone', $value); …

2
提供执行相同操作的不同功能签名是一个好主意吗?
这是一个用三个值构造的C ++类。 class Foo{ //Constructor Foo(std::string, int, char); private: std::string foo; char bar; int baz; }; 所有参数类型都不同。 我可以重载构造函数,因此顺序无关紧要。 class Foo{ //Constructors Foo(std::string, char, int); Foo(std::string, int, char); Foo(char, int, std::string); Foo(char, std::string, int); Foo(int, std::string, char); Foo(int, char, std::string); private: std::string foo; char bar; int baz; }; 但这是个好主意吗? 我开始这样做是因为我知道一个类/函数需要什么东西。 我并不总是记得他们接受了什么命令。 …

5
成功时返回true / false与void的函数,失败时抛出异常
我正在构建一个API,一个上传文件的函数。如果文件上传正确,此函数将不返回任何内容/无效,并且在出现问题时将引发异常。 为什么要例外而不是错误?因为在异常中,我可以指定失败的原因(无连接,文件名丢失,密码错误,文件描述丢失等)。我想构建一个自定义异常(带有一些枚举来帮助API用户处理所有错误)。 这是一个好习惯还是返回一个对象(内部包含布尔值,可选错误消息和错误枚举)更好?

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.