编程范式

函数语言

折月煮酒 提交于 2020-04-04 07:58:49
一、什么是函数式语言? 函数式语言(functional language)一类程序设计语言,是一种非冯·诺伊曼式的程序设计语言。 函数式语言主要成分是原始函数、定义函数和函数型。这种语言具有较强的组织数据结构的能力,可以把某一数据结构(如数组)作为单一值处理;可以把函数作为参数,其结果也可为函数,这种定义的函数称为高阶函数,程序就是函数,程序作用在结构型数据上,产生结构型结果,从根本上改变了冯·诺伊曼式语言的“逐词”工作方式。 二、有哪些函数式语言? 1.lisp 2.common lisp ,Common lisp 是一个庞大的语言,支持多种编程范式,Common Lisp多用来写专家系统,也可以构造大型软件。 3.scheme,scheme是Common lisp的子集,由于语言核心很小,多用在教育领域。 4.Haskell ,Haskell是一种于1980年代末期所发布的函数式编程语言,Haskell函数式编程语言是在Miranda的基础上得到了,它对Miranda进行了标准化,所以这种语言集合了其他相关函数式编程开发的原理,它无需花费太多的赘述就能完成一些数据结构,比如链表和矩阵,是当前最广泛地被用于研究的一种函数式编程语言。 5.Clean ,它和Haskell有很多一样的地方。目前这门语言是用C写成的,由尼兹梅根大学负责维护。 6.Meta Language

拥抱函数式编程吧,用得非常爽! 几十年来我都在用面向对象的语言编程。我用过的第一个面向对象的语言是 C++,后来是 Smalltalk,最后是 .NET 和 Java。 我曾经对使用继承、封装和多态充

喜夏-厌秋 提交于 2020-03-05 15:31:37
拥抱函数式编程吧,用得非常爽! 几十年来我都在用面向对象的语言编程。我用过的第一个面向对象的语言是 C++,后来是 Smalltalk,最后是 .NET 和 Java。 我曾经对使用继承、封装和多态充满热情。它们是范式的三大支柱。 我渴望实现重用之美,并在这个令人兴奋的新天地中享受前辈们积累的智慧。 想到将现实世界的一切映射到类中,使得整个世界都可以得到整齐的规划,我无法抑制自己的兴奋。 然而我大错特错了。01 继承,倒塌的第一根支柱 乍一看,继承似乎是面向对象范式的最大优势。 所有新手教程讲解继承时都会拿出最简单的继承的例子,而这个例子似乎很符合逻辑。 然后就是满篇的重用了。甚至以后的一切都是重用了。 我囫囵吞下这一切,然后带着新发现兴冲冲地奔向世界了。 1. 香蕉猴子丛林问题 带着满腔的信仰和解决问题的热情,我开始构建类的层次结构然后写代码。似乎一切皆在掌控中。 我永远不会忘记我准备从已有的类继承并实现重用的那一天。那是我期待已久的时刻。 后来有了新的项目,我想起了另一个项目里我很喜欢的那个类。 没问题,重用拯救一切。我只需要把那个类拿过来用就好了。 嗯……其实……不仅是那一个类。还得把父类也拿过来。但……应该就可以了吧。 额……不对,似乎还需要父类的父类……还有……嗯,我们需要所有的祖先类。好吧好吧……搞定了。没问题。 不错。但编译不过,怎么回事?哦我知道了…

Python 函数式编程

时间秒杀一切 提交于 2020-02-29 03:49:47
函数式编程--functional programming 可以归结到面向过程的程序设计,但其思想更接近数学计算。 对应到编程语言,就是越低级的语言,越贴近计算机,抽象程度低,执行效率高,比如C语言;越高级的语言,越贴近计算,抽象程度高,执行效率低,比如Lisp语言。 函数式编程就是一种抽象程度很高的编程范式,纯粹的函数式编程语言编写的函数没有变量,因此,任意一个函数,只要输入是确定的,输出就是确定的,这种纯函数我们称之为没有副作用。 而允许使用变量的程序设计语言,由于函数内部的变量状态不确定,同样的输入,可能得到不同的输出,因此,这种函数是有副作用的。 函数式编程的一个特点就是,允许把函数本身作为参数传入另一个函数,还允许返回一个函数! Python对函数式编程提供部分支持。由于Python允许使用变量,因此,Python不是纯函数式编程语言。 函数名其实就是指向函数的变量! abs = 10 是可以赋值的 但是赋值以后不可执行abs(-10) 抛出 TypeError: 'int' object is not callable def get(number): return number; abs = get; print abs(-10) 说明内置的函数名也是可以指向新的函数的。 既然变量可以指向函数,函数的参数能接收变量,那么一个函数就可以接收另一个函数作为参数

Scala学习笔记-01-编程范式和scala特点

