Avatar billede ilflue Nybegynder
31. august 2006 - 11:41 Der 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.

Er det muligt i ASP at få samme effekt???
Avatar billede lund_dk Praktikant
31. august 2006 - 12:08 #1
Jep

Function test (strTest1,strTest2)

response.write strTest1
response.write strTest1

End Function
Avatar billede keenkbh Nybegynder
31. august 2006 - 12:12 #2
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...
Avatar billede softspot Forsker
31. august 2006 - 12:14 #3
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)
Avatar billede ilflue Nybegynder
31. august 2006 - 12:15 #4
Ja, men det der vil stadig kræve at jeg skriver begge ind ved kald.

Eks.
test("","")...
test("") vil give fejl.

Og det burde man kunne lave, da ASP selv har indbyggede functions der gør det.

f.eks. StrComp(Streng1,streng2,1), her kan 1 uden problemer fjernes uden at give fejl.
Avatar billede ilflue Nybegynder
31. august 2006 - 12:15 #5
Ok, den var skrevet til Lund ... Var vist lidt for langsom til at skrive, he he
Avatar billede ilflue Nybegynder
31. august 2006 - 12:18 #6
Soft ... Ok, men er det som jeg skrev ovenfor, ikke den måde f.eks. StrComp() virker på.???
Avatar billede ilflue Nybegynder
31. august 2006 - 12:19 #7
StrComp(Streng1,streng2,1) No Case
StrComp(Streng1,streng2) Case sensitiv
Avatar billede softspot Forsker
31. august 2006 - 12:27 #8
Nej, men det er også en indbygget funktion og jeg tror det har en betydning for hvilke faciliteter du har til rådighed...

Som jeg ser det tillader VBS bare ikke at man definerer procedurer med default-parametre, eller variabel antal parametre for den sags skyld...
Avatar billede ilflue Nybegynder
31. august 2006 - 12:41 #9
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.
Avatar billede nielle Nybegynder
31. august 2006 - 12:42 #10
Der er funktioner ("Function") og procedure ("Sub") i ASP.

Forskellen på dem er at funktionere returnere en værdi, og at procedure ikke gør det.

Function GangMedTo(etTal)
    resultat = 2 * etTal  ' Gang med to...
    GangMedTo = resultat  ' ... og returner dette.
End Function

Sub GaangMedTo(etTal)
    resultat = 2 * etTal  ' Gang med to...
    Response.Write resultat  ' ...og udskriv det.   
End Sub

De viste kodeeksempler burde have brugt Sub i stedet for Function.

For lige at svare på det oprindelige spørgsmål: Nej, ASP understøtter mig bekendt ikke default-værdier.
Avatar billede softspot Forsker
31. august 2006 - 12:50 #11
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.
Avatar billede softspot Forsker
31. august 2006 - 12:51 #12
...og nej, man kan ikke erstatte en Function med en Sub, men omvendt er altså OK.
Avatar billede softspot Forsker
31. august 2006 - 12:51 #13
Så var der vist også lige noget med et svar :)
Avatar billede nielle Nybegynder
31. august 2006 - 12:58 #14
> ... man kan ligeså godt bruge en Function, som en Sub.

Ja det kan man, men det er min mening at man altid bør være så eksakt som muligt i sin programmering.
Avatar billede softspot Forsker
31. august 2006 - 13:06 #15
Tak for point :)

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...
Avatar billede ilflue Nybegynder
31. august 2006 - 14:57 #16
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 :)
Avatar billede softspot Forsker
31. august 2006 - 15:12 #17
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 :)
Avatar billede nielle Nybegynder
31. august 2006 - 19:46 #18
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.
Avatar billede softspot Forsker
31. august 2006 - 21:49 #19
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... ;-)).
Avatar billede nielle Nybegynder
31. august 2006 - 22:05 #20
Der gør jeg såmæn heller ikke selv ;^)

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.
Avatar billede softspot Forsker
31. august 2006 - 22:15 #21
Igen enig - men stadig under hensyntagen til at overinformering kan være lige så skadeligt som underinformering :)
Avatar billede nielle Nybegynder
31. august 2006 - 22:17 #22
Roger, and out. :^)
Avatar billede Ny bruger Nybegynder

Din løsning...

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.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester