Ruby,Scala和JavaScript中的函数式编程(一)

Ruby语言的函数实现 在Ruby中,定义一个方法使用关键字def,后接方法名和参数列表,最后使用end结束方法定义。以下是一个最简单的例子:```rubyendgreet("Alice") # 输出: Hello, Alice!```通过本文的深入探讨,我们了解了Ruby中函数的各种实现方式。从基本的方法定义、参数传递,到使用块和Proc对象的更高级功能,这些都展示了Ruby语言的灵活性和优雅性。掌握这些基本概念后,我们可以更有效率地编写出高质量的Ruby代码。 阅读详情

函数式编程(英语:Functional programming)或者函数程序设计,又称泛函编程,是一种编程范型,它将电脑运算视为数学上的函数计算,并且避免使用程序状态以及易变对象。函数编程语言最重要的基础是λ演算(lambda calculus)。而且λ演算的函数可以接受函数当作输入(引数)和输出(传出值)。

从具体的编程语言实现来来看,数据的不变性,一等函数,高等函数,lambda运算,闭包,惰性求值。另外函数式编程大量使用递归,但是递归效率很低,因此出现了尾递归来优化。除了这些通用的特性以外各个编程语言还实现了自己独有的函数式编程特性。下面就先从通用的开始介绍,然后在介绍各个编程语言独有的特性。

数据的不变性:数据不变性指的是一个编程语言中的数据类型一旦分配空间并初始化,那么他的内容就不可以再改变。由于这儿讨论的是都是面向对象的编程对象,而面向对象的编程语言中可以有两种类型的”变“:引用改变和对象属性的改变。引用改变非常简单,Java的final和C++的const都可以实现。因此这儿代表的是对象属性的不可变,在函数式编程里面强调避免使用程序状态以及易变对象。因为这样就不用考虑对象共享的问题了,一个对象可以任意共享,因为知道这个对象会保持原样。

Scala中的不变:Scala中提供了var和val用来控制引用的不变性,var表示变量,val表示不变。注意他们就相当于Java中的final关键字,并没有保证底层对象的不可变。例如:

import scala.collection.mutable.Map
val treasureMap = Map[Int, String]()
treasureMap += (1 ->"Go toisland.")
treasureMap += (2 ->"Find big X onground.")
treasureMap += (3 ->"Dig.")

另外注意:如果对象的每一个属性都用val声明的话,那么就可以实现对象内容的不变。

Scala的类库中提供了两种集合类型:一种是不可变的。在scala.collection.immutable包中,这是默认的,也就是说如果上面的代码没有显式导入可变的Map类那么创建的Map就是不可变的。第二中是可变的集合类型,在scala.collection.mutable。他们的特质,英文trait(类似于Java中的接口)在scala.collection中。

Ruby中的不变:Ruby并没有提供引用层次的不可变,但是Ruby的freeze方法就是把对象冻结,这样任何改变都会抛出异常,我本人觉得这种方法较灵活但是也容易引起不必要的麻烦,因为我不知道这个对象为什么突然就不能改变了,追踪起来也比较麻烦。例如,

Array = [“ssj”,20,”ssh”,12]
Array<<”ssjssh”
Array.freeze =
Array<<”sshssj”//RuntimeError:can’t modify frozen Array

另外:Erlang使用的也是引用的模型,它的引用和值都不可变。因此可以认为Erlang的变量完全不可变。
Ruby使用冻结的方法可以得到不变的值,但是没有办法来阻止引用不可变。
Scala的引用不可变非常容易实现,但是值不变需要类的封装来实现,这样它的机制比较难以实现,细节也较多。
相比较而言,Erlang不变量最简单最易用,Ruby的使用比较Scala来的简单。


编程语言的发展史:从FORTRAN到Rust 从早期的机器语言和汇编语言开始,探讨面向过程、面向对象、函数式、逻辑等各种编程范式的兴起与发展,分析不同时期流行的编程语言的特点和应用场景,以及它们对后续编程语言的影响。 阅读详情

相关推荐

Android 14密钥管理深度解析:从Keystore到Keymint的架构演进与Trusty安全实践

本文深入解析Android 14密钥管理系统的架构演进,从Keystore到Keymint的技术升级,以及Trusty安全环境的最佳实践。详细探讨了Keystore2的性能优化、Keymint的标准化设计,以及如何在Trusty TEE中实现安全密钥管理,为开发者提供构建现代密钥管理系统的实用指南。

weixin_42533120的博客 261

Ruby 函数式编程

