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

一、函数式编程

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

函数式编程用一个英文单词来说的话就是“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的相关知识,提升工作效率。



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

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值