[vbscript] Sub of Functie

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Dorgaldir
  • Registratie: September 2009
  • Laatst online: 10-04 22:52

Dorgaldir

Creature of the web

Topicstarter
Voor mijn werk moet ik veel scriptjes maken in vbscript.
Je kan in vbscript werken met subs en functies.
Wat is daar net het verschil tussen? Ik weet dat functies een waarde kunnen terugsturen en subs niet, maar zijn er nog andere wezenlijke verschillen? Want als dat het enige verschil is, vraag ik me af waarom ze beiden bestaan.
Want nu ben ik meer van mening, ik gebruik altijd functies want het is niet omdat iets nu geen waarde teruggeeft dat het dat in de toekomst niet zal doen, dus om dan fouten te voorkomen maak ik er nu meestal al functies van.

Maw: wat zijn de voordelen van een sub te gebruiken ipv een functie, is dat beter, sneller,...? Of maakt het gewoon niet uit tenzij je waarden wil terugsturen?

Just me


Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Dorgaldir schreef op donderdag 03 oktober 2013 @ 15:16:
Ik weet dat functies een waarde kunnen terugsturen en subs niet, maar zijn er nog andere wezenlijke verschillen?
Nee.
Dorgaldir schreef op donderdag 03 oktober 2013 @ 15:16:
Want als dat het enige verschil is, vraag ik me af waarom ze beiden bestaan.
Omdat:
functies een waarde kunnen terugsturen en subs niet
;)
Dorgaldir schreef op donderdag 03 oktober 2013 @ 15:16:
Want nu ben ik meer van mening, ik gebruik altijd functies want het is niet omdat iets nu geen waarde teruggeeft dat het dat in de toekomst niet zal doen, dus om dan fouten te voorkomen maak ik er nu meestal al functies van.
Je voorkomt geen fouten, je introduceert ze juist.

VBScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Sub Foo() 
  'Doe iets...
End Sub

Function Bar()
  'Deze function returned niets
End Function

Function Baz()
  'Deze function returned wel iets
  Baz = 0
End Function

X = Foo()
Y = Bar()
Z = Baz()


Dit gooit nu netjes een exception (of "veroorzaakt een error") op regel 14. Als je van Foo() een functie had gemaakt, zoals ik dat met Bar() heb gedaan, wat was X (of Y) dan nu? Ik heb liever dat ik gewaarschuwd word dat er iets niet goed gaat als ik aan een variabele probeer te assignen dan dat 't stilzwijgend doorhobbelt en die variabele god-knows-what voor waarde heeft.

M.a.w. de 'foutmelding' op regel 14 wil je juist hebben, niet stilzwijgend negeren. Het helpt je je code correct te houden (voor zover dat verder mogelijk is met VBS... On error resume next anyone? :X :P ) Wat is 't probleem om van een sub een functie te maken op 't moment dat je iets gaat returnen? Ik zie 't nut dus niet zo en, IMHO, maak je je code er alleen maar brozer mee door alles maar in functions te mikken. Daarbij maakt 't de intentie van een Foo() of Bar() alleen maar duidelijker van: Foo() doet iets, maar returned niets (want: Sub) en Bar() doet iets en returned iets (want: Function).

