Ich durfte letzte Woche den Agent Code debuggen, der aus einer Kooperation eines namhaften Archiv-SW Herstellers und eines IT-Dienstleisters mit drei Buchstaben entsprungen ist. Dabei bin ich auf folgenden Code gestoßen (nur die relevanten Teile, anonymisiert):
...
Dim viewXXXX As NotesView
...
Set viewXXXX = archiveDb.GetView(xxview)
...
hits = getHits(viewXXXX)
Ok, klingt ja noch nicht so schlimm. Aber irgendwie klingelten bei mir bei der Funktion "getHits" die Alarmglocken. Also hab ich mal nachgeschaut, was die Funktion denn so macht (wieder gekürzt und anonymisiert):
Function getHits(view As NotesView) As Integer
getHits = 0
Dim docAct As NotesDocument
Set docAct = view.GetFirstDocument()
Do While Not (docAct Is Nothing)
getHits = getHits + 1
Set docAct = view.GetNextDocument(docAct)
Loop
...
End Function
Und die Kollegen wundern sich, warum der Code so unperformant ist. :'(
Und für jene, die nicht verstehen warum ich mich so echauffiere:
Das NotesView-Objekt hat eine Eigenschaft "EntryCount", welche die Anzahl der Dokumente in der View zurückliefert, da brauch ich nicht über alle Dokumente iterieren und mitzählen. >:(
Und für den Code haben sie auch noch mächtig Kohle verlangt. >:(
Zumindest hat er das in einer kurzen Funktion weggekappselt weshalt es auch so gut auffällt.
Für mich zeigt das, dass der Autor der Funktion irgendwie schon wußte was er tat. Vielleicht nicht in Notes.
Jeder selbstrespektierende Noob, der einen das Leben wirklich schwermacht, tut es selbstverständlich so:
Sub Main
//Ein paar crasse Schleiven
Set docAct = view.GetFirstDocument()
Do While Not (docAct Is Nothing)
// Ein bischen sinnlose Zeugs,
//das nix
//mit der eigentlichen Sache in dieser Schleife zu tun hat.
getHits = getHits + 1
// Ein bischen sinnlose Zeugs,
//das nix
//mit der eigentlichen Sache in dieser Schleife zu tun hat.
Set docAct = view.GetNextDocument(docAct)
Loop
Aber dafür eine Menge Geld bezahlen, dass einem als Kunde solch gravierende Dummheiten wenigstens direkt ins Auge springen, find ich auch ein bischen übertrieben.
Übrigens werden auch Profiler-Reports durch einen lange-Schleifen-lange-Funktionen Programmierstil deutlich schwerer zu lesen.