2016-01-20 1 views

risposta

13

Il Kotlin Coding Conventions affermano chiaramente che:

  • uso di camelCase nomi (ed evitare sottolineatura nei nomi)
  • tipi iniziano con lettere maiuscole
  • metodi e le proprietà iniziano con minuscole

Se si segue quanto sopra e trattare constructor come funzione regolare che può essere chiamato, ad esempio val invoice = Invoice(), la parola chiave new diventa ridondante. Una volta che ti impegni con la convenzione, è chiaro che cosa sta facendo un codice.

In realtà anche nel codice Java avrai molte implicite allocazioni che accadono proprio sotto una chiamata di metodo come Collections.singleton(o) o Guava di Lists.newArrayList() quindi non credo che la tua tesi sulla visibilità allocazione essere meglio con la parola chiave è pienamente new valido.

+2

A proposito, ha senso impostare l'evidenziazione della sintassi in IDE in modo che evidenzi i nomi delle classi in * leggermente * colore diverso. Renderà ancora più semplici le chiamate distintive del costruttore. – hotkey

10

(IMO) È stato fatto perché non c'è NESSUNA differenza reale tra le funzioni e la costruzione dell'oggetto, ovvero nulla impedisce a una funzione di allocare un oggetto (e spesso lo fa).

Un buon esempio sono le funzioni di fabbrica. Queste funzioni creano nuovi oggetti, ma non sono in alcun modo costruttori di classi.

AFAIK, la parola chiave new è stata creata a causa di un'esperienza negativa con C \ C++, in cui le funzioni, restituendo nuovi oggetti, devono essere contrassegnate in modo specifico (mediante convenzioni di nome) per non dimenticare di (manualmente) liberare la memoria . In un linguaggio di gestione automatica della memoria come Java \ Kotlin non è una preoccupazione.

3

Diverse altre lingue non hanno la parola chiave new (Python, Scala, forse Ceylon) e le persone che sono passate a quelle lingue non sembrano mai mancare. Lo so che non lo so.

+0

Scala ha la parola chiave 'new'. Solo che ci sono casi in cui non è necessario usarlo, come con le classi dei casi. – marcospereira

+0

Oh, hai ragione. E, usando gli oggetti complementari, puoi rendere la classe invocabile e avere il reindirizzamento verso il costruttore, eliminando efficacemente la necessità di nuovi. L'avevo visto nel mio breve sguardo su Scala e avevo dimenticato che non era la norma. –