♀尐吖头ヾ 提交于 2020-02-10 09:27:03
常见的编程范式有如下两种: 命令式编程 一个命令就是一个指令序列,让机器原封不动地执行 如 java、c++ 函数式编程 将计算机的计算当做数学中的函数 Haskel、Erlang、Lisp 函数式编程的优点: 命令式编程涉及到多线程之间的状态共享,需要锁机制实现并发控制 函数式编程不会在多线程之间共享状态,不需要锁机制,可以更好地进行并行处理,充分利用服务器多核CPU的并行计算能力 Scala特点: scala运行与jvm上,兼容现有的java程序 scala是一门纯粹的面向对象语言 scala是一门函数式语言 总之,scala整合了面向对象和函数式编程的最佳特性。 来源: https://www.cnblogs.com/wooluwalker/p/12289792.html

函数式编程语言

佐手、 提交于 2020-02-09 05:26:30
函数式思想 什么是函数式编程? 百科定义: 函数式编程是种编程方式,它将电脑运算视为函数的计算。函数编程语言最重要的基础是λ演算(lambda calculus),而且λ演算的函数可以接受函数当作输入(参数)和输出(返回值)。 个人理解就是我们的编程是以函数作为单元来处理各个业务逻辑,函数既可以当做参数传来传去,也可以作为返回值,可以把函数理解一个值到另一个值得映射关系。 优势特点 代码简洁、开发快速 函数式代码同命令式相比代码量要少很多,一行顶十行,所以实现一些功能也比较简洁。 功能描述:统计文本或网页中单词的频率TF(term frequency),词频在计算网页质量、信息检索中是一个重要概念。 函数式编程思维是对集合统一处理、统一操作,而命令式编程需要取出来每个单词单独处理,单独计数,而函数式只需要传入待处理对象集合、处理规则,我们不需要关注于具体细节,这样编程不仅仅减少了出现bug的概率而且提高了IT人员开发效率,何乐而不为呢。 易于理解,抽象度高 让我们再来看一个在开发中,我们经常遇到场景,例如我们有一个List列表,我们要把user的某个属性提取出来生成一个新的List。 假设你已经了解了函数式语言的语法,你可能会觉得函数式写法很简洁,函数式编程并不需要你关注细节实现,我们在获取用户名作为一个新List时并没有对单独user对象操作,而是是告诉集合对象,我们要做什么

初识函数式编程与函数式接口(一)

爱⌒轻易说出口 提交于 2020-01-24 07:00:37
目前大部分的 JAVA8 的教程一上来就给大家将 Lambda 表达式,方法引用,给大家搞得云里雾里,最终导致 JAVA8 学习的不是特别透彻。我们先来了解一下什么时候能用 Lambda 表达式,然后在探究怎么用 Lambda 表达式。 从函数式编程开始 前一章节我们说过,JAVA8 其实是 Java 像其他语言或者一些优秀的框架学习的结果。函数式编程这个概念提出的非常早,有很多语言都是支持函数式编程的。JAVA8 中也对函数式编程做了支持。我们下面要介绍的函数式接口等概念都是围绕函数式编程而生的。 什么是函数式编程? 简单说, 函数式编程 是一种 编程范式 (programming paradigm),也就是如何编写程序的方法论。这句话是百度百科中给我们的解答,如果单看这句话,我们可能根本理解不了到底什么是 函数式编程 。 我们不妨使用我们最熟悉的面向对象编程( 命令式编程 )来类比一下,让大家能对函数式编程有一个简单的概念。 命令式编程是针对于计算机硬件的,我们写的每一句话都是一个底层的硬件指令。函数式编程不是我们中的 函数 不是我们平时在 Java 中编写的函数或者方法,它是一种针对于数学的概念,可以将其理解为一个表达式或者公式,或者理解为数据之间的转换关系。 我们说 JAVA8 以前不支持函数式编程,那么有哪些具体的体现哪? Java 中最重要的部分是类和对象,没有类和对象

JAVA8 之初识函数式编程与函数式接口(一)

巧了我就是萌 提交于 2020-01-15 05:06:58
目前大部分的 JAVA8 的教程一上来就给大家将 Lambda 表达式,方法引用,给大家搞得云里雾里,最终导致 JAVA8 学习的不是特别透彻。我们先来了解一下什么时候能用 Lambda 表达式,然后在探究怎么用 Lambda 表达式。 从函数式编程开始 时光小说网 https://wap.youxs.org/ 前一章节我们说过,JAVA8 其实是 Java 像其他语言或者一些优秀的框架学习的结果。函数式编程这个概念提出的非常早,有很多语言都是支持函数式编程的。JAVA8 中也对函数式编程做了支持。我们下面要介绍的函数式接口等概念都是围绕函数式编程而生的。 什么是函数式编程? 简单说, 函数式编程 是一种 编程范式 (programming paradigm),也就是如何编写程序的方法论。这句话是百度百科中给我们的解答,如果单看这句话,我们可能根本理解不了到底什么是 函数式编程 。 我们不妨使用我们最熟悉的面向对象编程( 命令式编程 )来类比一下,让大家能对函数式编程有一个简单的概念。 命令式编程是针对于计算机硬件的,我们写的每一句话都是一个底层的硬件指令。函数式编程不是我们中的 函数 不是我们平时在 Java 中编写的函数或者方法,它是一种针对于数学的概念,可以将其理解为一个表达式或者公式,或者理解为数据之间的转换关系。 我们说 JAVA8 以前不支持函数式编程

