Ką reiškia „pavadinimų susidūrimas“?

Kalbant apie kompiuterius ir kompiuterių programavimą, „pavadinimų susidūrimas“ yra techninis terminas, apibūdinantis atvejį, kai du elementai turi tą patį pavadinimą tam tikrame loginiame korpuse. Vardų susidūrimas gali įvykti daugeliu atvejų, pavyzdžiui, su failų pavadinimais kataloge arba programoje, kurioje funkcijos vietiniai kintamieji turi tokį patį pavadinimą kaip ir kai kurie pasauliniai kintamieji. Dažniausiai vardų susidūrimas turi būti nedelsiant išspręstas kokiu nors būdu, automatiškai naudojant operacinę sistemą ar kompiliatorių, arba rankiniu būdu, naudojant vartotojo įvestį ir sprendimus. Vardų erdvės koncepcija kartais išsprendžia susidūrimo problemas sukurdama skirtingus loginius regionus, kuriuose elementai su panašiais pavadinimais gali egzistuoti kartu be dviprasmybių. Tam tikrais programavimo atvejais pavadinimų susidūrimas gali būti ne iš karto akivaizdus, ​​todėl kartais gali atsirasti sunkiai aptinkamų programos klaidų, kurios gali atsirasti dėl to, kad kompiliatorius daro tam tikras prielaidas dėl naudojamų elementų pavadinimų.

Pavyzdys, kaip gali įvykti pavadinimų susidūrimas, apima du katalogus, pilnus failų. Jei kiekviename kataloge yra failas pavadinimu „DUOMENYS“, o vieno katalogo turinys nukopijuotas į kitą, kompiuteris bandys nukopijuoti failą pavadinimu DATA nustatys, kad failas tokiu pačiu pavadinimu jau yra tiksliniame kataloge. Tai sukuria vardo susidūrimą. Tokiu atveju vartotojas paprastai bus paragintas ir jam bus leista pasirinkti iš skiriamųjų gebų sąrašo, įskaitant vieno iš failų pervadinimą, failo nekopijavimą arba vieno iš failų neperrašymą.

Vienas dažniausiai naudojamas vardų susidūrimo sprendimas yra vardų erdvių įgyvendinimas. Vardų erdvė yra tiesiog būdas apibrėžti sritį, kurioje yra objektų pavadinimai. Anksčiau pateiktame pavyzdyje katalogas techniškai yra vardų erdvė, o tai reiškia, kad keli failai gali turėti tą patį pavadinimą, jei kiekvienas yra skirtinguose kataloguose.

Žvelgiant iš programavimo perspektyvos, pavadinimų susidūrimas gali įvykti tokiose situacijose, kaip daugialypis paveldėjimas, persidengiančios kintamųjų apimtys arba net importuojant bibliotekas kai kuriomis kalbomis. Paprastai kompiliatorius pastebės konfliktą ir generuos įspėjimą arba klaidą, nors taip gali būti ne visada. Išskyrus vardų erdves, susidūrimų daugelyje programavimo kalbų galima išvengti naudojant kvalifikatorius. Kvalifikatorius paprastai yra priešdėlis, kuris gali būti dedamas prieš kintamojo ar klasės pavadinimą, siekiant atskirti jį nuo kito kintamojo tuo pačiu pavadinimu.