Код 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)
}
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 да, я знаю, но у книги не хватает времени: P извините
Код А и так хорош.
Код 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 и не уверен, является ли этот побочный эффект идиоматическим или нет.
Вы можете сделать то же самое, что и в коде A, удалить подсказку типа и использовать выражение if в качестве выражения. Тем не менее, тип вопроса «Как улучшить мой код» не по теме и должен быть размещен на Проверка кода.