zoukankan      html  css  js  c++  java
  • [Javascript] Avoiding Mutations in JavaScript with Immutable Data Structures

    To demonstrate the difference between mutability and immutability, imagine taking a drink from a glass of water. If our glass is mutable, when we take a drink, we retain the same glass and change the amount of water in that glass. However, if our glass is immutable, when we take a drink, we get back a brand new, identical glass containing the correctly drank amount. Perhaps a strange way to conceive of the action, but creating new data structures makes our methods pure and thread-safe, a benefit of functional programming.

    class MutableGlass {
      constructor(content, amount) {
        this.content = content
        this.amount = amount
      }
    
      takeDrink(value) {
        this.amount = Math.max(this.amount - value, 0)
        return this
      }
    }
    
    // We can verify this by checking the references of the first glass and
    // the glass returned by `takeDrink()` and see that they are the same.
    const mg1 = new MutableGlass('water', 100)
    const mg2 = mg1.takeDrink(20)
    console.log(mg1.amount === 80 && mg1.amount === mg2.amount) // true
    console.log(mg1 === mg2) // true

    Immutable class, whch every time should return a new instance:

    // Taking a drink from the immutable glass returns an entirely new glass,
    // but with the correct content and amount of it in the glass.
    class ImmutableGlass {
      constructor(content, amount) {
        this.content = content
        this.amount = amount
      }
    
      takeDrink(value) {
        return new ImmutableGlass(this.content, Math.max(this.amount - value, 0))
      }
    }
    
    // We can verify this by checking the references and seeing that they are
    // _not_ equal
    const ig1 = new ImmutableGlass('water', 100)
    const ig2 = ig1.takeDrink(20)
    console.log(ig1.amount !== ig2.amount) // true
    console.log(ig1 === ig2) // false
  • 相关阅读:
    java获取文件夹下所有目录
    java下载zip文件
    oracle 递归查询数据
    easyUi刷新 tabs
    jsp引入本地图片
    zabbix web监测设置
    jenkins部署
    ss 异常活动端口查询-std
    logrotate 日志分割
    rsync删除大量小文件
  • 原文地址:https://www.cnblogs.com/Answer1215/p/10585877.html
Copyright © 2011-2022 走看看