Ho postato questa domanda su stackoverflow e ha avuto un problema ricezione. In realtà, i problemi che sto affrontando sono minori e qualsiasi soluzione alternativa può essere considerata poco pratica. Tuttavia, credo che potrebbe essere di interesse generale nel dominio astratto dell'informatica, quindi mi sto dando da fare qui.
Sto lavorando con i test automatici di Drupal in PHP. È una classe con due metodi che mi preoccupano: pass()
e fail()
. Ciascuno produce una riga separata su una pagina dei risultati che indica se una determinata operazione ha superato o fallito, ad es.
if ( $value == "expected_value" ) {
$this->pass("Name of Test");
} else {
$this->fail("Name of Test");
}
(La ragione per cui drupal fa così è che nei risultati, puoi vedere "Nome del test" in una barra verde se è passato, e in una barra rossa se non è riuscito. In altre parole "Testing Feature A : failed "o" Test of Feature A: passed ". Ovviamente puoi inserire due messaggi diversi lì, ma nella mia situazione, voglio mettere lo stesso messaggio in)
Quello che noto di quanto sopra è che sembra prolisso, in quanto ripeto lo stesso messaggio due volte. Mi sembra che dovrebbe esserci un modo per esprimere ciò in cui dichiaro il messaggio una sola volta. Ovviamente potrei inserirlo in una variabile, ma ciò richiede spazio extra e lo passo anche due volte.
Mi piacerebbe fare qualcosa come assegnazione di ternario, solo invece dove decido quale funzione chiamare. C'è un modo per definire questa logica mentre esprimo solo Name of Test
una volta?
Qualcosa come:
$function = ($value == "expected_value") ? "pass" : "fail" ;
$this->$function("Name of Test");
È questo il modo più conciso ed elegante in cui posso esprimere questa logica? Ho provato
$this->(($value == "expected_value") ? "pass" : "fail")("Name of Test");
Ma ho un errore di analisi. C'è un modo per portarlo a una riga, come un compito ternario?
Modifica Ecco la migliore formulazione della mia domanda fino ad oggi: "Qual è una sintassi che posso usare, in qualsiasi linguaggio o pseudo-codice, per esprimere ciò senza dire Name of test
due volte?"
Mi sento come se dovessi essere in grado di esprimere questa logica senza dire Name of Test
due volte (ovunque, anche all'interno di un'altra funzione che chiamo altrove nel codice). Sembra che PHP non mi consenta di esprimerlo in questo modo, quindi sto cercando degli esempi in altri linguaggi (e le persone hanno già pubblicato esempi C, javascript e python) che ti permettono di esprimere ciò conciso senza ripetermi.