#scala
#scala
Вопрос:
Я не знаю, как выбирать между двумя стилями кода для проекта scala при вызове метода из объекта.
стиль кода 1
import com.socgen.bsc.sqd.per.Load._
val pAndRDf: DataFrame = loadPandR(sqdDate)
стиль кода 2
import com.socgen.bsc.sqd.per.Load
val pAndRDf: DataFrame = Load.loadPandR(sqdDate)
Я хотел бы знать, какой из них лучше или между этими двумя стилями, они одинаковы, и мы можем выбрать все, что нам нравится.
Ответ №1:
Я предпочитаю стиль 2, особенно если имя объекта такое короткое. Если у вас более длинное имя, вы также можете добавить замену, например: $
import com.socgen.bsc.sqd.per.{LongComplexLoad => LCL}
val pAndRDf: DataFrame = LCL.loadPandR(sqdDate)
Есть еще один стиль, который я обычно использую, если я контролирую ситуацию. То есть использовать trait
s вместо object
s.
class MyClass extends Load {
val pAndRDf: DataFrame = loadPandR(sqdDate)
...
}
Преимущество этого заключается в том, что вы видите, что вы используете в описании класса. Если список становится слишком длинным, это также указывает на то, что вы можете подумать о разделении проблем.
Об этом также есть обсуждение на Reddit
Ответ №2:
Лучшая идея — использовать вариант 2, где это возможно. Также изменили ваше имя значения (поскольку я лично считаю, что оно более читабельно).
import com.socgen.bsc.sqd.per.Load
val dfPAndR: DataFrame = Load.loadPandR(sqdDate)
По возможности избегайте неоднозначного импорта. Это может затруднить отладку вашего кода, увеличивает вероятность случайного импорта двух Load
объектов (если вы где-то выполняете другой неоднозначный импорт) и означает, что вы импортируете много ненужного материала, что может привести к раздуванию.
Если вам нужно импортировать несколько объектов, тогда придерживайтесь фигурной скобки import com.org.package.{Load, Write}
.
Я бы (лично) также изменил имя значения. Большинство из нас читают слева направо, поэтому знайте, что сначала вы знаете, что это фрейм данных, а затем его значение.
Это небольшое изменение, но может помочь ускорить отладку. Особенно, если у вас есть rddPAndR
позже (например).
Ответ №3:
Это действительно зависит от вашего стиля, но для меня было бы здорово, если бы вы могли свести к минимуму использование «_».
И я бы использовал так:
import com.socgen.bsc.sqd.per.Load.loadPandR
val pAndRDf: DataFrame = loadPandR(sqdDate)
Отредактировано
Комментарии:
1. Я думаю, у вас есть тип — не должно быть
import com.socgen.bsc.sqd.per.loadPandR
?2. Да, что ты сказал @pme