浅谈函数式编程和命令式编程的区别

news2024/9/21 17:51:15

一、函数式编程

------------------------------------------------------------------------------------------------------------------------------------------

函数式编程用一个英文单词来说的话就是“What?” 它关注结果

定义

  • 把某个功能的具体实现,封装到函数内部(例如本案例中,内置的forEach方法,就是把循环每一项的操作,封装到了函数内部)

优势

  • 后期别人直接使用这个函数,即可实现对应的效果,无需关注内部底层是如何处理的,有利于开发效率的提高和学习使用* 减少页面冗余代码「低耦合高内聚」 弊端

  • 操作起来不够灵活 内部核心的处理我们是无法修改的

二、命令式编程

命令式编程用一个英文单词来说的话就是“How?” 它关注过程

定义

具体如何去处理,是由自己实现及掌控的,关注How的过程

优势

  • 操作灵活,可以自主把控处理的每一个步骤* 处理性能一般比函数式编程式要好「例如:forEach循环要慢于for循环」总结:处理的数据量“较多”的情况下,使用命令式编程来提高性能!操作逻辑较为复杂,需要自己灵活把控处理步骤的情况下,也使用命令式编程!其余情况,优先推荐函数式编程!

下面我们通过一个具体的案例来体会这两种编程方式的不同

三、需求:将下面字母大写转小写,小写转大写

function caseChange() {
}
caseChange('aBc')//=>'AbC'
caseChange('aHtReI')//=>'AhTrEi' 

整体思路

  • 依次拿到字符串中的每一个字符 charAt* 判断一下当前的字符是大写还是小写[如果是大写,我们把其转换为小写,反之转为大写]* 把某个字符先转成小写和之前的自己进行比较 如果相等则是小写,反之大写* 例如:‘A’ @1 把其变为小写’a’ @2 ‘a’!=‘A’ 之前是大写
  • 把处理后的字符重新拼接起来即可方案1 循环

思路

  • 循环字符串中的每个字符* 获取当前迭代的这个字符* 验证其 大写还是小写* 大写->小写 小写->大写 最后拼接到result中即可```
    function caseChange(str) {let result=“”;//循环字符串中的每个字符,for(let i=0;i<str.length;i++){//获取当前迭代的这个字符let char=str.charAt(i);//验证其 大写还是小写let isLoower=char.toLowerCase()===char;// 大写->小写 小写->大写 最后拼接到result中即可result+=isLoower?char.toUpperCase():char.toLowerCase();}return result;}

方案2 forEach
-----------

### 思路

* 把字符串拆成数组,每一个字符就是数组的每一项,这样我们就可以使用数组的forEach来循环* 大写->小写 小写->大写 最后拼接到result中即可```
 function caseChange(str) {let result="";//把字符串拆成数组,每一个字符就是数组的每一项,这样我们就可以使用数组的forEach来循环了str.split('').forEach((char)=>{//char :循环的每个字符let isLoower=char.toLowerCase()===char;// 大写->小写 小写->大写 最后拼接到result中即可result+=isLoower?char.toUpperCase():char.toLowerCase();})return result;
} 

方案3 map

