language-agnostic - 将函数式语言概念与 OO 结合使用 - 有语言吗?

标签 language-agnostic functional-programming oop

我最近在想我在编写 Pythonic 程序时如何不总是使用 OO 的美丽概念。特别是,我想我会对看到一种可以将典型的 Web 脚本编写为的语言感兴趣

# Fictional language 
# This script's combined effect is to transform (Template, URI, Database) -> HTTPOutput

HTTPOutput: 
    HTTPHeaders + Maintext

Flags:                              # This is a transform URI -> Flags 
    value = URI.split('?').after
    refresh = 'r' in value
    sort = /sort=([a-z])/.search(value)

HTTPHeaders:                       # This is a transform Flags -> HTTPHeaders
    'Content-type:...' +  Flags.refresh ? 'Refresh: ...' : ''

Maintext:
    Template.replace('$questions', PresentedQuestions [:20] )

Questions:
    (Flags.sort = 'r') ? RecentQuestions : TopQuestions 

PresentedQuestions:
    Questions % '<h4>{title}</h4><p>{body}</p>'

RecentQuestions:
    Database.Questions . sort('date')  

TopQuestions:
    Database.Questions . sort('votes') 

走着瞧吧?我正在尝试制作尽可能多的对象;每个段落都声明了我称之为转换的东西。例如,有一个变换 HTTPHeaders .在将类、对象和函数组合在一起的命令式语言中:
class HTTPHeaders_class
{
     public char* value
     HTTPHeaders_class() 
     {
         value = ... + Flags.refresh ? + ... // [1] 
     }

}

class Flags_class 
{
     public char* flagstring;
     public bool refresh;
     ...
     Flags_class() 
     {
         value = ... /* [3] */ 
         refresh = ...
     }
}

Flags = new Flags_class (URI)
HTTPHeaders = new HTTPHeaders_class (Flags)   // [2]

但是,我想要无法指定对象应更改 除非生成对象的输入发生变化;并且没有任何副作用。这导致了语言的极大简化。我相信这意味着我们正在做一个 functional programming (“一种将计算视为数学函数评估并避免状态和可变数据的编程范式”)。

我当然尝试使用 Python 类、M-V-C 框架和 Django 之类的东西(感谢答案),但我认为它们没有上面和下面的概念。
  • 每个对象都有一个 value只需编写类名即可引用的字段。
  • HTTPHeader在某处被引用,这意味着一个静态的、不可更改的对象 HTTPHeader尽快创建。所有对 HTTPHeader 的引用然后引用这个对象。
  • 假设我想用相同的 URI 重复该程序对象,而解释器仍在内存中。自 Flags仅取决于 URIHTTPHeaders仅在 Flags ,这些不会重新计算。但是,如果 Database被修改,然后 Questions需要重新计算,因此HTTPOutput也可能会改变。
  • 解释器自动推断初始化类的正确顺序。当然,他们的依赖必须形成一棵树才能发生。

  • 我相信这对于像 web 脚本这样没有副作用的程序来说将是一个有用的模型。是否有一种有用的语言可以编写与此类似的程序?

    最佳答案

    如果您真的想深入研究使用 Python 进行 Web 应用程序开发,那么请查看 Django .在这种情况下,最好使用 MVC 架构,并且 Django 在支持 MVC 应用程序方面做得非常好。

    您可能更感兴趣的是 Declarative programming方法而不是功能方法。函数式编程更关注将输入映射为纯(数学)函数的输出。声明式方法就是说明应该发生什么,而不是如何去做。

    无论如何,深入研究模型- View - Controller 和 Django。您可能会发现它以完全不同的方式符合要求。

    关于language-agnostic - 将函数式语言概念与 OO 结合使用 - 有语言吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/997561/

    相关文章:

    haskell - Haskell 中的代数数据类型是否等于 F# 中的可区分联合?

    generics - 具有唯一 ID 的 Haskell 泛型

    c# - 编译时基于模型的系统设计

    algorithm - 将数字四舍五入为不对称分辨率

    c++ - 这是类型转换吗?这是什么?

    list - 打印列表中最大数字的长度时出现 SML 错误

    java - java编程中方法的声明

    javascript - 在 Javascript 中嵌套对象 - 匿名不是函数错误

    language-agnostic - 给我画彩虹

    language-agnostic - 手动分配实体的 ID 是个好主意吗?