什么是陈述式编程?

我一直听到这个术语在几种不同的情况下被抛弃。 它是什么?


声明式编程是指你编写代码的方式,它描述了你想要做什么,而不是你想要做什么。 由编译器决定如何。

声明式编程语言的例子是SQL和Prolog。


其他答案已经在解释什么是声明式编程方面做了出色的工作,所以我只是提供一些为什么可能有用的例子。

上下文独立

声明程序是独立于上下文的。 因为他们只声明最终目标是什么,而不是实现这个目标的中间步骤,同一个程序可以用在不同的环境中。 这与命令式程序很难做到,因为它们通常依赖于上下文(例如隐藏状态)。

yacc为例。 这是一个解析器生成器。 编译器编译器,一个用于描述语言语法的外部声明式DSL,以便该语言的解析器可以从描述中自动生成。 由于语境的独立性,你可以用这样的语法做很多不同的事情:

  • 为该语法生成​​一个C语言分析器( yacc的原始用例)
  • 为该语法生成​​一个C ++解析器
  • 为该语法生成​​Java解析器(使用Jay)
  • 为该语法生成​​一个C#解析器(使用GPPG)
  • 为该语法生成​​一个Ruby解析器(使用Racc)
  • 为该语法生成​​树形图(使用GraphViz)
  • 只需做一些漂亮的打印,幻想格式和yacc源文件本身的语法突出显示,并将其包含在您的参考手册中,作为您的语言的语法规范
  • 还有很多 …

    优化

    因为你没有规定计算机采取哪些步骤以及按照什么顺序,它可以更自由地重新安排程序,甚至可以并行执行一些任务。 一个很好的例子是SQL数据库的查询规划器和查询优化器。 大多数SQL数据库允许您显示他们实际执行的查询与您要求他们执行的查询。 通常,这些查询看起来没有任何关系。 查询规划者会考虑到你甚至不曾想到的事情:例如磁盘盘片的旋转延迟,或者某个完全不同的用户的一些完全不同的应用程序刚刚执行了类似的查询和表加入并且你努力工作以避免加载已经在内存中。

    这里有一个有趣的折衷:机器必须更努力地弄清楚如何做一些事情,而不是一个命令式语言,但是当它确实解决它时,它有更多的自由和更多的信息来优化阶段。


    松散:

    声明式编程倾向于: -

  • 一组声明或声明性声明,每个声明都有含义(通常在问题域中),并且可以独立和孤立地理解。
  • 势在必行的编程倾向于: -

  • 命令序列,每个命令执行一些操作; 但在问题领域可能有或没有意义。
  • 因此,一种必要的风格可以帮助读者理解系统实际正在做什么的机制,但是可能对其意图解决的问题没有多少洞察力。 另一方面,声明式风格有助于读者理解问题领域和系统解决问题的方法,但在力学问题上信息量较少。

    真正的节目(甚至是那些赞成频谱末端的语言,例如ProLog或C)都倾向于在不同的时间点出现不同程度的风格,以满足作品不断变化的复杂性和通信需求。 一种风格不优于另一种; 他们只是为了不同的目的,而且,就像生活中的许多事情一样,适度是关键。

    链接地址: http://www.djcxy.com/p/22895.html

    上一篇: What is declarative programming?

    下一篇: Caching Patterns in ASP.NET