Ruby 函数式编程 by Arnau Sanchez 本文档翻译自 Arnau Sanchez (tokland)所编译的这份文档 RubyFunctionalProgramming。 同时也有日文版本。 目录 简介理论部分Ruby的函数式编程 不要更新变量用 Blocks 作为高阶函数面向对象与函数式编程万物皆表达式递归惰性枚举器一个实际的例子 结论简报延伸阅读

yangxing_star的专栏 1727

Unity3D实战:用EasyAR4.0稀疏空间地图打造AR导航应用(附完整代码)

本文详细介绍了如何使用Unity3D和EasyAR4.0的SparseSpatialMap功能构建AR导航应用。通过稀疏空间地图技术,开发者可以创建室内导航系统,解决传统GPS在室内环境中的局限性。文章包含完整代码示例,涵盖环境配置、地图构建、导航实现及性能优化等关键步骤,助力开发者快速掌握AR导航开发技巧。

t8u9v0的博客 1197

Ruby函数式风格编程

虽然打算把自己的一个开源项目移植到erlang,但手头的一个工作项目却是在用ruby on rails,花了一段时间了解ruby后,发现ruby还是有点意思的。(反倒是不太喜欢Rails。我喜欢直来直去的编程,rails里面太多的magic,实在让我这个喜欢刨根究底的人难受)。 回到主题,Ruby之所以比Python、groovy和Javascript更适合函数风格的编程,尤其是erlang风格...

dcaoyuan 223

博图软件V15.1安装教程

博途软件安装

m0_46266496的博客 1万+

用户存续期价值评估CLV(二) BG/NBD Model python模拟

BG/NBD Model …继续 想象每一个客户有两个硬币,一个“Buy Coin"控制客户购买的概率;一个"Die Coin"控制客户流失、不再购买的概率。 前面假设了客户的交易次数服从泊松过程: 在一年中的每个月,客户都以抛硬币的方式来决定是否购买。我们所观察到的购买次数取决与泊松分布的参数 ????。 %matplotlib inline import numpy as np impor...

weixin_43171270的博客 3426

Ruby 函数式编程:Enumerable 模块的高级应用

在 Ruby 中,我们可以让自定义类混入 Enumerable 模块,从而使自定义类的实例能够使用 Enumerable 模块中提供的丰富方法。要实现这一点,自定义类需要定义一个each方法,该方法用于遍历自定义类实例中的数据。例如,定义一个简单的自定义类MyCollection,用于存储一组数据,并使其混入 Enumerable 模块:enddef eachend。

数字魔方操控师的博客 861

微信好友恢复全攻略(2025年3月更新)

适用于仅被拉黑场景(成功率100%)针对7天内误删场景(成功率78%)

2301_77933942的博客 1万+

Ruby语言的编程范式

Ruby是一种由日本程序员松本行弘(Yukihiro Matsumoto)于1995年开发的动态、面向对象的编程语言。它因其简单易读的语法、强大的动态特性和丰富的类库而备受欢迎。Ruby不仅是一种编程语言,还是一种编程范式,它影响着程序员的思维方式和开发风格。在这篇文章中,我们将深入探讨Ruby的编程范式、其核心特征以及它在现代软件开发中的应用。

2501_90485604的博客 420

ubuntu20.04屏幕亮度无法调节(亮度条调节无效)的简单靠谱解决方案及踩坑历程

0 前言   网上关于ubuntu系统亮度无法调节的问题的解决方法有很多,但是绝大部分并没有什么用(这也是我自己的亲身体会),或者并不靠谱。在遍尝各路方法过后,我终于解决了这一棘手的问题(毕竟最大亮度真的非常刺眼,无法长时间直视),在此记录一下踩坑历程以及最后的解决方案。 1 Naive方法   由于使用需要,最近在电脑原有的win10基础上安装了ubuntu双系统。我安装的是当前新版的ubuntu20.04.2.0,靠谱的安装教程可以参考这里。   之前师兄说双ssd安装双系统会有系统启动引导的问题出现,

zeeq的博客 4万+

00 — Intel xe SVM 内核实现精读系列专栏导读

本文系统介绍了Intel Xe GPU的共享虚拟内存(SVM)实现机制。第一部分通过概念地图阐述SVM的六个核心概念及其关系;第二部分通过三个测试用例解析SVM关键功能:fault生命周期验证、madvise与VRAM迁移、跨GPU一致性;第三部分深入内核实现,包括初始化/销毁流程、Page Fault处理、MMU Notifier失效路径、异步垃圾回收、VRAM迁移机制、madvise实现原理,以及与ROCm SVM的对比。文章建议按功能模块顺序学习,从基本概念到测试用例,再深入内核实现细节,最后对比不同

