• [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
  • 相关阅读:
    今天看了几个小时的微信小程序说说心得体会
    关于wordpress中的contact form7和WP Mail SMTP的一些设置
    关于163发邮件报错535 Error:authentication failed解决方法
    Numpy 基本除法运算和模运算
    基本的图像操作和处理
    Python中flatten用法
    media
    TensorFlow模型保存和提取方法
    docker 默认用户和密码
    Windows安装TensorFlow
  • 原文地址:https://www.cnblogs.com/Answer1215/p/10585877.html
Copyright © 2020-2023  润新知