[ Voor 22% gewijzigd door RobIII op 03-10-2013 15:53 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

  • Dorgaldir
  • Registratie: September 2009
  • Laatst online: 10-04 22:52

Dorgaldir

Creature of the web

Topicstarter
Ok, dat snap ik, en ik zie er ook wel een nut in als je met complexe dingen bezig bent.
Ik let er meestal wel op hoe ik een func of sub aanroep, als ik geen variabele verwacht neem ik gewoon een call en wijs ik die niet aan een variabele toe. Dat doe ik enkel als ik echt een variabele terug wil krijgen en dan let ik goed op.

Just me


Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
En die éne keer heb je nog geen koffie gehad of ben je wat minder alert en ben je X tijd (2 minuten, 13 dagen, whatever) kwijt aan 't zoeken naar een vaag probleem dat voorkomen had kunnen worden als je consistent was geweest in 't gebruik van subs/functions. Je interpreter (lees: computer) let nog altijd beter op dan jij dus waarom die niet 't werk laten doen? 't Is gewoon een manier van denken/werken en je zou kunnen zeggen "best practice" door subs/functies te gebruiken waar ze voor bedoeld zijn. Daarbij: misschien ben je nu de enige die jouw code ziet / leest / gebruikt, maar als je met anderen werkt is 't voor hen ook duidelijker / leesbaarder / makkelijker te bevatten wat een stuk code doet als je sub/function gebruikt waar 't hoort.

[ Voor 22% gewijzigd door RobIII op 03-10-2013 16:05 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

  • Dorgaldir
  • Registratie: September 2009
  • Laatst online: 10-04 22:52

Dorgaldir

Creature of the web

Topicstarter
RobIII schreef op donderdag 03 oktober 2013 @ 16:03:
[...]
En die éne keer heb je nog geen koffie gehad
Ik ben een van de weinige IT'ers die zelden tot nooit koffie drinkt ;)

Maar verder heb je gelijk (neem ik aan), ik lichte enkel toe hoe ik het nu deed.
RobIII schreef op donderdag 03 oktober 2013 @ 16:03:
[...]
Daarbij: misschien ben je nu de enige die jouw code ziet / leest / gebruikt, maar als je met anderen werkt is 't voor hen ook duidelijker / leesbaarder / makkelijker te bevatten wat een stuk code doet als je sub/function gebruikt waar 't hoort.
Ik ben inderdaad de enige die de code ziet, maar niet de enige die er al aan gewerkt heeft, de erfenis van mijn voorganger(s) die ik gekregen heb gaf mij hier ook geen duidelijk antwoord op vandaar dat ik dat een beetje aangehouden heb.

Just me


Acties:
  • 0 Henk 'm!

  • BasieP
  • Registratie: Oktober 2000
  • Laatst online: 22-07-2024
Dorgaldir schreef op donderdag 03 oktober 2013 @ 15:59:
Ik let er meestal wel op hoe ik een func of sub aanroep....
je IDE let altijd op.. gebruik dat alsjeblieft, we hebben al genoeg mensen die dingen gebruiken waarvoor ze niet bedoeld zijn.

Als ik het zo lees krijg ik medelijden met de gene die jou code weer 'erft'

This message was sent on 100% recyclable electrons.


Acties:
  • 0 Henk 'm!

  • _Thanatos_
  • Registratie: Januari 2001
  • Laatst online: 05-09 14:39

_Thanatos_

Ja, en kaal

Een function die geen waarde returnt, daar zou een beetje behoorlijke IDE sowieso minimaal een warning op moeten geven. VS2012 geeft er (bij C# in ieder geval) zelfs een error op. Het compileert gewoon niet eens.

Dus of je nou een Sub als function probeert aan te roepen, of een Function maakt dat niets returnt, beide zou een todo-regeltje moeten opleveren. Tenzij je notepad gebruikt natuurlijk, maar dat is (zeker met vbscript) smeken om problemen, dus ik hoop dat je een IDE gebruikt.

日本!🎌


Acties:
  • 0 Henk 'm!

  • Dorgaldir
  • Registratie: September 2009
  • Laatst online: 10-04 22:52

Dorgaldir

Creature of the web

Topicstarter
BasieP schreef op vrijdag 04 oktober 2013 @ 12:35:
je IDE let altijd op.. gebruik dat alsjeblieft
_Thanatos_ schreef op maandag 07 oktober 2013 @ 10:42:
dus ik hoop dat je een IDE gebruikt.
Dat is nou net het probleem, er is geen IDE, dat zou kunnen, maar dan word het veel omslachtiger.
We hebben een software pakket waarin gescript kan worden, en er is een tool dat daarbij hoort zodat je makkelijk kan scripten (meegekregen van het bedrijf waar we het pakket bij gekocht hebben). Die tool is zeer basic, maar geeft je wel de mogelijkheid de scripts rechtstreeks in het pakket aan te passen. Verder is het gewoon een uitgebreide notepad die wat kleuren kan geven aan functies en variabelen en die lijnnummers weergeeft.
Anders moet ik telkens een script exporteren, wijzigen, importeren, testen, wijzigen, importeren,...
En dat neemt zeer veel tijd in beslag en dat hebben ze hier natuurlijk liever niet.
Ik heb eens geprobeerd de broncode van die tool vast te krijgen om de functionaliteit uit te breiden maar die is blijkbaar door de jaren heen verloren geraakt.

Just me


Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Sowieso zal een IDE je daar niet op wijzen, want in tegenstelling tot C# is 't bij VBScript gewoon prima toegestaan om niets te returnen in een functie :Y)

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

  • _Thanatos_
  • Registratie: Januari 2001
  • Laatst online: 05-09 14:39

_Thanatos_

Ja, en kaal

Vandaar dat een IDE ook een warning zou kunnen geven ipv een error.
Warnings worden over het algemeen wel vaker gebruikt voor dingen die in theorie wel mogen, maar je beter niet kunt doen... Smelly code heet dat geloof ik :)

Helemaal in vbscript lijkt me dat wenselijk, omdat je ook niet zo 1-2-3 kunt controleren of een returnwaarde een waarde is. Stel dat er niet gereturnd wordt, dan is de waarde (iirc) Null. Dus je verwacht dit te kunnen doen:
VBScript:
1
If value = Null Then...

En dat werkt ook. Tenzij de aangeroepen functie een object returnde. Dan geeft dit een runtime error (iirc), want je mag een object niet vergelijken (iirc). Dus dan moet je weer dit doen:
VBScript:
1
If value Is Nothing Then...

Maar als je het nou niet weet, wat dan? Dan begint het belachelijk te worden:
VBScript:
1
If (IsObject(value) And value Is Nothing) Or value = Null Then...

Maar (iirc) zelfs dat werkt niet, omdat vbscript complete boolean eval doet.

disclaimer: een hoop iirc - het is voor mij alweer een tijdje geleden ;)

[ Voor 65% gewijzigd door _Thanatos_ op 10-10-2013 11:30 ]

日本!🎌


Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
_Thanatos_ schreef op donderdag 10 oktober 2013 @ 11:23:
Vandaar dat een IDE ook een warning zou kunnen geven ipv een error.
Warnings worden over het algemeen wel vaker gebruikt voor dingen die in theorie wel mogen, maar je beter niet kunt doen... Smelly code heet dat geloof ik :)
Dan ben je met een VBScript IDE zo klaar:
Afbeeldingslocatie: http://tweakimg.net/g/forum/images/icons/alert.gif Warning: You're using VBScript.
:Y) :+
_Thanatos_ schreef op donderdag 10 oktober 2013 @ 11:23:
Helemaal in vbscript lijkt me dat wenselijk, omdat je ook niet zo 1-2-3 kunt controleren of een returnwaarde een waarde is. Stel dat er niet gereturnd wordt, dan is de waarde (iirc) Null.
Nope. Empty ;)
Nope :P

