🗒 Задача¶
При работе на таможенном терминале важно точно определить категорию каждого груза. Напиши программу, которая проверяет, соответствует ли груз категории "Average". Эта категория имеет следующие параметры: вес от 35 кг (не включительно) до 100 кг (включительно), и объем меньше 100 литров (не включительно).
Создай программу, которая отображает соответствие данных груза категории "Average". Вывод программы может выглядеть так: "Груз с весом 42 кг и объемом 120 л соответствует категории 'Average': false".
-
укажи предварительно заданные параметры категории;
-
проверь, соответствуют ли следующие грузы категории "Average": 20 кг / 80 л и 50 кг / 100 л;
-
сделай сравнение непосредственно внутри println() и без использования диапазонов.
❌ Ошибки¶
-
слишком длинная строка по горизонтали (больше 120 символов) — обосновать и сослаться на пример с Detect
-
не выносят данные для сравнения в константы, неправильный синтаксис констант
✏️ Комментарии¶
Значения в этом коде являются [магическими числами](https://ru.wikipedia.org/wiki/%D0%9C%D0%B0%D0%B3%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%BE%D0%B5_%D1%87%D0%B8%D1%81%D0%BB%D0%BE_(%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5)#%D0%9F%D0%BB%D0%BE%D1%85%D0%B0%D1%8F_%D0%BF%D1%80%D0%B0%D0%BA%D1%82%D0%B8%D0%BA%D0%B0_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D1%8F)
не лучшая практика. добавь, пожалуйста, переменные)
И предлагаю переменные с которыми сравниваем входные данные вынести в константы, так как они точно не будут меняться после компиляции
Немного смущает битовый оператор `and`.
В целом это не ошибка, но стоит помнить, что `&&` работает более оптимизированно для наших целей: если слева от знака выражение возвращает false, то правую часть он не будет проверять. Иногда это может благоприятно отображаться на экономии ресурсов
Да, код корректный. Но давай чуть улучшим.
Строки слишком длинные (>120 символов), глазу труднее в них ориентироваться. Часто в компаниях вводят правила форматирования, а также специальные утилиты, которые следят за соблюдением правил.
Вот например такая утилита Detekt для Kotlin запрещает по-умолчанию строки длиннее 120 символов: https://detekt.dev/docs/rules/formatting/#maximumlinelength.
Давай добавим перенос или вынесем в переменную условие
И предлагаю переменные с которыми сравниваем входные данные вынести в константы, так как они точно не будут меняться после компиляции
Нейминг констант отличен от обычных переменных. В [документации по ссылке](https://developer.android.com/kotlin/style-guide#constant_names) есть более полное описание стайл гайда
🧾 Решение¶
fun main() {
var weight = 20
var volume = 80
println("Груз, весом $weight кг и обьемом $volume л " +
"подходит для категории Average: ${weight > WEIGHT_MIN && weight <= WEIGHT_MAX && volume < VOLUME}")
weight = 50
volume = 100
println("Груз, весом $weight кг и обьемом $volume л " +
"подходит для категории Average: ${weight > WEIGHT_MIN && weight <= WEIGHT_MAX && volume < VOLUME}")
}
const val WEIGHT_MIN = 35
const val WEIGHT_MAX = 100
const val VOLUME = 100
const val MIN_WEIGHT = 35
const val MAX_WEIGHT = 100
const val MAX_VOLUME = 100
fun calculateAverage(weight: Int, volume: Int) {
val message = "Груз с весом $weight кг и объемом $volume л соответствует категории 'Average': "
println(message + "${weight > MIN_WEIGHT && weight <= MAX_WEIGHT && volume < MAX_VOLUME}")
}
fun main() {
calculateAverage(weight = 20, volume = 80)
calculateAverage(weight = 50, volume = 100)
}