Dentro del contexto de las computadoras y la programación de computadoras, «colisión de nombres» es el término técnico para una instancia en la que dos elementos tienen el mismo nombre dentro de algún recinto lógico. Una colisión de nombres puede ocurrir en muchos casos, como con los nombres de archivos en un directorio o en un programa en el que las variables locales en una función tienen el mismo nombre que algunas variables globales. La mayoría de las veces, una colisión de nombres debe resolverse inmediatamente de alguna manera, ya sea automáticamente mediante un sistema operativo o compilador o manualmente a través de la entrada y las decisiones del usuario. El concepto de un espacio de nombres a veces resuelve los problemas de colisión al crear diferentes regiones lógicas en las que los elementos con nombres similares pueden coexistir sin ambigüedad. En ciertos casos de programación, es posible que una colisión de nombres no sea evidente de inmediato, lo que ocasionalmente conduce a errores de programa difíciles de encontrar que pueden resultar de que el compilador haga ciertas suposiciones sobre los nombres de los elementos utilizados.
Un ejemplo de cómo puede ocurrir una colisión de nombres involucra dos directorios llenos de archivos. Si cada directorio contiene un archivo llamado «DATOS», y el contenido de un directorio se copia en el otro, entonces los intentos de la computadora de copiar el archivo llamado DATOS encontrarán que ya existe un archivo con el mismo nombre en el directorio de destino. Esto crea una colisión de nombres. En este caso, normalmente se le pedirá al usuario y se le permitirá elegir de una lista de resoluciones, incluido el cambio de nombre de uno de los archivos, no copiar el archivo o sobrescribir uno de los archivos.
Una solución comúnmente utilizada para una colisión de nombres es la implementación de espacios de nombres. Un espacio de nombres es simplemente una forma de definir un área bajo la cual están contenidos los nombres de los objetos. En el ejemplo anterior, un directorio es técnicamente un espacio de nombres, lo que significa que varios archivos pueden tener el mismo nombre siempre que estén en directorios diferentes.
Desde una perspectiva de programación, puede producirse una colisión de nombres en situaciones como herencia múltiple, ámbitos de variables superpuestos o incluso con bibliotecas importadas en algunos lenguajes. En general, un compilador notará un conflicto y generará una advertencia o error, aunque puede que no siempre sea así. Aparte del uso de espacios de nombres, las colisiones en muchos lenguajes de programación se pueden evitar mediante el uso de calificadores. Un calificador suele ser un prefijo que se puede colocar delante de una variable o nombre de clase para distinguirlo de otra variable con el mismo nombre.