Java 函数说明-它是一个属性、特殊代码、过程/例程的另一个词还是有多个定义?

Java 函数说明-它是一个属性、特殊代码、过程/例程的另一个词还是有多个定义?,java,c#,function,functional-programming,terminology,Java,C#,Function,Functional Programming,Terminology,我是一名从Java到C的初级/中级程序员,一直在阅读一些关于Java上的函数。我的理解是,C#中的名称空间相当于java中的包。使用名称空间与导入包相同,但也可以使用嵌套的名称空间。类存在于名称空间中,方法存在于类中。但我在哪里读到函数是独立于类的?那么函数不是方法吗?这是否意味着在C#中,您可以在名称空间中的类之外定义函数,并且在导入名称空间后可以像在类中使用方法一样使用它们?在实际应用中,比如说,如果我试图编写一个数学库,那么编写函数或静态方法会更好吗?两者在用法上有什么不同吗 可以看出,我

我是一名从Java到C的初级/中级程序员,一直在阅读一些关于Java上的函数。我的理解是,C#中的名称空间相当于java中的包。使用名称空间与导入包相同,但也可以使用嵌套的名称空间。类存在于名称空间中,方法存在于类中。但我在哪里读到函数是独立于类的?那么函数不是方法吗?这是否意味着在C#中,您可以在名称空间中的类之外定义函数,并且在导入名称空间后可以像在类中使用方法一样使用它们?在实际应用中,比如说,如果我试图编写一个数学库,那么编写函数或静态方法会更好吗?两者在用法上有什么不同吗

可以看出,我对函数的实际定义也有点混淆。它是任何代码都可以拥有的属性(每个输入都有一个输出的数学属性)吗?如果是,这是否意味着静态方法也是函数(只要它不依赖于其范围之外的变量)?它是一种特殊类型的方法/例程,使用委托/其他语法定义,可以作为参数传递并分配给变量?对堆栈溢出问题的回答似乎有相当大的不同,并且公认的答案与谷歌搜索的最重要结果不同


我意识到有很多问题,但它们似乎是相互关联的(至少对我来说)。所有这些定义都在我可怜的脑袋里回荡,任何澄清这个概念或纠正我的误解的东西都会帮上大忙。用例子来解释会令人惊讶,因为我在术语方面有困难。多谢各位

让我们保持简单。无论函数的定义如何,在C#或Java中,您都有:

  • 只能包含类的包或命名空间;不是函数,也不是方法
  • 在一个类中,有一些方法可以用作函数,从某种意义上说,它们接收参数并可能输出结果
  • 您可以使用Java或C#中的静态方法。这些方法依赖于类,而不是对象,这意味着它们直接从没有对象实例的类调用
  • 还有称为lambda表达式的实体。这些是定义为函数的对象。这些用于函数式编程
差不多就是这样。没有直接从包或名称空间定义的函数,因为包中没有包,名称空间中也没有名称空间

对于
Math
库,您可以定义一个公共
Math
类及其所有函数,或者在本例中定义静态方法。因此,您可以调用:
Math.sin(…)
Mas.cos(…)
,等等

请注意,lambda表达式用于简化某些编程领域,例如:代码中的SQL表达式、筛选集合等


最后请注意,lambda表达式不应与属于类的方法混淆。我建议大家读一读MSDN的好书。阅读本书将有助于理解这样一个有趣但内容丰富的主题。

这取决于所使用的定义。通常,方法是绑定到实例的函数类型。因此,方法是函数,具有附加属性/限制。然而,其他类型的“函数”(即C#中的Func、Action、delegate)与任何实例都是“独立”的。属性通常根本不被认为是函数(尽管有些属性可能表示/计算函数,并且C#中的“get”-属性可以执行任意代码.。@user2864740,函数令人困惑。这里的函数不同于函数的数学定义(关于一个输入一个输出的部分)?所谓独立,你是说它们可以在类之外使用,还是说它们必须在类中声明,但可以在不实例化类的情况下访问?只有函数式编程语言通常遵循更严格的定义,Haskell是更好的例子之一。在其他语言中,函数通常是“一些被调用以执行可能返回值和/或执行其他副作用的‘预定义代码’”。不太整洁:)啊,定义上的差异很有意义。函数一般不同于函数编程中的函数,后者与数学定义相一致。委托、函数等都是函数编程和一般意义上的函数,而方法只是更一般意义上的函数。明白了。关于类独立性的部分必须来自C。当你说“根据你的定义作为函数的方法”时,你指的是许多定义中的哪一个?并非所有方法都满足函数的数学定义,因为它们可能依赖于全局变量,而全局变量可能不同。在本教程中,函数标记为委托。那么,它们只是一种特殊的方法吗?方法是否标记为static和delegate这两个函数?我更正了我所说的“根据您的定义”。。。。这样说是不公平的。在问题中提到的codeproject教程中,他们讨论的是lambda函数,事实上,lambda函数是确实是函数的对象。我相信你的混淆是有道理的,因为你读了一篇如此密集的文章。我建议你从更轻的东西开始,比如我在回复中提到的那篇文章: