【问题标题】:How does a programming language support both functional and object oriented programming? [closed]编程语言如何同时支持函数式和面向对象的编程? [关闭]
【发布时间】:2017-12-12 10:03:15
【问题描述】:

来自https://stackoverflow.com/a/44981969/156458

一种语言有两种常用方法来支持两者 函数式和面向对象的编程。

  • 每个可调用对象都是一个方法,函数只是一个隐藏类的方法,这是 Ruby 采用的方法;

  • 或者每个可调用对象都是一个函数,而对象方法只是具有隐式或显式参数的函数,它接收 调用方法的对象,这是 蟒蛇。

这是一个准确的说法吗?声明的来源是什么?

以下语言支持函数式和面向对象编程的方法是什么:

  • 斯卡拉
  • Java
  • C#?

谢谢。

【问题讨论】:

  • 还有 other 方法,但 claim 是这两种常见的方法......然后用两个例子来证实。 Scala、Java 和 C# 是用虚拟机实现的(前两个使用相同的虚拟机)——这意味着它是支持它的编程语言和运行时环境的组合。
  • @NathanHughes 你的意思是 scala 使用了不同于上面提到的两种方法吗?
  • 我认为这句话是在观察语言设计者如何倾向于将基本支持作为事后的想法。实际上,Scala 必须使用 jvm 支持的结构,如类。但是像clojure这样的非OO jvm语言也必须这样做
  • 如果您了解什么是函数式编程和 OOP,您将开始注意到语言用于支持这些功能的方法。我真的推荐 Venka 大师的这个关于函数式编程的视频 (youtube.com/watch?v=fWKp-v0De9g)

标签: oop functional-programming programming-languages


【解决方案1】:

函数式编程基于以下概念:

  • 高阶函数:您可以将函数传递给函数并从函数返回函数。更多详情here
  • 不可变对象:创建后无法更改状态的对象。更多详情here
  • 纯函数:没有副作用的函数,换句话说,当函数接收到输入时,每次都会产生相同的输出。更多详情here

如果你能做所有这些事情,该语言支持函数式编程。

斯卡拉:

  • 基于JVM,所以支持OOP
  • 具有创建不可变对象的val 语法。
  • 支持high order function
  • 程序员负责创建纯函数

Java 8:

  • 支持 OOP
  • 具有“final”关键字和有效的 final 以使对象不可变
  • 支持高阶函数lambda expression
  • 程序员负责创建纯函数

C# 也支持函数式编程,但我没有专业知识来回答您的问题!

【讨论】:

    猜你喜欢
    • 2018-08-02
    • 2023-03-21
    • 1970-01-01
    • 2021-06-24
    • 2014-02-23
    • 2010-12-06
    • 2016-04-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多