图形/计算GPU的驱动与虚拟化技术分享园地 1667

[置顶] Ruby,Scala和JavaScript中的函数式编程(一)

函数式编程(英语:Functional programming)或者函数程序设计,又称泛函编程,是一种编程范型,它将电脑运算视为数学上的函数计算,并且避免使用程序状态以及易变对象。函数编程语言最重要的基础是λ演算(lambda calculus)。而且λ演算的函数可以接受函数当作输入(引数)和输出(传出值)。 从具体的编程语言实现来来看,数据的不变性,一等函数,高等函数,lambda运算,闭包,...

weixin_34245749的博客 66

(五)深入理解Bluez协议栈之“GATT Server Profile”

上一篇介绍Bluez协议栈的了GAP Profile的实现,本章节我们继续介绍GATT Profile的实现,参考的程序是Peripheral。通过阅读它的实现代码可以发现,它广播部分是通过mgmt来实现的,然后在初始化完成之后,创建了一个L2CAP类型的socket,来负责实现GATT Server的逻辑。

1142

多编程语言比较Ruby、JavaScript、Java、Swift、Bash、C、Scala、R、R

每种语言的生态系统决定了其最合适的应用场景。

soso1029934378的博客 446

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

编程语言排行榜2017_2017年最受欢迎的编程语言

编程语言排行榜2017 通过从您的应用程序学习企业APM产品,发现更快,更有效的性能监控。 参加AppDynamics APM导览! 很难相信已经到了2017年。但是随着新的一年的到来,新的挑战,新的机遇,当然还有新的软件项目。 初学者,中级和高级程序员在开始下一个项目之前都必须回答的最重要问题之一是使用哪种编程语言。 暂时不要停留在寻找旧选项的位置上,而是考虑一下选项。 没有完美的语...

danpu0978的博客 397

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

如何评价python语言_看看各种编程语言的发明者如何评价自己的语言

从 Node.js 到C++,看他们的发明者是如何评价他们的语言的未来。Guido van Rossum:Python问: 为什么有人批评 Python 太慢?Van Rossum:有些时候,你要完成的系统某一小部分,而这一部分却花费你几乎所有的时间。如果你写的只是一个简单的排序,用 Python 来完成的话,那这会成为系统的瓶颈。这里最好要用高效的语言来取代之,比如C和C++。Yukihiro ...

weixin_39623671的博客 102

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

各大语言概述

Ruby    Ruby,一种为简单快捷的面向对象编程(面向对象程序设计)而创的脚本语言,在20世纪90年代由日本人松本行弘(まつもとゆきひろ/Yukihiro Matsumoto)开发,遵守GPL协议和Ruby License。它的灵感与特性来自于 Perl、Smalltalk、Eiffel、Ada 以及 Lisp 语言。由 Ruby 语言本身还发展出了JRuby(Java 平台)、Iro

u012412392的专栏 685

Ruby、JavaScript、Java、Swift、Bash、C语言、Scala、R语言、Rust

Java以其“一次编写,到处运行”的跨平台能力和强大的虚拟机(JVM)生态系统,在企业级应用开发中占据着举足轻重的地位。其严格的面向对象特性和强大的内存管理机制,保证了大型应用的稳定性和可维护性。它兼具编译语言的高性能和脚本语言的交互性,同时通过可选类型和内存自动引用计数(ARC)确保了代码的安全性和稳定性。它拥有极其丰富的统计分析软件包和可视化库,是数据科学家、统计学家进行数据探索、建模和结果呈现的首选工具之一。这赋予了开发者极大的自由,但也要求其对程序的行为有极其精确的把握,以避免内存泄漏和指针错误。

qq_27065997的博客 454

读书笔记:《七周七语言:理解多种编程范型》

总结 面向对象:Ruby & Scala 原型编程:Io & JavaScript 约束-逻辑编程:Prolog 函数式编程:Scala & Erlang & Clojure & Haskell 并发支持: actor:Io & Erlang & Scala future:Io & Clojure STM:Clojure 探索编程结构: 列表解析:Erlang,Clojure,Haskell monad:Haskell(TODO) 模

每一个不曾起舞的日子,都是对人生的辜负。 777

python语言是一种高级通用编程语言-2019年十大顶级编程语言:会这些的程序员薪资有多高?...

