函数式编程(Functional Programming)

函数式编程已经有比较长的历史了,如今的动态语言,很大程度上也受到了函数式编程(反过来名叫命令式编程)的启发。

在函数式编程语言中,当你写了一个函数,接受一些参数,那么当你调用这个函数时,影响函数调用的只可能是你传进去的参数,而你得到的也只能够是计算结果。因此,一个void的方法,是没有任何意义的。如果传入了引用类型的参数,也是不合要求的。

在函数式编程中访问状态是十分安全的,因为状态不会改变,我可以把一个Point或List对象交给任意多的地方去访问,完全不用担心副作用。函数式编程的十分容易并行,因为我在运行时不会修改状态,因此无论多少线程在运行时都可以观察到正确的状态。两个函数完全无关,因此它们是并行还是顺序地执行便没有什么区别了。我们还可以有延迟计算,可以进行Memorization,经常使用递归作为控制流,这些都是函数式编程中十分有趣的方面。

在函数编程中,编程人员有一个天然框架用来开发更小的、更简单的和更一般化的模块, 然后将它们组合在一起。函数编程的一些基本特点包括:

  • 支持闭包和高阶函数。
  • 支持懒惰计算(lazy evaluation)。
  • 使用递归作为控制流程的机制。
  • 加强了引用透明性。
  • 没有副作用。

在实际编程中,我们需要共享许多东西,比如显示器,比如打印机,比如某一块区域的资源,一旦这样的事情发生(这样的事情太频繁了,以至于函数式编程反而变得越来越稀缺),我们就需要额外地考虑很多因素。

老赵写了这么一个有趣的说明:

 

private int i = 0;
public lambda int Function( int p, Random random )//编译错误,不允许引用类型参数
{
	int j = p + i;//编译错误,不允许使用i。
	p++;//编译错误,不允许更改变量
	int r = random.Next( j );//编译错误,不允许使用非lambda修饰的函数。
	return r;
}
 

对于非常讨厌在脚本语言代码中大片大片地使用全局的或者共享变量来传值、存储状态的人来说,使用函数式编程的递归和回调思想,可以把很多丑陋的代码优美起来。

 

文章系本人原创,转载请注明作者和出处

Java 8 Functional Programming 函数式编程 文章目录一、前言二、什么是函数式编程2.1 lambda 演算2.2 编程模式的分类2.3 编程语言的分类三、基本原则和概念3.1 lambda表达式3.2 纯粹的Function3.3 不可变性3.4 透明性四、函数式编程的技巧4.1 函数的组合4.2 单体monads4.3 局部套用4.4 递归五、函数式编程为什么重要六、Java适合函数编程吗?七、总结 一、前言 从这篇文章中,你将了解到函数式编程的核心远侧、以及如何在编程中练习。你也将学习到一些高级的函数式编程的技巧。 二、什么是函数式编程 一般来说 阅读详情

相关推荐

Learning C++ Functional Programming

Learning C++ Functional Programming by Wisnu Anggoro English | 10 Aug. 2017 | ISBN: 1787281973 | ASIN: B06WVD7CVT | 304 Pages | AZW3 | 2.4 MB Key Features Modularize your applications and make them highly reusable and testable Get familiar with complex concepts such as metaprogramming, concurrency, and immutability A highly practical guide to building functional code in C++ filled with lots of examples and real-world use cases Book Description Functional programming allows developers to divide programs into smaller, reusable components that ease the creation, testing, and maintenance of software as a whole. Combined with the power of C++, you can develop robust and scalable applications that fulfill modern day software requirements. This book will help you discover all the C++ 17 features that can be applied to build software in a functional way. The book is divided into three modules—the first introduces the fundamentals of functional programming and how it is supported by modern C++. The second module explains how to efficiently implement C++ features such as pure functions and immutable states to build robust applications. The last module describes how to achieve concurrency and apply design patterns to enhance your application's performance. Here, you will also learn to optimize code using metaprogramming in a functional way. By the end of the book, you will be familiar with the functional approach of programming and will be able to use these techniques on a daily basis. What you will learn Get to know the difference between imperative and functional approaches See the use of first-class functions and pure functions in a functional style Discover various techniques to apply immutable state to avoid side effects Design a recursive algorithm effectively Create faster programs using lazy evaluation Structure code using design patterns to make the design process easier Use concurrency techniques to develop responsive software Learn how to use the C++ Standard Template Library and metaprogramming in a functional way to improve code optimization About the Author Wisnu Anggoro is a Microsoft Certified Professional in C# programming and an experienced C/C++ developer. He has also authored the books Boost.Asio C++ Network Programming - Second Edition and Functional C# by Packt. He has been programming since he was in junior high school, which was about 20 years ago, and started developing computer applications using the BASIC programming language in the MS-DOS environment. He has solid experience in smart card programming, as well as desktop and web application programming, including designing, developing, and supporting the use of applications for SIM Card Operating System Porting, personalization, PC/SC communication, and other smart card applications that require the use of C# and C/C++. He is currently a senior smart card software engineer at CIPTA, an Indonesian company that specializes in innovation and technology for smart cards. He can be reached through his email at wisnu@anggoro.net. Table of Contents Diving into Modern C++ Manipulating functions in functional programming Applying immutable state to the function Recurring method invocation using recursive algorithm Procrastinating the execution process using Lazy Evaluation Optimizing code with Metaprogramming Running parallel execution using Concurrency Creating and debugging application in functional approach

