Fonction magique pour résoudre le problème de la fonction maybe - - fonction either

C'est des kakis. 2021-10-13 17:32:51
fonction magique pour soudre le


Petite connaissance,Grand défi!Cet article participe“Les programmeurs ont besoin de peu de connaissances”Activités créatives.

Cet article est également impliqué dans 「Le programme Nugget Star」          ,.Gagner un grand sac cadeau pour la création,Remise en question des incitatifs à la création

Préface

Suite du livreCi - dessus,Nous allons faire ce qui précèdemaybeOptimisation des fonctions! Chapitre précédent porte de transfert:juejin.cn/post/701840…

Qu'est - ce queEitherFonction

  • EitherL'un ou l'autre,Similaire àif...else...Traitement
  • L'exception rend la fonction impure ,EitherLes fonctions peuvent être utilisées pour la gestion des exceptions

Début du traitement

1. Détermination des besoins

Meuleuse, coupeuse de bois., Nous devons d'abord clarifier les exigences RésolutionmaybeLa fonction n'est pas sûrenullFonction de la position d'occurrence.Il ne s'agit pas seulement de quelque chose qui arrivenull,Peut également être utilisé pour obtenir des informations sur l'endroit où l'exception se produit et l'exception. ok, Il est temps de commencer EitherC'est parti.,Parce qu'il estDeux contre un., Donc nous allons créer deux types leftEtright

```js
class left {
...
}
class right {
...
}
```
Copier le Code

2. Préparation des classes

Dans ces deux catégories , Nous l'avons écrit de façon méthodologique , Ils ont tous besoin d'une méthode statique 、UnmapMéthodes, C'est une fonction simple ,Peut être revu: Écrire des fonctions simples

```js
class Left {
static of (value) {
return new Left(value)
}
constructor (value) {
this._value = value
}
map (fn) {
return this
}
}
class Right {
static of (value) {
return new Right(value)
}
constructor (value) {
this._value = value
}
map (fn) {
return Right.of(fn(this._value))
}
}
```
Par ici., Nous avons écrit ces deux classes , En fait, c'est à peu près la même chose quand on regarde , En fait, nous pouvons faire quelques modifications ,Mais, Pas de modification pour le moment , Pour que tout le monde comprenne
Copier le Code

3. Différence de fonction

Nous implémentons deux fonctions avec les deux classes implémentées ci - dessus , Voyons la différence entre eux

```js
let r1 = Right.of(12).map(x => x + 2)
let r2 = Left.of(12).map(x => x + 2)
console.log(r1)
console.log(r2)
```
Copier le Code

image.png Nous pouvons voirRightLa valeur dans est 12+2 = 14 Sortie correcte ,MaisLeft Mais le paramètre original est retourné ,Surtout parce queLeftDansmap C'est un retour direct this

Left Renvoie directement la fonction originale ,Utilisé pour saisir les exceptions,RightUtilisé pour effectuer des entrées sans exceptionfnEt renvoie une fonction.
**Pourquoi faire ça??**
Copier le Code

4. Pourquoi deux types de fonctions sont nécessaires

 Pour résoudre le problème ci - dessus , Voici un exemple pour vous montrer , Faciliter une meilleure compréhension
