【问题标题】:Prettier removes parentheses around mathematical expressionPrettier 去掉了数学表达式周围的括号
【发布时间】:2019-12-04 19:40:27
【问题描述】:

我正在尝试根据 React 中的数学表达式对数组进行切片。但是,更漂亮的扩展不允许我这样做,因为它删除了括号,使表达式不正确。

示例如下:

const paginateItems = items.slice(
      pageIndex * itemsPerPage,
      (pageIndex * itemsPerPage) * 2
    )

更漂亮的改变为

const paginateItems = items.slice(
      pageIndex * itemsPerPage,
      pageIndex * itemsPerPage * 2
    )

如何解决这个问题,以免我的表达不正确?

【问题讨论】:

  • 如何使表达式不正确? (1 * 2) * 31 * 2 * 3 相同
  • 在这种情况下没关系吧?尝试(a-b)*c 之类的东西,以确保如果确实如此,您可以记录错误
  • console.log(2*3*4 === (2*3)*4)

标签: javascript reactjs prettier


【解决方案1】:

如何解决这个问题,以免我的表达不正确?

它不会使您的表达不正确。 * 是左关联的,这意味着a * b * c(a * b) * c 完全相同。该代码中的括号对结果没有任何影响。

如果您的表达式是 pageIndex * (itemsPerPage * 2),如果 itemsPerPage 真的很大(通过在itemsPerPage * 2 而不是在 pageIndex * itemsPerPage 期间导致溢出,假设 pageIndex 为 2 或更高)。所以我希望 Prettier 在这种情况下不要管他们。但是对于(pageIndex * itemsPerPage) * 2() 根本没有任何作用。


¹“编程中”——在数学世界中,pageIndex * (itemsPerPage * 2) 中的括号也没有任何区别,因为乘法是传递性(我认为就是这个词):@987654332 @ 等同于(a * b) * c 等同于a * (b * c)。但是在编程中,我们处理范围有限和/或精度有限的数字类型,因此两个乘法运算发生的顺序很重要。

【讨论】:

  • 快速不充分的实验表明,有问题的工具 (Prettier) 仅在暗示默认操作顺序时才遵循消除 ( ) 的规则。
猜你喜欢
  • 1970-01-01
  • 2018-08-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-12-13
  • 1970-01-01
相关资源
最近更新 更多