Как оптимизировать код в Котлине?

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

Код А

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)
}

Вы можете сделать то же самое, что и в коде A, удалить подсказку типа и использовать выражение if в качестве выражения. Тем не менее, тип вопроса «Как улучшить мой код» не по теме и должен быть размещен на Проверка кода.

pixix4 01.05.2018 15:17
0
1
563
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

   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)

            }

вам следует добавить некоторые пояснения, а не только код решения.

pixix4 01.05.2018 15:19

@ pixix4 да, я знаю, но у книги не хватает времени: P извините

Adeel Turk 01.05.2018 15:30
Ответ принят как подходящий

Код А и так хорош.

Код B можно упростить, сделав для вашего builder значение, не допускающее значения NULL, вместо переменной, допускающей значение NULL, сделав его результатом выражения 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 и не уверен, является ли этот побочный эффект идиоматическим или нет.

Другие вопросы по теме