问题标签 [imperative]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
333 浏览

procedural - 是否有可能成功地设计和构建基于程序(命令式)的应用程序?

您能否提供当今程序化并保持高水平完整性和效率的应用程序示例?是否有任何书籍、教程或链接提供了如何成功构建和维护命令式系统的示例?如果您要在这方面提供指导,您会就如何构建它给出什么建议?我之所以这么问,是因为 OOP 通常表现为过程编程的自然发展,但我很难相信情况总是如此。

0 投票
5 回答
4935 浏览

object - 闭包和对象

函数式编程..就像经典(马克吐温的类型)。在阅读另一篇关于 SICP 的文章时,人们正在谈论关闭对那里的思考产生的巨大影响,我想起了这个,这是我很久以前读过的

闭包是穷人的对象 对象是穷人的闭包

(不记得确切的来源,但它是程序员罗塞塔石碑,或编程之禅,或编程的 tau ......谷歌变得如此拥挤,无法找到原始来源)

所以联合程序员......你的看法是什么......是你一直缺少的东西......或者只是一些语法糖,预处理器可以做!

0 投票
5 回答
1681 浏览

programming-languages - 命令式语言可以使用哪些函数式语言技术?

通常与函数式语言相关的哪些技术或范式也可以有效地用于命令式语言?

例如:

  • 递归在没有尾调用优化的语言中可能会出现问题,将其使用限制在少数情况下,因此有用性有限
  • 映射和过滤器已经在非函数式语言中找到了它们的方式,即使它们对它们有一种函数式的感觉

我碰巧真的很喜欢不必担心函数式语言的状态。如果我特别固执,我可能会在不修改变量的情况下编写 C 程序,只将我的状态封装在传递给函数的变量和函数返回的值中。

即使函数不是一等值,我也可以用 Java 将一个对象包装在一个对象中,然后将其传递给另一个方法。就像函数式编程一样,只是不那么有趣。

那么,对于函数式编程的老手来说,当您使用命令式语言进行编程时,您成功应用了 FP 的哪些想法?

0 投票
2 回答
886 浏览

oop - 命令式与疑问式方法

在实现一个类时,更好的做法是为方法返回一个值(疑问式)还是直接在方法内简单地操作类属性(命令式)。

例如,我有一个类构建要输出到 CSV 文件的字符串。我可能会这样做:

或者,我可以这样做:

这仅仅是个人喜好问题,还是有普遍接受的最佳实践指南?

干杯,

安德鲁

0 投票
5 回答
665 浏览

language-agnostic - 声明式语言的实现细节是否天生是命令式的

我正在阅读 Tomas Petricek 和 Jon Skeet 的“函数式编程”,我了解声明式编程和命令式编程之间的区别。

我想知道的是原始运算符和函数是如何实现的,它们是由命令式运算符和函数构造的声明性语言。

干杯

AWC

0 投票
6 回答
2349 浏览

java - 如何在 Haskell 中使用指向父子对象的指针编写对象树?

我遇到了以下问题:我有一棵不同类的对象树,其中子类中的操作使父类无效。在命令式语言中,这是微不足道的。例如,在 Java 中:

我如何在 Haskell 中执行上述操作?我无法解决这个问题,因为一旦我在 Haskell 中构造了一个对象,它就无法更改。

如果发布了相关的 Haskell 代码,我将不胜感激。

编辑:我要解决的问题如下:

我有一个编辑文档的应用程序。文档是对象的层次结构。当子对象的属性被修改时,需要将文档设置为无效状态,以便用户知道需要验证文档。

0 投票
1 回答
4907 浏览

scala - Scala 性能:命令式与函数式风格

我是 Scala 的新手,只是在阅读Scala By Example。在第 2 章中,作者有 2 个不同版本的 Quicksort。

一种是命令式风格:

一是功能风格:

函数式风格相对于命令式风格的明显优势是简洁。但是性能呢?由于它使用递归,我们是否像在其他命令式语言(如 C)中那样为性能损失付出代价?或者,Scala 是一种混合语言,首选“Scala 方式”(函数式),因此效率更高。

注意:作者确实提到了函数式样式确实使用了更多的内存。

0 投票
2 回答
2056 浏览

java - 从并发的角度来看 Java v Scala

我现在开始我的最后一年的项目。我将从 java 和 scala 的角度研究并发方法。从 java 并发模块出来后,我明白为什么人们说共享状态线程方法很难推理。由于 java 线程运行的非确定性方式,您需要担心关键部分,运行竞争条件和死锁等风险。在 1.5 中,这个推理得到了一些清晰,但仍然远非一目了然。

乍一看,scala 似乎通过演员类消除了这种复杂的推理。这使程序员能够从更顺序的角度开发并发系统并且更容易概念化。但是,对于这个积极的方面,我是否正确地说存在一些缺点?例如,假设我们想在两种情况下对一个大列表进行排序 - 使用 java 创建两个线程将列表一分为二,担心关键部分、原子操作等并执行代码。使用 scala,因为它“不共享任何内容”,您实际上必须将 list/2 传递给两个参与者来执行排序操作,对吗?

我想我的问题是,您为更简单的推理付出的代价是在 scala 中必须将集合传递给您的演员的性能开销?

我正在考虑针对这种效果进行一些基准测试(选择排序、快速排序等;),但是因为一个是功能性的,一个是命令式的——我不会从算法的角度比较苹果和苹果。

我非常感谢你们对上述内容的任何看法,让我有一些想法让我开始。非常感谢。

0 投票
2 回答
110 浏览

dependencies - 我想称之为副作用编程,但必须有一个更好的术语

以下编程范例的名称是什么:

代码基于一组解析为真(子句)的逻辑测试执行。该子句由运算符和操作数组成。每个操作数都是一个值/对象。

不像在命令式语言中所做的那样显式评估子句(例如,正常的流控制,如if(){}),而是声明子句并将其绑定到结果代码。当子句满足时,在未来的任何时候,代码都会执行。

所以,它基本上是一个依赖树,它重新评估代码是否应该在依赖改变状态时执行。

例如,

我正在寻找一个更正式的名称和定义,搜索后我没有想出任何东西。它介于声明式和命令式之间,但我从未见过一种语言或范式可以做到这一点。

谢谢,肖恩

0 投票
2 回答
558 浏览

functional-programming - 功能命令式混合

纯函数式编程语言不允许可变数据,但某些计算以命令式方式更自然/直观地表达 - 或者算法的命令式版本可能更有效。我知道大多数函数式语言都不是纯粹的,并且允许您分配/重新分配变量并执行命令式的事情,但通常不鼓励这样做。

我的问题是,为什么不允许在局部变量中操作局部状态,而是要求函数只能访问它们自己的局部变量和全局常量(或者只是在外部范围中定义的常量)?这样,所有函数都保持引用透明性(它们总是在给定相同参数的情况下给出相同的返回值),但在函数内,计算可以用命令式术语表示(例如,while 循环)。

IO 等仍然可以通过正常的功能方式完成 - 通过单子或传递“世界”或“宇宙”令牌。