重构此函数以降低其在 if else 条件下的认知复杂性

Posted

技术标签:

【中文标题】重构此函数以降低其在 if else 条件下的认知复杂性【英文标题】:Refactor this function to reduce its Cognitive Complexity for if else condition 【发布时间】:2021-08-30 03:05:21 【问题描述】:

由于认知复杂性,我在声纳中遇到错误,请查找我的代码和随附的屏幕截图以获取更多参考。请帮我解决这个问题

 useEffect(() => 
    if (isFocused && isLoggedIn) 
      getProfileData();
    
    if (isFocused) 
      dispatch(rewardsLandingScreenTracker());
    
  , [dispatch, getProfileData, isLoggedIn, isFocused]);

有人也可以告诉我,如果像三元运算符这样的解决方案是什么

  const savedPrice =
    (actualPrice ? getConvertedPrice(actualPrice) : 0) -
    (proPrice ? getConvertedPrice(proPrice) : 0);

【问题讨论】:

【参考方案1】:

你可以改写成:

useEffect(() => 
    if (isFocused) 
        if (isLoggedIn) getProfileData();
        dispatch(rewardsLandingScreenTracker());
    
, [dispatch, getProfileData, isLoggedIn, isFocused]);

useEffect(() => 
    if (!isFocused) return
        
    if (isLoggedIn) getProfileData();
    dispatch(rewardsLandingScreenTracker());
, [dispatch, getProfileData, isLoggedIn, isFocused]);

第二个可能会在返回不一致时引发 lint 错误(取决于您的 linter 设置)。然后你必须在回调函数的末尾添加显式的return

【讨论】:

好的,让我试试,我已经更新了我的问题并添加了车工操作员,如果车工操作员可以请你帮助我 如果n ? convert(n) : 0 是一种常见行为,只需将其放入convert 函数并将其重写为convert(n) - convert(m) 谢谢你,你能不能把上面的代码更新一下,我会参考其他的

以上是关于重构此函数以降低其在 if else 条件下的认知复杂性的主要内容,如果未能解决你的问题,请参考以下文章

重构此方法以将其认知复杂度从 16 降低到允许的 15。如何重构和降低复杂度?

学习重构-简化条件表达式

重构.改善既有代码的设计9简化条件表达式

重构手法之简化条件表达式

重构此函数以在 if 语句 Javascript 内部和外部一致地使用“return”

一万个if..........else....语句,请问如何去优化它。。。。以提升性能效率