Redigerer
Wikisida.no:Lua
(avsnitt)
Hopp til navigering
Hopp til søk
Advarsel:
Du er ikke innlogget. IP-adressen din vil bli vist offentlig om du redigerer. Hvis du
logger inn
eller
oppretter en konto
vil redigeringene dine tilskrives brukernavnet ditt, og du vil få flere andre fordeler.
Antispamsjekk.
Ikke
fyll inn dette feltet!
=== Best practice === Det finnes noen ''best practice'' som er allment gode, uten at de har blitt retningslinje på dette prosjektet. ==== No globals ==== Forsøk alltid å unngå forsøpling av det globale navnerommet, det vil si bruk <code>local</code> og <code>do … end</code> for å skape lokal kontekst for variabler og funksjoner. For å vise klart og tydelig at en modul ikke forurenser det globale navnerommet kan <syntaxhighlight lang="lua" inline>require('strict')</syntaxhighlight> legges i toppen av modulen. Alle forsøk på å legge til nye globale oppføringer vil deretter gi en feilmelding. I noen tilfeller er det nødvendig å lage globale funksjoner, vær da tydelig på hva som legges til og hvorfor. ==== Dokumentasjon ==== Dokumenter modulens generelle egenskaper. Disse legges på en underside «Module:''navn''/dok». Disse skrives på et fellesspråk (typisk engelsk) eller på lokalt språk (for oss norsk). Vær nøye på å dokumentere funksjoner, gjerne med med JDoc-style, og ikke glem å ta med konfigurasjonsvariable. Hvis modulen har utelatte kodesekvenser så merk disse med <code>-- @todo</code> slik at de kan finnes av andre. Husk at vi er et sammarbeidsprosjekt! ==== Bruk tester ==== Sett opp tester for modulen. Disse legges på en underside «Module:''navn''/testtilfeller». Det er tre biblioteker i bruk med litt forskjellig tilnærming. Det er viktigere at det settes opp tester enn hvilken av bibliotekene som brukes. Tester bør dekke mest mulig av modulens funksjonalitet, men det finnes for øyeblikket ingen biblioteker som kan profilere et helt bibliotek. Det finnes derimot et bibliotek for å gjøre timing av enkeltfunksjoner ([[w:en:Module:Timing]]). ==== Informer om scripting ==== {{Lua|Modul:HelloWorld}} Legg til malen {{tl|Lua}} lengst opp på malsiden for alle maler som bruker Lua. Dette for å hjelpe de som ikke kjenner til Lua, og for å få en oversikt over hvilke maler som bruker Lua. Malen brukes slik: <code><nowiki>{{Lua|Modul:Modulnavn}}</nowiki></code>. Et kall <code><nowiki>{{Lua|Modul:HelloWorld}}</nowiki></code> er vist på høyre side. ==== Bruk biblioteksfunksjonene ==== Bruk de felles [[mw:Extension:Scribunto/Lua reference manual#Standard libraries|standardbibliotekene]] der det er mulig, men ha i bakhodet at det i noen tilfeller kan være fornuftig å reimplementere funksjonalitet. Spesielt hvis det gir enklere og mindre kode, og modulen er svært mye brukt kan det være gunstig å unngå import av store biblioteker. Vær oppmerksom på kodekvalitet, og at denne kan være bedre i de større og mer gjennomarbeidde modulene. Det finnes to eksterne biblioteker som bør vurderes, et for strengmanipulering ([https://github.com/Yonaba/Allen Allen]) og et for tabellmanipulering ([https://github.com/Yonaba/Moses Moses]). ==== Separation of concerns ==== Husk på ''separation of concerns''. Spesielt gjelder dette separasjon av meldinger fra resten av koden, og ikke minst anbefales det at mekanismene for internasjonalisering/lokalisering brukes. Det finnes et standardbibliotek for håndtering av språkspesifikke forhold ([[mw:Extension:Scribunto/Lua reference manual#Language library|Language library]]) og et for håndtering av meldinger ([[mw:Extension:Scribunto/Lua reference manual#Message library|Message library]]). Det bør brukes fallbackmekanismer for å fange opp at meldinger kan mangle i de enkelte språkene. ==== Lokalisering ==== Det er alltid lurt å skille ut lokalisering av de enkelte språkene på egne sider. For å gjøre det enkelt å oversette fra et språk til et annet kan det lages en mal ala [[w:en:Template:Localization subpage]]. Denne kan settes på dokumentasjonssiden for en lokalisering og forenkler kontroll av samsvar mellom språkene. Et eksempel er [https://en.wikipedia.org/w/index.php?oldid=700445846&diff=700445452 denne diffen mellom to språkversjoner]. For å gjøre det enklere for diff-mekanismen å synkronisere mellom språkene, det er ofte mye forskjeller mellom dem, så kan det settes inn noen kommentarer som sier hva de enkelte blokkene omhandler. Disse kommentarene må være på samme språk. ==== MVC ==== Hvis det modelleres etter paradigmet [[Model–view–controller]] (MVC) så er Lua-script delvis i «model» og «view», men er i liten grad i «controller». Den siste er i hovedsak drevet av Javascript i nettleseren. I noen grad kan Lua bli del av controlleren, men da via serverens API. ==== Tenk sikkerhet ==== Det er begrenset hvor det kan oppstå sikkerhetsproblemer, men i hovedsak gjelder de samme reglene i Lua som i andre språk – filtrer input og escape output. Mesteparten av input når Lua via serverens normale mekanismer og er allerede filtrert. Det som genereres av Lua-scriptene kan imidlertid omgå mekanismene for automatisk escaping via metoder for rå html-kode, og kan dermed representere en sikkerhetsrisiko. Hvis du bruker rå html-kode så må output escapes eksplisitt. Vær påpasselig der strenger konkateneres, alle strenger må escapes skal resultatet være trygt. Bruk standardbiblioteket for html der det er mulig ([[mw:Extension:Scribunto/Lua reference manual#HTML library|HTML library]]), og returner wikitekst gjennom metoden for dette. Strenger er trygge hvis de returneres uten å merke de som rå strenger, da vil de bli prosessert av mediawiki som all annen wikitekst.
Redigeringsforklaring:
Merk at alle bidrag til Wikisida.no anses som frigitt under Creative Commons Navngivelse-DelPåSammeVilkår (se
Wikisida.no:Opphavsrett
for detaljer). Om du ikke vil at ditt materiale skal kunne redigeres og distribueres fritt må du ikke lagre det her.
Du lover oss også at du har skrevet teksten selv, eller kopiert den fra en kilde i offentlig eie eller en annen fri ressurs.
Ikke lagre opphavsrettsbeskyttet materiale uten tillatelse!
Avbryt
Redigeringshjelp
(åpnes i et nytt vindu)
Navigasjonsmeny
Personlige verktøy
Ikke logget inn
Brukerdiskusjon
Bidrag
Opprett konto
Logg inn
Navnerom
Prosjektside
Diskusjon
norsk bokmål
Visninger
Les
Rediger kilde
Vis historikk
Mer
Navigasjon
Forside
Siste endringer
Tilfeldig side
Hjelp til MediaWiki
Verktøy
Lenker hit
Relaterte endringer
Spesialsider
Sideinformasjon