什么是函数式编程(functional programming)?

什么是函数式编程(functional programming)?

商务合作欢迎私信我 2万+

Functional Programming in Java 无水印pdf

Functional Programming in Java 英文无水印pdf pdf所有页面使用FoxitReader和PDF-XChangeViewer测试都可以打开 本资源转载自网络,如有侵权,请联系上传者或csdn删除 本资源转载自网络,如有侵权,请联系上传者或csdn删除

函数编程之Function

在java8之后,我已经习惯了开始用stream()方式编程,但是对于新引入的其他功能,还是不清楚,今天经历了一个编程问题后,让我对于Function() 这个函数有了新的认知;此次通过解决项目中的实际问题,记录下,对于function函数的使用有了更进一步的了解,也希望能读到此文章的小伙伴能收益,文章很浅显,希望大佬不吝赐教。

学海无涯,我用JAVA 1766

emacs使用简介

emacs工具的使用入门简介,配置,快捷键的使用

Functional Programming in C#.pdf

Functional Programming in C#.pdf C# 的函数式 编程 。 hope its help

函数式编程的理解

这些示例展示了函数式编程在Python、JavaScript和Java中的一些特性和用法,包括高阶函数、纯函数、不可变性和延迟计算。

ydl1128的博客 1472

Functional Programming with C++.pdf

Functional Programming with C++. 100 pages pdf

面向对象编程与函数式编程(FP,functional programming)

面向对象编程和函数式编程都是编程模式。JavaScript 既支持面对对象编程,也支持函数式编程。

花铛 1238

WiseFlow本地搭建实录---保姆教程

本文介绍了如何从0开始搭建wiseflow的个人情报官的方法,目前所有的API全部都是免费的,对机器没有要求,大家可以放心搭建

liuhui244的博客 1962

技能伤害继承英雄属性【War3地图编辑器】

风暴之锤跟随山丘之王的力量增长

ArYe 2303

什么是函数式编程?主流的几种编程范式简单介绍

函数式编程(Functional Programming)是一种编程范式,它将计算机运算视为数学上的函数计算,并强调函数作为一等公民,可以像其他值一样被传递、组合和操作,函数式编程起源于学术界,从lambda演算演变而来(一种仅基于函数的正式计算系统)。在函数式编程中,函数可以接受函数作为输入和输出,这使得函数式编程具有高度模块化和组合性的特点。此外,函数式编程还强调不可变性和无副作用,即函数的执行不会改变程序状态或外部环境,这使得函数式编程更容易进行推理和测试,并且可以更好地支持并发和并行计算。

lrcoop的专栏 1939

实战神器指标解析 篇四:主力吸筹指标及其分析和使用说明

主力可能会进行多次吸筹,因此需要根据黄色趋势线来判断是否有转强的变化。一旦出现转强的迹象,这通常意味着吸筹已经接近尾声,即将进入拉升前期。此时可以介入进行建仓。该股票指标通过分析价格变动的方式,能够精确跟踪并标识主力的吸筹行为。当底部出现多根洋红色柱子时,这通常表示出现了主力吸筹的指示。这段代码主要用于分析股票的底部吸筹情况、趋势和涨跌情况。

生活在别处 6224

探索函数式编程实践:Functional-Programming-Exercises

探索函数式编程实践:Functional-Programming-Exercises 在这个飞速发展的编程时代,函数式编程(Functional Programming)因其独特的设计思想和强大的处理复杂性能力,已经成为了一种备受关注的编程范式。而这个名为Functional-Programming-Exercises的开源项目正是为了帮助开发者更好地理解并掌握这一技术而精心打造的。 项目介绍 F...

gitblog_00035的博客 390

【2025CSPJ普及组】T4. 多边形

【2025CSPJ普及组】T4. 多边形【题目描述】小 R 喜欢玩小木棍。小 R 有 n 根小木棍,第i(1≤i≤n) 根小木棍的长度为 ai。

lybc2019的博客 849

Qt C++ 实现一个完整的扫雷

mineCountLabel = new QLabel(QString("地雷: %1").arg(remainingMines, 3, 10, QChar('0')), this);mineCountLabel->setText(QString("地雷: %1").arg(remainingMines, 3, 10, QChar('0')));timeLabel->setText(QString("时间: %1").arg(gameTime, 3, 10, QChar('0')));" : "游戏失败!

