scala: enumy a obiekty statyczne

0

Dość pokręcone te enumy w porównaniu do javy, więc postanowiłem uprościć sprawę

Która lepsza wersja:

1:

object HttpSchemas {

    val INDEED_JOB_V1 = "%1$sjobs?as_and=%2$s&as_phr=&as_any=&as_not=&as_ttl=&as_cmp=&jt=all&st=&as_src=&radius=25&l=&fromage=%3$s&limit=10&sort=&psf=advsrch&from=advancedsearch"

}

użycie:

  val httpSchema = HttpSchemas.INDEED_JOB_V1

2:

sealed trait HttpSchemas {
  def httpSchema: String
}

object HttpSchemas {

  case object INDEED_JOB_V1 extends HttpSchemas {
    val httpSchema = "%1$sjobs?as_and=%2$s&as_phr=&as_any=&as_not=&as_ttl=&as_cmp=&jt=all&st=&as_src=&radius=25&l=&fromage=%3$s&limit=10&sort=&psf=advsrch&from=advancedsearch"
  }

}

użycie:

  val httpSchema = HttpSchemas.INDEED_JOB_V1.httpSchema
2

Pierwsza wersja to żaden enum - to po prostu stała tekstowa.

A co do lepszości - jak nie potrzebujesz enuma tylko stałej tekstowej to oczywiście użyj stałej.
Enum, który w Scali robi się przez scalowe ADT ma sens wtedy masz kilka możliwych wartości i chcesz jakoś wymusić, żeby tylko te kilka było dopuszczalnych.

1

Nie napisałeś po co ci ten enum. To nie wygląda jak enum tylko jak stała, więc wersja nr 1 pasuje do stałej.

Stosujesz konwencje nazewnicze z Javy. W Scali NIE_PISZE_SIĘ_WIELKIMI_LITERAMI, zamiast tego PiszeSięJakośTakBardziejElegancko: https://docs.scala-lang.org/style/naming-conventions.html#constants-values-variable-and-methods

Aktualizacja:
@jarekr000000 szybciej pisze :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1