Come chiamare i Groovy Trits?

0

Le classi dovrebbero essere nomi e i metodi dovrebbero essere verbi. Che dire di tratti Groovy ? Dovrebbero essere anche nomi? O forse dovrebbero essere parole di aggettivi / abilità?

    
posta krismath 11.07.2018 - 06:14
fonte

1 risposta

3

Trovando ispirazione da altre lingue (C # in questo caso), le interfacce sono generalmente usate come tratti, cioè comportamenti particolari. Ad esempio, considera IDisposable e IEnumerable .

La stessa cosa accade nella pagina che hai collegato:

class Person implements Greetable {                     
    String name() { 'Bob' }                             
}

Tuttavia, tieni presente che le interfacce possono in alcuni casi essere un nome. Ad esempio, IList .

Puoi anche vedere la stessa cosa accadere nella pagina che hai collegato:

trait FlyingAbility {                           
    String fly() { "I'm flying!" }          
}

Quando ci pensi, un aggettivo non avrebbe funzionato qui. "Volabile" non significa "in grado di volare" (ad esempio, un uccello è in grado di volare), significa "in grado di essere volato " (ad esempio un aereo può essere pilotato da un pilota). Per evitare confusione, la forma del nome è stata una scelta migliore qui.

Cercando di distillare una descrizione di denominazione per le interfacce, l'obiettivo non è in realtà se si tratta di un sostantivo o di un aggettivo, ma piuttosto che descrive un'abilità . Questo può essere fatto in forma di nome ( FooAbility ) o in forma di aggettivo ( FooAble ), ma l'intenzione è la stessa: sottolineando la capacità di fare / essere qualcosa.

Se scegli un nome o un aggettivo dipende dalla semantica che circonda la parola (nella lingua in cui è scritto il tuo codice, che non è sempre l'inglese).

Sidenote
In codebases that use dependency injection, core classes (Foo) get a boilerplate interface (IFoo). This breaks the naming convention of pointing out an ability, unless you read it as meaning "able to behave as a Foo", which I don't quite agree with. In my opinion that inverts the logic. We should instead think of it as "Foo can behave as an IFoo" (because of Foo : IFoo).

Regardless, DI interfaces have a slightly different naming convention, but they are not really used as "traits" anyway, so I'm choosing to ignore them for your specific question on traits.

Modifica

A pensarci bene, la distinzione tra sostantivo / aggettivo sembra essere correlata alla voce attiva / passiva.

  • (aggettivo) Flyable = in grado di essere volato (passivo)
  • (aggettivo) Throwable = in grado di essere lanciato (passivo)
  • (aggettivo) Flammable = in grado di essere dato alle fiamme (passivo)

  • (sostantivo) FlyingAbility = in grado di volare (attivo)

  • (sostantivo) ThrowingAbility = in grado di lanciare qualcosa (attivo)
  • (sostantivo) FireAbility = in grado di appiccare il fuoco alle cose (attivo)

Non sono sicuro che sia applicabile universalmente in inglese. Non sono sicuro se questo si applica ad altre lingue.

    
risposta data 11.07.2018 - 08:53
fonte

Leggi altre domande sui tag