Par exemple, si vous passez un message d'erreur JSON Objet et normal JSONObjet,Les différences sont les suivantes::
```js
function parseJSON (str) {
try {
return Right.of(JSON.parse(str))
} catch (e) {
return Left.of({ error: e.message})
}
}
// Il y aura une erreur
let r = parseJSON('{ name: zs}')
console.log(r)
let r1 = parseJSON(JSON.stringify({ name:'zs'} ))
console.log(r)
```
![image.png](https://p1-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/472abe33d8004bb9998ddfd576a1fc5f~tplv-k3u1fbpfcp-watermark.image?)
Copier le Code

5. Résumé

Par ici.,EitherFonction C'est déjà fait , Nous pouvons gérer les exceptions avec cette fonction , Stocker les informations d'erreur either La fonction est essentiellement une combinaison de deux fonctions , Une fonction qui suit la logique correcte , Une autre fonction est utilisée pour saisir les messages d'erreur

Code complet

class Left {
static of (value) {
return new Left(value)
}
constructor (value) {
this._value = value
}
map (fn) {
return this
}
}
class Right {
static of (value) {
return new Right(value)
}
constructor (value) {
this._value = value
}
map (fn) {
return Right.of(fn(this._value))
}
}
//Définir une fonction
function parseJSON (str) {
try {
return Right.of(JSON.parse(str))
} catch (e) {
// Pour stocker des informations d'erreur 
return Left.of({ error: e.message})
}
}
// Données incorrectes entrantes 
let r = parseJSON('{ name: zs}')
console.log(r)
// Données correctes transmises 
let r1 = parseJSON(JSON.stringify({ name:'zs'} ))
console.log(r1)
let r3 = Right.of(12).map(x => x + 2)
console.log(r3)
let r4 = Left.of(12).map(x => x + 2)
console.log(r4)
Copier le Code

Résumé

Nous avons appris EitherFonction Et comprendre sa composition , Après cela, nous sommes prêts à approfondir l'étude des fonctions ,EntréeIOFonctionArticles, Au prochain chapitre !

Le gardien qui est venu ici a fait un compliment !

On se voit plus tard..webp

版权声明
本文为[C'est des kakis.]所创,转载请带上原文链接,感谢
https://qdmana.com/2021/10/20211013173246199U.html

  1. Error in spring source code compilation: the monoprocessor in reactor.core.publisher is outdated
  2. Buctf [geek Challenge 2019] http
  3. 20 个值得学习的 Vue 开源项目
  4. 20 projets open source à apprendre
  5. Scène et application de la manette des gaz anti - bavardage
  6. Qu'est - ce que j'ai gagné en abandonnant vue pour les six mois de React?
  7. À partir de [Bytecode cache] et de [http cache], intervieweur: « est - ce si mince? »
  8. [niveau intermédiaire et avancé] obligatoire, 30 + questions manuscrites à haute fréquence et réponses détaillées (dix mille caractères longs), voyez comment "vous" ne pouvez pas m'abattre
  9. Mise en œuvre d'un outil d'échafaudage universel pour l'ingénierie Web de 0 à 1
  10. 【中高级前端】必备,30+高频手写题及详细答案(万字长文),看“你”怎么难倒我
  11. In less than two days, the box office exceeded 400 million, and Changjin Lake broke out, breaking seven records in Chinese film history
  12. Tong Liya Jin Chen bumps her hair, Xie Na Zhao Liying bumps her shirt, and she sees EQ from the reaction
  13. react之组件生命周期
  14. L'équipe de vue dévoile un nouvel outil d'échafaudage rapide comme la foudre Create View, qui remplacera la vue CLI à l'avenir, avec seulement 300 lignes de code, apprenez - le!
  15. 20 dessins illustrant le fonctionnement du moteur de rendu du Navigateur
  16. In less than two days, the box office exceeded 400 million, and Changjin Lake broke out, breaking seven records in Chinese film history
  17. 千锋重庆web前端学习之理解CSS位置属性
  18. 什么是语义HTML标记以及如何使用它们?
  19. Si vous vous représentez avec un tableau, c'est le champ de Van Gogh.
  20. 前端面试手写代码
  21. 前端开发框架Vue中Vuex的使用原理分享
  22. vue-echarts初次体验
  23. 分享一些web前端开发好用的网站
  24. 每天读一点webpack-003
  25. react之组件生命周期
  26. Alibaba collection version of mybatis handwritten documents, Java front-end interview questions
  27. SpringBoot Java后端实现okhttp3超时设置
  28. react之組件生命周期
  29. Cycle de vie des composants de React
  30. 使用Reactor将阻塞调用变为异步非阻塞
  31. Baked cake wife sun photos, plain face on camera, beautiful appearance is still a beauty, watching children during the festival is a little helpless
  32. 亚洲知名插画师荒川(arakawa) 仅8件独版NFT作品系列《Can't Out》正式上架Element综合市场
  33. Taiyuan: singing, welcoming the national day, gathering to praise blessings
  34. Arakawa, un illustrateur Asiatique bien connu, n'a mis sur le marché que huit pièces de la collection NFT "can't out" en une seule édition.
  35. Résumé des questions d'entrevue Hadoop (II) - - hdfs
  36. 如何解决“Serverless”系统的冷启动问题
  37. BootstrapBlazor 模板安装
  38. BootstrapBlazor 模板安装
  39. Tong Liya Jin Chen bumps her hair, Xie Na Zhao Liying bumps her shirt, and she sees EQ from the reaction
  40. 使用ESLint+Prettier来统一前端代码风格
  41. 为什么说 Node.js 是实时应用程序开发的绝佳选择
  42. PaddlePaddle:在 Serverless 架构上十几行代码实现 OCR 能力
  43. 使用elementui在完成项目中遇到的未知知识点2
  44. On the mechanism of webpack loader
  45. 云原生体系下 Serverless 弹性探索与实践
  46. vue开发技巧
  47. Une fleur merveilleuse de l'histoire de l'industrie des nouveaux véhicules énergétiques, Zhongtai Jiangnan T11, une voiture vintage que vous n'avez jamais vue
  48. 致敬!再见了!LayUI !
  49. Vue安装和卸载
  50. Implement a flipped character with the transform attribute of CSS
  51. 你的第一个 Docker + React + Express 全栈应用
  52. [apprentissage de l'algorithme] 1486. Fonctionnement exclusif du tableau (Java / C / C + + / python / go / Rust)
  53. Zhang Daxian sends a blessing video on xYG relay, showing positive energy in details
  54. 前端技巧-JS元编程ES6 symbol公开符号
  55. Article de 37 ans seul à l'hôpital!Il boitait, soupçonnait d'être blessé, souriait avec douleur
  56. 前端推荐!10分钟带你了解Konva运行原理
  57. npm ERR! iview-project@3.0.0 init: `webpack --progress --config webpack.dev.config.js
  58. 零基础学习Web前端需要注意什么呢?
  59. The Youth League promotes Yiyang Qianxi new film, and the relationship between the two generation and the generation is good. Li Fei is blessed.
  60. Qu'est - ce qu'il faut remarquer à l'avant - plan Web de l'apprentissage de base zéro?