Perché vedo più convenzioni di denominazione booleani in cui "è" viene utilizzato come prima parola nella variabile (ad esempio, IsUserAdmin vs UserIsAdmin)? [chiuso]

3

Penso che tutti saranno d'accordo sul fatto che i seguenti valori booleani di variabili / proprietà sono standard:

  • UserIsAdmin
  • OrdersAreClosed

La cosa importante da notare sulle espressioni booleane è che sono dichiarate e quindi valutate come vere o false. L'utente è admin Falso. Ottieni il punto.

Tuttavia, ultimamente ho visto un aumento dei booleani in questo modo:

  • IsUserAdmin
  • AreOrdersClosed

Sono l'unico a non pensare che questo sia assolutamente ridicolo? Non stai chiedendo "L'utente è l'amministratore?" e poi aspettando un sì o no. Stai facendo una dichiarazione di "Utente è amministratore" e aspetti una valutazione vera o falsa.

Microsoft lo ha fatto molto ultimamente, così come la programmazione dei nostri controlli web Telerik. Il fatto è che non capisco da dove viene questo. Non è mai stato popolare, lasciandomi a chiedermi se sono solo io a notarlo o se questa è una tendenza che è in aumento e, in tal caso, qual è il punto?

    
posta oscilatingcretin 22.08.2011 - 03:12
fonte

3 risposte

7

Come ha detto @Joe nel suo commento, è ridondante inserire il nome dell'oggetto nel nome del metodo. Supponi di chiamare:

if (user.isUserAdmin()) {

È piuttosto sciocco, perché il nome del metodo ripete il nome della classe (probabilmente qualcosa come User , o forse una sottoclasse chiamata Admin ). A partire da is o are o can ha senso nel contesto immediato dell'oggetto su cui stai chiamando.

Tuttavia, ha senso quando si ricevono informazioni da un oggetto su un altro oggetto di cui è responsabile. Ad esempio:

if (user.ordersAreValid()) {

Allora diventerà un po 'confuso. areOrdersValid ha senso perché è sotto forma di domanda. D'altra parte, ordersAreValid diventa una frase quando combinato con una struttura di controllo come if o while (ad esempio "se gli ordini sono validi"). Mi chino verso il secondo, ma potrebbe essere più una questione di gusti.

    
risposta data 22.08.2011 - 03:44
fonte
2

Uno dei motivi per farlo è quello di aiutare con il completamento automatico. Ad esempio, le app di Windows Form hanno sofferto di un'inconsistente API di .NET Framework in cui non si sarebbe mai saputo se è necessario includere "è" o meno. Ad esempio, per verificare se una casella di controllo è selezionata, dovresti scrivere this.checkbox.Checked . In WPF, questo è stato modificato, e ora devi usare this.checkbox.IsChecked che è più facile da ricordare.

Detto questo, non vedo come AreOrdersClosed sarebbe migliore di OrdersAreClosed . Una possibile spiegazione potrebbe essere lo stesso completamento automatico: è più semplice trovare proprietà e campi booleani.

Ma questo può essere criticato:

  • Se iniziamo a farlo, perché non usare anche la notazione ungherese? Poiché la notazione ungherese non deve essere utilizzata nella maggior parte delle lingue utilizzate oggi, non c'è motivo di usarla solo per i booleani.
  • Le variabili booleane possono iniziare con is , are o can . Tre prefissi per lo stesso tipo sono troppi se l'unico motivo è un migliore completamento automatico. Se vogliamo essere coerenti, AreOrdersClosed deve essere IsOrdersClosed e CanResumeDownloads deve essere IsResumeDownloadsPossible , che è brutto.

Probabilmente le persone iniziano con le proprietà grammaticali formate come Is + <Adjective> , e quando si tratta dei rari casi di <Noun> + Is + <Adjective> , la mettono solo come Is + <Noun> + <Adjective> per avere un'API più uniforme.

Ora, ci sono alcuni casi in cui "è" può essere trovato tra due parole in un nome di una variabile, e non riesco a ricordare alcun caso valido da .NET Framework. In realtà, guardando i tuoi esempi, mi sento come se ci fosse un refactoring da fare:

  • IsUserAdmin può essere IsAdmin , come suggerito dai commenti,
  • AreOrdersClosed può anche essere rinominato in AreClosed o qualcos'altro a seconda del contesto. Ad esempio, se questo è un valore che indica se qualcuno non può aggiungere nuovi prodotti al carrello, preferirei creare una proprietà IsClosed o IsFinished a Cart o Order .
risposta data 22.08.2011 - 03:29
fonte
1

È solo un modo per restringere una ricerca in auto complete / Intellisense. Quando inizi a scrivere un condizionale, digitando "È" è un buon modo per trovare ciò che stai cercando senza dover scorrere tutto, quando non conosci il nome del membro che stai cercando.

L'unica ragione per cui facciamo questo per "È" e nient'altro è perché sappiamo che i membri booleani vengono spesso utilizzati nel contesto di un ramo o di un ciclo. Non è un caso che i booleani siano tra i pochi tipi in cui la maggior parte delle lingue ha così tante parole chiave e strutture speciali da riconoscere.

Sono sicuro che troveremmo più cose da notare con prefissi simili se potessimo capire quali sarebbero i contesti appropriati.

    
risposta data 22.08.2011 - 03:50
fonte

Leggi altre domande sui tag