@rest van je reply: dan moet je nog maar eens even heel goed kijken wat null / nothing / empty etc. inhoudt en de "iirc"-tjes even weer oprakelen :P

VBScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
X = DoNotReturnAnything
Y = Null
Set Z = Nothing

Dump(X)
Dump(Y)
Dump(Z)

Function DoNotReturnAnything
End Function

Sub Dump(value)
    MsgBox("Null: " & IsNull(value))
    MsgBox("Empty: " & IsEmpty(value))
    On Error resume next
    MsgBox("Nothing: " & (value is Nothing))
    On Error Goto 0
End Sub


Maar goed, 't gaat inmiddels allang niet meer over de originele vraag :P

[ Voor 54% gewijzigd door RobIII op 10-10-2013 15:32 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

  • Dorgaldir
  • Registratie: September 2009
  • Laatst online: 10-04 22:52

Dorgaldir

Creature of the web

Topicstarter
RobIII schreef op donderdag 10 oktober 2013 @ 15:21:
[...]


Maar goed, 't gaat inmiddels allang niet meer over de originele vraag :P
Dat niet, maar ik leer er wel van dus zo erg vind ik het niet ;)

Just me


Acties:
  • 0 Henk 'm!

  • _Thanatos_
  • Registratie: Januari 2001
  • Laatst online: 05-09 14:39

_Thanatos_

Ja, en kaal

Als je nog aan het leren bent, lijkt het me een goed idee om voor een iets modernere taal te kiezen nu het misschien nog kan ;)

Voor bijna alle vbscriptjes zijn alternatieven die tig meer mogelijkheden bieden en niet zo hackerig in elkaar zitten. Een vbscriptje vanaf de commandprompt kun je bijv vervangen door powershell.

Maarja, als je echt aan vbscript vast zit, leer vooral door, want het is een goed idee om zo veel mogelijk van de "bad parts" van vbscript te vermijden of geheel links te laten liggen (dat geldt overigens voor meer talen, maar het gaat nu ff om vbscript ;))

[ Voor 6% gewijzigd door _Thanatos_ op 15-10-2013 21:24 ]

日本!🎌


Acties:
  • 0 Henk 'm!

  • Dorgaldir
  • Registratie: September 2009
  • Laatst online: 10-04 22:52

Dorgaldir

Creature of the web

Topicstarter
Spijtig genoeg zit ik vast met vbscript, zit ingebakken in ons software pakket ;)

Just me

Pagina: 1