நீங்கள் மேற்கொள்ளவிருக்கும் பயணத்திற்காக ஒரு டிக்கெட்டை பேருந்தில் முன்பதிவு செய்ய விரும்புகிறீர்கள். உங்களிடம் தரப்பட்டு இருக்கும் பாரத்தை ஒரு நிமிடம் பாருங்கள். அதில் என்னென்ன தகவல்கள் நிரப்பப்பட வேண்டும்?
பெயர், பயணத் தேதி, ஏறுமிடம், இறங்கவேண்டிய இடம், பயணிகள் எத்தனை பேர்? டிக்கெட் செலவு என நீங்கள் எழுதவேண்டிய தரவுகள்தான் எத்தனை விதம்? உதாரணத்துக்கு ‘பெயர், ஏறவேண்டிய, இறங்கவேண்டிய இடங்கள்’ போன்றவற்றை எழுத்துகளில் உள்ளீடு செய்யவேண்டும். ‘பயணிகளின் எண்ணிக்கை, டிக்கெட் செலவு’ போன்றவற்றுக்கு எண்களைப் பயன்படுத்த வேண்டும்.
ஒருவகையில் நிரல் என்பதும் நிஜவாழ்வின் பிரதிபலிப்பு தானே. நிரலுக்கு உள்ளீடு செய்யப்படும் தரவுகளிலும் நிறைய வகை உண்டு. அவற்றை விரிவாகப் புரிந்துகொள்வதே இந்த கட்டுரையின் நோக்கம்.
0
நிரலை எழுத ஆரம்பிக்கும்பொழுது இத்தனை அடையாளங்காட்டிகளைப் பயன்படுத்த இருக்கிறேன், அவற்றுக்கு இந்தவகை தரவுகள் உள்ளீடு செய்யப்பட வேண்டுமென்று தெளிவாக நிரலானார் பட்டியலிடுவது ஒருவகை. இவற்றுக்கு உதாரணமாக சி, சி++ போன்றவற்றைச் சொல்லலாம்.
எதற்காக ஆரம்பத்திலேயே இப்படியொரு ஏற்பாடு?
பட்டியலுக்கு ஏற்றவாறு எழுதப்படும் நிரலுக்கு எனக் கணினியின் மெமரியில் சில பகுதிகள் ஒதுக்கீடு செய்யப்படும். ஒருமுறை ஒதுக்கப்பட்ட இடங்களில் மட்டும் தான் குறிப்பிட்ட அந்த நிரல் தனது தரவுகளைத் தற்காலிகமாகச் சேமித்து வைத்துக்கொள்ள முடியும்.
அடிப்படையில் பைத்தான் மாறும் தன்மைகொண்ட(Dynamically typed programming language) நிரலாக்க மொழி. அதனால் மேலே குறிப்பிட்டுள்ளவை எதுவும் பைத்தானுக்கு பொருந்தாது. அப்படியென்றால்
1) அடையாளங்காட்டிகளை முதலிலேயே பட்டியலிட வேண்டிய அவசியம் இல்லை. நிரலில் பதினைந்தாவது வரியில் ஒரு அடையாளங்காட்டித் தேவைப்படுகிறது என்றால், தாராளமாக உருவாக்கிக் கொள்ளலாம்.
2) அடையாளங்காட்டிகள் என்ன மாதிரியான தரவுகளைச் சேமிக்க இருக்கின்றன என்பதை முன்கூட்டியே (ஏன் தெரிவிக்க வேண்டிய அவசியம் கூட) இல்லை.
எனில் கணினி மெமரி எப்படி நிரலில் பயன்படுத்தப்படும் தரவுகளுக்காக ஒதுக்கீடு செய்யப்படுகிறது? பின்வரும் நிரல் வரிகளைக் கவனியுங்கள்.
>>> x=10
>>> name=”Raheem”
10 என்கிற முழு எண்ணை வைத்து, xன் தரவு வகை என்ன என்பதை நிரல் தானாகவே புரிந்துகொள்கிறது(நிரலானார் அதைச் சொல்லவேண்டிய அவசியமில்லை). அதற்கு உண்டான மெமரி ஒதுக்கீடு செய்யப்படுகிறது.
‘Raheem’ என்ற தரவை nameற்கு ஒதுக்கீடு செய்ததன் மூலம், அதன்(name) தரவு வகை தானாகவே நிர்ணயம் செய்யப்பட்டுவிட்டது.
நிரல் புரிந்துகொள்வது ஒருபக்கம் இருக்கட்டும். என்னென்ன தரவு வகைகள்(Data types) இருக்கின்றன என நாம் புரிந்துகொள்ள வேண்டாமா?
டும் டும் டும்.
0
தரவு வகைகளைப் பட்டியலிடுவதற்கு முன்பு இரண்டு விஷயங்களைப் பற்றிக் கொஞ்சம் பேசிவிடுவோம்.
1) மாறும் தன்மையுடையது (Mutable. இனி மாதா என்று குறிப்பிடப்படும்)
2) மாற்ற முடியாதது (Immutable. மாமு என்று அன்போடு அழைக்கப்படும்)
என்ன சிம்ரன் இதெல்லாம் என்று கேட்பவர்களுக்காக.
பைத்தான் தரவு வகைகளில் லிஸ்ட்(list), டிக்னரி (Dictionary) மற்றும் செட் (Set) ஆகியவை ‘மாதா’. இவ்வகை தரவுகளைக் கொண்டிருக்கும் அடையாளங்காட்டிகளுக்கு ஒதுக்கீடு செய்யப்பட்டிருக்கும் தரவுகளை எத்தனை முறை வேண்டுமானாலும் மாற்றத்திற்கு உள்ளாக்கலாம். பைத்தான் கோவித்துக் கொள்ளாது.
இதற்கு நேரெதிராக மாற்ற முடியாத தன்மை கொண்ட தரவு வகைகளும் பைத்தானில் உண்டு. ‘மாமு’ தரவொன்றை அடையாளங்காட்டிக்கு ஒதுக்கிவிட்டால் அவ்வளவுதான், பிறகு அந்நிரலில் அதை மாற்ற இயலாது. உதாரணத்துக்கு int, float, complex, Str, bool போன்றவை ‘மாமு’ வகையைச் சாரும்.
இதை இன்னும் கொஞ்சம் விரிவாகப் பார்க்கலாம்.
‘மாமு’
– x என்ற அடையாளங்காட்டிக்கு 10 என்ற மதிப்பை ஒதுக்கீடு செய்கிறீர்கள்.
– இப்போது xன் மதிப்பை 20ஆக மாற்ற வேண்டுமென்றால் அதிலொரு சிக்கல் இருக்கிறது. திரை மறைவில் (கணினி மெமரியில்) என்ன நடக்கிறது?
>> x=10
>>> x=20
10 என்ற மதிப்பு xக்கு ஒதுக்கீடு செய்யப்பட்டு இருக்கிறது. எனில் xன் தரவு வகை int, ‘மாமு’ வகையைச் சார்ந்தது. இன்னொரு மதிப்பைக்கொண்டு மாற்றப்படுவதற்கு வாய்ப்பே இல்லை. இருப்பினும்
>> x=20
என்று xற்கு ஒரு புதிய மதிப்பை நீங்கள் ஒதுக்கீடு செய்ய முயன்றால், x எனும் அடையாளங்காட்டி புதிய மதிப்பான 20தான் குறிக்குமே ஒழியே, பழைய மதிப்பான 10க்கு பதிலாக ஒதுக்கீடு செய்யப்படாது.
இந்த விளக்கப்படம் உங்களுக்கு உதவலாம்.
‘மாதா’
– y என்ற அடையாளங்காட்டிக்கு (லிஸ்ட் தரவு வகையைச் சார்ந்தது) 20, 30, 40 என்ற மதிப்புகளை ஒதுக்கீடு செய்கிறீர்கள்.
– இப்போது yன் மதிப்பை 50, 60, 70 என்று நிரலாளர் மாற்ற விரும்பினால், அது ஏன் எந்தவொரு சிக்கலும் இல்லாமல் சாத்தியமாகிறது?
>>> y=[20,30,40]
>>> y[0]=50
>>> y[1]=60
>>> y[2]=70
காரணம், மாற்றப்பட்ட மதிப்புகளுக்காக புதிய மெமரி செல்கள் கணினியில் உருவாக்கப்படுவது இல்லை. லிஸ்ட் ‘மாதா’ வகையைச் சேர்ந்த ஒன்று என்பதனால், புதியவை பழைய மதிப்புகளுக்குப் பதிலாக, ஏற்கனவே ஒதுக்கப்பட்ட அதே மெமரி செல்களில் சேமிக்கப்படுகின்றன.
இரண்டு நிகழ்வுகள் வர இருக்கின்றன. அதை ‘மாமு’வோடும், ‘மாதா’வோடும் ஒப்பிட்டு, சரியாகப் புரிந்துகொள்ளும் முதல் மூன்று பேருக்கு நிறுவனத்தின் சார்பாக …. பலத்த கரவோசை எழுப்பப்படும்.
நிகழ்வு 1:
நீங்கள் எனக்கு முதலாளி. உங்களிடம் வேலைப் பார்க்கும் கிளார்க்கான என்னை அழைத்து, ஒரு சுற்றறிக்கையின் நகலைக் கொடுத்து அதை அறிவிப்புப் பலகையில் ஓட்டச் சொல்கிறீர்கள். நானும் பவ்யமாக நகலைப் பெற்றுக்கொண்டு, அதை நீங்கள் சொன்ன இடத்திலேயே ஒட்டிவிட்டேன்.
‘முடிக்கவேண்டிய பணிகள் மலையளவு தேங்கி இருப்பதால் நாளை (சனிக்கிழமை), அலுவலகம் முழு விடுமுறை நாளாகும்’ என்று சுற்றறிக்கையில் தவறாக எழுதப்பட்டிருப்பதை இப்போதுதான் உங்கள் அறையிலிருந்தவாறு கவனிக்கிறீர்கள். அவசர அவசரமாக விடுமுறை என்பதை அடித்துவிட்டு, வேலைநாள் என்று நீங்கள் வைத்திருக்கும் அசல் சுற்றறிக்கையில் எழுதுகிறீர்கள்.
இப்போது ஒரு எளிமையான கேள்வி. நீங்கள் திருத்தி எழுதியது, அறிவிப்புப் பலகையில் நான் ஒட்டிவிட்டு வந்த நகலிலும் எதிரொலித்து இருக்குமா?
கண்ணாடிய திருப்புனா எப்படி ஜீவா ஆட்டோ ஓடும்?
நிகழ்வு 2:
அதே முதலாளி. அதே தவறான சுற்றறிக்கையைக் கணினியோடு இணைக்கப்பட்டிருக்கும் ப்ரோஜெக்ட்டரில் வைத்து தனது பணியாளர்களுக்குத் திரையிட்டுக் காட்டுகிறார். தவறை உணர்ந்த அவர், கணினியில் விடுமுறை என்பதை அழித்துவிட்டு, வேலைநாள் என்று தட்டச்சு செய்கிறார்.
இப்போதும் அதே கேள்வி. நீங்கள் கணினியில் திருத்தியது, திரையில் தெரிந்திருக்குமா?
இவ்விரு நிகழ்வுகளில் எது ‘மாமு’, எது ‘மாதா’ என்பதை 9789855667 என்ற எண்ணுக்கு ஒரு வாட்சப் தகவலின்மூலம் சொல்லுங்கள்.
0
இனி ஒவ்வொரு தரவு வகையாக எடுத்துக்கொண்டு அதை நிரலில் எப்படிப் பயன்படுத்துவது என்பதைப் பார்ப்போம்.
மொத்தம் 9 அடையாளங்காட்டிகளைப் பயன்படுத்தி இருக்கிறோம். அதன் தரவு வகை என்ன என்பதைக் கண்டறிய ஏதாவது வழிமுறை இருக்கிறதா?
ஏன் இல்லை?
type() என்ற முன் வரையறுக்கப்பட்ட செயல்பாடு (predefined functions/ மு.வ.செ), நமது எதிர்பார்ப்பைக் கச்சிதமாக நிறைவேற்றித் தரும்.
உதாரணத்துக்கு முதல் மூன்று அடையாளங்காட்டிகளை மட்டும் எடுத்துக்கொள்வோம்.
மற்றவை வீட்டுப்பாடம்.
இந்தத் தரவு வகைகளையெல்லாம் பயனரிடமிருந்து கேட்டுப்பெறும் வகையில், ஸ்க்ரிப்ட் முறையில் ஒரு நிரல் எழுத உங்களால் முடியுமா?
(தொடரும்)
Please take class like this for Java too.
It will be really helpful