I metodi che restituiscono booleano devono avere un nome dopo una domanda o un'asserzione? [chiuso]

8

Molte convenzioni sui nomi raccomandano che i metodi che restituiscono un valore booleano (chiamato anche metodi di predicato ) dovrebbero essere nominati dopo una domanda . La mia domanda è: non intendono davvero che i metodi dovrebbero essere nominati dopo un'asserzione ?

La differenza potrebbe essere sottile, ma in alcuni casi si finiscono con nomi diversi:

  • domanda : is_pixel_transparent (...)
  • asserzione : pixel_is_transparent (...)

A volte, questo non fa alcuna differenza e il fraseggio è lo stesso:

  • domanda : end_of_file (...)
  • asserzione : end_of_file (...)

Inoltre, sembra che la maggior parte delle volte, ciò che le persone chiamano "domande" siano in realtà asserzioni .

  • key_exists (...) - > questa non è una domanda, questa è un'affermazione.
    Esempio di utilizzo: if (key_exists (...)) ...
  • array_contains_element (...) - > questa non è una domanda, questa è un'affermazione.
    Esempio di utilizzo: if (array_contains_element (...)) ...

Quindi, per riaffermare la domanda, tutti stanno dicendo asserzione quando dicono domanda ?

    
posta rick 19.12.2013 - 12:34
fonte

1 risposta

13

Il punto delle convenzioni di denominazione non è quello di far leggere il tuo codice come in inglese, quindi potresti analizzarlo un po '. In molte lingue, è consuetudine precedere un metodo o una funzione che restituisce un risultato booleano o una variabile booleana con is , quando ha senso. Esistono altre tradizioni (ad es. Lisp, Ruby), dove invece viene utilizzato un suffisso ? . (Una tradizione Lisp più vecchia è il suffisso -p per il predicato ).

  • Nell'esempio della trasparenza dei pixel, is_transparent dovrebbe essere un metodo di un oggetto pixel. Se sei in una lingua che non ha oggetti, ma vuoi simulare uno stile OOP, il tipo di solito sarà il prefisso: Pixel_is_transparent . Nota che il prefisso is è usato solo per evidenzia la natura booleana di questo metodo; è già implicito nella chiamata al metodo (anche pixel.transparent funziona, ma può diventare troppo ambiguo con altri nomi di proprietà).
  • Per testare per EOF, un metodo potrebbe essere denominato at_eof . Questo interpreta la fine del file come posizione nello stream, mentre stream.is_eof funzionerebbe bene: qui, l'EOF è uno stato specifico.
  • Per verificare se esiste una voce, collection.exists(key) sarebbe meglio.
  • array_contains_element non è un buon nome di metodo, poiché contiene un tipo e il element non necessario. Migliore: array.contains(elem) .

Tutti i nomi che suggerisco sono asserzioni, o più precisamente: predicati. L'uso di domande non ha alcun senso linguistico quando questi predicati sono usati in un contex if-then-else . La parola " asserzione " probabilmente non è ottimale qui, in quanto viene usata per descrivere il test degli invarianti in molte lingue. La parola " predicato " sarebbe migliore: una dichiarazione che sia vera o falso. Una dichiarazione è formulata come se fosse vera, non come una domanda. L'istruzione 1 ∈ {} - " 1 è l'elemento dell'insieme vuoto" o "il set vuoto contiene 1 " è un'istruzione falsa. La domanda "il set vuoto contiene il numero 1?" Può essere risposto con yes o no , ma non è vero o falso.

    
risposta data 19.12.2013 - 13:17
fonte

Leggi altre domande sui tag