编程范式

China☆狼群 提交于 2020-01-01 12:27:08
编程语言有很多种流派和思想,有一些编程语言同时支持多种编程范式。 静态类型编程范式 采用静态类型编程范式的编程语言,其变量需要明确指定类型。代表语言有C、C++、Pascal、Objective-C、Java、C#、VB、.NET、Swif和Golang等。 这种范式认为,程序员肯定知道变量的类型,你丫要是不知道变量的类型,那你就别混了!编译时,如果变量类型对应不上,程序就会报错。 静态类型的好处 1.编译器可以在编译时就能找出类型错误。 2.编译器编译时知道类型信息,就可以提高性能。 此外,Swift和Go语言虽然都是静态类型编程语言,但它们都不需要明确指定类型,而是可以通过推断由编译器自动确定其类型。 动态类型编程范式 采用静态类型编程范式的编程语言,其变量不需要明确指定类型。任意变量,可以指向任意类型的对象。代表语言有Python、Ruby和JavaScript。 动态类型的哲学可以用鸭子类型(Ducktyping)这个概念来概括。JamesWhitcombRiley提出的鸭子测试可以这样表述:当看到一只鸟走起来像鸭子、游泳起来像鸭子、叫起来也像鸭子,那么这只鸟就可以被称为鸭子。 这种范式认为,程序员肯定知道变量的类型和它支持的方法和属性,你丫要是不知道变量的类型,那你就别混了!运行时程序会崩溃!程序崩溃怨谁?怨你自己呗,你不是合格的程序员! 动态类型的好处

07-09 面向过程与函数式

假如想象 提交于 2019-12-26 14:58:09
[TOC] 一 编程范式 ​ 很多初学者在了解了一门编程语言的基本语法和使用之后,面对一个’开发需求‘时仍然会觉得无从下手、没有思路/套路,本节主题“编程范式”正是为了解决该问题,那到底什么是编程范式呢? 编程范式指的就是编程的套路,打个比方,如果把编程的过程比喻为练习武功,那编程范式指的就是武林中的各种流派,而在编程的世界里常见的流派有:面向过程、函数式、面向对象等,本节我们主要介绍前两者。 ​ 在正式介绍前,我们需要强调:“功夫的流派没有高低之分,只有习武的人才有高低之分“,在编程世界里更是这样,各种编程范式在不同的场景下都各有优劣,谁好谁坏不能一概而论,下面就让我们来一一解读它们。 插图:恶搞图62 二 面向过程 ​ ”面向过程“核心是“过程”二字,“过程”指的是解决问题的步骤,即先干什么再干什么......,基于面向过程开发程序就好比在设计一条流水线,是一种机械式的思维方式,这正好契合计算机的运行原理:任何程序的执行最终都需要转换成cpu的指令流水按过程调度执行,即无论采用什么语言、无论依据何种编程范式设计出的程序,最终的执行都是过程式的。 插图:恶搞图63 ​ 详细的,若程序一开始是要着手解决一个大的问题,按照过程式的思路就是把这个大的问题分解成很多个小问题或子过程去实现,然后依次调用即可,这极大地降低了程序的复杂度。举例如下: ​ 写一个数据远程备份程序,分三步

每个 JavaScript 工程师都应当知道的 10 个面试题

元气小坏坏 提交于 2019-12-05 09:43:42
1. 能说出来两种对于 JavaScript 工程师很重要的编程范式么? JavaScript 是一门多范式(multi-paradigm)的编程语言,它既支持命令式(imperative)/面向过程(procedural)编程,也支持面向对象编程(OOP,Object-Oriented Programming),还支持函数式编程(functional programming)。JavaScript 所支持的面向对象编程包括原型继承(prototypal inheritance)。 面试加分项 原型继承(即:原型,OLOO——链接到其它对象的对象); 函数式编程(即:闭包(closure),一类函数(first class functions),lambda 函数:箭头函数)。 面试减分项 连范式都不知道,更别提什么原型 OO(prototypal oo)或者函数式编程了。 深入了解 The Two Pillars of JavaScript Part 1:JS 两大支柱之一:原型 OO The Two Pillars of JavaScript Part 2:JS 两大支柱之二:函数式编程 2. 什么是函数式编程? 函数式编程,是将数学函数组合起来,并且避免了状态共享(shared state)及可变数据(mutable data),由此而产生的编程语言。发明于 1958 年的