Vad betyder ”namnkollision”?

Inom ramen för datorer och datorprogrammering är ”namnkollision” den tekniska termen för ett fall där två objekt har samma namn inom någon logisk inneslutning. En namnkollision kan inträffa i många fall, till exempel med namnen på filer i en katalog, eller i ett program där lokala variabler i en funktion har samma namn som vissa globala variabler. För det mesta måste en namnkollision lösas omedelbart på något sätt, antingen automatiskt av ett operativsystem eller kompilator eller manuellt genom användarinmatning och beslut. Konceptet med ett namnområde löser ibland kollisionsproblem genom att skapa olika logiska regioner där objekt med liknande namn kan samexistera utan tvetydighet. I vissa programmeringstillfällen kanske en namnkollision inte är omedelbart uppenbar, vilket ibland leder till svåra att hitta programfel som kan bli resultatet av att kompilatorn gör vissa antaganden om namnen på objekt som används.

Ett exempel på hur en namnkollision kan uppstå är två kataloger fulla med filer. Om varje katalog innehåller en fil med namnet ”DATA”, och innehållet i en katalog kopieras till den andra, kommer datorns försök att kopiera filen med namnet DATA att finna att en fil med samma namn redan finns i målkatalogen. Detta skapar en namnkollision. I det här fallet kommer användaren vanligtvis att uppmanas och tillåtas välja från en lista med upplösningar, inklusive att byta namn på en av filerna, att inte kopiera filen eller skriva över en av filerna.

En vanlig lösning för en namnkollision är implementeringen av namnrymder. Ett namnområde är helt enkelt ett sätt att definiera ett område under vilket objektnamn finns. I exemplet ovan är en katalog tekniskt sett ett namnområde, vilket betyder att flera filer alla kan ha samma namn så länge de finns i olika kataloger.

Ur ett programmeringsperspektiv kan en namnkollision inträffa i situationer som multipelt arv, överlappande variabla omfång eller till och med med importerade bibliotek på vissa språk. I allmänhet kommer en kompilator att märka en konflikt och generera en varning eller ett fel, även om detta inte alltid är fallet. Förutom att använda namnutrymmen kan kollisioner i många programmeringsspråk undvikas genom att använda kvalificerare. En qualifier är vanligtvis ett prefix som kan placeras framför en variabel eller klassnamn för att skilja den från en annan variabel med samma namn.