From: Wyatt Greene Date: 2008-01-31T23:04:58+09:00 Subject: Re: can ik make this more beautifull? On Jan 31, 8:47 am, Peter Hickman wrote: > Jari Williamsson wrote: > > Remco Hh wrote: > >> nowadays i try to improve my coding style to produce nicer and beter > >> readable code. I try to improve the following code but i dont know how. > > >> if condtion1 > >> x=1 > >> else > >> if condition2 > >> x=2 > >> else > >> if condition3 > >> x=3 > >> end > >> end > >> x=nill > >> end > > >> there are three different conditions which can not occur at the same > >> time > >> can i make this nicer? > > > A case expression is probably the most clear alternative. The shortest > > is perhaps something like: > > > x = condition1 ? 1 : condition2 ? 2 : 3 > > > Best regards, > > > Jari Williamsson > > Short it may be but this sort of code can hardly be called beautiful, I > have had to maintain crap like this before and the few keystrokes the > author saved was made up for 1000 times when someone updated it and > things didn't 'quite' work how they thought. Ruby allows simplicity and > clarity, this however is heading into obfuscation. > > The better solution is to use the elsif keyword to flatten the indentation: > > if (temp == 'cat') > x = 1 > elsif(temp == 'dog') > x = 2 > elsif(temp == 'banana') > x = 3 > else > x = nil > end Which is analogous to the case statement: case temp when 'cat': 1 when 'dog': 2 when 'banana': 3 else nil end