अधिकांश उद्देश्यों के लिए, एक "स्ट्रिंग" एक सार्थक परमाणु इकाई है, जिसका उपयोग एक संख्या की तरह ही किया जाता है ।
यह पूछना कि एक स्ट्रिंग के अलग-अलग वर्ण परस्पर क्यों नहीं हैं, इसलिए यह पूछना पसंद है कि किसी पूर्णांक के अलग-अलग बिट्स परस्पर क्यों नहीं हैं।
आपको पता होना चाहिए कि क्यों। बस इसके बारे में सोचो।
मुझे यह कहने से नफरत है, लेकिन दुर्भाग्य से हम इस पर बहस कर रहे हैं क्योंकि हमारी भाषा बेकार है, और हम एक जटिल, प्रासंगिक रूप से स्थित अवधारणा या ऑब्जेक्ट के वर्ग का वर्णन करने के लिए एक शब्द, स्ट्रिंग का उपयोग करने की कोशिश कर रहे हैं ।
हम "स्ट्रिंग्स" के साथ गणना करते हैं और तुलना करते हैं कि हम संख्याओं के साथ कैसे करते हैं। यदि तार (या पूर्णांक) परस्पर परिवर्तित होते हैं, तो हमें किसी भी प्रकार की गणना को मज़बूती से करने के लिए उनके मूल्यों को अपरिवर्तनीय स्थानीय रूपों में लॉक करने के लिए विशेष कोड लिखना होगा। इसलिए, एक संख्यात्मक पहचानकर्ता की तरह एक स्ट्रिंग के बारे में सोचना सबसे अच्छा है, लेकिन 16, 32 या 64 बिट लंबा होने के बजाय, यह सैकड़ों बिट लंबा हो सकता है।
जब कोई "स्ट्रिंग" कहता है, तो हम सभी अलग-अलग चीजों के बारे में सोचते हैं। जो लोग इसे केवल पात्रों के एक सेट के रूप में सोचते हैं, किसी विशेष उद्देश्य को ध्यान में रखते हुए, निश्चित रूप से यह याद किया जाएगा कि किसी ने सिर्फ यह तय किया कि उन्हें उन पात्रों में हेरफेर करने में सक्षम नहीं होना चाहिए। लेकिन "स्ट्रिंग" वर्ग केवल वर्णों की एक सरणी नहीं है। यह एक है STRING
, नहीं है char[]
। अवधारणा के बारे में कुछ बुनियादी धारणाएं हैं जिन्हें हम "स्ट्रिंग" के रूप में संदर्भित करते हैं, और इसे आम तौर पर एक संख्या की तरह कोडित डेटा के सार्थक, परमाणु इकाई के रूप में वर्णित किया जा सकता है। जब लोग "हेरफेर स्ट्रिंग्स" के बारे में बात करते हैं, तो शायद वे स्ट्रिंग्स बनाने के लिए हेरफेर करने वाले पात्रों के बारे में बात कर रहे हैं , और एक स्ट्रिंगबर्ल उसके लिए बहुत अच्छा है।
एक पल के लिए विचार करें कि यह क्या होगा यदि तार परस्पर भिन्न थे। निम्न API फ़ंक्शन को किसी भिन्न उपयोगकर्ता के लिए लौटने की जानकारी में धोखा दिया जा सकता है यदि उत्परिवर्तनीय उपयोगकर्ता नाम स्ट्रिंग जानबूझकर या अनजाने में किसी अन्य थ्रेड द्वारा संशोधित किया जाता है, जबकि यह फ़ंक्शन इसका उपयोग कर रहा है:
string GetPersonalInfo( string username, string password )
{
string stored_password = DBQuery.GetPasswordFor( username );
if (password == stored_password)
{
//another thread modifies the mutable 'username' string
return DBQuery.GetPersonalInfoFor( username );
}
}
सुरक्षा केवल 'अभिगम नियंत्रण' के बारे में नहीं है, यह 'सुरक्षा' और 'शुद्धता की गारंटी' के बारे में भी है। यदि कोई विधि आसानी से नहीं लिखी जा सकती है और एक साधारण गणना या तुलनात्मक रूप से तुलना करने के लिए निर्भर है, तो इसे कॉल करना सुरक्षित नहीं है, लेकिन प्रोग्रामिंग भाषा में ही कॉल करना सुरक्षित होगा।