2017-06-23 24 views
6

Jestem całkiem nowy, Kotlin, a ja natrafiłem obu tych przedstawień:Kotlin Builder vs Konstruktora

Car(name = "CarName") 

i

car { 
    name = "CarName" 
} 

Czy istnieją jakieś wytyczne dotyczące podczas których jeden powinien być użytym? The docs nie wydają się być zbyt jasne w tej sprawie.

+2

Prawdopodobnie bardziej pytanie "tylko stylowe", zachęcające do opinii; ale może ci guru Kotlin mogą podać miłą, opartą na faktach odpowiedź. – GhostCat

Odpowiedz

7

Drugi fragment jest przykładem tego, jak można zbudować DSL dla swojej domeny. W prostych przypadkach, takich jak to, jest trochę przesadzone, aby utworzyć DSL, ale gdy twoje obiekty stają się większe, może być czystsze w projektowaniu DSL.
W rzeczywistości używanie stylu DSL do tworzenia prostych instancji może być nawet mylące.

Na przykład the documentation on DSLs przedstawia poniższy kod:

fun result(args: Array<String>) = 
    html { 
     head { 
      title {+"XML encoding with Kotlin"} 
     } 
     body { 
      h1 {+"XML encoding with Kotlin"} 
      p {+"this format can be used as an alternative markup to XML"} 

      // an element with attributes and text content 
      a(href = "http://kotlinlang.org") {+"Kotlin"} 

      // mixed content 
      p { 
       +"This is some" 
       b {+"mixed"} 
       +"text. For more see the" 
       a(href = "http://kotlinlang.org") {+"Kotlin"} 
       +"project" 
      } 
      p {+"some text"} 

      // content generated by 
      p { 
       for (arg in args) 
        +arg 
      } 
     } 
    } 

Jest to doskonały przykład tego, kiedy można użyć DSL: Składnia umożliwia czystą strukturę jak tworzyć modele. Anko dla innego zapewnia DSL do definiowania interfejsów użytkownika.