செயற்கூறு: ஒரு மதிப்பெண் வினாக்கள், புத்தக வினா விடைகள் மற்றும் குறிப்புகள்
அலகு 1, நெறிமுறை அடிப்படையில் செயற்கூறு என்றால் என்ன என்பதை விளக்குகிறது. செயற்கூறு என்பது உள்ளீடுகளைப் பெற்று அவற்றின் மீது வேலை செய்து ஒரு விடையைத் திருப்பித் தரும் துணைநிரல் ஆகும். அளபுருக்கள், செயலுருபுகள், வகைக் குறிப்பு, வகை அனுமானம், இடைமுகம், செயல்படுத்துதல், பக்கவிளைவுகளுடன் தூய மற்றும் தூய்மையற்ற செயற்கூறுகள், அடிப்படை நிபந்தனையுடன் கூடிய தற்சுழற்சி செயற்கூறுகள் ஆகிய அனைத்தும் இந்த அலகில் வரிசையாக விளக்கப்படுகின்றன.
இந்தப் பாடத்தைப் படியுங்கள்
முந்தைய பொதுத் தேர்வுகளில் கேட்கப்பட்டவை
இந்தப் பாடத்திலிருந்து 7 வினாக்கள் 7 முந்தைய பொதுத் தேர்வுகளில் கேட்கப்பட்டன. விடையையும் விளக்கத்தையும் காண எந்த வினாவையும் திறக்கவும்.
-
மார்ச் 2026
அளபுருக்கள் அனுப்பும் போது பக்க விளைவுகளை ஏற்படுத்தும் செயற்கூறு __________ என்று அழைக்கப்படும்.விடையுடன் வினாத்தாளில் பார் →
-
மார்ச் 2025
பின்வரும் எது தனித்தன்மையான தொடரியல் தொகுதிகளைக் கொண்டதாகும்?விடையுடன் வினாத்தாளில் பார் →
-
மார்ச் 2024
பின்வரும் எது ஒரு பொருள் செய்ய வேண்டியதை தீர்மானிக்கிறது ?விடையுடன் வினாத்தாளில் பார் →
-
மார்ச் 2023
ஒரு குறிப்பிட்ட செயலைச் செய்வதற்காக பயன்படுத்தப்படும் குறிமுறையின் சிறிய பகுதி :விடையுடன் வினாத்தாளில் பார் →
-
மே 2022
பின்வரும் எது தனித்தன்மையான தொடரியல் பகுதி ஆகும் ?விடையுடன் வினாத்தாளில் பார் →
-
துணைத் தேர்வு 2021
ஒரு குறிப்பிட்ட செயலைச் செய்வதற்காக பயன்படுத்தப்படும் குறிமுறையின் சிறிய பகுதி :விடையுடன் வினாத்தாளில் பார் →
-
மார்ச் 2020
ஒரே மாதிரியான அதே அளபுருக்களை செயற்கூறுவிற்கு அனுப்பினால் சரியான விடையைத் தரும் செயற்கூறு எவ்வாறு அழைக்கப்படும் ?விடையுடன் வினாத்தாளில் பார் →
செயற்கூறு பற்றி
நடுத்தரம் ~60 நிமிடப் படிப்பு
ஓரளவு பெரிய நிரல் எதுவும் சிறிய பகுதிகளால் ஆனது. பாடநூல் இந்தப் பகுதிகளைத் துணைநிரல்கள் (Subroutines) என்று அழைக்கிறது. பெரும்பாலான மொழிகளில் துணைநிரல் என்பது செயற்கூறு (Function) எனப்படும். செயற்கூறு என்பது தன் உள்ளீடுகளின் (மாறிகள், கோவைகள்) மீது வேலை செய்து ஒரு உறுதியான வெளியீட்டைத் தரும் குறிமுறை அலகு. ஒருமுறை எழுதிவிட்டால், அதே வரிகளை மீண்டும் எழுதாமல் எத்தனை முறை வேண்டுமானாலும் அழைக்கலாம்.
புத்தகத்தின் அடுத்த பாடங்கள் பயன்படுத்தும் சொற்களை இந்தப் பாடம் தருகிறது. அளபுருவுக்கும் செயலுருபுக்கும் உள்ள வேறுபாட்டைக் கற்பீர்கள். ஒரு செயற்கூறின் வகைகளை நாமே வெளிப்படையாக எழுதலாம் அல்லது நிரல்பெயர்ப்பி தானே கண்டறியலாம் என்பதையும் பார்ப்பீர்கள். இடைமுகம் (ஒரு பொருள் என்ன செய்கிறது) ஏன் அதன் செயல்படுத்துதலிலிருந்து (அதை எப்படிச் செய்கிறது) தனியாக வைக்கப்படுகிறது என்பதும் விளக்கப்படுகிறது. பின்னர் பக்கவிளைவுகள் உள்ளனவா என்பதைக் கொண்டு செயற்கூறுகள் தூய, தூய்மையற்ற என இரண்டாகப் பிரிக்கப்படுகின்றன. கடைசியில் தற்சுழற்சி வருகிறது.
இந்த அலகின் புத்தக வினாக்கள் பெரும்பாலும் வரையறைகளும் ஒரு வரி வேறுபாடுகளும்தான்: அளபுரு - செயலுருபு, இடைமுகம் - செயல்படுத்துதல், தூய - தூய்மையற்ற. ஒவ்வொரு இணையையும் ஒரு சிறிய எடுத்துக்காட்டுடன் படியுங்கள். அப்போது ஒரு மதிப்பெண் வினாக்களுக்கும் சிறு வினாக்களுக்கும் ஊகிக்காமல் விடை எழுதலாம்.
நீங்கள் கற்பவை
- துணைநிரலை வரையறுத்து, நிரல்கள் ஏன் செயற்கூறுகளாகப் பிரிக்கப்படுகின்றன என்று விளக்குதல்.
- கொடுக்கப்பட்ட செயற்கூறு வரையறையிலும் அழைப்பிலும் அளபுருவையும் செயலுருபையும் பிரித்துச் சொல்லுதல்.
- வெளிப்படையான வகைக் குறிப்புகளுடன் செயற்கூறு வரையறை எழுதி, வகை அனுமானத்தை விளக்குதல்.
- இடைமுகத்தையும் அதன் செயல்படுத்துதலையும் ஓர் எடுத்துக்காட்டுடன் வேறுபடுத்துதல்.
- பக்கவிளைவுகளும் மாறாத விடைகளும் உள்ளனவா எனச் சோதித்து, ஒரு செயற்கூறைத் தூய அல்லது தூய்மையற்றது என வகைப்படுத்துதல்.
- சரியான அடிப்படை நிபந்தனையுடன் தற்சுழற்சி செயற்கூறு எழுதுதல்.
தொடங்குவதற்கு முன்
- ஓர் உயர்நிலை மொழியிலிருந்து மாறிகள், கோவைகள், அடிப்படை இலக்கண விதிகள்.
- f(x) = x + 1 போன்ற கணிதச் சார்பு என்ற கருத்து.
- 11ஆம் வகுப்பு C++ அல்லது பைத்தானில் கற்ற எளிய நிரல் ஓட்டமும் தொகுதிகளும்.
இந்த அத்தியாயத்தில் உள்ள தலைப்புகள்
செயற்கூறு — விரிவான விளக்கம்
செயற்கூறுகள், அளபுருக்கள் மற்றும் தற்சுழற்சி
துணைநிரல்களும் செயற்கூறுகளும்
துணைநிரல்கள் ஒரு நிரலின் அடிப்படைக் கட்டுமானத் தொகுதிகள். ஒவ்வொன்றும் ஒரே வேலையைச் செய்யும், மீண்டும் மீண்டும் பயன்படுத்தக்கூடிய சிறிய குறிமுறைப் பகுதி. நிரலாக்க மொழிகளில் இவை செயற்கூறுகள் எனப்படுகின்றன. செயற்கூறு உள்ளீட்டு மதிப்புகளைப் பெற்று, நிலையான படிகளின் வழியே அவற்றைச் செயலாக்கி, ஒரு விடையைத் திருப்பித் தருகிறது. பெரிய நிரலைச் செயற்கூறுகளாகப் பிரித்தால் குறிமுறை சுருக்கமாகிறது; படிக்கவும் பிழை திருத்தவும் எளிதாகிறது.
அளபுருக்களும் செயலுருபுகளும்
அளபுருக்கள் (Parameters) என்பவை செயற்கூறு வரையறையில் எழுதப்படும் மாறிகள். செயலுருபுகள் (Arguments) என்பவை செயற்கூறை அழைக்கும்போது அந்த மாறிகளுக்கு அனுப்பப்படும் உண்மையான மதிப்புகள். பாடநூலின் let rec gcd a b இல் a, b என்ற பெயர்கள் அளபுருக்கள்; gcd 12 18 என்ற அழைப்பில் 12, 18 ஆகியவை செயலுருபுகள்.
வகைகளை இரண்டு விதமாகக் கையாளலாம். வகைக் குறிப்பு இல்லாவிட்டால், நிரல்பெயர்ப்பி ஒரு நெறிமுறையைக் கொண்டு வகைகளைத் தானே கண்டறிகிறது (வகை அனுமானம் - Type Inference). வகைக் குறிப்பு (Type Annotation) இருந்தால், பாடநூலின் let rec pow (a: int) (b: int) : int போல வகைகளை நீங்களே எழுதுகிறீர்கள். ஒரு அளபுருவுக்கு வகைக் குறிப்பு தரும்போது அதைச் சுற்றிய அடைப்புக்குறிகள் கட்டாயம். வகைகளை வெளிப்படையாக எழுதினால், வகைப் பொருத்தமின்மை ஏற்படும்போது வரும் பிழைச் செய்தியைப் புரிந்துகொள்வதும் எளிதாகிறது.
இடைமுகமும் செயல்படுத்துதலும்
இடைமுகம் (Interface) என்பது ஒரு பொருள் செய்யக்கூடிய செயல்களின் தொகுப்பு. அது செயற்கூறுகளையும் அவை எதைப் பெறுகின்றன, எதைத் தருகின்றன என்பதையும் பட்டியலிடும்; அவை எப்படி வேலை செய்கின்றன என்பதைச் சொல்லாது. செயல்படுத்துதல் (Implementation) என்பது அந்தச் செயல்களை உண்மையில் நிறைவேற்றும் குறிமுறை. பாடநூல் மகிழுந்தை எடுத்துக்காட்டாகத் தருகிறது: மிதிக்கட்டை இடைமுகம்; அதற்கு ஏற்ப இயங்கும் இயந்திரமும் எரிபொருள் அமைப்பும் செயல்படுத்துதல். பயனர்கள் இடைமுகத்தை மட்டுமே சார்ந்திருப்பதால், அதைப் பயன்படுத்தும் குறிமுறையைப் பாதிக்காமல் செயல்படுத்துதலை மாற்றலாம்.
தூய மற்றும் தூய்மையற்ற செயற்கூறுகள்
தூய செயற்கூறு (Pure Function) ஒரே செயலுருபுகளுடன் எத்தனை முறை அழைத்தாலும் ஒரே விடையைத் தரும்; அதற்குப் பக்கவிளைவுகள் இல்லை. strlen(s) ஒரு தூய செயற்கூறு: s மாறவில்லை என்றால் நீளமும் மாறாது. எனவே நிரல்பெயர்ப்பி ஒவ்வொரு மடக்குச் சுற்றிலும் கணக்கிடாமல் ஒருமுறை மட்டும் கணக்கிடலாம். தூய்மையற்ற செயற்கூறு (Impure Function) ஒரே செயலுருபுகளுக்கு வெவ்வேறு விடைகளைத் தரலாம் அல்லது தனக்கு வெளியே உள்ள ஒன்றை மாற்றலாம். ஒவ்வொரு அழைப்பிலும் வேறு மதிப்பு தருவதால் random() தூய்மையற்றது. தன் உடலுக்கு வெளியே உள்ள மாறியை மாற்றும் செயற்கூறுக்குப் பக்கவிளைவு உண்டு; அதுவும் தூய்மையற்றதே.
தற்சுழற்சி செயற்கூறுகள்
தற்சுழற்சி செயற்கூறு (Recursive Function) அதே கணக்கின் சிறிய வடிவத்தைத் தீர்க்கத் தன்னைத்தானே அழைக்கிறது. ஒவ்வொரு தற்சுழற்சி செயற்கூறுக்கும் அழைப்புகளை நிறுத்தும் அடிப்படை நிபந்தனை (Base Condition) தேவை. அது இல்லையென்றால் செயற்கூறு தன்னைத்தானே அழைத்துக்கொண்டே இருக்கும்; திரும்பவே திரும்பாது. காரணியப் பெருக்கம் வழக்கமான எடுத்துக்காட்டு: \(n! = n \times (n-1)!\), அடிப்படை நிலை \(0! = 1\). ஒரு நிறுத்தப் புள்ளியை அடையும் வரை திரும்பத் திரும்ப வரும் படிகள் ஒரு நிலையை எப்படி மாற்றுகின்றன என்பதைக் காட்டப் பாடநூல் குரோமிலேண்ட் பச்சோந்திகள் சந்திப்புக் கணக்கையும் பயன்படுத்துகிறது.
தவிர்க்க வேண்டிய பொதுவான தவறுகள்
- அளபுருக்களையும் செயலுருபுகளையும் குழப்புதல். அளபுருக்கள் வரையறையில் உள்ள பெயர்கள்; செயலுருபுகள் அழைப்பில் தரப்படும் மதிப்புகள்.
- அளபுருவின் வகையைக் குறிப்பிடும்போது அடைப்புக்குறிகளை விட்டுவிடுதல். செயற்கூறு வரையறையில் a: int என்று அல்ல, (a: int) என்று எழுதுங்கள்.
- அடிப்படை நிபந்தனை இல்லாமல் தற்சுழற்சி செயற்கூறு எழுதுதல். அழைப்புகள் நிற்கவே நிற்காது; எனவே முதலில் நிறுத்தும் நிலையைச் சரிபாருங்கள்.
- உலகளாவிய மாறியை மாற்றும் செயற்கூறைத் தூய செயற்கூறு என்று சொல்லுதல். செயற்கூறுக்கு வெளியே எது மாறினாலும் அது பக்கவிளைவு; அந்தச் செயற்கூறு தூய்மையற்றது.
- வேலையைச் செய்யும் குறிமுறையே இடைமுகம் என்று எழுதுதல். இடைமுகம் என்ன செய்ய முடியும் என்பதை மட்டும் சொல்லும்; வேலை செய்யும் குறிமுறை செயல்படுத்துதல்.
இவற்றை பயிற்சித் தேர்வு மூலம் சோதித்துப் பாருங்கள்; பிறகு விடையுடன் கூடிய வினாக்கள் பகுதியில் விரிவான விளக்கத்தைப் படியுங்கள்.
அடிக்கடி கேட்கப்படும் கேள்விகள்
அளபுருவுக்கும் செயலுருபுக்கும் என்ன வேறுபாடு?
அளபுரு என்பது செயற்கூறு வரையறையில் பெயரிடப்படும் மாறி. செயலுருபு என்பது செயற்கூறை அழைக்கும்போது அதற்கு நீங்கள் அனுப்பும் மதிப்பு. gcd a b இல் a, b அளபுருக்கள்; gcd 12 18 இல் 12, 18 செயலுருபுகள்.
வகைக் குறிப்புகளில் அடைப்புக்குறிகள் ஏன் கட்டாயம்?
ஒரு அளபுருவுக்கு வெளிப்படையான வகை தரும்போது, வரையறை சரியாகப் பொருள்படப் பெயரையும் வகையையும் (a: int) என ஒன்றாகச் சேர்த்து எழுத வேண்டும். இந்த அடைப்புக்குறிகள் கட்டாயம் என்று பாடநூல் கூறுகிறது. வெளிப்படையான வகைகள் வகைப் பிழைச் செய்தியைப் புரிந்துகொள்வதையும் எளிதாக்குகின்றன.
வகை அனுமானம் என்றால் என்ன?
நீங்கள் வகைகளை எழுதாதபோது, அளபுருக்களின் வகைகளையும் திருப்பி அனுப்பும் மதிப்பின் வகையையும் நிரல்பெயர்ப்பி ஒரு நெறிமுறை மூலம் தானே கண்டறிவதே வகை அனுமானம். வகைகளைக் குறிப்பிட விரும்பும்போது அல்லது ஒரு பிழையைப் புரிந்துகொள்ள வேண்டும்போது மட்டும் வகைக் குறிப்புகளைச் சேர்க்கிறீர்கள்.
இடைமுகத்துக்கும் செயல்படுத்துதலுக்கும் என்ன வேறுபாடு?
இடைமுகம் ஒரு பொருள் என்ன செய்ய முடியும் என்பதைச் சொல்கிறது: அது தரும் செயற்கூறுகளும் அவற்றின் கையொப்பங்களும். செயல்படுத்துதல் அந்த வேலையைச் செய்யும் குறிமுறை. பிற குறிமுறைகள் இடைமுகத்தை மட்டுமே சார்ந்திருப்பதால், அவற்றைப் பாதிக்காமல் செயல்படுத்துதலை மாற்றலாம்.
தூய செயற்கூறுகளை நிரல்பெயர்ப்பி ஏன் உகப்பாக்க முடிகிறது?
தூய செயற்கூறு ஒரே செயலுருபுகளுக்கு ஒரே மதிப்பைத் தரும்; வேறு எதையும் மாற்றாது. எனவே ஒரு மடக்கின் உள்ளே strlen(s) அழைக்கப்பட்டு s மாறாமல் இருந்தால், ஒவ்வொரு சுற்றிலும் செயற்கூறை அழைக்காமல் நிரல்பெயர்ப்பி நீளத்தை ஒருமுறை கணக்கிட்டு மீண்டும் பயன்படுத்தலாம்.
பக்கவிளைவு என்றால் என்ன?
ஒரு செயற்கூறு தனக்கு வெளியே செய்யும் எந்த மாற்றமும் பக்கவிளைவு. உலகளாவிய மாறியை மாற்றுவது அல்லது ஒரு செயலுருபின் உள்ளடக்கத்தை மாற்றுவது இதற்கு எடுத்துக்காட்டுகள். பக்கவிளைவு உள்ள செயற்கூறு தூய்மையற்றது. அது இயங்கும் நேரத்தில் நிரலின் நிலையைப் பொறுத்து அதன் நடத்தை மாறும்; இதனால் பிழைகளைக் கண்டுபிடிப்பது கடினமாகிறது.
தற்சுழற்சி செயற்கூறு முடிவில்லாமல் ஓடாமல் தடுப்பது எப்படி?
அதற்கு ஓர் அடிப்படை நிபந்தனை கொடுங்கள்: செயற்கூறை மீண்டும் அழைக்காமல் நேரடியாக ஒரு மதிப்பைத் திருப்பித் தரும் சோதனை. காரணியப் பெருக்கத்துக்கு அடிப்படை நிலை 0! = 1. மற்ற ஒவ்வொரு அழைப்பும் அந்த நிலையை நோக்கி நகர வேண்டும்; அப்போது அழைப்புகள் இறுதியில் முடியும்.
கடைசியாகப் புதுப்பிக்கப்பட்டது 17 செப்டெம்பர் 2026