Non ho lavorato con Ruby, ma Perl ha un costrutto simile che ha lo stesso tipo di bagaglio intorno.
Non c'è differenza strutturale tra questi 3 costrutti:
if condition
OneThing()
else
AnotherThing()
unless condition
AnotherThing()
else:
OneThing()
if not condition
AnotherThing()
else:
OneThing()
Tuttavia, semanticamente, penso che la ragione per cui le persone lo raccomandino è che unless condition
è in realtà solo zucchero sintattico per if not condition
. La differenza è che non tutte le lingue hanno unless
in modo che quest'ultimo sia più immediatamente leggibile da un nuovo programmatore. Quando si introduce unless
di solito è nel contesto della definizione di cui sopra.
L'uso di unless then else
confonde ulteriormente le cose, perché mentre unless
è una scorciatoia utile, unless else
aggiunge confusione avendo un costrutto sconosciuto non usato in modo appropriato.
Qualsiasi unless then else
può essere banalmente riscritto come if then else
, quindi suggerirei che non ci sono casi in cui unless then else
migliora la leggibilità o la computabilità del codice.