2017-07-08 38 views
-1

https://stackoverflow.com/a/44981969/156458編程語言如何同時支持功能和麪向對象編程?

有用於同時支持 功能和麪向對象的編程語言兩種常用的方法。

  • 每個可調用的方法和函數都只是隱藏類的方法,這是Ruby採用的方法;

  • 或每調用是一個函數和對象方法只是與接收 對象的方法是從調用,這是通過 的Python採用的方法的隱式或顯式的參數的功能。

這是一個準確的說法嗎?聲明的來源是什麼?

哪些以下語言支持功能和麪向對象編程的方法:

  • 斯卡拉
  • 的Java
  • C#?

謝謝。

+0

有*其他*方法,但*索賠*是這兩種常見的方法......然後用兩個例子證明。 Scala,Java和C#使用虛擬機來實現(前兩種使用相同的虛擬機) - 這意味着它是編程語言和運行時環境的組合,可以支持它。 –

+0

@NathanHughes你的意思是scala使用與上述兩種不同的方法嗎? – Tim

+0

我認爲這句話是觀察語言設計師是如何傾向於在事後才能對FP做基本支持的。作爲一個實際問題,Scala必須使用jvm支持的構造,比如類。但是像clojure這樣的nonOO jvm語言也必須這樣做 –

回答

1

函數式編程是基於如下概念:

  • 高階函數:你可以傳遞函數的功能和函數返回的功能。更多詳情here
  • 不可變對象:創建後無法更改狀態的對象。更多詳情here
  • Pure函數:函數沒有副作用,換句話說,當一個函數接收到一個輸入時,它每次都會產生相同的輸出。更多詳情here

如果你可以做所有這些事情,該語言支持函數式編程。

斯卡拉:

  • 是基於JVM,所以支持OOP
  • 擁有val語法創建一個不可變對象。
  • 先後爲high order function
  • 程序員的支持是負責創建純函數

的Java 8:

  • 支持OOP
  • 有 '最後的' 關鍵字和有效的最終作出對象不可變
  • 支持高階函數lambda expression
  • 程序員負責創建純函數

C#支持函數式編程太多,但我不具備專業知識來回答你的問題!