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

Geplaatst in  | 1 reactie

Reacties

  1. peter zei 40 dagen later:

    Zo kan je bezig blijven: foo ? bar(foo) : bar(””);

(Laat url/e-mail achter »)

   Voorvertoning