Best Practices > Diskussionen zu Best Practices

Best Practices: Error Handling in Lotus Script: Einleitung

<< < (5/12) > >>

cpo:
Puh, da hab ich wieder viel gelernt...

Bei uns gibt' für Errorhandling die Regeln
a) jede Function hat einen Namen (variable am Anfang gesetzt)
b) jede scriptLib hat einen Namen (im Initialize)
c) jede Funktion gibt True oder False zurück und bekommt einen String für einen eventuellen Errortext mitgegeben
d) die texte des errors werden bei "erwarteten" Fehlern in freundlicher Sprache formuliert, bei unerwarteten macht das eine errorfunktion die Name der Funktion, der lib, des fehlers und zeilennummer zurückgibt
e) Aufruf der letzten Funktion immer im Errorhandler mit onerrorgoto ebendiesem -> daraus folgt, dass jede Funktion oben den goto und unten den errorhandler hat
f) Messageboxen etc. werden immer von der ersten, aufrufenden Funktion ausgegeben. Alles darunter gibt nur False und den Errortext zurück

Das klappt eigentlich ganz gut. Ist auf jeden Fall relativ stringent und einfach zu pflegen.
Das setzt allerdings voraus, dass man unter "Fehler" auch versteht, dass man abbrechen will/muß bzw. seine Funktionen so klein baut, dass man in der aufrufenden die Frage Abbruch oder nicht entscheiden kann.

CPO

Semeaphoros:
Das ist auch ein interessanter und guter Ansatz, und zeugt von Bewusstsein des Problemes.

Vielleicht erzählen uns noch andere über die angewendete Error-Handling-Strategie?

TMC:
Hier noch der Hinweis zu einem anderen Projekt, wo die Ergebnisse von hier einfließen sollten:
Script Library

TMC

TMC:
Mich würde es mal konkret interessieren, wie man das bei einer Funktion wie folgender handhaben würde:

--- Code: ---Function PurgingArray(strSourceArray As Variant  ) As Variant
%REM
##########################################################################
# ID:                   0001
# Creator:             TMC (atnotes@gmx.de)
# Categories:          Array-Handling
# Version:             0.1
# Date:                23. Nov. 2003
# Goal:                  Array alphabetisch sortieren und Leerzeilen entfernen
# Description:         
#                        
# Remarks:            
#                        
# Used Functions:   keine
# Call:                  z.B. über "PurgingList(doc.IchBinDasFeld)"
# Tested:               Action-Button in Maske
##########################################################################
%END REM
   
   Dim k As Integer
   Dim i As Integer
   Dim j As Integer
   Dim h As Integer
   Dim r As Integer
   Dim memberArray() As String
   Dim temp As String
      
   'Erstelle Array aus Werten zum sortieren   
   For k = 0 To Ubound(strSourceArray)
      Redim Preserve memberArray(1 To k+1)
      memberArray(k+1) = Cstr(strSourceArray(k))
   Next
   
   'Set up für den Sortier-Algorithmus
   h = 1
   Do While h < k
      h = (h*3)+1
   Loop
   h = (h-1)/3
   If h > 3 Then
      h = (h-1)/3
   End If
   
   'Sorier-Algorithmus
   Do While h > 0
      For i = 1+h To k
         temp = memberArray(i)
         j = i-h
         Do While j >0
            If memberArray(j)>temp Then
               memberArray(j+h) = memberArray(j)
               memberArray(j) = temp
            Else
               Exit Do
            End If
            j = j-h
         Loop
      Next i
      h = (h-1)/3
   Loop
   
   'Ergebnis
   PurgingArray = memberArray
   
End Function
--- Ende Code ---


Die Funktion soll z.B. in einem Agenten laufen, der mehrere Dok-Felder in einer Collection abarbeitet, oder aber in einem Action-Button in einem Dokument, welches gerade im Bearbeitungsmodus geöffnet wird.

Was kann z.B. schiefgehen:
übergebender Feldinhalt ist kein String, sondern Nummer etc.
Könnte man ja über "If Not Datatype(strSourceArray) = 8 Then" abfragen.

Wie würde man denn als Rückgabewert der Funktion ein True / False einbauen und Fehlertext im False-Fall?


TMC

eknori:
@TMC:

jetzt habt ihr schon so schön alles ausbaldovert; nur , der Name deiner Funktion und deren Beschreibung stimmen nicht überein. ( da steht nur was von Purge; ich erwarte daher kein Sort )

da du hier nicht das übliche true oder false ausgeben kannst sondern ein sortiertes, bereinigtes Array erwartest, muß die Fehlerbehandlung schon VOR dem eigentlichen Funktionsaufruf erfolgen. Es dürfen also nur gültige Werte an die func übergeben werden. Ansonsten darf die func gar nicht erst aufgerufen werden.

du meinst bestimmt ein C++ Konstruct, welches als function call den retVal als pointer auf einen wie auch immer gearteten Wert zurückliefert; die Funktion liefer aber ein klares true/false.

also etwa so

function SortAndTrim( varIn as Variant, *varOut as Variant ) as boolean

Ulrich

Navigation

[0] Themen-Index

[#] Nächste Seite

[*] Vorherige Sete

Zur normalen Ansicht wechseln