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.