Quando si controllano i valori del giorno e del mese trasposti tra due date, il confronto tra l'11/11/2000 e l'11/11/2000 restituisce vero o falso?

1

Supponendo una funzione con una firma di

boolean isTransposed(Date date1, Date date2);

Risultati di esempio:

date1   date2           Outcome
06/02/2000  02/06/2000  true
02/06/2000  06/02/2000  true
02/06/2000        null  false
06/02/2000  02/06/1987  false
11/11/2000  11/11/2000  true
04/04/2001  04/04/2000  false

Certo, il comportamento può essere documentato, ma quali sono i tuoi pensieri su isTransposed('11/11/2000', '11/11/2000') return true verse false ?

    
posta Brian 08.03.2012 - 18:43
fonte

3 risposte

6

Un valore booleano non è un valore di ritorno sufficiente per restituire il confronto. Se stai scrivendo un codice generico, vuoi qualcosa che è a tre stati. Probabile enum come

enum TransposeResult
{
   notTransposed,
   transposed,
   inputIdentical,
};

TransposeResult calcTransposeState(...)

Quindi lascialo all'utente per capire cosa fare quando sono già identici.

    
risposta data 08.03.2012 - 19:14
fonte
5

Chiedete che cosa dovrebbe fare il codice, chiedo a cosa il cliente vuole che faccia.

Qualsiasi altra risposta è una cattiva risposta, anche se è corretta, poiché nella migliore delle ipotesi è una supposizione, non basata sui requisiti.

I requisiti sono dove un numero significativo di progetti software non funziona, e questo è un chiaro esempio di un problema con i requisiti. È insignificante e non farà deragliare il tuo progetto da solo, solo un altro buco nel proverbiale formaggio svizzero. Metti da parte il compilatore e ottieni lo strumento di gestione dei requisiti e risolvi il problema dei requisiti.

    
risposta data 08.03.2012 - 21:41
fonte
3

Per quanto mi riguarda, se la tua funzione è chiamata isTransposed , allora il controllo dei valori di 11/11 e 11/11 dovrebbe produrre true .

La definizione di trasposizione è:

Cause (two or more things) to change places with each other.[1]

... non ha nulla a che fare con input e output identici.

Pensa a:

/**
 * Check whether date2 is the same as date1 with the month and day
 * transposed.
 */
boolean isTransposed(Date date1, Date date2);

Tuttavia, avendo:

/**
 * Determine whether or not the month and day of date1 have been
 * transposed in date2.
 */
boolean hasBeenTransposed(Date date1, Date date2);

Quindi potrebbe fallire, perché non avrebbe un modo ragionevole per capire se veramente è stato effettivamente trasposto con successo.

Aggiorna : Dopo aver ricevuto numerosi commenti su come "posso solo indovinare quale sarebbe il risultato previsto" , permettimi di cancellare tutto una volta per tutte.

La domanda è:

When checking for transposed day and month values between two Dates - should comparing 11/11/2000 and 11/11/2000 return true or false?

E la funzione è:

boolean isTransposed();

Ora, questa funzione contiene due parole: è e trasposto . Sappiamo tutti cosa è si riferisce a: essere . Non potrebbe essere : essere . Puoi trovare la definizione per transposed sopra.

Non c'è alcun tipo di contesto e nessuna di queste due parole è in grado di dare un'interpretazione: ognuna ha una propria definizione chiara.

La domanda non è "Il nome di questa funzione è appropriato?" o "Cosa dovrebbe controllare questa funzione?" . Se uno pensa diversamente, allora è lui a indovinare.

    
risposta data 08.03.2012 - 19:23
fonte

Leggi altre domande sui tag