[ASP] Exit Sub of Function

Pagina: 1
Acties:

  • didio
  • Registratie: Maart 2001
  • Laatst online: 01-04 09:19

didio

didio.nl

Topicstarter
Als er van dit script geen records terug komen dan doet ik een exit sub, maar word de cleanup code dan wel gedraaid?
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
' Get all network messages
Set objCmd = CreateObject("ADODB.Command")
objCmd.ActiveConnection = objConn
objCmd.CommandType = adCmdStoredProc
objCmd.CommandText = "spGetNetworkMessages"
Set objRec = objCmd.Execute
Set objCmd = Nothing
        
' Get all data and put it in a array.
If Not objRec.EOF Then
  arrNetworkMessages = objRec.GetRows()
  intNumNetworkMessages = UBound(arrNetworkMessages, 2)
Else
  ' Help something wend wrong.
  Response.Write "ERROR!<br>while getting network messages."
  Exit Sub
End If
        
' Clean up.
objRec.Close
Set objRec = Nothing
objConn.Close
Set objConn = Nothing

weinig tot niks..


Verwijderd

1) ik zie in je code helemaal geen sub staan dus snap ook niet hoe je die wil exitten (tenzij je natuurlijk niet al je code hier heb gepaste, wat wel aan te raden is)

2) als er inderdaad een sub declaratie boven deze code staat, en een end sub erover, dan zullen de objecten niet netjes opgeruimd worden

Verwijderd

JE kan toch altijd nog een clean up boven je Exit Sub plakken

Verwijderd

Zodra een object out of scope gaat wordt het opgeruimd. Dus zodra de page klaar is met executeren. Het is netter om de cleanup code wel aan te roepen, omdat bij IIS5 en hoger, de objects dan meteen worden vrijgegeven, wat resources kan schelen bij een drukbezochte site (IIS4 houdt objects toch vast tot aan het eind van de page) Je cleanup code wordt bij een exit sub BOVEN de cleanup code niet aangeroepen, maar onder water wordt het dus opgeruimd voor je.

  • didio
  • Registratie: Maart 2001
  • Laatst online: 01-04 09:19

didio

didio.nl

Topicstarter
Oke je hebt gelijk.. dit script is een onderdeel van een sub, als hier geen records terug komen, want in princiepe niet zou mogen gebeuren dan moet hij gelijk de sub sluiten.

Maar ik begrijp dus dat dan de Cleanup code niet gerunt word, dit dacht ik dus al en moet dus het een en ander gaan aanpassen.

Hoe doen jullie dat dan, de cleanup code 2 keer plaatsen schiet niet op, of maken jullie van de cleanupcode ook een sub maken en die dan 2 maal aanroepen.

weinig tot niks..


Verwijderd

Op maandag 17 september 2001 11:33 schreef didio het volgende:
[...]

Hoe doen jullie dat dan, de cleanup code 2 keer plaatsen schiet niet op, of maken jullie van de cleanupcode ook een sub maken en die dan 2 maal aanroepen.
Nee nee nee ... dezelfde code op 2 plaatsen hebben staan is absoluut uit den boze.

Ten eerste is het gebruik van Exit eigenlijk gemakkelijk (lees: slecht) programmeren. Probeer je code anders te structureren. Zet bijv. if statement om je code heen, ipv een exit te gebruiken. En als de code in de if te groot wordt, maar daar dan weer een aparte functie / sub van.

Succes :)

Verwijderd

Op maandag 17 september 2001 11:38 schreef MrX het volgende:

[..]

Nee nee nee ... dezelfde code op 2 plaatsen hebben staan is absoluut uit den boze.

Ten eerste is het gebruik van Exit eigenlijk gemakkelijk (lees: slecht) programmeren. Probeer je code anders te structureren. Zet bijv. if statement om je code heen, ipv een exit te gebruiken. En als de code in de if te groot wordt, maar daar dan weer een aparte functie / sub van.
Err, er zijn 2 kampen: het ene kamp zegt: "je mag maar 1 exitpoint in een functie hebben", het andere kamp zegt "je mag meerdere exitpoints in een functie hebben". Het behoeft geen uitleg dat het ene kamp het andere voor rotte vis uitmaakt en verwijt slecht te programmeren.

Ik ben een fervent lid van het kamp dat meerdere exitpoints per functie propageert. Dit omdat je bij het lezen van je code t.a.t. weet dat je daar alleen maar komt indien je ook daadwerkelijk daar moet komen, je hebt in andere gevallen de functie al verlaten, immers, wat is het nut van het verblijven in een functie waar je niet (meer) behoeft te zijn.

Veelal vergt het vermijden van meerdere exitpoints in een functie rampzalig veel EXTRA code die je code er niet leesbaarder op maken, immers veelal propageren de '1 exit per functie' mensen OOK nog dat je geen GOTO mag gebruiken, een statement wat juist is bedacht voor het bouwen van makkelijke 1 exit points in een functie.

VBScript is een taal zonder error catching systeem. Je moet dus op de C manier omgaan met errors en indien er een error optreedt, beslissen wat te doen. Ik wil niet lullig doen, maar als je op elke error gaat checken en indien het fout gaat een stukje error recovery gaat uitvoeren, maar TOCH probeert met 1 exitpoint de functie te verlaten, krijg je een dermate gore brei dat ik zeg: bouw lekker die 4 a 5 exitpoints in je functie in.