寒寒豆豆软件公司的博客 107

探索函数式编程的奇妙世界:gcanti/functional-programming 开源项目推荐

探索函数式编程的奇妙世界:gcanti/functional-programming 开源项目推荐 在快速迭代和代码质量日益重要的今天,函数式编程(Functional Programming, FP)作为一种优雅且强大的编程范式,正逐渐成为开发者的热门选择。今天,我们要向您介绍的是gcanti/functional-programming这个项目,一个深入浅出的教程与工具集合,旨在帮助开发者理解...

gitblog_00412的博客 464

三极管电平转换电路

摘要:本文介绍了三种基于三极管的电平转换电路方案。第一种采用双NPN三极管实现3.3V转5V反相电平转换;第二种使用单NPN三极管完成5V转3.3V同相转换;第三种利用单PNP三极管实现3.3V转5V同相转换。各方案均通过三极管的开关特性配合电阻网络实现电压域适配,具有结构简单、成本低的优点,适用于不同逻辑电平设备(如MCU与外设)间的信号兼容传输。文中详细分析了各电路的工作原理、元件作用和特性,并通过Multisim仿真验证了其功能有效性。

XU157303764的博客 1855

Functional Programming函数式编程

概论 在过去的近十年的时间里,面向对象编程大行其道。以至于在大学的教育里,老师也只会教给我们两种编程模型,面向过程和面向对象。孰不知,在面向对象产生之前,在面向对象思想产生之前,函数式编程已经有了数十年的历史。 诞生50多年之后,函数式编程(functional programming)开始获得越来越多的关注。不仅最古老的函数式语言Lisp重获青春,而且新的函数式语言层出不穷,比如Er

u010443572的专栏 837

Arduino、ESP32驱动BMP390L数字大气压传感器(压力传感器)

BMP390L是一款博世新研发的工业级专用数字气压传感器,具有极高的温度稳定性、低漂移、低功耗。

不脱发的程序猿 2007

自定义Usecase/Pipeline

Summary of Custom Usecase and Pipeline Configuration in SA8650 QCX Framework This article elaborates on the complete process of customizing a new Usecase and Pipeline based on the SA8650 QCX framework to meet OEM and Tier1 customization requirements, with

qq_39257814的博客 929

c#函数式编程 Functional Programming in C# [1]

第1部分 核心概念   在这一部分,我们将介绍函数式编程的基本技术和原理。   第 1 章首先介绍什么是函数式编程,以及 C# 如何支持函数式编程。然后深入研究高阶函数,这是 FP 的基本技术。   第 2 章解释了什么是纯函数,为什么纯度对函数的可测试性有重要影响,以及为什么纯函数很适合并行化和其他优化。   第 3 章介绍了设计类型和函数签名的原则——你以为自己知道但从函数的角度来看时会感到耳目一新的事情。   第 4 章介绍了 FP 的一些核心功能:Map、Bind、ForEach 和 Where(过

unity尧明的博客 2537

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

【编程语言】函数式编程 Functional Programming

函数式编程 1. 引言 “函数式编程"是一种"编程范式”(programming paradigm),也就是如何编写程序的方法论。 它属于"结构化编程"的一种,主要思想是把运算过程尽量写成一系列嵌套的函数调用。它将计算看作数学函数的求值,避免了状态的变化和数据的变化。它是一种声明式编程范式,这意味着编程是用表达式(expressions)或声明(declarations)完成的而不是语句(stat...

ss的程序人生 6615

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

关于函数式编程(Functional Programming)

  初学函数式编程,相信很多程序员兄弟们对于这个名字熟悉又陌生。函数,对于程序员来说并不陌生,编程对于程序员来说也并不陌生,但是函数式编程语言(Functional Programming language)又是什么呢?肯定很多朋友们也会有疑问。   学习一样东西,我们首先是了解他的历史,因为历史总是惊人低调相似,并让你从头到尾的了解它,让自己了解的更透彻。 在计算机的世界中,有两位巨擘对问题...

weixin_30689307的博客 248

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

函数式编程 Functional Programming

原文链接 在Java程序员的世界里,第一要素是“类”,而在函数式编程里,第一要素则是“函数”。完全不同的编程理念,确实很难让函数式编程出现在Java工程师日常工作的代码中。 先来2篇优秀博文扫盲: 函数式编程初探 函数式编程扫盲篇 仔细阅读过上面2篇文章之后,相信你已经对函数式编程有了一定的了解。同时,在许多高级语言(Java、C#等)都陆续加入了函数式编程特性的形势下,不难预测函数式编程将再次成为未来的主流编程模型。 本系列译文如下: Functional programming w..

程序员蒋老湿的博客 336
上一篇: 函数式编程(Functional Programming)
下一篇: J2EE 核心模式(Core J2EE Patterns)学习随心理解、随手记录(四)
RayChase
博客等级 码龄20年 71粉丝 87原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值