Computerlogbuch

Mittwoch, 16.03.2005

Lisp steckt an

“Lisp is worth learning for the profound enlightenment experience you will have when you finally get it; that experience will make you a better programmer for the rest of your days, even if you never actually use Lisp itself a lot.” – Eric S. Raymond

Da muss was dran sein. In meiner Studienarbeit habe ich gerade ein “dummes” Objekt in der Mache (praktisch nur Eigenschafts-Felder), das sich in einen Tab-getrennten String ausgeben soll, also einerseits die Feldnamen und andererseits die Werte. Woran ich ziemlich sofort dachte, war das hier (das Beispiel ist so gut wie korrektes Python1):

    _fieldNames = ["Timestamp", "Location"]
    def fieldNames(self):
        return "\t".join(_fieldNames)

    def fieldValues(self):
        return map(lambda field: self.field, _fieldNames)

Das ist nix besonderes, ein total normales funktionales Idiom, das aber für mich den Nagel auf den Kopf zu trefen scheint – also frisch ans Werk. Das Projekt ist in Java, daher kommt am Ende trotz Jakarta Commons Beanutils und Collections leider eine gewisse Monstrosität auf:

    private String[] _fieldNames = { "Timestamp", "Location" };

    public String fieldNames() {
        return ListUtils.joinList(getFieldNames(), "\t");
    }

    public String fieldValues() {
        Collection fieldValues = CollectionUtils.collect(Arrays.asList(_fieldNames), new ReadFieldTransformer());
        return ListUtils.joinList(fieldValues, "\t");
    }

    private class ReadFieldTransformer implements Transformer {
        public Object transform (Object input) {
            String name = (String) input;
            name = name.substring(0, 1).toLowerCase() + name.substring(1);
            try {
                Object value = PropertyUtils.getProperty(Event.this, name);
                return value.toString();
            } catch (Exception e) {
                // nyi: proper exception handling
                throw new RuntimeException(e);
            }
        }
    }

Aber trotzdem glaube ich, dass das eine der kürzesten generellen Formulierungen für das Problem ist.

1 Wie die richtige Inkantation aussieht, damit der Feldzugriff self.field in der letzten Zeile wie gewünscht funktioniert, übersteigt mein derzeitiges Python-Fu.

# 16.03.2005 16:07 · Computer
< voriger  nächster >

Antworten (6)

Die Diskussion ist geschlossen.