Как оптимизировать код в Kotlin? - PullRequest
0 голосов
/ 01 мая 2018

Код A очень прост, могу ли я оптимизировать код B в Kotlin?

Код A

val pendingIntent = if (isServer)
        PendingIntent.getService(myContext, 0, myIntent, 0)
    else
        PendingIntent.getActivity(myContext, 0, myIntent, 0)

Код B

var builder: NotificationCompat.Builder? =null

if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.O) {
    val importance = NotificationManager.IMPORTANCE_DEFAULT
    val notificationChannel = NotificationChannel("ID", "My", importance)
    notificationManager.createNotificationChannel(notificationChannel)
    builder = NotificationCompat.Builder(applicationContext, notificationChannel.id)
} else {
    builder = NotificationCompat.Builder(applicationContext)
}

Ответы [ 2 ]

0 голосов
/ 01 мая 2018

Код А хорош так, как есть.

Код B можно упростить, сделав ваш builder ненулевым значением val вместо nullable var, сделав его результатом выражения if (как вы делаете в коде A). Здесь можно также указать тип builder, при желании вы можете его отключить. Кроме того, внутри первого блока if вы можете сделать его немного чище, используя значение importance напрямую, вместо того, чтобы объявлять его как значение (которое вы используете только в одном месте).

val builder = if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.O) {
    val notificationChannel = NotificationChannel("ID", "My", NotificationManager.IMPORTANCE_DEFAULT)
    notificationManager.createNotificationChannel(notificationChannel)
    NotificationCompat.Builder(applicationContext, notificationChannel.id)
} else {
    NotificationCompat.Builder(applicationContext)
}

Что-нибудь более (используя also или apply в блоке if), я бы сказал, делает это менее ясным в этом случае. Я не очень люблю звонить по notificationManager в середине, но я не разработчик Android и не уверен, что этот побочный эффект идиоматичен или нет.

0 голосов
/ 01 мая 2018
   var builder: NotificationCompat.Builder = if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.O) {

                val importance = NotificationManager.IMPORTANCE_DEFAULT
                val notificationChannel = NotificationChannel("ID", "My", importance)
                notificationManager.createNotificationChannel(notificationChannel)
                NotificationCompat.Builder(applicationContext, notificationChannel.id)
            } else {
                NotificationCompat.Builder(applicationContext)

            }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...