31. august 2006 - 11:41Der er
21 kommentarer og 1 løsning
Functions i asp
Halløj eksperts. Jeg har et lille problem jeg tænkte om i måske havde mulighed for at hjælpe mig med.
Når jeg sidder og rodder med PHP og laver en function. Så har jeg mulighed for at lave noget i stil med det her.
function Test($strTest1,$strTest2="") {
Denne mulighed havde jeg pludselig brug for i ASP, men det lader ikke til at det er muligt. Ved at noget lignende er muligt i .NET, men det er en ven jeg laver det til, og han skal bruge det i standard ASP. Fordelen ved den metode er jo at man ikke nødvendigvis SKAL smide info. med i et kald af funktionen.
jeg ved ikke om det kan gøres på samme måde i ASP, men en ASP funktion i VB ser nogenlunde sådan ud:
function ting(argumenter)
ting der skal udføres
End function
Om det så er muligt, at sige inde i functionen, at den skal handle anderledes hvis en af argumenterne ikke er tilstede, ved jeg ikke lige på stående fod...
Det kan ikke umiddelbart lade sig gøre (i VB 6.0 er der noget som hedder paramarray, men det har jeg ikke kunne finde i VBS-referencen på MSDN).
Du kan lave dine funktioner med en parameter og så oprette et array i kaldet, men det er hverken særlig kønt eller intuitivt at bruge, så det tvivler jeg på at du har lyst til... i øvrigt skal du stadig selv håndtere standardværdier, hvis en parameter ikke er angivet.
function test(arr) ' gør noget med arrayet end function
set obj = Server.CreateObject("ADODB.Connection") test Array("parameter1", obj)
Ok. Synes der er mange gode ting i VB de godt kunne have taget med i VBS. Men tak for hjælpen ihvertfald. Bare smid et lille svar :) ...
Hmm. Nu har jeg ikke lie tjekket, men hvis nu JavaScript har samme muligheder i functions som PHP, så kunne det tænkes at JScript. Der er trods alt mange ting i PHP der minder om JavaScript, og JScript er jo stort set JavaScript på server platform.
Ja, JScript er næsten det samme som JavaScript og ja, JScript understøtter mig bekendt variabelt antal parametre og der er flere måder at håndtere dette på (dels ved at prædefinere parametrene og undlade at tildele dem en værdi, dels ved at undlade at specificere parametrene og så benytte arguments-arrayet til at aflæse værdierne).
Til nielle's kommentar: Det er i VBS (og ikke ASP) ligegyldigt om man benytter den returværdi som en Function sender tilbage, så man kan ligeså godt bruge en Function, som en Sub.
nielle >> Jeg har tendens til at være enig, men nogle ting er bare vigtigere at væøre stringent med end andre - og det at benytte en Function i stedet for en Sub er, såvidt jeg lige kan gennemskue, ikke en katastrofe for programmets funktionalitet, så derfor vælger jeg at bruge min energi på andre problemstillinger...
nielle ... Function KAN retunere, Sub kan ikke. Din Function går ikke i stykker ved at du undlader at retunere, og den afvikler hellere ikke koderne på en anden måde ved at du undlader.
Den eneste grund til at jeg vælger at bruge Subs til Sub arbejde, og Functions til Function arbejde, er fordi det er lettere at holde styr på hvad der er hvad når man køre sine koder igennem. Specielt hvis man har en include fil med mange af dem.
Men hvis du har et bud på andre forskelle mellem Functions og Subs i ASP ud over at den ene kan retunere, hvor den anden ikke kan. Så må du da gerne dele din viden :)
Rent performancemæssigt kunne man mene der var en (lille) forskel, idet en function skal sørge for at smide en returværdi på stakken, når den returnerer og denne returværdi skal desuden afæses og smides væk, hvis den ikke benyttes. Det skulle jeg ikke mene er nødvendig for en Sub... men vi er vist ude i noget med at fluekneppe performance, hvis det har betydning for programmets afviklingshastighed, om man benytter Functioner eller Sub af den årsag :)
softspot har nævnte den eneste forskel jeg kender. :^)
Og dog... Du skriver at "... Function går ikke i stykker ved at du undlader at retunere". Korrekt, men omvendt kan resten af programmet gå i stykker hvis det kalder din Function med den forventning at den returnere noget, og den så ikke gør det alligevel. Dette ville man ikke få lov til hvis man havde lavet koden som en Sub i stedet.
Men det var nu også af mere principielle grunde at jeg bragte emnet på bane:
Der er utroligt mange programmeringssprog som tillader at man er løs med sin syntaks. Faktisk er scriptsprog som VB Script/ASP og PHP værre til det end deciderede programmeringssprog som VB.Net og C#.
Havde de givne eksempler været skrevet i VB.Net, ville man have fået en compiler-warning, og havde de været skrevet i C# havde man fået en compiler-error.
Som jeg ser det, er der i hvert fald tre problemer med et programmeringssprog som er lidt large med syntaksen:
1) Der er set utallige eksempler på PHP-kode her på eksperten, som fejler fordi at folk ikke er klar over at der forskel på om en funktion returnere ”et tal forskellig fra 0” eller om den rent faktisk returnere ”false”. Hvis folkene bag PHP havde gjort sig den anstrengelse at sørge for at man fik en error hvis man prøvede at bruge en talværdi hvor det rettelig burde være en boolean eller omvendt, ville rigtigt mange kodebøffer være undgået i tidens løb!
2) Hvis folk ikke lære at skelne de forskellige begreber, som f.eks. funktion vs. procedure, fra hinanden i det første programmeringssprog de lære sig, vil de komme til at slås med dette i det næste de kaster sig over. Dette er kun med til at gøre det svære for dem at gå fra VB Script til VB.Net end det er i forvejen. Og et skift til C# vil være endnu sværer (i VB-Net kan man jo vælge at ignorere warnings'ene hvis man ikke kan forstå hvad de skyldes)..
3) Afslutningsvis har det noget med at udtrykke sig så præcist i sin kode som overhovedet muligt. Hvis man ikke har i sinde at returnere noget med sin funktion, hvad er så pointen ved at bruge Function i stedet for Sub? Ved at bruge de rigtige begreber, sikre man sig for at programmørens mening kommer så tydeligt igennem som muligt, og dette gør at andre har nemmere ved at læse din kode. Ultimativt er det altså med til at gøre koden mere vedligeholdelsesvenlig.
nielle >> når jeg vrider mig lidt ifht. dine (ganske udemærkede) principper, er det mere et udtryk for at jeg synes der er ting, som er vigtigere at koncentrere sig om for en nyudklækket kodekal, end valget mellem Function eller Sub. Af pædagogiske årsager bør man holde fokus på en eller få ting ad gangen (og Function kontra Sub var ikke, oprindeligt, emnet i dette spørgsmål). Når det så er sagt, er jeg fuldstændig enig i dine principper og vil til hver en tid slutte mig til dit følge af "fælles front mod udviklere af dårlig kode" (selvom jeg til tider ikke selv helt lever op til de prædikede standarder - men jeg er jo også bare et menneske... ;-)).
Men, rent faktisk er det jo smartest at lære folk at gøre det rigtigt fra starten af, i stedet for at tillade dem at tilvende sig til alle mulige dårlige vaner.
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.