Versalfølsomhet

**Versalfølsomhet**, eller **versalsensitivitet**, er når store og små bokstaver tolkes som ulike tegn. Hvorvidt data og/eller programmer er versalfølsomme spiller viktige roller når data skal lagres og søkes i. Det finnes mange datasystemer som er versalfølsomme, ikke-versalfølsomme eller kan ha ulik følsomhet i ulike situasjoner.

Ikke-versalfølsomme søk kan være gunstige hvis man er interessert i et begrep som vekselvis kan være angitt korrekt med både små og store bokstaver. For eksempel vil et versalfølsomt søk på «hund» bare gi treff på «hund», mens et ikke-versalfølsomt søk vil gi treff på både «Hund», «hund» og andre varianter som «hUnd», «HUNd», osv.

Versalfølsomt søk kan være gunstig i tilfeller der det er tvetydighet mellom begreper, men med utvetydig kapitalisering, som for eksempel «BIL» for (bedriftsidrettslag) eller «bil» (for kjøretøyet).

## Områder hvor versalfølsomhet er viktig
Om noe er versalfølsomt eller ikke-versalfølsomt kan variere avhengig av situasjonen:

* Tekstsøk: Brukere har, avhengig av oppgavens art, ofte en forventning om hvorvidt systemer for informasjonssøk skal være versalfølsomme eller ikke-versalfølsomme. Ved søk etter etter fellesnavn som «hund» på en nettside ønsker brukeren antageligvis ikke å skille mellom «hund» og «Hund» siden dette ofte bare vil være forskjell på rettskriving av samme ord (etter om det står i begynnelsen av en setning eller ikke). På den andre siden kan brukere som leter etter egennavn, eksempelvis informasjon om merkenavn, varemerke, menneskenavn eller bynavn, være interessert i å gjøre et søk som skiller mellom store og små bokstaver for å filtrere ut irrelevante resultater. For eksempel kan det være at noen søker etter byen Brus (Serbia) og ikke ønsker å få treff på leskedrikken brus.
* Brukernavn: Autentiseringssystemer behandler vanligvis brukernavn som ikke-versalfølsomme for å gjøre de lettere å huske, redusere skrivekompleksiteten og minske muligheter for både feil og svindel i tilfelle to brukernavn er identiske på alle måter bortsett fra ulikheter i store og små bokstaver. Slike systemer er imidlertid også versalbevarende. De lagrer med andre ord den originale varianten av navnet slik at brukerne kan velge et estetisk tiltalende brukernavn (for eksempel i camelCase).
* Passord: Autentiseringssystemer behandler derimot vanligvis passord som versalfølsomme. Dette gjør det mulig for brukere å øke kompleksiteten til passordene sine, slik at passord blir vanskeligere å gjette med såkalte ''brute force''-angrep.
* Filnavn: Tradisjonelt behandler Unix-lignende operativsystemer filnavn versalfølsomt, mens Microsoft Windows behandler de ikke-versalfølsomt. De fleste filsystemer (inkludert begge de to forannevnte) er i tillegg versalbevarende. 
* Variabelnavn: Noen programmeringsspråk skiller mellom store og små bokstaver for variabelnavn, mens andre ikke gjør det.
* URL-er: I nettadresser er delene *scheme* og *host* versalfølsomt og alltid små bokstaver, mens delene *path*, *query*, *fragment* og *authority* er versalfølsomt og kan være både små og store bokstaver. (For eksempel: https://no.wikipedia.org/wiki/Forside)

## I programmeringsspråk
Noen programmeringsspråk er versalfølsomme for identifikatorer (C, C++, Java, C#, Verilog, Ruby, Python og Swift). Andre er ikke-versalfølsomme slik som ABAP, Ada, de fleste BASIC--språkene (et unntak er BBC BASIC), Common Lisp, Fortran, SQL (i syntaksen, og for noen leverandørimplementasjoner som eksempelvis Microsoft SQL Server også for selve dataene), Pascal, Rexx og ooRexx. Det finnes også språk hvor store bokstaver i en identifikator enkoder informasjon om dens semantikk (for eksempel Haskell, Prolog og Go). Noen andre programmeringsspråk har varierende sensitivitet for store og små bokstaver. I PHP for eksempel er variabelnavn versalfølsomme, mens funksjonsnavn er ikke-versalfølsomme. Dette betyr at hvis en *funksjon* er definert med små bokstaver kan den kalles med store bokstaver, men hvis en *variabel* er definert med små bokstaver kan den ikke refereres til med store bokstaver. Nim er versalfølsom og ignorerer understreking så lenge de første tegnene samsvarer.

## I tekstsøk
En tekstsøkeoperasjon kan være versalfølsom eller ikke-versalfølsom, avhengig av systemet, programmet eller konteksten. Brukeren kan i mange tilfeller spesifisere om et søk er sensitivt for store og små bokstaver, for eksempel i de fleste tekstredigerings-programmer og nettlesere. Et ikke-versalfølsomt søk vil gi flere treff, mens et versalfølsomt søk ofte vil utelukke mange uønskede forekomster av et ord. For eksempel er Googles søkemotor i utgangspunktet ikke-versalfølsom. I Oracle SQL er de fleste operasjoner og søk versalfølsomme som standard,  mens i de fleste andre relasjonsdatabaser er søk ikke-versalfølsomme som standard.

## I filsystemer
I filsystemer i Unix-lignende systemer er filnavn vanligvis versalfølsomme (med andre ord kan både filene readme.txt og Readme.txt eksistere i samme mappe). MacOS er noe uvanlig ved at det som standard bruker HFS+ og APFS i en modus som er ikke-versalfølsom (slik at det *ikke* kan eksistere både en readme.txt og en Readme.txt i samme mappe), men med versalbevaring (slik at en fil opprettet som readme.txt vil vises som readme.txt, og en fil opprettet som Readme.txt vil vises som Readme.txt) som standard. Dette forårsaker noen problemer for utviklere og avanserte brukere, fordi de fleste filsystemer i andre Unix-lignende miljøer er versalfølsomme, og dermed kan for eksempel et kildekodetre for programvare for Unix-lignende systemer ha både en fil som heter «Makefile» og en fil med som heter «makefile» i samme katalog. I tillegg antar noen Mac-installasjoner ikke-versalfølsomhet og feiler derfor på filsystemer som er versalfølsomme.

De eldre MS-DOS--filsystemene FAT12 og FAT16 var både ikke-versalfølsomme og ikke-versalbevarede, slik at en fil hvis navn ble skrevet inn som readme.txt eller ReadMe.txt ville den uansett bli lagret som README.TXT. Senere med VFAT i Windows 95 ble FAT-filsystemene versalbevarende som en utvidelse av støtte for lange filnavn (*long filename*, LFN). Senere Windows-filsystemer som NTFS er versalfølsomme internt (som Linux), og en readme.txt og en Readme.txt kan dermed eksistere side om side i samme katalog. Men av praktiske grunner oppfører filnavn seg ikke-versalfølsomme for de fleste brukere og programvare. Dette kan forårsake problemer for utviklere og programvare som kommer fra Unix-lignende miljøer, lik problemene med macOS-filsystemer som er ikke-versalfølsomme.

## Referanser