E 'necessario che un booleano sia "falso" di default?

0

Ad esempio, per memorizzare se l'audio è attivo, ho un booleano chiamato "isSoundOn":

private boolean isSoundOn=true;

tuttavia, il valore predefinito di booleano è falso, ma voglio che la mia applicazione accenda il suono all'inizio. La mia domanda è, dovrei cambiare il nome di isSoundOn in isMute, in modo che diventi "false" correttamente per impostazione predefinita?

O in generale, dovrei mantenere un booleano essere falso di default, anche se potrei aver bisogno di riconsiderare il nome di booleano?

    
posta mmmaaa 02.08.2018 - 08:35
fonte

2 risposte

5

No, non devi assolutamente scegliere i nomi delle variabili per conformarti ai valori predefiniti della tua lingua.

Il punto dei nomi delle variabili è rendere più facile la lettura del codice per il maintainer. I valori predefiniti sono un dettaglio delle specifiche del linguaggio (o talvolta anche dell'implementazione) e potrebbero o meno corrispondere al tuo intento nell'uso di una variabile flag. Quindi è molto, molto meglio scegliere il nome della variabile per essere il più chiaro possibile per il lettore, e usare l'inizializzazione esplicita se è necessario per ottenere il valore iniziale desiderato.

(A proposito, IMO non c'è motivo di usare l'inizializzazione se il valore predefinito corrisponde alla semantica del tuo programma. Espressioni come private boolean active = false; sembrano sgradevoli come se l'autore non conoscere le specifiche del linguaggio e farmi chiedere che altro non sanno.)

    
risposta data 02.08.2018 - 08:56
fonte
1

Un approccio alternativo sarebbe avere un enum (o basato sul tuo linguaggio di programmazione un tipo con solo due possibili valori, ma con nomi più descrittivi poi true/false )

public enum SoundState
{
    On = 0,  // 'On' by default
    Off = 1
}

Quindi il tuo codice sembrerà più semplice riguardo alla sua intenzione.

public class Setting
{
    public SoundState Sound { get; set; }
}

var settings = new Setting();

if (settings.Sound == SoundState.On)
{
    // do something
}
    
risposta data 02.08.2018 - 09:45
fonte

Leggi altre domande sui tag