Umiddelbart lyder dit setup ikke optimalt. Jeg antager du erklærer din variabel strKeyword globalt...(?)
I så fald vil den huske indholdet fra forrige kald, såfremt den streng du sender med ind er tom, ellers burde den overskrive indholdet af strKeyword ved næste kald.
Et quickfix kunne være:
Function stripTags( strToStrip )
strToStrip = Trim( strToStrip & "" ) If Len( strToStrip ) > 0 Then strKeyword = Replace(strToStrip,"'","") strKeyword = Replace(strKeyword,"''","") strKeyword = Replace(strKeyword,">","") strKeyword = Replace(strKeyword,"<","") strKeyword = Replace(strKeyword,"+","") strKeyword = Replace(strKeyword,"[","") strKeyword = Replace(strKeyword,"]","") Else strKeyword = "" End If stripTags = strKeyword End Function
Jeg synes dog ikke det er nogen god idé hverken at erklære variable globalt eller slet ikke erklære dem, da det dels risikerer at give sideeffekter, dels sandsynligvis gør koden langsommere, fordi scopesøgningen for en variabel starter fra det lokale scope og går opad (indtil det globale scope er undersøgt).
Jo, output var for at beskrive hvad funktionen sender tilbage.
Mht. deklarationer så bør man kun deklarerer variabler i funktioner i selve funktionen?
Synes dog det er noget rod at deklarerer flere steder i et script.
softspot: Du skriver at det ikke er noget god ide at deklarerer globalt. Hvad gør man så med de variabler, der bruges i scriptet ud over funktionen og subs?
Der kan naturligvis være situationer hvor der ikke er andre muligheder end at erklære sine variable globalt. Det jeg vil frem til er blot, at det er god skik at erklære sine variable så tæt på det scope, hvori de skal benyttes/virke, som muligt.
Hvis det tætteste du kan komme er globalt, så er det nædvendigvis der de skal erklæres... :-)
Man bør som udgangspunkt ALTID erklære sine variable, så fortolkeren slipper for at lede efter et sted at placere dem (hvilket bliver i det globale scope, hvis de ikke er). Hvis du kan komme afsted med det, så benyt Option Explicit i starten af dine scripts, da du så vil få en compilefejl, for variable der ikke er erklæret. Det kan hjælpe dig med at fange dumme stavefejl i variabelnavne og hjælpe dig til aktivt at overveje hvad en variabel skal bruges til.
Løkkevariable bør ligesom alle andre variable erklæres inden brug.
Luke >> Tror Softspot vil arbejde meger mere med funktioner i stedet for at skrive koden direkte. Der er for den sags skyld heller ikke noget problem i at tage en hvilken som helst kode du har nu, også smide det hele i en kæmpe funktion, som du så lave et kald til.
Jeg er af den mening at du skal arbejde som du har lyst til, men have et åben sind for hvordan andre arbejder, og hvorfor de gør det på den måde. Overdrevet brug af globale variabler eller udladelse af deklaration er dog ikke godt.
Servere er idag så hurtigere at resurcer ikke er et problem. Så medmindre du laver kæmpe systemer, som skal trække rigtig mange brugere, er der ikke den store grund til at tænke på hvordan variabler bliver deklarerer, og hvilke resurcer det kræver de forskellige steder. Men det skader jo ikke at kende til det :)
Der er dog et par programeringslogiker man bør følge (bemærk "bør", da det ikke er et krav). I dette tilfælde er det at variabler der kun bruges i funktionen også skal deklareres heri, så resurcer frigives så snart funktionen er færdig.
Det næste er så at man bør navngive lokale og globale variabler, så man kan kende forskel på dem. Det kan man f.eks ved at navngive alle globale som g_xxx og lokale som l_xxx. F.eks sådan:
dim g_variabel function test(p_variabel) dim l_variabel ... end function
Nej, det er da heller ikke pga. performance, jeg vil erklære variabler. Men jeg vil gerne gøre det mere ordenligt. Det med at putte et prefix på variabler, har jeg ikke lige set før. Kan ikke se det store formål med det, andet end man kan have to variabler med samme navn men med forskelligt prefix.
Prefixes skal til for at holde styr på hvor variablen kommer fra. Lige så snart du begynder at skrive store programmer kan du nemt komme op på +100 variabler, også kan det være svært at holde styr på dem alle.
Hvis du nu har lavet en global variabel som hedder username (hvor man gemmer brugernavnet), og du i en funktion skal arbejde med brugernavne, også kommer til at bruge denne variabel (og har glemt at erklære den i funktionen), får du ingen kompiler fejl, men vil sikkert opleve problemer da den globale variabel bliver overskrevet uhensigtsmæssig.
I små programmer oplever man næppe dette, og det er ikke noget man behøver at gøre, da man godt kan holde styr på det lille antal variabler man har. Kommer du til at arbejde med store programmer (måske i et firma), vil du opleve at du får udleveret en programmerings manual, hvor navngivning af variabler og funktioner er dikteret hvordan man gør. Det er ofte helt ned til hvad der skal være store og små bogstaver.
... Uddybende kommentar... Havde du navngivet den globale variabel g_username og den lokale l_username, ville du få en kompiler fejl, fordi l_username ikke var oprette.
Ved ikke om du har det allerede men "Option Explicit" er din variabel ven. Hvis den står i toppen af din side, kræver kompileren at alle variabler SKAL erklæres. Jeg har f.eks. dette i toppen af alle mine sider:
Det er vigtigt at notere sig, at jeg på intet tidspunkt har sagt at man SKAL gøre som jeg siger, men at det er god skik (dermed også forstået at du selv vælger). Dog vil jeg påstå at sandsynligheden for at din kode også vil være mere læsbar for andre, hvis du følger nogle simple regler, er større. Orden i koden og stilen er efter min mening en vigtig faktor ifht. hvor let det er at vedligeholde sin kode senere. Vigtigst er det nok at man holder den samme form/stil overalt, så det er konsekvent hvordan tingene gøres (dog bør der jo stadig være en vis orden). Det er dog vist ved at være lidt udenfor emnet, så jeg vil bare lade det stå som en sidebemærkning... ;-)
Jeg er principielt uening med fennec i at man ikke skal tænke på performance når man koder, specielt hvis det er noget som kan hentes blot ved at have nogle gode vaner fra starten - det er jo gratis gevinst! :-)
Og grunden til at parametre ikke skal erklæres er naturligvis fordi de allerede er erklæret i parameterlisten (og dermed fungerer i det lokale scope) :-)
softspot >> Selvfølgelig skal man tænke på performance når man koder. Spørgsmålet er bare hvor man vil finde denne performance.
Her mener jeg at erklæring af variabler (om det er global, lokal eller slet ikke) er et meget lille sted at kigge efter performance. Der er meget mere at hente ved at kigge på løkker, databasekald osv. Men selvfølgelig er det gratis gevinst at erklære variabler, så man bør gøre det "rigtigt".
Jeg ser dog mere erklæring af variabler som en sikkerhedsprocedure, så man ikke kommer til at "genbruge" variabler de forkerte steder.
Men gode vaner er helt klart en rigtig god ting at have fra starten :)
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.