day15: 模组化好的写法 - 只公开必要的 Interface 和状态管理

只公开必要的 Interface

当你在实作一个模组,若过公开全部的参数介面,那其实就失去模组化的意义了,因为你等於将全部的操作都交给外部参数,就跟没模组化一样。

像以下是个计算点击次数的模组

const clickTimes = {
	times:0,
	increment(){
		times++;
	}
	decrement(){
		times--;
	}
	read(){
		return times;
	}
}
export const {increment,decrement, read} = clickTimes; 
// 这边只公开 increment,decrement, read 的取用方式,避免外部使用者使用 times

状态管理

像前几章我们有提到 function 里面的状态因为来自外部,所以会造成 side project 的问题,而当

状态越来越多,程序码越多越多就越难以管理,这时候我们就需要 pure function 的写法。

例如我们有个计算数值相加的函式

 let books = 10;
 let pen = 200;

	const sumProduct = ()=>{
		return books+pen;
  }
	sumProduct();
	// 注意到了吗?假设我们的 books 和 pen 会被其他程序影响,
	// 那我们用 sumProduct 计算出来的数量永远会不正确

以上是不纯的函数,因为 sumProduct 会受到 books 和 pen 的状态影响

那纯函数怎麽实作呢?我们要确保函式只负责 imput 然後执行功能 output 这样,

以下是纯函式:

const sum = (numbers)=>{
 return numbers.reduce((total,current)=>total+current,0);
}

sum([books,pen])

这样的写法是不是乾净许多, sum 只要专注传入的数值,加总後呈现应该有的结果,

过程中不管状态,只专注在功能,这样就是纯函式,其实他也是设计模式的工厂模式。


<<:  Day15 竞合的团队气氛塑造 - Release line

>>:  DAY18-Mongo db atlas realm

伸缩自如的Flask [day10] 将资料写进DB(pymongo)

好的,要能将资料写进MongoDB,首先我们需要先安装MongoDB: https://www.mo...

Day27:今天我们来聊一下将Microsoft 365 Defender 连接到 Azure Sentinel

Microsoft 365 security portal提供目标导向的使用者介面,以降低Micro...

Day20-JDK GUI界面概述

前言 前面介绍的工具都是命令行工具,但存在着一些的不便 分析数据透过终端机文字的方式显示,不够直觉 ...

[Android Studio] 每日小技巧 - 在 Project 中定位目前开启的 Class

常常有时候在阅读较大的专案时 没有定位档案位置的功能的话很难找到该 Class 的位置 大家可以找到...

找LeetCode上简单的题目来撑过30天啦(DAY11)

今天好累,直接上题目 题号:36 标题:Valid Sudoku 难度:Medium Determi...