Цепочка опций вместо if / else

Есть ли более сукциновый способ написать следующий код, используя цепочку опций и / или оператор elvis?

email.addSubject(if (creator != null) String.format( inviteDescription, creator) else String.format(inviteDescriptionNoCreator, group)) 

Похоже, должно быть.

Используя обычное выражение IF

 val subject = if (creator != null) { inviteDescription.format(creator) } else { inviteDescriptionNoCreator.format(group) } email.addSubject(subject) 

Оператор Элвиса

 val subject = creator?.let { inviteDescription.format(it) } ?: inviteDescriptionNoCreator.format(group) email.addSubject(subject) 

Если цель состоит в том, чтобы написать кратчайший возможный код, вы можете пойти с одним оператором Elvis. Но если цель – читаемый код, я бы выбрал простое выражение if или многострочный оператор Elvis. Я бы даже пошел на один шаг вперед и переместил его на отдельный метод. Но что бы вы ни выбрали, пожалуйста, не пишите все в одной длинной строке, а размещайте в отдельных строках.

Просто воспользовавшись ?. и ?: дает нам следующее:

 email.addSubject(creator?.let { String.format(inviteDescription, it) } ?: String.format(inviteDescriptionNoCreator, group)) 

К сожалению, это все еще довольно долго и, возможно, не намного легче читать. Вы можете немного сбрить, используя String.format расширения String.format :

 email.addSubject(creator?.let { inviteDescription.format(it) } ?: inviteDescriptionNoCreator.format(group))