vb:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
function foo()
// declarations

// tests on legitimacy of parameters
//    if not legitimate: function will abort -> exit
//    since code below is of no use
// tests on legitimacy of situation
//    if not legitimate: function will abort -> exit
//    since code below is of no use
// actual code. We now KNOW we can savely execute this
// logic, because all non-legitimate code paths are 
// already closed.
// clean up
exit function

  • Basszje
  • Registratie: Augustus 2000
  • Laatst online: 10:31

Basszje

Reisvaap!]

Op maandag 17 september 2001 14:34 schreef Otis teveel voor een quote:
Amen :)

Ben het er grotendeels wel mee eens. Maar met goto's moet je oppassen dat je niet later tijdens veranderingen van hot naar her in je code moet zoeken, waar het ook alweer stond.
:)

Iedereen die ooit gwbasic/qbasic heeft gedaan heeft dat was wel eens meegemaakt.

Beware of listening to the imposter; you are undone if you once forget that the fruits of the earth belong to us all, and the earth itself to nobody.


Verwijderd

Op maandag 17 september 2001 14:34 schreef Otis het volgende:
[...]
Err, er zijn 2 kampen: het ene kamp zegt: "je mag maar 1 exitpoint in een functie hebben", het andere kamp zegt "je mag meerdere exitpoints in een functie hebben". Het behoeft geen uitleg dat het ene kamp het andere voor rotte vis uitmaakt en verwijt slecht te programmeren.
Okay, okay, voor rotte vis uitmaken is misschien wat overdreven. Laat ik het zo zeggen: meerdere exit points zijn geen ramp zolang je weet wat je doet, maar beginnende developers gebruiken het meestal om zich er makkelijk van af te maken, en daarom is het in het algemeen geen goed idee.

Verder heb ik gemerkt dat de onderhoudbaarheid van code met een duidelijke structuur en 1 exit point wat beter is, maar da's een persoonlijke beleving en die zou evt. voor anderen anders kunnen zijn.
Veelal vergt het vermijden van meerdere exitpoints in een functie rampzalig veel EXTRA code die je code er niet leesbaarder op maken, immers veelal propageren de '1 exit per functie' mensen OOK nog dat je geen GOTO mag gebruiken, een statement wat juist is bedacht voor het bouwen van makkelijke 1 exit points in een functie.
Die rampzalig veel extra code is ook een teken van slecht / gemakzuchtig programmeren. In vrijwel alle gevallen zijn die stukken code heel goed te vervangen door:
- een if / case statement die de condities afvangt
- binnen dat statement 1 of meerdere functie aanroepen voor de verdere acties die onder die conditie genomen moeten worden

  • didio
  • Registratie: Maart 2001
  • Laatst online: 01-04 09:19

didio

didio.nl

Topicstarter
bedankt voor alle info, ik ga er vanavond nog ff lekker een nachtje over slapen om te bedenken wat voor mij de beste manier is.

weinig tot niks..


  • dusty
  • Registratie: Mei 2000
  • Laatst online: 21-02 00:06

dusty

Celebrate Life!

ik ben voornamelijk aan MR.X zijn kant.. en ik zal het dan ook niet nalaten.

Personen die zich zelf er gemakkelijk van af maken door meerdere exit points te gebruiken maken over het algemeen van te voren geen goeie opbouw van hun programma. Waardoor ze dus meerdere exit points nodig hebben. Nadeel is de onderboudbaarheid wat opeens minimaal wordt.

Om nou te zeggen dat ze rotte vis zijn neuh. Immers programmeert een rotte vis nog steeds beter als zo'n programmeur en zou het dus een belediging zijn voor de vis >:)

En inderdaad je hoort ook geen GOTO te gebruiken, je bent geen paard. Het is leuk als je je eigen code wilt beschermen maar voor onderhoudbaarheid moet je het juist niet gebruiken. Het opzoeken van bugs wordt er namelijk een stuk moeilijker door. En is wederom een teken dat de programmeur niet alleen niets van de OO methodiek begrijpt, hij heeft ook niet van te voren een goeie opbouw van zijn programma bedacht.

Back In Black!
"Je moet haar alleen aan de ketting leggen" - MueR


Verwijderd

Wie heeft het over 'OO-methodiek' ? jouw posting sluit precies aan bij wat ik zei: je hebt 2 kampen en de een maakt de ander uit voor prutprogrammeur. Jij vindt kennelijk dat je code van anderen op basis van '1 of meerdere' exitpoints kunt beoordelen als zijnde 'goed' of 'slecht', ik vind dat behoorlijk kort door de bocht. Ook het gekerm over 'GOTO' is overdreven: GOTO is een heel nuttig statement, je moet alleen de gevaren kennen. (en het dus alleen gebruiken op plekken waar je zeker weet dat je geen ellende krijgt later).

Overigens heeft het hebben van meerdere exitpoints niets te maken met het slecht opbouwen van je programmatuur. In tegendeel. Maar als je daarover wilt discussieren lijkt het me handig daar een nieuwe thread over te openen.
Pagina: 1