标签: functional-programming

Java 8的Optional.ifPresent和if-not-Present的功能风格?

在Java 8中,我想对一个Optional对象做一些事情,如果它存在,并做另一件事,如果它不存在.

if (opt.isPresent()) {
  System.out.println("found");
} else {
  System.out.println("Not found");
}
Run Code Online (Sandbox Code Playgroud)

但这不是一种"功能风格".

Optional有一个ifPresent()方法,但我无法链接一个orElse()方法.

因此,我不能写:

opt.ifPresent( x -> System.out.println("found " + x))
   .orElse( System.out.println("NOT FOUND"));
Run Code Online (Sandbox Code Playgroud)

在回复@assylias时,我认为不适Optional.map()用于以下情况:

opt.map( o -> {
  System.out.println("while opt is present...");
  o.setProperty(xxx);
  dao.update(o);
  return null;
}).orElseGet( () -> {
  System.out.println("create new obj");
  dao.save(new obj);
  return null;
});
Run Code Online (Sandbox Code Playgroud)

在这种情况下,当opt存在时,我更新其属性并保存到数据库.当它不可用时,我创建一个新的obj并保存到数据库.

请注意我必须返回的两个lambda null.

但是当opt存在时,两个lambdas都将被执行.obj将更新,并将新对象保存到数据库.这是因为return null在第一个lambda中.并且orElseGet()将继续执行.

java functional-programming optional java-8

239
推荐指数
7
解决办法
28万
查看次数

程序编程和函数编程有什么区别?

我已经阅读过程序编程函数式编程的维基百科文章,但我仍然有点困惑.有人可以把它归结为核心吗?

paradigms glossary procedural-programming functional-programming

232
推荐指数
12
解决办法
11万
查看次数

map()函数内的索引

我错过了一个选项如何map使用Listfrom 获取函数内的索引号Immutable.js:

var list2 = list1.map(mapper => { a: mapper.a, b: mapper.index??? }).toList();

文档显示的是map()回报Iterable<number, M>.有什么优雅的方式来满足我的需求吗?

javascript functional-programming immutable.js

228
推荐指数
3
解决办法
25万
查看次数

没有null的语言的最佳解释

当程序员抱怨空错误/异常时,有人经常会问我们做什么而没有null.

我对选项类型的酷感有一些基本的想法,但我没有最好的表达它的知识或语言技巧.对于普通程序员可以接近的方式写的以下内容有什么好的解释,我们可以指出那个人?

  • 默认情况下,引用/指针的不可取性是可以为空的
  • 选项类型的工作原理包括简化检查空案例的策略
    • 模式匹配和
    • monadic理解
  • 替代解决方案,如消息吃零
  • (我错过了其他方面)

null programming-languages functional-programming nullpointerexception non-nullable

223
推荐指数
7
解决办法
4万
查看次数

在函数式编程中,什么是函子?

在阅读有关函数式编程的各种文章时,我偶然遇到过"Functor"这个术语,但作者通常认为读者已经理解了这个术语.在网上浏览提供了过多的技术描述(参见维基百科文章)或令人难以置信的模糊描述(请参阅本ocaml教程网站上的Functors部分).

有人可以友好地定义术语,解释它的用法,并提供一个如何创建和使用Functors的例子吗?

编辑:虽然我对这个术语背后的理论感兴趣,但我对这个理论的兴趣不如我在实现和实际使用这个概念.

编辑2:看起来有一些交叉的术语:我特别指的是函数式编程的函数,而不是C++的函数对象.

ocaml functional-programming functor

219
推荐指数
12
解决办法
3万
查看次数

是否有用于函数式编程的软件工程方法?

今天教授的软件工程完全专注于面向对象的编程和面向世界的"自然"面向对象的视图.有一个详细的方法描述了如何将域模型转换为具有多个步骤的类模型以及许多(UML)工件,如用例图或类图.许多程序员已经内化了这种方法,并且很好地了解了如何从头开始设计面向对象的应用程序.

新的炒作是函数式编程,在许多书籍和教程中都有教授.但功能软件工程呢?在阅读有关Lisp和Clojure的文章时,我发现了两个有趣的陈述:

  1. 功能程序通常是自下而上而不是自上而下开发('On Lisp',Paul Graham)

  2. 函数程序员使用映射,其中OO程序员使用对象/类('Clojure for Java Programmers',Rich Hickley的演讲).

那么功能性应用程序的系统化(基于模型的?)设计的方法是什么,即在Lisp或Clojure中?有哪些常见步骤,我使用哪些工件,如何将它们从问题空间映射到解决方案空间?

lisp functional-programming clojure model-driven-development

202
推荐指数
7
解决办法
2万
查看次数

字符串列表到一个字符串

让我们说你有一个:

List<string> los = new List<string>();
Run Code Online (Sandbox Code Playgroud)

在这个疯狂的功能世界中,我们生活在这些日子里,其中一个最适合通过连接这些来创建一个字符串:

String.Join(String.Empty, los.ToArray());

StringBuilder builder = new StringBuilder();
los.ForEach(s => builder.Append(s));

string disp = los.Aggregate<string>((a, b) => a + b);
Run Code Online (Sandbox Code Playgroud)

或简单的旧StringBuilder foreach

或者,还有更好的方法?

c# string performance functional-programming

198
推荐指数
6
解决办法
15万
查看次数

为什么还没有接受函数式编程呢?

我已经阅读了一些关于声明/函数编程(语言)的文章,尝试过Haskell以及自己编写的文本.从我所看到的,函数式编程比传统的命令式风格有几个优点:

  • 无国籍计划; 无副作用
  • 并发; 采用不断增长的多核技术,发挥得非常好
  • 程序通常较短,在某些情况下更容易阅读
  • 生产力提高(例如:Erlang)

  • 命令式编程是一个非常古老的范例(据我所知),可能不适合21世纪

为什么使用功能语言的公司或程序仍然如此"罕见"?

为什么在查看函数式编程的优点时,我们仍在使用命令式编程语言?

也许它在1990年还为时尚早,但今天呢?

functional-programming

197
推荐指数
11
解决办法
6万
查看次数

Javascript相当于Python的zip函数

有没有相当于Python的zip函数的javascript?也就是说,给定多个相等长度的数组会创建一对数组.

例如,如果我有三个如下所示的数组:

var array1 = [1, 2, 3];
var array2 = ['a','b','c'];
var array3 = [4, 5, 6];
Run Code Online (Sandbox Code Playgroud)

输出数组应该是:

var output array:[[1,'a',4], [2,'b',5], [3,'c',6]]
Run Code Online (Sandbox Code Playgroud)

javascript python transpose functional-programming

191
推荐指数
8
解决办法
6万
查看次数

Scala中foldLeft和reduceLeft之间的区别

我已经学会了foldLeft和之间的基本区别reduceLeft

foldLeft:

  • 初始值必须通过

reduceLeft:

  • 将集合的第一个元素作为初始值
  • 如果集合为空,则抛出异常

还有其他区别吗?

有两种方法具有相似功能的任何特定原因?

functional-programming scala fold higher-order-functions

191
推荐指数
5
解决办法
6万
查看次数