问题标签 [declarative-programming]
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.
android - 为什么在像 Flutter 这样的声明式 UI 框架中可以负担得起重新构建视图层次结构?
我正在阅读 Flutter 关于状态管理的官方文档,在此页面中它说:
例如,在 Flutter 中,可以从头开始重建部分 UI,而不是修改它。Flutter 的速度足以做到这一点,如果需要的话,即使在每一帧上也是如此。
作为一名 Android 开发人员,在大多数情况下,构建 aView
确实很昂贵,应该避免。所以我想知道为什么在 Flutter 中重新构建视图层次结构是负担得起的。
View
对比 Android和 Flutter 的类声明,Widget
Android View 有更多的字段并且在构造函数中做了很多工作,所以我猜一个原因是在 Flutter 中创建一个新的类实例比在 Android 中更便宜。但为什么 Android(作为命令式框架)View
比 Flutter(作为声明式框架)需要如此复杂的类来驱动 UI?命令式 UI 和声明式 UI 的 UI 渲染机制的共同点是什么?
java - 使用声明性方法来移动 ArrayList 元素,而不是使用循环
您能否指出一种在不使用 for 循环的情况下移动下面列表元素的方法?请注意,列表的第一个元素不受所执行操作的影响。从 [2, 3, 4, 5] 列表将变为 [2, 2, 3, 4]
java - 如何对两个二维数组的元素求和?
我正在尝试通过使用 java 流 API 将两个二维数组的元素相互添加。
我用一维数组解决了这个问题,但我不知道如何进一步处理二维数组。
这是要转换的代码:
这是我为相同目的编写的代码,但仅使用一维数组:
特别是,我不知道如何在 map()
二维数组上使用该方法。
javascript - 声明式循环与命令式循环
我正在尝试将我的编程风格从命令式转换为声明式,但是有一些概念让我感到困扰,比如循环的性能。例如,我有一个原始的DATA,在操纵它之后,我希望得到 3 个预期结果:itemsHash、namesHash、rangeItemsHash
为了达到预期的结果,命令式只循环一次,而声明式循环至少 3 次( itemsHash
, namesHash
, rangeItemsHash
)。哪一个更好?性能上有什么取舍吗?
java - Java Stream Grouping by multiple fields in declarative way in single loop
我搜索了它,但我主要发现了按聚合字段分组或更改流响应的案例,但不是以下场景:
我有一堂课User
,里面有字段category
和marketingChannel
.
我必须以声明式的方式编写一个方法,该方法接受用户列表并根据
category
和marketingChannel
单独计算用户(即不是groupingBy(... ,groupingBy(..))
)。
我无法在一个循环中做到这一点。这是我必须达到的。
我编写了几个方法如下:
该方法
declerativeMultipleLoop
是声明性的,但每个字段都有一个单独的循环。复杂性:O(noOfFields * 用户数)
问题出在
declerativeMultipleColumn
方法中,因为我最终编写了命令式代码和多个循环。
我想以完全声明性和尽可能高效的方式编写上述方法。即复杂性:O(用户数)
样本输出:
命令式
{business=2, student=2}
{direct=1, google=2, bing=1}
declerativeMultipleLoop
{business=2, student=2}
{direct=1, google=2, bing=1}
declerativeMultipleColumn
groupingBy category and marketChannel
{business={direct=1, google=1}, student={google=1, bing=1}}
在上面的 Implerative Loop 之后。
{企业=2,学生=2}
{直接=1,谷歌=2,必应=1}
kotlin - 在这个使用 reduce() 内部迭代器函数的例子中,为什么累加器不确认这个数字?
我在这里有点困惑。我只是尝试使用 reduce 函数来创建一个字符串,该字符串按编号顺序表示列表的元素。这是代码:
我期望累加器的值在每次迭代后这样累加:
“1.约翰”
“1. 约翰 2. 比利”
“1. 约翰 2. 比利 3. 汤姆”
“1. 约翰 2. 比利 3. 汤姆 4. 乔”
“1. 约翰 2. 比利 3. 汤姆 4. 乔 5. 埃里克”
“1. 约翰 2. 比利 3. 汤姆 4. 乔 5. 埃里克 6. 杰瑞”
当我运行代码时,它会打印:John 2. Billy 3. Tom 4. Joe 5. Eric 6. Jerry
我不明白为什么是“1”。不见了,
haskell - 快速排序应用于 Haskell 中的元组列表 (Int,[Int])
下午好,
我是 Haskell 的新手,我正在尝试调整我制作的 QuickSort 算法,以使用元组列表对“Int”列表进行排序,但我完全不知道如何将尾部绑定到“a”让它按照我的需要工作,或者是否可以重用代码。这是我用来对“Int”列表进行排序的内容:
这是我试图用它做的,所以我可以对元组列表(Int,[Int])进行排序。我想按元组的第一个元素对元组进行排序,所以如果我得到一个类似 [(2,[1]),(1,[]),(3,[2,1])] 的列表,它会返回这个[(1,[]),(2,[1]), (3,[2,1])]。
如果我尝试加载它,我会收到以下错误:
非常感谢您能给我的任何见解。
functional-programming - 函数式编程:声明式 vs 命令式
函数式编程坚持告诉做什么,而不是怎么做。
例如,Scala 的集合库具有 filter、map 等方法。这些方法使开发人员能够摆脱传统的 for 循环,因此称为命令式代码。
但它有什么特别之处呢?
我所看到的只是一个封装在库中各种方法中的与循环相关的代码。以命令式范式工作的团队也可以要求其团队成员将所有此类代码封装在库中,然后所有其他团队成员都可以使用该库,因此我们摆脱了所有这些命令式代码。这是否意味着团队突然从命令式转变为声明式?