La data più recente deve essere denominata 'start' o 'end'? [chiuso]

6

Quindi ho una funzione che richiede due date. La query SQL ottiene tutti i risultati tra le due date. Attualmente ho il mio setup di funzioni in questo modo:

function myFunc(start, end)

Dove inizio è la data e la fine più recenti è la data più vecchia.

È intuitivo / corretto o esiste un'altra convenzione di denominazione / ordinamento che dovrei usare?

    
posta David Peterman 18.05.2012 - 17:21
fonte

9 risposte

32

In genere, penseresti che start < = end, quindi non proprio. Prendi in considerazione la possibilità di rinominarlo per dare un suggerimento alla logica di business che stai tentando di implementare.

    
risposta data 18.05.2012 - 17:25
fonte
19

Nel normale corso degli affari, il tempo funziona solo in una direzione e generalmente "inizio" viene prima della "fine". Sarei propenso a "iniziare" la prima data nella gamma e "finire" l'ultima. Ma se la tua query cerca semplicemente qualcosa tra le due date e non dipende dal fatto che siano in ordine (il che renderebbe una funzione più robusta e facile da usare), allora non dovrebbe importare ciò che le chiamate.

Ovviamente è facile aggiungere questa funzione alla tua funzione. Basta avere la funzione confrontare le due date e scambiarle se non sono già nell'ordine che richiede. Potresti anche dare ai parametri nomi più generici come date1 e date2 per aiutare a comunicare agli utenti che hanno solo bisogno di fornire due date e non preoccuparti per l'ordine.

    
risposta data 18.05.2012 - 17:29
fonte
15

Perché non nominarli solo quali sono? Questo sembrerebbe essere il più intuitivo per me.

function myFunc(recentDate, oldDate)
    
risposta data 18.05.2012 - 17:27
fonte
5

Stai definendo un intervallo di tempo. Un intervallo di tempo ha un inizio e una fine (o inizio e fine). Non ha un "più recente" e "meno recente" perché questo chiama alla nozione di "presente", che non è rilevante.

Aggiungendo ulteriormente alla nozione di "non c'è tempo come il presente", l'inizio e la fine possono essere sia nel passato, sia nel futuro, o uno prima e uno dopo il presente. All'improvviso "il più recente" diventa molto più complicato.

    
risposta data 18.05.2012 - 19:34
fonte
3

Penso che l'inizio non dovrebbe essere usato. Per iniziare e fermarsi, non per iniziare e finire. Penso che tu possa usare Begin e End insieme, ma ciò può confondere nuovamente da quale punto di riferimento stai guardando Begin.

Uso la funzione (FROM, TO) forse per un inglese più corretto. Ma in ogni caso, dovresti inserire una logica wrapper nella tua funzione che imposta correttamente la prima data:

if FROM is earlier than TO 
 t_earliestDate = FROM
 t_latestDate = TO
else
 t_earliestDate = TO
 t_latestDate = FROM
    
risposta data 18.05.2012 - 19:00
fonte
3

Davvero, a chi importa. È un intervallo di date, vuoi tutto tra le due date. Non importa i nomi, qualcuno rovinerà il loro uso.

E il tuo codice vuole start per essere la data recente e end per essere il più vecchio.

Quindi, all'inizio della tua funzione, cambia se sono indietro.

var tmpStart = start;
var tmpEnd = end;
start = (tmpStart < tmpEnd) ? tmpEnd : tmpStart;
end   = (tmpStart < tmpEnd) ? tmpStart : tmpEnd;

Personalmente utilizzerei from e to invece di start e end .

    
risposta data 18.05.2012 - 18:03
fonte
1

Puoi creare un tipo di wrapping (classe o struttura) chiamato DateInterval. Un DateInterval è qualcosa che viene definito da una data di inizio (meno recente) e una data di fine (più recente).

Quindi, cambi la tua funzione originale per ricevere un singolo argomento: il DateInterval.

Direi che questo porta ad un design più naturale: quelle due date non hanno senso l'una senza l'altra. Riduce anche il conteggio degli argomenti delle funzioni. Inoltre, penso che riduca l'ambiguità, dal momento che molte persone probabilmente riconoscono un DateInverval come una coppia.

    
risposta data 18.05.2012 - 22:29
fonte
0

In una parte di codice ben pianificata, tutti questi problemi devono essere affrontati:

  • Date solo nel passato.
  • Date solo in futuro.
  • Date che collegano l'ora corrente
  • Richieste con un solo valore :. Da allora a oggi, o ora a allora.
  • Richieste fuori servizio
  • Richieste con immissione di stringhe: ieri
  • Richieste con solo valori parziali: solo un anno, o solo un mese e un anno; Secondo trimestre dell'anno fiscale 2012.

Non tutto avrà senso per la tua applicazione, ma dovrebbero essere pensate durante la progettazione. Alcuni genereranno errori, alcuni si correggeranno automaticamente. Il modo in cui etichetti gli input dipenderà dalla logica di business, si tratta di un'API o stai etichettando i campi sulla GUI.

Ricorda anche di documentare in modo chiaro lo sviluppatore o l'utente che cosa sta succedendo.

    
risposta data 19.05.2012 - 13:55
fonte
0

Dipende da come lo stai utilizzando nell'app e / o nelle regole aziendali. Se pensano a questi intervalli di date come "Inizia con questa data e torna indietro nel tempo a un'altra data" , sei tutto pronto. I programmatori o i dbas che useranno questa funzione considereranno la data di inizio come la data più recente e la fine più recente. Penserei che sarebbe cronologico.

Hai indicato che la funzione eseguirà una query sql con un intervallo di date "tra" queste due date. L'operatore TRA TRA cercherà un intervallo di date: > = la data di inizio AND < = la data di fine. Gli utenti potrebbero non sapere come si fa nel codice funzione, ma ciò sembra coerente / standard.

    
risposta data 19.05.2012 - 14:13
fonte

Leggi altre domande sui tag