Dove mettere proprietà private calcolate?

2

In Codice pulito è suggerito che le funzioni di supporto privato dovrebbero sempre esistere direttamente sotto la funzione in cui vengono utilizzate direttamente. Dovrei farlo quando uso le proprietà calcolate? È normale posizionare le variabili di istanza private all'inizio di una classe, ma nel caso di quella che è essenzialmente una funzione di aiuto, trovo che sia confusa farlo.

La convenzione per mantenere le nostre variabili di istanza all'inizio della classe e le nostre funzioni di aiuto in basso sono in conflitto qui. Dovrei fare di questa una funzione per il bene della convenzione? Mantenere questo dove è o metterlo in cima alla classe?

/// Done button in nav bar should let know that tapping will dismiss the view
func applyVoiceOverToNavigationBar() {
    guard timelinesAreInitialized else { return }
    let openDay = Scheduler.sharedInstance.timelines[SharedGlobals.Calendar.SELECTED_DAY].DAY.dayName
    self.navigationItem.rightBarButtonItem?.applyVoiceOverAccessibility(
        label: self.navigationItem.rightBarButtonItem?.title ?? "",
        hint:"VoiceOver.OpenScreenHint".localized.replacingOccurrences(of: "{Screen}", with: openDay))
}

private var timelinesAreInitialized: Bool {
    return Scheduler.sharedInstance.timelines.count > SharedGlobals.Calendar.SELECTED_DAY
}
    
posta Declan McKenna 10.04.2018 - 10:30
fonte

2 risposte

2

Should I be doing this when using computed properties? It's the norm to place private instance variables at the top of a class but in the case of what is essentially a helper function I find it confusing to do so.

Calcolato o no, è molto bello non imbattersi prima nei dettagli. Dimmi prima la storia di alto livello.

Il modo più sicuro per minare la mia argomentazione è usare nomi schifosi. Non mi dispiaceva leggere timelinesAreInitialized prima che fosse stato definito. Perché? Perché il nome ha reso molto chiaro il tuo intento.

Capisco che ciò vada contro le convenzioni in molte lingue e qualsiasi base di codice dovrebbe essere coerente, ma a parità di altre condizioni questo è lo stile migliore.

Avere una convenzione fa bene alla coerenza. Ma questo significa che non puoi seguire la migliore saggezza di oggi perché hai sancito la migliore saggezza del passato. Quando viene presentata l'opportunità di fare una pausa pulita non ripetere gli errori del passato.

    
risposta data 10.04.2018 - 15:36
fonte
0

It's the norm to place private instance variables at the top of a class

Una volta ho provato a non farlo come sembra una convenzione senza senso per me. Sono con CandiedOrange qui, metto la foto più grande in alto e i dettagli in basso. Ma, almeno per C #, il compilatore si è confuso fin troppo facilmente mentre ho modificato il file, il che significa che spesso ha perso di vista quei campi e ha segnalato errori su molte righe.

Quindi ora aderisco a questa convenzione per ragioni pragmatiche. Tutto il resto privato viene spinto verso il basso a cui appartiene però: proprietà, tipi interni, metodi, ecc. Intendo davvero il fondo: tutti i membri privati vengono dopo quelli pubblici.

    
risposta data 10.04.2018 - 16:50
fonte

Leggi altre domande sui tag