Ruby en de Zeven Deugden
Geplaatst door Michiel de Mare za, 11 maa 2006 08:52:00 GMT
Dit is een Nederlands blog, en wij citeren dan ook graag Nederlandse informatici:
Elegance is not a dispensable luxury but a factor that decides between success and failure.
Edsgar Dijkstra
Zeven fragmenten van Java-code en het alternatief in Ruby:
1. Short circuit bij nil
Java
if(foo != null) {
bar(foo);
} else {
bar("");
}
Ruby
bar(foo || "")
2. Notatie van string arrays
Java
String[] weekdays = new String[] { "maandag", "dinsdag",
"woensdag", "donderdag", "vrijdag", "zaterdag", "zondag" }
Ruby
weekdays = %w( maandag dinsdag woensdag
donderdag vrijdag zaterdag zondag )
3. Wegsnijden van herhalingen
Java
ContactPersoon prev,next;
prev = werknemerService.browseContactPersoon(currentId, false);
next = werknemerService.browseContactPersoon(currentId, true);
if(prev != null) ctx.setAttribute("previous", prev.getId());
if(next != null) ctx.setAttribute("next", next.getId());
Ruby
l = lambda {|x| werknemerService.browseContactPersoon(currentId, x) }
m = lambda {|cp,attr| ctx[attr] = cp.id if cp }
m[l[false], "previous"]
m[l[true], "next"]
4. Class met twee attributen
Java
public class T {
private String name;
private int value;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getValue() {
return value;
}
public void setValue(int value) {
this.value = value;
}
}
Ruby
class T
attr_accessor :name, :value
end
5. Converteer een array van datums in een array van strings.
Java
SimpleDateFormat dateFormat;
dateFormat = new SimpleDateFormat("dd-MM-yyyy");
String[] s = new String[dates.length];
for(int i = 0; i < dates.length; i++) {
s[i] = dateFormat.format(dates[i]);
}
Ruby
dates.map {|d| d.strftime '%d-%m-%Y' }
6. Converteer een string in een integer, 0 als het niet lukt.
Java
long l = 0;
if(s != null) {
try {
l = Long.parseLong(s);
} catch(NumberFormatException ex) {
}
}
Ruby
l = (s || 0).to_i
7. Gooi exceptie als voorwaarde niet geldt voor tenminste een element.
Java
boolean orderByOK = false;
for (int i = 0; i < ORDER_COLUMNS.length; i++) {
if (ORDER_COLUMNS[i].equals(orderByColumn)) {
orderByOK = true;
}
}
if (!orderByOK) {
throw new IllegalArgumentException(orderByColumn);
}
Ruby
unless ORDER_COLUMNS.include?(orderByColumn)
raise "IllegalArgument: #{orderByColumn}"
end
Zo kan je bezig blijven: foo ? bar(foo) : bar(””);