如今,各类软硬件产品不断被开发出新的功能,其相应的程序代码也成为人们所熟知的众多现代与新兴技术的核心组成部分。目前世界上能够查询到的编程语言有近600多种,包括通用的开发语言 C、 C++、JAVA、C#、VB、、Python、IOS、 PHP等。主要可分为两种,分别是低级语言:一种更接近计算机的语言(二进制语言)以及高级语言:更接近人类的自然语言(编译器)。为了让产品获得最优的功能体现,开发者们...

weixin_37988176的博客 64

《从Ruby到Rust15种编程语言的技术演进与实战应用全景解析》

从Ruby的动态灵活到Rust的静态安全,这15种语言的技术演进并非简单的替代关系,而是反映了不同时代、不同场景下对编程核心要素——效率、性能、安全、并发——的不断权衡与深化理解。每种语言都是特定问题的优质解决方案。未来的趋势并非是某一种语言的独大,而是开发者能够根据项目需求,在丰富的技术栈中做出最明智的选择,甚至将多种语言的优势结合(如使用Rust编写高性能模块供Ruby/Python调用),以构建更强大、更可靠的软件系统。

xu40020588的博客 531

蔡学镛:2008编程语言盘点(转)

去年最受欢迎的语言和往年一样,没有变化,仍然是:Java、C、C++、PHP、Basic。前几名的语言要在短短的一两年有变动,是不太可能的。这五个语言哪个不是占据Top 5的位置五或十年以上?估计2009年仍然是这样的局面,由这几个语言独占鳌头。但C#已经在快步进逼BASIC,可能再过两年就可以进入前五名。C#上升,BASIC下降,某种程度上反映出微软的VB程序员正转换到C#语言。C#正在逐渐累积和Java抗衡的能量。在2009年,最值得重视的编程语言好消息,应该就是C+

chengg0769 平淡无奇见真知 独立博客: http://blog.mis2erp.com 1225

跨越编程语言边界从Python到Rust,16种语言的开发智慧与实践

从Python的动态优雅到Rust的安全性能,不同语言之间的边界不仅体现在语法上,更反映了编程范式和思维模式的转变。本文将探讨从Python到Rust,涵盖16种语言的开发智慧与实践,解析多语言协同下的技术选型与架构设计。从Python的灵活到Rust的严谨,每种语言都是解决特定问题的智慧结晶。Rust的所有权模型展示了如何在不牺牲性能的前提下实现内存安全,这一设计理念正影响其他语言的发展方向。从命令式到函数式,从动态类型到静态类型,开发者应建立跨语言的问题解决思维,根据项目需求选择合适工具。

u013662711的博客 400

从Ruby到Rust16种编程语言的范式演变与选择指南

C#在微软的推动下,综合了C++的强大功能和Java的跨平台能力。Go语言由Google开发,以其简洁的语法、高效的并发模型和快速的编译时间,在现代云端应用中占据重要地位。JavaScript作为Web开发的霸主,其事件驱动和非阻塞I/O模型改变了前端与后端开发的边界。编程语言的选择没有绝对的对错,关键在于理解每种语言背后的哲学和适用场景。从Ruby的开发者友好到Rust的内存安全,每种语言都是解决特定问题的最佳实践。从Ruby的极简优雅到Rust的内存安全,每种语言都代表着一种解决问题的独特哲学。

zw2111983的专栏 427

函数式编程

诞生50多年之后,函数式编程(functional programming)开始获得越来越多的关注。 不仅最古老的函数式语言Lisp重获青春,而且新的函数式语言层出不穷,比如Erlang、clojure、Scala、F#等等。目前最当红的Python、Ruby、Javascript,对函数式编程的支持都很强,就连老牌的面向对象的Java、面向过程的PHP,都忙不迭地加入对匿名函数的支持。越来

咩名 526

Come on,快学Scala!——《快学Scala》试读

    当前技术发展那么快,作为一个搞技术的,一年学习一门编程语言(当然啦,这里是学会,应用框架,并不是需要十分精通),多睁开眼睛看看,培养自身学习兴趣,人们对新鲜事物总是有浓厚的兴趣的,所以前段时间就开始接触scala这门新兴语种了。顺便读了读这本《快学Scala》,感觉不错,很明快的一本书。 大学时开始搞校园开发,java出身的,情感难割舍,总是选择都会和java沾边的,也曾经买了ruby/...

揽月阁 169
上一篇: Ruby和JavaScript对象模型的比较
下一篇: 计算机程序的构造与解释作业:练习1.1到1.5
ssjssh
博客等级 码龄15年 12粉丝 33原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值