思路

  • 把字符串拆成数组,每一个字符就是数组的每一项,这样我们就可以使用数组的map来循环了* 大写->小写 小写->大写 最后拼接到result中即可```
    function caseChange(str) { let result = ‘’; return str.split(‘’).map((char)=>{//char :循环的每个字符let isLoower=char.toLowerCase()===char;return result+=isLoower?char.toUpperCase():char.toLowerCase();}).join(‘’);
    }

方案4 charAtCode
--------------

### 思路

* 把字符串拆成数组,每一个字符就是数组的每一项,这样我们就可以使用数组的forEach来循环* 利用charCodeAt获取每一个字符的编码值* 大写->小写 小写->大写 最后拼接到result中即可```
function caseChange(str) {let result = '';str.split('').forEach(char => {// charCodeAt:获取某个字符ASCII码表中对应的十进制的值// 65~90 A-Z 97~122 a-z 48~57 零到九的数字...let dec = char.charCodeAt();result += (dec >= 97 && dec <= 122) ? char.toUpperCase() : char.toLowerCase();});return result;
}
console.log(caseChange('aBc'));; //=>'AbC'
console.log(caseChange('aHtReI'));; //=>'AhTrEi' */ 

最后

最近还整理一份JavaScript与ES的笔记,一共25个重要的知识点,对每个知识点都进行了讲解和分析。能帮你快速掌握JavaScript与ES的相关知识,提升工作效率。



有需要的小伙伴,可以点击下方卡片领取,无偿分享

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/341770.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

一文带你搞懂,Python语言运算符

Python语言支持很多种运算符&#xff0c;我们先用一个表格为大家列出这些运算符&#xff0c;然后选择一些马上就会用到的运算符为大家进行讲解。 说明&#xff1a;上面这个表格实际上是按照运算符的优先级从上到下列出了各种运算符。所谓优先级就是在一个运算的表达式中&#x…

【C语言必经之路——第12节】结构体初阶

一、结构体的声明结构是一些值的集合&#xff0c;这些值称为成员变量。结构的每个成员可以是不同类型的变量。结构体的声明struct tag{member-list;}variable-list;struct&#xff1a;是结构体定义必不可少的关键字tag&#xff1a;结构名member-list&#xff1a;成员列表(标量、…

2.16、生产者-消费者问题

系统中有一组生产者进程和一组消费者进程&#xff0c;生产者进程每次生产一个产品放入缓冲区&#xff0c;消费者进程每次从缓冲区中取出一个产品并使用。&#xff08;注:这里的“产品”理解为某种数据&#xff09; 生产者、消费者共享一个初始为空、大小为 n 的缓冲区。 只有…

Linux删除软链接

不防大家试试 unlink 命令 首先我们先来创建一个文件 #mkdir test_chk #touch test_chk/test.txt #vim test_chk/test.txt (这一步随便在这个test.txt里写点东东即可) 下面我们来创建test_chk目录 的软链接 #ln-s test_chk test_chk_ln 软链接创建好了&#xff0c;我们来…

应用安全系列之三十八:注入问题的成因以及预防原理

自从有了OWASP TOP的排名依赖&#xff0c;注入问题就一直排名前三&#xff0c;这就说明了注入问题对系统的影响是十分严重的&#xff0c;而且&#xff0c;注入问题一般比较容易被利用。注入问题产生的根本原因就是程序在接受到请求中的参数时&#xff0c;没有经过严格的验证和正…

前端工程师leetcode算法面试必备-二分搜索算法(下)索算法(下)

一、287. 寻找重复数 给定一个包含 n 1 个整数的数组 nums&#xff0c;其数字都在 1 到 n 之间&#xff08;包括 1 和 n&#xff09;&#xff0c;可知至少存在一个重复的整数。假设只有一个重复的整数&#xff0c;找出这个重复的数。 1、HashMap 在没有其它附加条件的情况下&…

如何处理“WLAN没有有效的IP配置”这一问题?

&#x1f680;write in front&#x1f680; &#x1f4dc;所属专栏&#xff1a;暂无 &#x1f6f0;️博客主页&#xff1a;睿睿的博客主页 &#x1f6f0;️代码仓库&#xff1a;&#x1f389;VS2022_C语言仓库 &#x1f3a1;您的点赞、关注、收藏、评论&#xff0c;是对我最大的…

svg.js使用教程

在日常web开发过程中&#xff0c;我们会需要显示一些图形化的元素&#xff0c;使用divcss、ps图片是常见的实现方式。 但使用svg来绘制可能更加合适&#xff0c;SVG是可缩放矢量图形&#xff0c;有一些预定义的形状元素&#xff0c;可被开发者使用和操作&#xff1a; 矩形(rec…

图解LeetCode——剑指 Offer 50. 第一个只出现一次的字符

一、题目 在字符串 s 中找出第一个只出现一次的字符。如果没有&#xff0c;返回一个单空格。 s 只包含小写字母。 二、示例 2.1> 示例 1: 【输入】s "abaccdeff" 【输出】b 2.2> 示例 2: 【输入】s "" 【输出】 限制&#xff1a; 0 < s 的…

Swift(5)

目录 集合类型 数组 ​编辑 合集 合集操作 字典 Where 集合类型 Swift提供了三种主要的集合类型&#xff1a;组合&#xff0c;合集&#xff0c;字典。 数组是有序的值的集合。 合集是唯一值的无序集合。 字典是无序的键值对集合。 数组 Swift数组的类型的完整写法是…

总结如何设计一款营销低代码可视化海报平台

背景 我所在的部门负责的是活动业务&#xff0c;每天都有很多的营销活动&#xff0c;随之而来的就是大量的H5活动页面。而这些H5活动已经沉淀出了比较固定的玩法交互&#xff0c;我们开发大多数的工作也只是在复制粘贴这种大量的重复工作。 在基于此背景下我开始了低代码平台…

【手写 Vuex 源码】第十篇 - Vuex 命名空间的实现

一&#xff0c;前言 上一篇&#xff0c;主要介绍了 Vuex 响应式数据和缓存的实现&#xff0c;主要涉及以下几个点&#xff1a; Vuex 的响应式实现原理&#xff1b;响应式核心方法 resetStoreVM&#xff1b;commit 和 dispatch 的处理&#xff1b; 本篇&#xff0c;继续介绍 …

jdk-concurrentHashMap(1.8)源码学习

上文&#xff1a;jdk-HashMap(1.8)源码学习concurrentHashMap介绍concurrentHashMap是一个高性能、线程安全的HashMap&#xff0c;底层数据结构主要还是以数组链表红黑树实现与HashMap的结构是一致的。concurrentHashMap1.7和1.8的区别&#xff1f;对比名称1.71.8备注线程安全是…

PhysioNet2017分类的代码实现

PhysioNet2017数据集介绍可参考文章&#xff1a;https://wendy.blog.csdn.net/article/details/128686196。本文主要介绍利用PhysioNet2017数据集对其进行分类的代码实现。 目录一、数据集预处理二、训练2.1 导入数据集并进行数据裁剪2.2 划分训练集、验证集和测试集2.3 设置训…

C语言(C语言结构基础使用)

目录 一.结构 1.结构声明 2.初始化结构 3.访问结构成员 4.结构的初始化器 5.定义无结构标记 6.结构数组 7.嵌套结构 8.复合字面量和结构&#xff08;C99&#xff09; 9.伸缩性数组成员 10.伸缩性数组得特殊处理请求 11.匿名结构&#xff08;C11&#xff09; 12.使用结构数组得函…

RiProRiProV2主题美化顶部增加一行导航header导航通知

背景: 有些网站的背景顶部有一行罪行公告,样式不错,希望自己的网站也借鉴过来,本教程将指导如何操作,并调整成自己想要的样式。 比如网友搭的666资源站 xd素材中文网

【C语言必经之路——第11节】初阶指针(2)

五、指针的运算1、指针与整数相加减看一下下面的代码&#xff1a;#include<stdio.h> int my_strlen(char* str) {int count0;while(*str!\0){count;str;//指针加减整数}return count; } int main() {int lenmy_strlen("abcdef");printf("%d\n",len);…

OpenCV实战(10)——积分图像详解

OpenCV实战&#xff08;10&#xff09;——积分图像详解0. 前言1. 积分图像计算2. 自适应阈值2.1 固定阈值的缺陷2.2 使用自适应阈值2.3 其它自适应阈值计算方法2.4 完整代码3. 使用直方图进行视觉跟踪3.1 查找目标对象3.2 完整代码小结系列链接0. 前言 我们知道直方图是通过遍…

方法递归调用

&#x1f3e1;个人主页 &#xff1a; 守夜人st &#x1f680;系列专栏&#xff1a;Java …持续更新中敬请关注… &#x1f649;博主简介&#xff1a;软件工程专业&#xff0c;在校学生&#xff0c;写博客是为了总结回顾一些所学知识点 ✈️推荐一款模拟面试&#xff0c;刷题神器…

【C++设计模式】学习笔记(4):观察者模式 Observer

目录 简介动机(Motivation)模式定义结构(Structure)要点总结笔记结语简介 Hello! 非常感谢您阅读海轰的文章,倘若文中有错误的地方,欢迎您指出~ ଘ(੭ˊᵕˋ)੭ 昵称:海轰 标签:程序猿|C++选手|学生 简介:因C语言结识编程,随后转入计算机专业,获得过国家奖学金…