day22: declarative vs. imperative

今天我们谈到 declarative 声明式和 imperative 命令式,

他的概念比较像是以下如下,

假设请一个厨师煮出一道高丽菜

imperative

准备高丽菜

洗高丽菜

炒高丽菜

呈盘上桌

declarative

告诉厨师我要一道高丽菜的声明

厨师直接端出一到高丽菜

以上这两种操作各有优缺点,

https://ithelp.ithome.com.tw/upload/images/20211007/20107307YMC2HZREix.png

引用: https://www.ionos.com/digitalguide/websites/web-development/imperative-programming/

参考这张图的说明,imperative 关注的是对象的操作和流程,而 declarative 关注的是 function 的 input, output

实际范例

使用 function 指定一个 start 和 end 的数字,

分别用 imperative 和 declarative 来操作

// imperative

const loop = (start,end)=>{
	let result = start;
	for (let i = start; i < end; i++) {
		console.log(result);
	  result += 1;
	}
}
loop(2, 10); // 2,3,4,5,6,7,8,9,10
const recurse = (start,end)=>{
	if(start === end){
		console.log(start);
		return;
  }else{
		console.log(start);
	  return recurse(start+1,end);
  }
}
recurse(2, 10); // 2,3,4,5,6,7,8,9,10

可以看到以上两种写法都会得出一样的结果,imperative 常用回圈来操作,而 declarative 常用递回来操作,imperative 会经由一些判断来显示要的结果,而 declarative 则是关注 input 和 output。

https://medium.com/weekly-webtips/imperative-vs-declarative-programming-in-javascript-25511b90cdb7#:~:text=The most common explanation of,you want from the computer.

https://www.freecodecamp.org/news/functional-programming-in-javascript/

https://www.ionos.com/digitalguide/websites/web-development/imperative-programming/


<<:  Day22 - Sort2

>>:  [Day24] - Django-REST-Framework User Management

[DAY 12] _三轴感测器读取函示讲解 (ADXL345)

续昨天的bdp_I2C_ADXL345.c实现读写说明, 首先先看到Datasheet的第7页引脚说...

Day 27 颁奖与仪式

只有收获,才能体验耕耘的意义;只有贡献,方可衡量人生的价值。 《iT邦帮忙铁人赛的观点》(以下简称铁...

{DAY 16} Pandas 学习笔记 part.2

前言 Pandas 是强大的资料科学分析工具,结合前几天所学的NumPy特性 提供方便读取及使用的资...

[Day8] Git学习笔记 -RE篇(MacOS)

前面两天整理的笔记主要都在建立新的东西 今天就把修改用的指令做整理 1. revert - 重做上个...

[DAY 06]环境建置 : 软件(1)

前言 我们已经讲完了环境建置中的硬体选择等议题了,但空有一台机器没有 OS 等软件还是无法去使用,所...