Vitajte na [www.pocitac.win] Pripojiť k domovskej stránke Obľúbené stránky
1. Účinnosť výkonu a pamäte:
* caching a interning: Nepredávajúce reťazce môžu byť bezpečne ukladané do vyrovnávacej pamäte. Mnoho jazykov používa techniku s názvom „String Interning“, kde sa do pamäte ukladá iba jedna kópia reťazca s konkrétnou hodnotou. Ak vytvoríte nový reťazec s rovnakou hodnotou ako existujúci internovaný reťazec, jazyk jednoducho poukazuje na existujúci reťazec v pamäti namiesto pridelenia novej pamäte. To dramaticky znižuje spotrebu pamäte, najmä pri riešení mnohých opakovaných reťazcov. Mretateľné reťazce nemožno bezpečne internovať, pretože ich hodnota by sa mohla zmeniť, čím prelomí zdieľanie.
* Optimalizované reťazcové operácie: Pretože reťazec je zaručený, že sa nezmení, kompilátory a runtime prostredie môžu vykonať optimalizácie pre operácie reťazcov. Môžu sa vyhnúť zbytočnému kopírovaniu alebo obrannému programovaniu. Napríklad, ak funkcia prijíma reťazec ako vstup, nemusí vytvárať kópiu reťazca na ochranu pred úpravou, pretože pôvodný reťazec sa nezmení.
* hashing: Nemenné reťazce môžu mať svoje kódy hash vypočítané a uložené raz. Toto je obzvlášť prospešné, keď sa používa ako kľúče v tabuľkách hash (slovníky). Kód hash nemusí byť odporúčaný, ak je reťazec nemenný, čo vedie k rýchlejším vyhľadávaním.
2. Zabezpečenie:
* bráni neúmyselnej modifikácii: Nemennosť zabraňuje náhodnej alebo škodlivej modifikácii reťazcov odovzdaných ako argumenty pre funkcie alebo uložené v dátových štruktúrach. To je obzvlášť dôležité v kontextoch citlivých na bezpečnosť. Napríklad:
* Ak je reťazec predstavujúci používateľské meno odovzdaný na autentifikačnú funkciu, nemeniteľnosť zaisťuje, že používateľské meno nie je možné zmeniť počas procesu autentifikácie.
* Ak sa reťazec použije ako názov súboru, nemennosť bráni v jeho zmene na iný, potenciálne škodlivý názov súboru po otvorení súboru.
* Znižuje chyby: Nemennosť eliminuje celú triedu chýb súvisiacich s nezamýšľanými vedľajšími účinkami. Je oveľa ľahšie uvažovať o kóde, keď viete, že hodnota reťazca odovzdaná do funkcie sa touto funkciou nezmení.
3. Súbežnosť a bezpečnosť vlákna:
* zjednodušuje súbežné programovanie: Nepredávajúce objekty sú vo svojej podstate bezpečné. Viac vlákien má prístup k a používať rovnaký nemenný reťazec bez potreby zámkov alebo synchronizácie. Toto zjednodušuje súbežné programovanie výrazne, pretože sa nemusíte starať o rasové podmienky alebo korupciu údajov, keď k reťazci pristupuje viac vlákien. To je rozhodujúce pre moderné aplikácie, ktoré často využívajú viac vlákien na výkon.
4. Jednoduchosť a predvídateľnosť:
* ľahšie uvažovať o kóde: Nemenné dátové štruktúry uľahčujú pochopenie kódu a ladenie, pretože si môžete byť istí, že ich stav sa neočakávane nezmení. To uľahčuje uvažovanie o toku údajov vo vašom programe a identifikovať potenciálne problémy.
Príklad (ilustratívne):
Predstavte si jazyk, v ktorom boli reťazce meniteľné.
`` `Python
def modify_string (s):
S [0] ='X' # Pokúste sa upraviť reťazec (v Pythone nie je povolené)
my_string ="ahoj"
modify_string (my_string)
tlač (my_string) # Čo by sa stalo?
`` `
Keby boli reťazce miešané, funkcia `modify_string` by mohla potenciálne zmeniť pôvodnú premennú` my_string`. To by sťažilo predpovedanie správania programu. S nemeniteľnosťou by funkcia pravdepodobne bude musieť vytvoriť * nový * String objekt s modifikáciou, čím by sa pôvodný nedotkol.
Alternatívy a kompromisy:
Aj keď nemennosť ponúka mnoho výhod, existujú aj situácie, keď sa môžu javiť ako pohodlnejšie miešané reťazce (napr. Postupne budovanie dlhého reťazca). Prínosy nemenosti však vo všeobecnosti prevažujú nad potenciálnymi nepríjemnosťami. Ak potrebujete postupne zostaviť reťazec, zvyčajne používate `StringBuilder` (v Java a C#) alebo zoznam reťazcov (v Pythone), ktoré sú * zmenené * a optimalizované pre zreťazenie reťazca. Po dokončení potom prevediete výsledok na nemenný reťazec.
v súhrne:
Reťazec nemeniteľnosti je voľba dizajnu, ktorá uprednostňuje výkon, bezpečnosť, bezpečnosť vlákien a predvídateľnosť. Aj keď to môže vyžadovať trochu odlišné prístupy k určitým úlohám manipulácie s reťazcami, celkové výhody z hľadiska kvality kódu a spoľahlivosti sú významné.