【问题标题】:How can I simplify this if else statement to reduce code repetition?如何简化此 if else 语句以减少代码重复?
【发布时间】:2022-01-22 20:17:28
【问题描述】:

如何简化这个 if else 语句以减少代码重复? 如您所见,变量 uri 仅通过更改 1 个参数进行分配。

    var uri: String?

    if (otfText.isNullOrEmpty()) {
        uri = StickerFileManager.checkIfStickerCreated(
            sticker,
            head,
            sticker.translatedOTFText
        )
        if (uri.isNullOrEmpty()) {
            ResourceDownloadManager.downloadResource(sticker)
            uri = StickerCreator().createStickerWith(
                sticker,
                head,
                sticker.translatedOTFText
            )
        }
    } else {
        uri = StickerFileManager.checkIfStickerCreated(
            sticker,
            head,
            otfText
        )
        if (uri.isNullOrEmpty()) {
            ResourceDownloadManager.downloadResource(sticker)
            uri = StickerCreator().createStickerWith(
                sticker,
                head,
                otfText
            )
        }
    }

【问题讨论】:

    标签: android kotlin if-statement logic simplify


    【解决方案1】:

    这是一种方法。如果它只是 null 比你应该使用 otfText ?: sticker.translatedOTFText 如果它是 nullOrEmpty 那么下面的方法可以使用

         uri = StickerFileManager.checkIfStickerCreated(
              sticker,
              head,
              if (otfText.isNullOrEmpty()) sticker.translatedOTFText else otfText)
                if (uri.isNullOrEmpty()) {
                    ResourceDownloadManager.downloadResource(sticker)
                    uri = StickerCreator().createStickerWith(
                        sticker,
                        head,
                        if (otfText.isNullOrEmpty()) sticker.translatedOTFText else otfText
                    )
                }
    

    【讨论】:

    • 谢谢!这样更好。
    【解决方案2】:

    我会这样做

    var text = if (otfText.isNullOrEmpty()) sticker.translatedOTFText else otfText
    var uri = StickerFileManager.checkIfStickerCreated(
        sticker,
        head,
        text
    )
    if (uri.isNullOrEmpty()) {
        ResourceDownloadManager.downloadResource(sticker)
        uri = StickerCreator().createStickerWith(
            sticker,
            head,
            text
        )
    }
    

    它与Shahnawaz's answer 非常相似,但我认为最好避免进行两次相同的检查,因此我将结果保存在text 变量中,并在两个位置使用该变量。

    【讨论】:

      【解决方案3】:

      这样试试

      var uri = StickerFileManager.checkIfStickerCreated(
          sticker,
          head,
          if (otfText.isNullOrEmpty()) sticker.translatedOTFText else otfText
      )
      
      
      if (uri.isNullOrEmpty()) {
          ResourceDownloadManager.downloadResource(sticker)
          uri = StickerCreator().createStickerWith(
              sticker,
              head,
               if (otfText.isNullOrEmpty()) sticker.translatedOTFText else otfText
          )
      }
      

      【讨论】:

        猜你喜欢
        • 2018-12-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-10-14
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多