Assegnare un nome al campo booleano che è un verbo

10

In Java, per convenzione getter e setter per i campi booleani saranno isField() e setField() . Funziona perfettamente con i nomi dei campi che sono aggettivi come active , visible , closed , ecc.

Ma come faccio a nominare un campo che ha il significato di un verbo, come haveChildren ? Aggiungi "_ing" al verbo ( havingChildren ), forse?

Per chiarire, non ho il controllo dei nomi dei metodi (getter e setter) in quanto sono generati automaticamente dall'IDE. Quindi quello di cui ho bisogno è un nome di campo appropriato in modo che quando l'IDE ne genera un getter, produce dei sensi. Ad esempio, hasChildren è un nome di campo perfetto, ma quando l'IDE genera il getter per il campo sarebbe isHasChildren . Come posso risolvere questo?

    
posta dnang 11.10.2013 - 16:53
fonte

4 risposte

7

Risposta breve:

    I nomi dei metodi
  • non sono superati per riflettere l'implementazione interna ma il comportamento previsto.

Risposta lunga:

haveChildren() deve essere denominato hasChildren() .

Inoltre, non vedo hasChildren() come necessariamente getter per un membro di classe booleano. Immagino che un tale metodo possa scoprire se un membro di tipo Collection è vuoto o meno.

Il nome predefinito che un IDE attribuisce ai getter generati e ai setter non è considerato come una regola impostata nella pietra.

Un altro punto: Le interfacce hanno nomi per i metodi ancora da implementare.

Se i nomi dei metodi fossero superati per riflettere l'implementazione interna, come qualcuno potrebbe mai progettare un'interfaccia? Le interfacce non hanno un'implementazione né sanno in anticipo cosa faranno gli implementatori sotto la cappa .

Prendi ad esempio l'interfaccia Iterator in Java.

Quando implementi Iterator , anche quando hai un membro booleano chiamato next , non hai il privilegio di rinominare hasNext() in isNext() o isHavingNext() . Questo è un dettaglio di implementazione. In effetti, ho implementato Iterator e quello che faccio è un membro del tipo di whathever la mia classe ha un elenco di, chiamato next (non un booleano). hasNext() quindi restituisce next!=null .

Inoltre, vedi questo:

class patient {
      private boolean pulse;
      private boolean breaths:
      public boolean isDead(){ return (!pulse & !breaths);}
}

Tieni presente che isDead() non è un normale getter.

Assumi gli strumenti di produttività degli IDE per quello che sono.

    
risposta data 11.12.2014 - 18:33
fonte
2

Suggerirei di rinominare il campo in parent in modo che il getter sarà isParent e il setter sarà setParent .

Puoi anche provare childPresent per il nome della variabile e isChildPresent e setChildPresent come getter e setter.

    
risposta data 12.10.2013 - 05:10
fonte
0

Potresti inserire does prima del verbo. Ad esempio doesHaveChildren nell'esempio che hai fornito. O forse shouldHaveChildren a seconda del contesto.

    
risposta data 11.10.2013 - 17:01
fonte
0

La domanda è perfettamente ragionevole. A volte la ridenominazione del metodo generato automaticamente non è sufficiente. Esempio: i bean gestiti JSF devono avere isXyz() come metodo getter di una proprietà boolean xyz .

Sono d'accordo con BlackPanther che suggerisce di rinominare il campo in parent e di usare isParent come nome del metodo. Secondo il principio del nascondimento delle informazioni, la leggibilità dei metodi getter e setter è più importante di quella dell'attributo.

    
risposta data 20.08.2014 - 19:28
fonte

Leggi altre domande sui tag