react特性-声明式编程
网络上有很多关于声明式编程和命令式编程的对比和说明,但是大多都是大同小异,总的来说就是一句话"告诉电脑我要做什么,但是让电脑自己决定怎么做."
1.命令式编程.
这种编程模式比较常见,也是我们比较好理解的方式.它把完成某个需求的每一步都充分展示出来了,一步一步地指挥计算机做事情.
var array = [1,2,3,4,5]
var newArray = []
for(var i = 0; i < array.length; i++) {
var newNumber = array[i] -1
newArray.push(newNumber)
}
console.log(newArray) //=> [0,1,2,3,4]
特点:在执行完之前,计算机并不知道我要做什么,为什么这么做.它只是一步一步地执行了.
2.声明式编程.
区别于命令式编程,它的特点就是我告诉计算机做什么,但是没有告诉你怎么做.
var array = [1,2,3,4,5]
var newArray = array.map(function(n) {
return n -1
})
console.log(array) //=> [0,1,2,3,4]
我只告诉计算机,你执行这个map函数就好了,至于我要干嘛我不告诉你,具体怎么做也不告诉你.
3.思路对比.
如果还是不清楚,那我再拿个案例来分析.
命令式编程---------------
var array = [1,2,3,4,5] var total = 0 for(var i = 0; i < array.length; i++) { total *= numbers[i]
}
console.log(total) //=> 120 声明式编程-----------------------
var array = [1,2,3,4,5]
var total = array.reduce(function(sum, n) {
return sum * n
});
console.log(total) //=> 120
说明:相比于命令式编程,声明式编程最大的特点是没有"if"、"for"这类的控制语句,而是直接给一个函数,并且声明一个变量接收函数执行结果,让计算机把数据当作参数放进去执行一遍就行了.
4.统一性
到目前为止,很多人说这两个编程范式是对立的.我觉得这并不准确,并不是说声明式编程的思想是尽可能少的代码实现,那命令式就尽可能多.这并不严谨,那如何理解他们的关系呢?
仔细看上面代码对比,你发现差别就是在红色字体处.假如:
先声明一个函数:
function reduce(array,total){
for(var i = 0; i < array.length; i++) {
total *= numbers[i]
}
return total
}
命令式编程---------------
var array = [1,2,3,4,5]
var total = 0
var total = reduce(array,total);
console.log(total) //=> 120
如果不看函数的声明,是不是很像声明式编程?如果把reduce函数给array的原型,从代码形式上就更像了.当然,我们这里不讨论array.reduce()的具体功能.只是从代码特点上来说:声明式编程就是函数编程思想的一种.其实就是凸显了函数式编程的声明性.
结论:声明式编程就是拿来主义,拿已经封装好的纯函数来实现目的.但是实际上执行的步数不见得会比命令式的代码少,有时候甚至会更多.但是,由于这些纯函数有极强的稳定性,所以程序员根本不用考虑内部的具体实现过程.极大地减少了身心负担.
react特性-声明式编程的更多相关文章
- Vue于React特性对比(三)
最近重学React,再次和vue做了对比. 一,为官方插件提供便利的第三方插件横行 React仅仅是一个ui框架.虽然官方提供了redux,react-router:但也有第三方的redux-thun ...
- React 特性剪辑(版本 16.0 ~ 16.9)
Before you're going to hate it, then you're going to love it. Concurrent Render(贯穿 16) 在 18年的 JSConf ...
- Vue于React特性对比(二)
一,关于响应式数据更新方式的实现 1)只有在data里面定义的数据才会有响应式更新 vue依赖的defineProperty的数据劫持加上依赖数据,实现数据的响应式更新.可以称之为依赖式的响应.因为依 ...
- Vue于React特性简单对比(一)
一,对象实体对比 vue的对象实体依然是html,而react的对象实体已经变味jsx,一种新的语法结构. vue的html与react的jsx都可以进行拆分,拆分成更细小的组件,组件之间可以传值. ...
- Vue于React特性对比(四)
新开了一个vue的项目,从vue单页面框架搭建到单点登录接入都是自己负责搞的.然后准备将这套东西迁移到react上.然后有了这篇文章. 1,reactjs分环境打包明显要比vue更为麻烦 vue修改的 ...
- React Hooks新特性学习随笔
React Hooks 是 React 16.8 的新增特性.它可以让你在不编写 class 的情况下使用 state 以及其他的 React 特性. 前言 本篇主要以讲几个常用的api为主. 1.u ...
- 关于为什么使用React新特性Hook的一些实践与浅见
前言 关于Hook的定义官方文档是这么说的: Hook 是 React 16.8 的新增特性.它可以让你在不编写 class 的情况下使用 state 以及其他的 React 特性. 简单来说,就是在 ...
- React函数类组件及其Hooks学习
目录 函数类组件 函数式组件和类式组件的区别: 为什么要使用函数式组件? Hooks概念及常用的Hooks 1. useState: State的Hook 语法 useState()说明: setXx ...
- vue,react,angular
一.Vue.js: 其实Vue.js不是一个框架,因为它只聚焦视图层,是一个构建数据驱动的Web界面的库. Vue.js通过简单的API(应用程序编程接口)提供高效的数据绑定和灵活的组 ...
随机推荐
- 【CV论文阅读】Rank Pooling for Action Recognition
这是期刊论文的版本,不是会议论文的版本.看了论文之后,只能说,太TM聪明了.膜拜~~ 视频的表示方法有很多,一般是把它看作帧的序列.论文提出一种新的方法去表示视频,用ranking function的 ...
- ios逆向工程
原 ios逆向工程-内部钩子(Method Swizzling) Method+Swizzling ios hook Method Swizzling(方法调配) 怎么说呢,先了解什么是钩子为什么 ...
- Codeforces Round #273 (Div. 2)C. Table Decorations 数学
C. Table Decorations You have r red, g green and b blue balloons. To decorate a single table for t ...
- 对数据html文本 的处理
对数据html文本 的处理 : 提取文字.图片.分句 ''' SELECT * FROM Info_Roles WHERE Flag=1 LIMIT 2; select top y * from 表 ...
- B1090 [SCOI2003]字符串折叠 区间dp
又一道区间dp,和上一篇类似,但是比他简单,这个只有两种转移方法,不是很复杂.直接判断是否为重复的串就行. 题干: Description 折叠的定义如下: . 一个字符串可以看成它自身的折叠.记作S ...
- bzoj1977 [BeiJing2010组队]次小生成树 Tree——严格次小生成树
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1977 因为严格,所以要记录到 LCA 的一个次小值: 很快写好,然后改掉一堆错误后终于过了样 ...
- IDEA Spark Streaming Kafka数据源-Consumer
import org.apache.spark.SparkConf import org.apache.spark.streaming.kafka.KafkaUtils import org.apac ...
- RHEL6.5设置行号,安装GCC
vim ~/.vimrc set nu set cindent set tabstop=4 set shiftwidth=4 syntax on 安装gcc,g++编译器 ...
- Linux 命令多到记不住?这个开源项目帮你一网打尽!
本文首发于我的公众号 Linux云计算网络(id: cloud_dev),专注于干货分享,号内有 10T 书籍和视频资源,后台回复「1024」即可领取,欢迎大家关注,二维码文末可以扫. 最近发现了一个 ...
- Android内存管理(12)*「实例」用Monitor 生成.hprof文件 并分析内存泄漏
参考 http://blog.csdn.net/xiaanming/article/details/42396507 基本步骤: 1,准备一个有内存泄漏的代码 2,如何发现内存泄漏 3,生成.hpro ...