இதுவரை இத்தொடரில் எழுதப்பட்ட நிரல்களில் நிறைய மு.வ.செயல்பாடுகளைப் பயன்படுத்தி வந்திருக்கிறோம். len(), type(), append(), extend(), keys(), items() என்று பல உதாரணங்களைச் சொல்லலாம். ஆனால் இவையெல்லாம் ஒரு நிரலாக்க மொழி தனது பயனருக்கு வழங்குவது. ஒரு நிரலாளர், முழுக்க முழுக்க தனது நிரல் தேவைக்கு என ஒரு செயல்பாட்டை உருவாக்க இயலுமா?
நிச்சயம் முடியும். அதைப் பயனரால் வரையறுக்கப்படும் செயல்பாடுகள்(User defined functions) என்று குறிப்பிடலாம்.
ப.வ.செயல்பாடுகளை எப்படி உருவாக்குவது என்று பார்ப்பதற்கு முன்பாக அதன் தேவைகளைப் பேசிவிடுவோம்.
1) நிரலில் மீண்டும் மீண்டும் குறிப்பிட்ட சில வரிகளைப் பயன்படுத்த வேண்டியிருக்கிறது. அதை ஒரு தொகுப்பாக மாற்றி, தேவைப்படும் இடங்களில் மட்டும் மேற்கோள் காட்டும்படி இருந்தால்.
2) நிரலின் மூலம் ஒரு சிக்கலை ஆப்பிளைப் போலச் சிறிய சிறிய துண்டுகளாக நறுக்கி அதன்மூலம் தீர்வை கண்டறிய முடியும் பட்சத்தில்.
இத்தேவைகளைச் சிறப்பாக நிறைவேற்றித்தருகிறது ப.வ.செயல்பாடுகள்.
இதனால் என்ன பலன்?
1) நாம் எழுதும் நிரலின் தரம் கூடுகிறது.
2) ஒரு பிரச்சனையைச் சிறிய சிறிய பகுதிகளாகப் பிரித்து, அணுகி, அதற்குண்டான தீர்வை கண்டறியமுடிகிறது.
3) ஒரு சிக்கலுக்கான தீர்வை தேவைப்படும் இடங்களில் எல்லாம் மறுபடியும் பயன்படுத்திக்கொள்ள முடிகிறது.
இனி ப.வ.செயல்பாடுகளை உருவாக்குவோம்.
நிரல் 1: செயல்பாட்டின் கட்டமைப்பை அறிதல்
நிரலாளராக ஒரு செயல்பாட்டை வடிவமைக்கிறீர்கள் என்றால் அதை பைத்தானுக்கு சொல்வது எப்படி? def என்ற முதன்மைச் சொல்லின் மூலம் அதைத் தெரியப்படுத்தலாம்(1). defஐ தொடர்ந்து வரும் பெயரைக்கொண்டே(2) செயல்பாட்டை நிரல் முழுவதும் குறிக்க முடியும். அப்பெயரைச் சூட்டுவது யார்? நிரலாளராகிய நீங்கள் தான். அடையாளங்காட்டிக்கு பெயர் சூட்டுகையில் நாம் பின்பற்றிய அதே விதிகள் செயல்பாட்டுக்கும் பொருந்தும். பெயரைத் தொடர்ந்து வரும் அடைப்புக்குறிக்குள், செயல்பாடு கையாள இருக்கும் உள்ளீடுகளைத் தரலாம்(3).
இவற்றிற்குக் கீழே நான்கு இடைவெளிகள் விட்டு வரும் நிரல் வரிகள் யாவையுமே செயல்பாட்டுக்குள் அடங்கும். அவற்றைச் செயல்பாட்டின் உடல்(4) என்று கூடச் சொல்லலாம். இப்போது செயல்பாட்டுக்கு அனுப்பப்பட்ட உள்ளீடுகள் கையாளப்பட்டு, ஒரு முடிவு எட்டப்பட்டிருக்கும் அல்லவா? அதாவது அந்த செயல்பாடு எதற்காக உருவாக்கப்பட்டதோ அதன் நோக்கம் நிறைவேறிய பிறகு கிடைப்பது, அதைக் குறிப்பிட்ட அந்த செயல்பாட்டை யார் அழைத்தார்களோ அவர்களுக்கு அனுப்பித்தர வேண்டும். இதை return(5) என்ற முதன்மைச் சொல்லின்மூலம் சாத்தியப்படுத்தலாம்.
இவையெல்லாம் கட்டாய விதிகளா? அப்படியெல்லாம் ஒன்றுமில்லை. மேலே விதிகளுக்கு இடப்பட்டிருக்கும் எண்களில் 1,2 மற்றும் 4 கட்டாயமானவை. அவற்றைப் பின்பற்றியே ஆகவேண்டும். 3ம், 5ம் கட்டாயமற்றவை. நிரல் எழுதும் சூழலுக்கு ஏற்ப அவ்விதிகளைப் பின்பற்றலாமா, வேண்டாமா என்பதை நிரலாளரே தீர்மானிப்பார்.
நிரல் 2: முழுமையான செயல்பாடு
1) def என்பது குறியீட்டுச் சொல்.
2) அதைத் தொடர்ந்து வரும் add_numbers(a,b): என்ற பெயர் இச்செயல்பாட்டைக் குறிக்க வல்லது(நிரலாளர் சூட்டியது).
3) a,b ஆகியவை இச்செயல்பாட்டுக்கான உள்ளீடுகளைக் கொண்டிருக்கின்றன.
4) உள்ளீடுகளைக் கூட்டி அதன் முடிவை return குறியீட்டுச் சொல்லைக்கொண்டு, செயல்பாட்டை அணுகியவருக்கு அனுப்பிவைக்கிறோம்.
யார் அந்த செயல்பாட்டை அணுகியவர்?
result என்ற அந்த அடையாளங்காட்டித் தான் add_numbers(5,3) செயல்பாட்டை அதன் உள்ளீடுகளை அனுப்பி அழைக்கிறது.
“மேலே செயல்பாடு, கீழே நிரல். ஒன்றுமே விளங்கவில்லை என்பவர்களுக்காகப் பின்வரும் நிரல் மற்றும் குறும்படம்”.
நிரல் 3: செயல்பாட்டை உள்ளடக்கிய முழுமையான நிரல்
குணா கண்மணி போல அல்லாமல், படமாகப் பார்த்துவிடுவோம்.
இப்படத்திலிருந்து தெளிவாக விளங்கிக்கொள்ள வேண்டியவை
1) நிரலிலிருந்து அழைக்கப்படாமல் ஒரு செயல்பாடு தன்னிச்சையாக ஒருபோதும் இயங்காது.
2) நிரலின் இயக்கம் அதன் முதல் வரியிலிருந்தே தொடங்கும் (அல்லது), நிரலின் இயக்கம் ஒருபோதும் செயல்பாட்டிலிருந்து தொடங்காது.
இப்போது படத்திலிருப்பதை ஒருமுறை புரிதலுக்காக எழுதியும் பார்த்துவிடுவோம்.
1) result = add_numbers(5,3) என்ற நிரலின் முதல் வரியிலிருந்து இயக்கம் தொடங்குகிறது.
2) நிரலிலிருந்து பெறப்பட்ட அழைப்பின் பேரில் add_numbers() என்ற செயல்பாடு இயங்க தொடங்குகிறது.
3) அனுப்பப்பட்ட 2 உள்ளீடுகளான 5ம், 3ம் முறையே a மற்றும் b என்ற அடையாளங்காட்டிகளுக்கு ஒதுக்கீடு செய்யப்படுகின்றன.
4) அவற்றின் மதிப்புக் கூட்டப்பட்டு அதன் முடிவு return என்ற குறியீட்டுச் சொல்லின் மூலம் நிரலுக்கு அனுப்பப்பட்டு அச்சிடப்படுகிறது.
0
செயல்பாட்டுக்கு உள்ளீடாக அனுப்பப்படும் அளவுருக்களை 3 வகைகளாகப் பிரிக்கலாம்.
1) நிலை அளவுருக்கள் (Positional Arguments)
2) இயல்புநிலை அளவுருக்கள் (Default Arguments)
3) முதன்மைச்சொல் அளவுருக்கள் (Keyword Arguments)
நிரல் 4: நிலை அளவுருக்களைப் பெற்று செயல்பாட்டில் அச்சிடுதல்
செயல்பாட்டின் மூலம் பெறப்பட்ட முடிவை நிரலுக்கு அனுப்புவது கட்டாயமற்றது என்று ஏற்கனவே பார்த்தோம். அதை உறுதிப்படுத்துகிறது இந்த நிரல். பெறப்பட்ட உள்ளீட்டை அப்படியே செயல்பாட்டுக்குள் அச்சிட்டுக் காட்டுகிறது நிரல்.
உள்ளீடுகளைக் கையாள நிலை அளவுருக்களைப் பயன்படுத்தியிருக்கிறோம். அதன்படி, நிரலிலிருந்து எந்த வரிசையில் அனுப்புகிறீர்களோ அதை அப்படியோ அடியொற்றி தொடர்புடைய அளவுருக்களில் மதிப்புகள் சேமிக்கப்படும்.
ஒருவேளை மூன்று உள்ளீடுகள் நிரலிலிருந்து செல்கின்றன என்று வைத்துக்கொள்வோம். அதை அதன் வரிசையிலேயே மூன்று அளவுருக்களாக எதிர்முனையில்(செயல்பாட்டைக் குறிக்கிறது) பெற்றுக்கொண்டால், நிலை அளவுருக்கள் தன் வேலையைச் சிறப்பாகச் செய்திருக்கின்றன என்று அர்த்தம்.
எப்போதெல்லாம் பிழை நேரும்?
1) நிரல் இரண்டு உள்ளீடுகளை அனுப்பி அதைப்பெற மூன்று அளவுருக்கள் உருவாக்கப்பட்டிருந்தால்.
2) நேர்மாறாக மூன்று உள்ளீடுகள் அனுப்பப்பட்டு அங்கே(செயல்பாடு) இரண்டு அளவுருக்கள் மட்டும் காத்துக்கொண்டிருந்தால்.
நிலை அளவுருக்களில் நீங்கள் நினைவில் கொள்ள வேண்டியது ஒன்றைத்தான். எண்ணிக்கையும் வரிசையும் அழைக்கும் நிரலிலும், அதை ஏற்கும் செயல்பாட்டிலும் கச்சிதமாக பொருந்திப்போக வேண்டும்.
நிரல் 5: ஒரு செயல்பாடு, இரண்டு அழைப்புகள். இயல்புநிலை அளவுருக்களுக்கான எடுத்துக்காட்டு.
ஒரு செயல்பாட்டை ஒருமுறை மட்டும் தான் அழைக்க முடியுமா என்ன? அப்படியெல்லாம் ஒன்றுமில்லை. இந்நிரலில் இரண்டுமுறை greet()ஐ அழைத்திருக்கிறோம்.
செயல்பாட்டின் அளவுருக்கள் உருவாக்கப்பட்டிருப்பதில் உள்ள வித்தியாசத்தைக் கவனித்தீர்களா? வழக்கமாக நிரலிலிருந்து தான் மதிப்பு வந்துசேரும். மாறாக மதிப்பைச் செயல்பாட்டு அளவுருக்கள் உருவாக்கப்படும் இடத்திலேயே தந்திருக்கிறோம். இவ்வகையைச் சேர்ந்தவை இயல்புநிலை அளவுருக்கள் என்று அழைக்கப்படுகின்றன.
எதற்காக இப்படியொரு ஏற்பாடு?
ஒரு செயல்பாட்டை வடிவமைக்கும்போது குறிப்பிட்ட அளவுரு/அளவுருக்களுக்கு மட்டும், நிரலிலிருந்து மதிப்பு வராத பட்சத்தில் இயல்புநிலை அளவுருக்கள் கொண்டிருக்கும் மதிப்பை வைத்துச் சமாளித்துக் கொள்ளலாம். உள்ளூர் கிரிக்கெட்டில் சத்தியம் செய்துவிட்டுப் போன கோபால் மாமா வழக்கம் போல வராமல் போனால், குமார் சித்தப்பாவை வைத்து ஆட்டத்தை முடிப்பதற்கு இணையானது இது.
எங்கே பயன்படுகிறது?
உங்கள் நிறுவனத்தில் பணிபுரியும் 10 பேரில் ஆறு பேர் ஒரே நிறுவனத்தின் வண்டியைத்தான் பயன்படுத்துகிறார்கள் எனில், அதை எதற்காக ஒவ்வொருமுறையும் நிரலிலிருந்து அனுப்பிக்கொண்டிருக்க வேண்டும். ஒருமுறை மட்டும் அம்மதிப்பை இயல்புநிலை அளவுருவாக மாற்றிவிட வேண்டியது தான். மீதமிருக்கும் நான்கு பேரின் வண்டி விபரங்களை மட்டும் நிரலிடமிருந்து பெற்றுக்கொண்டால் போதும்.
அப்படியென்றால் நிரல் அனுப்பாத பட்சத்தில் மட்டும் தான், இயல்புநிலை அளவுருக்கள் தனது மதிப்பைத் தருமா என்றால், ஆம் என்பது தான் பதில்.
இயல்புநிலை அளவுருக்களில் நீங்கள் நினைவில் கொள்ளவேண்டியது
நிரலிடமிருந்து பெறப்படும் மதிப்பே இறுதியானது. ஒருவேளை அம்மதிப்பு அனுப்பப்படாவிட்டால் இயல்புநிலை அளவுருக்களின் மதிப்புகள் செயல்பாடுகளில் பயன்படுத்திக்கொள்ளப்படும்.
நிரல் 5ல், இரண்டு முறை greet() செயல்பாட்டை அழைத்திருக்கிறோம். முதல்முறை ஒரு உள்ளீட்டை மட்டும் தந்து(“Khan”), இயல்புநிலை அளவுருவைப் பயன்படுத்திக்கொண்டோம். இரண்டாம் அழைப்பில் இரண்டு உள்ளீடுகளையும் நிரலே தந்துவிட்டதால், இயல்புநிலை அளவுருவிற்கு வேலையில்லை.
நிரல் 6: முதன்மைச்சொல் அளவுருக்களுக்கான எடுத்துக்காட்டு
பின்வரும் இரண்டு தருணங்களில் ஏதாவதொன்றில் முதன்மைச்சொல் அளவுருக்களை பயன்படுத்திக்கொள்ளலாம்.
1) செயல்பாட்டை அழைக்கும்போதே அளவுருக்களை குறிப்பிட்டு அதன் மதிப்புகளை அனுப்ப வேண்டியிருந்தால்.
2) அளவுருக்களைச் சுட்டி மதிப்பை வழங்கும் வாய்ப்பு இருப்பதனால், அதன் வரிசையை மாற்றித்தர விரும்பினால்.
மேற்கண்ட நிரலில் செயல்பாட்டை வடிவமைக்கும்போது (name,greeting) என்று இரண்டு அளவுருக்கள் உருவாக்கப்பட்டிருக்கின்றன. ஆனால் செயல்பாடு நிரலிலிருந்து எப்படி அழைக்கப்படுகிறது பாருங்களேன், அதன்(அளவுருக்கள்) வரிசை மாற்றி அமைக்கப்பட்டிருக்கிறது. இதனால் பிழையொன்றுமில்லை. காரணம், நாம் பயன்படுத்தியிருப்பது முதன்மைச்சொல் அளவுருக்கள்.
0
பின்வரும் ஐந்து நிரல்களையும் செயல்பாட்டைப் பயன்படுத்தி உருவாக்கிப் பாருங்கள். அடுத்த வாரம் தொடர்வோம்.
1) ஒரு எண்ணின் வர்க்க மூலத்தைக் கண்டறிதல்
2) ஒரு எண்ணைப் பயனரிடமிருந்து பெற்று அதன் காரணிகளை அச்சிடுதல்
3) ஒரு சரத்தின் தலைகீழ் வடிவத்தை அச்சிடுதல்
4) சரத்தைப் பயனரிடமிருந்து பெற்று அது பாலின்றோமா(Palindrome) இல்லையா என்பதைக் கண்டறிதல்
மறந்துவிடாதீர்கள், மேற்கூறிய அனைத்து நிரல்களும் செயல்பாட்டைப் பயன்படுத்தி மட்டுமே எழுதப்படவேண்டும்.
(தொடரும்)