/ / Convención de nomenclatura en Play Framework - scala, playframework, playframework-2.0, naming-convenions

Convenciones de nomenclatura en Play Framework: scala, playframework, playframework-2.0, naming-conventions

Aquí hay una parte del código fuente de Play Framework:

package play.api.mvc
trait Results extends java.lang.Object {
def $init$() : scala.Unit = { /* compiled code */ }

def Async(promise : scala.concurrent.Future[play.api.mvc.Result]) : play.api.mvc.AsyncResult = { /* compiled code */ }
val Ok : Results.this.Status = { /* compiled code */ }
val Created : Results.this.Status = { /* compiled code */ }
val Accepted : Results.this.Status = { /* compiled code */ }
//.......................

Me pregunto por que lo nombran val y def comenzando con las letras mayúsculas?

Además, algunas clases y objetos comienzan con las letras pequeñas:

package views.html.play20

object book extends BaseScalaTemplate[play.api.templates.Html, play.templates.Format[play.api.templates.Html]] with play.api.templates.Template1[scala.Seq[scala.Predef.String], play.api.templates.Html] {
def apply(pages : scala.Seq[scala.Predef.String]) : play.api.templates.Html = { /* compiled code */ }
//.............
}

package views.html.play20

object manual extends play.templates.BaseScalaTemplate[play.api.templates.Html, play.templates.Format[play.api.templates.Html]] with play.api.templates.Template3[scala.Predef.String, scala.Option[scala.Predef.String], scala.Option[scala.Predef.String], play.api.templates.Html] {
def apply(title : scala.Predef.String, main : scala.Option[scala.Predef.String], sidebar : scala.Option[scala.Predef.String]) : play.api.templates.Html = { /* compiled code */ }
//............
}

package views
package object xml extends java.lang.Object {
}

Respuestas

1 para la respuesta № 1

Como un descargo de responsabilidad no estoy escribiendo en Java ni utilizando Reproducir en proyectos.

En cuanto a los objetos. Desde el punto de vista OOP, el objeto de primera clase en Scala es solo un objeto instanciado con un patrón de singleton en Java (no estoy usando Java, corríjame si estoy equivocado). Así que puedo adivinar que el equipo de juego que usa el nombre de los objetos singleton en minúscula debido a la compatibilidad con Java y en las variables de Java se escribe con una primera letra en minúscula:

Tyme varName = new Type()

Como defs / vals que comienza con una letra mayúscula. Por ejemplo AsyncDe nuevo, Async con una letra mayúscula parece un constructor de algunos datos y puede hacerlo creando algunos case class Asyncsingleton object Async con un apply método o simplemente hacer una función que tiene unaargumento. En el caso de Async, solo debe tener en cuenta que este cálculo debe realizarse de forma asíncrona, no necesita un tipo de datos real para esto, solo el resultado es: AsyncResult que se hace como un clase de caso.

Además, este truco se puede utilizar de manera funcional en scala cuando modelas todo con trait. Rasgo como él mismo no puede ser instanciado, simplemente puede escribir new Sometrait {}, lo cual no es bello, pero puedes agregar un método para esto:

trait Welcome {
def welcome: String
}

def Welcome(name: String) = new Welcome {
def welcome = s"Welcome! $name"
}

que es una forma más tradicional de hacer un objeto.

En cuanto a las razones reales de esta convención, supongo que solo alguien del equipo de Play puede responder.