Во-первых, не используйте return
в Scala, это может привести к очень странным ошибкам.Последнее значение в функции будет результатом, поэтому нет необходимости в return
.
. Вы получаете сообщение об ошибке, поскольку последнее значение равно val ...
, а объявление не возвращает значение (или, скорее,он имеет значение Unit
, которое является эквивалентом Scala void
).
Также неплохо бы избегать if/else
, если есть функция, которая может делать то же самое.В этом случае вы можете использовать max
:
def computeShippingCosts(weight: Double): Double =
math.max(5, weight*.25 - 2.5)
Я думаю, что это также выражает логику лучше, потому что она ясно дает понять, что есть вычисленная стоимость с минимальным значением.И это гарантирует, что более тяжелая посылка никогда не будет дешевле, чем более легкая посылка, которую сложнее гарантировать с помощью оригинальной логики.
Если вы хотите сохранить исходную форму кода, она выглядит следующим образом:
def computeShippingCosts(weight: Double): Double = {
val init: Double = 5
val overW: Double = weight - 30.0
if (weight >= 30) {
init + (overW*.25)
} else {
5.0
}
}
Андрей дает альтернативную версию, которая более полезна, если вы рассматриваете расчет как базовую стоимость с превышением для товаров с избыточным весом:
def computeShippingCosts(weight: Double): Double =
5 + 0.25*(weight - 30).max(0)