亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何在 Kotlin 中維護這個復雜的 if-else 語句

如何在 Kotlin 中維護這個復雜的 if-else 語句

侃侃爾雅 2023-05-10 17:31:08
我寫了一個函數來根據請求參數從數據庫中獲取信息。下面的 if-else 語句是一個大問題。如果我們繼續添加更多過濾器,我們需要繼續為所有可能的路徑添加語句。    fun getMessages(name: String, pageable: Pageable, locale: String?, subject: String?,                              recipient: String?): Page<MessageDTO>? {        val messagePageable= if (!locale.isNullOrEmpty() && !subject.isNullOrEmpty() && !recipient.isNullOrEmpty()) {            messageRepository.findAll(where(hasMessageName(name).and(hasLocale(locale!!)            .and(hasSubject(subject!!).and(hasRecipient(recipient!!))))), pageable)        } else if (!locale.isNullOrEmpty()) {            messageRepository.findAll(where(hasMessageName(name).and(hasLocale(locale!!))), pageable)        } else if (!subject.isNullOrEmpty()) {            messageRepository.findAll(where(hasMessageName(name).and(hasSubject(subject!!))), pageable)        } else {            messageRepository.findAll(where(hasMessageName(name)), pageable)        }        return messagePageable.map { messageMapper.toMessageDTO(it) }.takeIf { it.content.isNotEmpty() }}應該有更好的寫法。我感謝您的幫助。
查看完整描述

2 回答

?
慕田峪9158850

TA貢獻1794條經驗 獲得超7個贊

我不確定,但也許一些重構會有所幫助。例如,您似乎正在對request數據庫使用某種形式,如果根據參數進行填充,那么也許可以像這樣進行管理。


fun getMessages(name: String, pageable: Pageable, locale: String?, subject: String?,

                          recipient: String?): Page<MessageDTO>? {

    val request = where(hasMessageName(name))

    locale?.let{ request.and(hasLocale(it)) }

    subject?.let{ request.and(hasSubject(it)) }

    recipient?.let{ request.and(hasRecipient(it))}


    return messageRepository.findAll(request, pageable)

                            .map { messageMapper.toMessageDTO(it) }

                            .takeIf { it.content.isNotEmpty() }

}

在這里,我不確定.and()方法是如何工作的,所以也許它應該是這樣的: request = request.and(...)


查看完整回答
反對 回復 2023-05-10
?
慕容森

TA貢獻1853條經驗 獲得超18個贊

您可以if用一個when語句替換您的語句,以便更容易閱讀:

fun getMessages(name: String, pageable: Pageable, locale: String?, subject: String?,

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? recipient: String?): Page<MessageDTO>? = when {

? ? !locale.isNullOrEmpty() && !subject.isNullOrEmpty() && !recipient.isNullOrEmpty() ->

? ? ? ? messageRepository.findAll(where(hasMessageName(name).and(hasLocale(locale!!)

? ? ? ? ? ? .and(hasSubject(subject!!).and(hasRecipient(recipient!!))))), pageable)

? ? !locale.isNullOrEmpty() ->

? ? ? ? messageRepository.findAll(where(hasMessageName(name).and(hasLocale(locale!!))), pageable)

? ? !subject.isNullOrEmpty() ->

? ? ? ? messageRepository.findAll(where(hasMessageName(name).and(hasSubject(subject!!))), pageable)

? ? else ->

? ? ? ? messageRepository.findAll(where(hasMessageName(name)), pageable)

}.map { messageMapper.toMessageDTO(it) }.takeIf { it.content.isNotEmpty() }


查看完整回答
反對 回復 2023-05-10
  • 2 回答
  • 0 關注
  • 150 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號