Function (computer programming)
કોમ્પ્યુટર પ્રોગ્રામિંગમાં, ફંક્શન અથવા સબરૂટિન એ પ્રોગ્રામ સૂચનાઓનો ક્રમ છે જે ચોક્કસ કાર્ય કરે છે, જે એકમ તરીકે પેક કરવામાં આવે છે. આ એકમનો ઉપયોગ પછી પ્રોગ્રામ્સમાં થઈ શકે છે જ્યાં તે ચોક્કસ કાર્ય કરવું જોઈએ. કાર્યોને કાર્યક્રમોમાં વ્યાખ્યાયિત કરી શકાય છે, અથવા પુસ્તકાલયોમાં અલગથી વ્યાખ્યાયિત કરી શકાય છે જેનો ઉપયોગ ઘણા કાર્યક્રમો દ્વારા કરી શકાય છે. વિવિધ પ્રોગ્રામિંગ ભાષાઓમાં, કાર્યને નિયમિત, સબપ્રોગ્રામ, સબરૂટિન અથવા પ્રક્રિયા કહી શકાય; ઓબ્જેક્ટ-ઓરિએન્ટેડ પ્રોગ્રામિંગ (ઓ. ઓ. પી.) માં, તેને પદ્ધતિ કહી શકાય. તકનીકી રીતે, આ તમામ શબ્દોની જુદી જુદી વ્યાખ્યાઓ છે, અને નામકરણ ભાષા પ્રમાણે બદલાય છે. સામાન્ય છત્ર શબ્દ કોલ કરવા યોગ્ય એકમનો ઉપયોગ કેટલીકવાર થાય છે. ફંક્શનને ઘણીવાર કોડેડ કરવામાં આવે છે જેથી તેને પ્રોગ્રામના એક એક્ઝેક્યુશન દરમિયાન ઘણી વખત અને ઘણી જગ્યાએથી શરૂ કરી શકાય, જેમાં અન્ય ફંક્શન્સનો સમાવેશ થાય છે, અને પછી કૉલ પછી, એકવાર ફંક્શનનું કાર્ય પૂર્ણ થઈ જાય પછી, આગામી સૂચના પર પાછા (પાછા) શાખા કરી શકાય છે. સબરૂટિનનો વિચાર શરૂઆતમાં જ્હોન મૌચલી અને કેથલીન એન્ટોનેલી દ્વારા ENIAC પર તેમના કામ દરમિયાન કરવામાં આવ્યો હતો, અને જાન્યુઆરી 1947માં હાર્વર્ડ પરિસંવાદમાં "EDVAC-પ્રકારના મશીનો માટે સમસ્યાઓની તૈયારી" પર રેકોર્ડ કરવામાં આવ્યો હતો. મૌરિસ વિલ્ક્સ, ડેવિડ વ્હીલર અને સ્ટેનલી ગિલને સામાન્ય રીતે આ ખ્યાલની ઔપચારિક શોધનો શ્રેય આપવામાં આવે છે, જેને તેઓ બંધ પેટા-નિયમિત તરીકે ઓળખાવે છે, જે ખુલ્લી સબરૂટિન અથવા મેક્રોથી વિપરીત છે. જો કે, એલન ટ્યુરિંગે 1945ના એક પેપરમાં એન. પી. એલ. એસીઈ માટે ડિઝાઇન દરખાસ્તો પર સબરૂટિનની ચર્ચા કરી હતી, જ્યાં સુધી કે વળતર સરનામાના ઢગલાની વિભાવનાની શોધ થઈ હતી. કાર્યો એ એક શક્તિશાળી પ્રોગ્રામિંગ સાધન છે, અને ઘણી પ્રોગ્રામિંગ ભાષાઓના વાક્યરચનામાં સબરૂટિન લખવા અને તેનો ઉપયોગ કરવા માટેનો ટેકો શામેલ છે. કાર્યોનો વિવેકપૂર્ણ ઉપયોગ (ઉદાહરણ તરીકે, સંરચિત પ્રોગ્રામિંગ અભિગમ દ્વારા) ઘણીવાર મોટા પ્રોગ્રામના વિકાસ અને જાળવણીના ખર્ચમાં નોંધપાત્ર ઘટાડો કરશે, જ્યારે તેની ગુણવત્તા અને વિશ્વસનીયતામાં વધારો થશે. કાર્યો, જે ઘણીવાર પુસ્તકાલયોમાં એકત્રિત કરવામાં આવે છે, તે સોફ્ટવેરની વહેંચણી અને વેપાર માટે એક મહત્વપૂર્ણ પદ્ધતિ છે. ઓ. ઓ. પી. ની શિસ્ત પદાર્થો અને પદ્ધતિઓ (જે આ પદાર્થો અથવા પદાર્થ વર્ગો સાથે જોડાયેલા કાર્યો છે) પર આધારિત છે. મુખ્ય વિભાવનાઓ કાર્યની સામગ્રી તેનો મુખ્ય ભાગ છે, જે પ્રોગ્રામ કોડનો ભાગ છે જે કાર્યને બોલાવવામાં આવે અથવા બોલાવવામાં આવે ત્યારે ચલાવવામાં આવે છે. ફંક્શન લખી શકાય છે જેથી તે કૉલિંગ પ્રોગ્રામમાંથી એક અથવા વધુ ડેટા મૂલ્યો મેળવવાની અપેક્ષા રાખે (તેના પરિમાણો અથવા ઔપચારિક પરિમાણોને બદલવા માટે). કૉલિંગ પ્રોગ્રામ આ પરિમાણો માટે વાસ્તવિક મૂલ્યો પ્રદાન કરે છે, જેને આર્ગ્યુમેન્ટ્સ કહેવાય છે. વિવિધ પ્રોગ્રામિંગ ભાષાઓ દલીલો પસાર કરવા માટે વિવિધ પરંપરાઓનો ઉપયોગ કરી શકે છેઃ ફંક્શન કોલની આડઅસરો પણ હોઈ શકે છે જેમ કે કમ્પ્યુટર મેમરીમાં ડેટા માળખામાં ફેરફાર કરવો, પેરિફેરલ ઉપકરણમાંથી વાંચવું અથવા લખવું, ફાઇલ બનાવવી, પ્રોગ્રામ અથવા મશીનને અટકાવવું, અથવા ચોક્કસ સમય માટે પ્રોગ્રામના અમલમાં વિલંબ કરવો. આડઅસરો સાથેનો પેટા કાર્યક્રમ જ્યારે પણ તેને બોલાવવામાં આવે ત્યારે અલગ-અલગ પરિણામો આપી શકે છે, પછી ભલે તે સમાન દલીલો સાથે બોલાવવામાં આવે. એક ઉદાહરણ રેન્ડમ નંબર ફંક્શન છે, જે ઘણી ભાષાઓમાં ઉપલબ્ધ છે, જે દરેક વખતે કૉલ કરવામાં આવે ત્યારે અલગ સ્યુડો-રેન્ડમ નંબર આપે છે. આડઅસરો સાથેના કાર્યોનો વ્યાપક ઉપયોગ એ અનિવાર્ય પ્રોગ્રામિંગ ભાષાઓની લાક્ષણિકતા છે. કાર્યને કોડેડ કરી શકાય છે જેથી તે પોતાનું કાર્ય કરવા માટે એક અથવા વધુ સ્થળોએ પુનરાવર્તિત રીતે પોતાને બોલાવી શકે. આ પદ્ધતિ ગાણિતિક ઇન્ડક્શન અને રિકર્સિવ ડિવાઇડ અને કોન્કર એલ્ગોરિધમ્સ દ્વારા વ્યાખ્યાયિત કાર્યોના સીધા અમલીકરણને મંજૂરી આપે છે. જે વિધેયનો હેતુ એક બુલિયન મૂલ્યના વિધેય (એટલે કે હા/ના પ્રશ્નનો જવાબ આપવો) ની ગણતરી કરવાનો હોય તેને કેટલીકવાર વિધેય કહેવામાં આવે છે. તર્ક પ્રોગ્રામિંગ ભાષાઓમાં, ઘણીવાર તમામ કાર્યોને આગાહીઓ કહેવામાં આવે છે, કારણ કે તેઓ મુખ્યત્વે સફળતા અથવા નિષ્ફળતા નક્કી કરે છે. જે કાર્ય કોઈ મૂલ્ય પરત કરતું નથી અથવા શૂન્ય મૂલ્ય પરત કરે છે તેને કેટલીકવાર પ્રક્રિયા કહેવામાં આવે છે. પ્રક્રિયાઓ સામાન્ય રીતે તેમની દલીલોમાં ફેરફાર કરે છે અને તે પ્રક્રિયાગત પ્રોગ્રામિંગનો મુખ્ય ભાગ છે. પરિભાષા સબરૂટીન એ એક કાર્ય છે જે મૂલ્ય પરત કરતું નથી. કાર્યોનો પ્રાથમિક હેતુ જટિલ ગણતરીઓને અર્થપૂર્ણ ભાગોમાં વિભાજિત કરવાનો અને તેમને નામ આપવાનો છે. કાર્ય તેના કોલ કરનાર (તેના વળતર મૂલ્ય) ને ગણતરી કરેલ મૂલ્ય પરત કરી શકે છે, અથવા વિવિધ પરિણામ મૂલ્યો અથવા આઉટપુટ પરિમાણો પ્રદાન કરી શકે છે. ખરેખર, કાર્યોનો સામાન્ય ઉપયોગ ગાણિતિક કાર્યોને અમલમાં મૂકવાનો છે, જેમાં કાર્યનો હેતુ સંપૂર્ણપણે એક અથવા વધુ પરિણામોની ગણતરી કરવાનો છે, જેમના મૂલ્યો સંપૂર્ણપણે કાર્યને પસાર કરવામાં આવેલી દલીલો દ્વારા નક્કી કરવામાં આવે છે. (ઉદાહરણોમાં સંખ્યાના લઘુગણકની ગણતરી અથવા મેટ્રિક્સના નિર્ધારકનો સમાવેશ થઈ શકે છે.) કેટલીક ભાષાઓમાં મૂલ્ય પરત કરતી પ્રક્રિયા માટેનું વાક્યરચના અનિવાર્યપણે તે પ્રક્રિયા માટેનું વાક્યરચના જેવું જ હોય છે જે મૂલ્ય પરત કરતી નથી, સિવાય કે, ઉદાહરણ તરીકે, રીટર્ન કલમની ગેરહાજરી. કેટલીક ભાષાઓમાં પ્રક્રિયા તેની દલીલોના આધારે ગતિશીલ રીતે મૂલ્ય સાથે અથવા વગર પાછા ફરવાનું પસંદ કરી શકે છે. ભાષા આધાર ઉચ્ચ-સ્તરની પ્રોગ્રામિંગ ભાષાઓમાં સામાન્ય રીતે ચોક્કસ રચનાઓનો સમાવેશ થાય છેઃ પ્રોગ્રામ (બોડી) ના ભાગને મર્યાદિત કરો જે કાર્યને ઓળખે છે (નામ) કાર્યને સોંપો તેના પરિમાણો અને વળતર મૂલ્યોના નામો અને ડેટા પ્રકારોને સ્પષ્ટ કરો તેના કામચલાઉ ચલો માટે ખાનગી નામકરણ અવકાશ પ્રદાન કરો કાર્યની બહારના ચલોને ઓળખો જે તેની અંદર સુલભ છે કાર્યને મૂલ્યો પ્રદાન કરો તેના પરિમાણોને મૂલ્યો પ્રદાન કરો મુખ્ય પ્રોગ્રામમાં સબપ્રોગ્રામનું સરનામું હોય છે મુખ્ય પ્રોગ્રામમાં કાર્ય કૉલની આગામી સૂચનાનું સરનામું હોય છે તેના મુખ્ય ભાગની અંદરથી વળતર મૂલ્યોને સ્પષ્ટ કરો કૉલિંગ પ્રોગ્રામ પર પાછા ફરો કૉલ દ્વારા પરત કરવામાં આવેલા મૂલ્યોનો નિકાલ કરો કોલ પેકેજ કાર્યો દરમિયાન મોડ્યુલ, લાઇબ્રેરી, ઑબ્જેક્ટમાં આવતી કોઈપણ અપવાદરૂપ શરતોનો નિકાલ કરો. તે ભાષાઓમાં, ફંક્શન કૉલ્સ સામાન્ય રીતે સમીકરણોમાં જડિત હોય છે (દા. ત., એક એસક્યુઆરટી ફંક્શનને વાય = ઝેડ + એસક્યુઆરટી (એક્સ) તરીકે ઓળખવામાં આવે છે). પ્રોસિજર કોલ્સ ક્યાં તો વાક્યરચનામાં નિવેદનો તરીકે વર્તે છે (દા. ત., પ્રિન્ટ પ્રક્રિયાને x> 0 પછી પ્રિન્ટ (x) તરીકે ઓળખવામાં આવે છે અથવા કોલ અથવા ગોસબ (દા. ત., કોલ પ્રિન્ટ (x)) જેવા નિવેદન દ્વારા સ્પષ્ટ રીતે બોલાવવામાં આવે છે. અન્ય ભાષાઓ, જેમ કે સી અને લિસ્પ, કાર્યો અને સબરૂટિન વચ્ચે તફાવત કરતી નથી. હાસ્કેલ જેવી સખત કાર્યાત્મક પ્રોગ્રામિંગ ભાષાઓમાં, સબપ્રોગ્રામની કોઈ આડઅસર થઈ શકતી નથી, જેનો અર્થ છે કે પ્રોગ્રામની વિવિધ આંતરિક સ્થિતિ બદલાશે નહીં. જો વારંવાર સમાન દલીલો સાથે બોલાવવામાં આવે તો કાર્યો હંમેશા સમાન પરિણામ આપશે. આવી ભાષાઓ સામાન્ય રીતે માત્ર એવા કાર્યોને ટેકો આપે છે જે મૂલ્ય પરત કરે છે, કારણ કે જે કાર્યો મૂલ્ય પરત નથી કરતા તેનો કોઈ ઉપયોગ નથી જ્યાં સુધી તેઓ આડઅસરનું કારણ ન બને. સી, સી + + અને સી #જેવી પ્રોગ્રામિંગ ભાષાઓમાં, જે કાર્યો મૂલ્ય આપે છે અને જે કાર્યો કોઈ મૂલ્ય આપતા નથી તે બંનેને "કાર્યો" કહેવામાં આવે છે (ગાણિતિક કાર્યો અથવા કાર્યાત્મક પ્રોગ્રામિંગ સાથે મૂંઝવણ ન કરવી, જે વિવિધ વિભાવનાઓ છે). ભાષાનું કમ્પાઇલર સામાન્ય રીતે પ્રક્રિયા કૉલ્સનું ભાષાંતર કરશે અને સારી રીતે વ્યાખ્યાયિત કૉલિંગ પરંપરા અનુસાર મશીન સૂચનાઓમાં વળતર આપશે, જેથી કાર્યોને તેમને કૉલ કરતા પ્રોગ્રામ્સથી અલગ સંકલિત કરી શકાય. કૉલ અને રીટર્ન સ્ટેટમેન્ટને અનુરૂપ સૂચના ક્રમને પ્રક્રિયાના પ્રસ્તાવના અને ઉપસંહાર કહેવામાં આવે છે. પ્રોગ્રામને કાર્યોમાં વિભાજીત કરવાના ફાયદાઓમાં નીચેનાનો સમાવેશ થાય છેઃ જટિલ પ્રોગ્રામિંગ કાર્યને સરળ પગલાંઓમાં વિભાજીત કરવુંઃ ડેટા સ્ટ્રક્ચર્સ સાથે આ માળખાગત પ્રોગ્રામિંગના બે મુખ્ય સાધનોમાંથી એક છે, પ્રોગ્રામની અંદર ડુપ્લિકેટ કોડને ઘટાડવો બહુવિધ પ્રોગ્રામ્સમાં કોડનો ફરીથી ઉપયોગ સક્ષમ કરવો વિવિધ પ્રોગ્રામરો અથવા પ્રોજેક્ટના વિવિધ તબક્કાઓ વચ્ચે મોટા પ્રોગ્રામિંગ કાર્યને વિભાજિત કરવું કાર્યના વપરાશકર્તાઓ પાસેથી અમલીકરણની વિગતો છુપાવવી કાર્ય કૉલ સાથે કોડના બ્લોકને બદલીને કોડની વાંચનીયતામાં સુધારો કરવો જ્યાં વર્ણનાત્મક કાર્ય નામ કોડના બ્લોકને વર્ણવવા માટે કામ કરે છે. આ કૉલિંગ કોડને સંક્ષિપ્ત અને વાંચી શકાય તેવું બનાવે છે, ભલે તે કાર્ય ફરીથી ઉપયોગમાં લેવા માટે ન હોય. ટ્રેસેબિલિટીમાં સુધારો (એટલે કે. મોટાભાગની ભાષાઓ કોલ ટ્રેસ મેળવવાની રીતો પ્રદાન કરે છે જેમાં સામેલ કાર્યોના નામ અને કદાચ ફાઇલ નામો અને લાઇન નંબરો જેવી વધુ માહિતીનો સમાવેશ થાય છે); કોડને કાર્યોમાં વિઘટિત ન કરવાથી, ડિબગીંગ ગંભીર રીતે ક્ષતિગ્રસ્ત થશે. એક કાર્ય માટે સામાન્ય રીતે પ્રમાણભૂત હાઉસકીપિંગ કોડની જરૂર પડે છે-કાર્યના પ્રવેશ અને બહાર નીકળવાના સમયે (કાર્ય પ્રસ્તાવના અને ઉપસંહાર-સામાન્ય રીતે સામાન્ય હેતુના રજિસ્ટર અને વળતરના સરનામાને ઓછામાં ઓછા તરીકે સાચવે છે). કમ્પ્યુટિંગ મશીનો થોડા સમય માટે અસ્તિત્વમાં હતા તે પછી સબરૂટીનનો વિચાર તૈયાર કરવામાં આવ્યો હતો. અંકગણિત અને શરતી જમ્પ સૂચનાઓ સમય પહેલા આયોજન કરવામાં આવી હતી અને પ્રમાણમાં ઓછી બદલાઈ છે, પરંતુ પ્રક્રિયા કૉલ માટે ઉપયોગમાં લેવાતી વિશેષ સૂચનાઓ વર્ષોથી ખૂબ બદલાઈ ગઈ છે. માન્ચેસ્ટર બેબી અને આરસીએ 1802 જેવા પ્રારંભિક કમ્પ્યુટર્સ અને માઇક્રોપ્રોસેસર્સમાં એક પણ સબરૂટિન કોલ સૂચના નહોતી. સબરૂટીનનો અમલ કરી શકાતો હતો, પરંતુ તેમને પ્રોગ્રામરોને દરેક કૉલ સાઇટ પર કૉલ ક્રમ-સૂચનાઓની શ્રેણી-નો ઉપયોગ કરવાની જરૂર હતી. 1945માં કોનરેડ ઝ્યુસના ઝેડ4માં સબરૂટિનનો અમલ કરવામાં આવ્યો હતો. 1 9 45 માં, એલન એમ. ટ્યુરિંગે સબરૂટિનમાંથી કૉલ કરવા અને પાછા ફરવાના સાધન તરીકે "દફન" અને "અનબરી" શબ્દોનો ઉપયોગ કર્યો હતો. જાન્યુઆરી 1947માં જ્હોન મૌચલીએ હાર્વર્ડ યુનિવર્સિટી અને બ્યુરો ઓફ ઓર્ડનન્સ, યુનાઇટેડ સ્ટેટ્સ નેવીની સંયુક્ત પ્રાયોજકતા હેઠળ 'એ સિમ્પોસિયમ ઓફ લાર્જ સ્કેલ ડિજિટલ કેલ્ક્યુલેટિંગ મશીનરી' ખાતે સામાન્ય નોંધો રજૂ કરી હતી. અહીં તેઓ શ્રેણીબદ્ધ અને સમાંતર કામગીરીની ચર્ચા કરે છે જે સૂચવે છે કે કે મેકનાલ્ટીએ ENIAC ટીમ પર જ્હોન મૌચલી સાથે નજીકથી કામ કર્યું હતું અને ENIAC કમ્પ્યુટર માટે સબરૂટિન માટે એક વિચાર વિકસાવ્યો હતો જે તે બીજા વિશ્વ યુદ્ધ દરમિયાન પ્રોગ્રામિંગ કરી રહી હતી. તેણી અને અન્ય ENIAC પ્રોગ્રામરોએ મિસાઇલના માર્ગની ગણતરી કરવામાં મદદ કરવા માટે સબરૂટિનનો ઉપયોગ કર્યો હતો. ગોલ્ડસ્ટીન અને વોન ન્યુમેને 16 ઓગસ્ટ, 1948ના રોજ એક પેપર લખ્યું હતું જેમાં સબરૂટિનના ઉપયોગની ચર્ચા કરવામાં આવી હતી. કેટલાક ખૂબ જ પ્રારંભિક કમ્પ્યુટર્સ અને માઇક્રોપ્રોસેસર્સ, જેમ કે આઇ. બી. એમ. 1620, ઇન્ટેલ 4004 અને ઇન્ટેલ 8008, અને પી. આઈ. સી. માઇક્રોકન્ટ્રોલર્સ, પાસે એક-સૂચના સબરૂટિન કોલ હોય છે જે વળતરના સરનામાંને સંગ્રહિત કરવા માટે સમર્પિત હાર્ડવેર સ્ટેકનો ઉપયોગ કરે છે-આવા હાર્ડવેર માત્ર થોડા સ્તરના સબરૂટિન નેસ્ટીંગને સપોર્ટ કરે છે, પરંતુ પુનરાવર્તિત સબરૂટિનને સપોર્ટ કરી શકે છે. 1960ના દાયકાના મધ્યભાગ પહેલાંની મશીનો-જેમ કે UNIVAC I, PDP-1 અને IBM 1130-સામાન્ય રીતે કૉલિંગ કન્વેન્શનનો ઉપયોગ કરે છે જે ઇન્સ્ટ્રક્શન કાઉન્ટરને કહેવાતા સબરૂટીનના પ્રથમ મેમરી સ્થાનમાં સાચવે છે. આ મનસ્વી રીતે સબરૂટીન માળાના ઊંડા સ્તરને મંજૂરી આપે છે પરંતુ પુનરાવર્તિત સબરૂટીનને ટેકો આપતું નથી. આઇબીએમ સિસ્ટમ/360માં સબરૂટિન કોલ સૂચના હતી જેણે સાચવેલ સૂચના કાઉન્ટર મૂલ્યને સામાન્ય હેતુના રજિસ્ટરમાં મૂક્યું હતું; આનો ઉપયોગ મનસ્વી રીતે ઊંડા સબરૂટિન માળો બાંધવા અને પુનરાવર્તિત સબરૂટિનને ટેકો આપવા માટે થઈ શકે છે. પી. ડી. પી.-11 (1970) એ સ્ટૅક-પુશિંગ સબરૂટિન કૉલ સૂચના સાથે પ્રથમ કમ્પ્યુટર્સમાંનું એક છે; આ સુવિધા મનસ્વી રીતે ઊંડા સબરૂટિન નેસ્ટિંગ અને રિકર્સિવ સબરૂટિન બંનેને પણ સપોર્ટ કરે છે. ભાષાનો ટેકો ખૂબ જ પ્રારંભિક એસેમ્બલર્સમાં, સબરૂટિન સપોર્ટ મર્યાદિત હતો. સબરૂટિન સ્પષ્ટ રીતે એકબીજાથી અથવા મુખ્ય પ્રોગ્રામથી અલગ ન હતા, અને ખરેખર સબરૂટિનનો સ્રોત કોડ અન્ય સબપ્રોગ્રામ સાથે જોડાઈ શકે છે. કેટલાક એસેમ્બલર્સ કોલ અને રીટર્ન સિક્વન્સ જનરેટ કરવા માટે પૂર્વવ્યાખ્યાયિત મેક્રો ઓફર કરશે. 1960 ના દાયકા સુધીમાં, એસેમ્બલર્સ પાસે સામાન્ય રીતે ઇનલાઇન અને અલગથી એસેમ્બલ સબરૂટિન બંને માટે વધુ વ્યવહારદક્ષ ટેકો હતો જેને એકસાથે જોડી શકાય છે. વપરાશકર્તા-લિખિત સબરૂટિન અને કાર્યોને ટેકો આપતી પ્રથમ પ્રોગ્રામિંગ ભાષાઓમાંની એક FORTRAN II હતી. IBM FORTRAN II કમ્પાઇલર 1958માં રજૂ કરવામાં આવ્યું હતું. ALGOL 58 અને અન્ય પ્રારંભિક પ્રોગ્રામિંગ ભાષાઓએ પણ પ્રક્રિયાગત પ્રોગ્રામિંગને ટેકો આપ્યો હતો. પુસ્તકાલયો આ બોજારૂપ અભિગમ હોવા છતાં, સબરૂટિન ખૂબ જ ઉપયોગી સાબિત થયા. તેઓએ ઘણા જુદા જુદા કાર્યક્રમોમાં સમાન કોડના ઉપયોગની મંજૂરી આપી. પ્રારંભિક કમ્પ્યુટર્સ પર મેમરી ખૂબ જ દુર્લભ સંસાધન હતું, અને સબરૂટિન્સ પ્રોગ્રામ્સના કદમાં નોંધપાત્ર બચતની મંજૂરી આપે છે. ઘણા પ્રારંભિક કમ્પ્યુટરોએ પંચ્ડ પેપર ટેપમાંથી પ્રોગ્રામ સૂચનાઓને મેમરીમાં લોડ કરી હતી. દરેક સબરૂટિન પછી ટેપના અલગ ટુકડા દ્વારા પ્રદાન કરી શકાય છે, મુખ્ય પ્રોગ્રામ (અથવા "મેઇનલાઇન") પહેલાં અથવા પછી લોડ અથવા જોડવામાં આવે છે; અને તે જ સબરૂટિન ટેપ પછી ઘણા જુદા જુદા પ્રોગ્રામ્સ દ્વારા ઉપયોગમાં લઈ શકાય છે. સમાન અભિગમનો ઉપયોગ કમ્પ્યુટર્સમાં કરવામાં આવ્યો હતો જે પંચ્ડ કાર્ડ્સમાંથી પ્રોગ્રામ સૂચનાઓ લોડ કરતા હતા. સબરૂટિન લાઇબ્રેરી નામનો મૂળ અર્થ શાબ્દિક અર્થમાં એક પુસ્તકાલય હતો, જે સામૂહિક ઉપયોગ માટે ટેપ અથવા કાર્ડ્સના ડેકનો અનુક્રમિત સંગ્રહ રાખતો હતો. સ્વયં-સંશોધિત કોડની જરૂરિયાતને દૂર કરવા માટે, કમ્પ્યુટર ડિઝાઇનરોએ આખરે પરોક્ષ જમ્પ સૂચના પૂરી પાડી, જેનું ઓપરેન્ડ, વળતર સરનામું બનવાને બદલે, વળતર સરનામું ધરાવતા ચલ અથવા પ્રોસેસર રજિસ્ટરનું સ્થાન હતું. તે કમ્પ્યુટર્સ પર, ફંક્શનના રીટર્ન જમ્પમાં ફેરફાર કરવાને બદલે, કૉલિંગ પ્રોગ્રામ રીટર્ન એડ્રેસને વેરિયેબલમાં સંગ્રહિત કરશે જેથી જ્યારે ફંક્શન પૂર્ણ થશે, ત્યારે તે પરોક્ષ જમ્પ એક્ઝિક્યુટ કરશે જે પૂર્વવ્યાખ્યાયિત વેરિયેબલ દ્વારા આપવામાં આવેલા સ્થાન પર એક્ઝેક્યુશનને દિશામાન કરશે. સબરૂટિન પર કૂદો અન્ય એડવાન્સ એ સબરૂટિન સૂચના પર કૂદો હતો, જે કૉલિંગ જમ્પ સાથે રીટર્ન એડ્રેસની બચતને જોડે છે, જેનાથી ઓવરહેડને નોંધપાત્ર રીતે ઘટાડે છે. ઉદાહરણ તરીકે, આઇ. બી. એમ. સિસ્ટમ/360 માં, પ્રોસિજર કોલિંગ માટે રચાયેલ શાખા સૂચનાઓ બી. એ. એલ. અથવા બી. એ. એલ. આર., કન્વેન્શન રજિસ્ટર 14 દ્વારા સૂચનામાં નિર્દિષ્ટ પ્રોસેસર રજિસ્ટરમાં વળતરનું સરનામું સાચવશે. પાછા ફરવા માટે, સબરૂટીનને તે રજિસ્ટર દ્વારા માત્ર પરોક્ષ શાખા સૂચના (બી. આર.) અમલમાં મૂકવી પડતી હતી. જો સબરૂટિનને કોઈ અન્ય હેતુ માટે તે રજિસ્ટરની જરૂર હોય (જેમ કે અન્ય સબરૂટિનને કૉલ કરવો), તો તે રજિસ્ટરની સામગ્રીને ખાનગી મેમરી સ્થાન અથવા રજિસ્ટર સ્ટેકમાં સાચવશે. એચ. પી. 2100 જેવી પ્રણાલીઓમાં, જે. એસ. બી. સૂચના સમાન કાર્ય કરશે, સિવાય કે વળતરનું સરનામું મેમરી સ્થાનમાં સંગ્રહિત કરવામાં આવ્યું હતું જે શાખાનું લક્ષ્ય હતું. પ્રક્રિયાનો અમલ ખરેખર આગામી મેમરી સ્થાનથી શરૂ થશે. એચપી 2100 એસેમ્બલી ભાષામાં, ઉદાહરણ તરીકે, લખી શકાય છે. જે. એસ. બી. એમવાયએસયુબી (કોલ્સ સબરૂટિન એમવાયએસયુબી.) બી. બી. (એમવાયએસયુબી પૂર્ણ થયા પછી અહીં પરત ફરશે.) મુખ્ય પ્રોગ્રામમાંથી MYSUB નામની સબરૂટિનને કૉલ કરવા માટે. સબરૂટિનને એમવાયએસયુબી એનઓપી (એમવાયએસયુબીના વળતર સરનામા માટે સંગ્રહ) તરીકે કોડેડ કરવામાં આવશે. એએ. (એમવાયએસયુબીના શરીરની શરૂઆત.) . JMP MYSUB, I (કૉલિંગ પ્રોગ્રામ પર પાછા ફરે છે.) જે. એસ. બી. સૂચનાએ આગામી સૂચનાનું સરનામું (એટલે કે, બી. બી.) તેના ઓપરેન્ડ (એટલે કે, એમવાયએસયુબી) તરીકે નિર્દિષ્ટ સ્થાનમાં મૂક્યું, અને પછી તે પછી આગામી સ્થાન (એટલે કે, એએ = એમવાયએસયુબી + 1) પર શાખાઓ ગોઠવી. સબરૂટિન પછી પરોક્ષ જમ્પ JMP MYSUB ચલાવીને મુખ્ય પ્રોગ્રામ પર પાછા આવી શકે છે, I જે સ્થાન MYSUB પર સંગ્રહિત સ્થાન પર શાખા ધરાવે છે. ફોરટ્રાન અને અન્ય ભાષાઓ માટેના કમ્પાઇલર્સ જ્યારે ઉપલબ્ધ હોય ત્યારે સરળતાથી આ સૂચનાઓનો ઉપયોગ કરી શકે છે. આ અભિગમ કૉલ્સના બહુવિધ સ્તરોને ટેકો આપતો હતો; જો કે, સબરૂટિનના વળતર સરનામું, પરિમાણો અને વળતર મૂલ્યોને નિશ્ચિત મેમરી સ્થાનો સોંપવામાં આવ્યા હોવાથી, તે પુનરાવર્તિત કૉલ્સને મંજૂરી આપતો ન હતો. સંજોગવશાત, લોટસ 1-2-3 દ્વારા 1980ના દાયકાની શરૂઆતમાં સ્પ્રેડશીટમાં પુનઃગણતરી નિર્ભરતા શોધવા માટે સમાન પદ્ધતિનો ઉપયોગ કરવામાં આવ્યો હતો. એટલે કે, વળતરનું સરનામું સંગ્રહિત કરવા માટે દરેક કોષમાં એક સ્થાન અનામત રાખવામાં આવ્યું હતું. કુદરતી પુનઃગણતરી ક્રમ માટે પરિપત્ર સંદર્ભોને મંજૂરી નથી, તેથી આ મેમરીમાં સ્ટેક માટે જગ્યા આરક્ષિત કર્યા વિના ટ્રી વોકને મંજૂરી આપે છે, જે આઇબીએમ પીસી જેવા નાના કમ્પ્યુટર્સ પર ખૂબ જ મર્યાદિત હતી. ફંક્શન કૉલના મોટાભાગના આધુનિક અમલીકરણમાં કૉલ સ્ટેકનો ઉપયોગ થાય છે, જે ફંક્શન કૉલ્સ અને રિટર્નને અમલમાં મૂકવા માટે સ્ટેક ડેટા સ્ટ્રક્ચરનો એક ખાસ કેસ છે. દરેક પ્રોસિજર કોલ એક નવી એન્ટ્રી બનાવે છે, જેને સ્ટેક ફ્રેમ કહેવાય છે, જે સ્ટેકની ટોચ પર હોય છે; જ્યારે પ્રક્રિયા પરત આવે છે, ત્યારે તેની સ્ટેક ફ્રેમ સ્ટેકમાંથી કાઢી નાખવામાં આવે છે, અને તેની જગ્યાનો ઉપયોગ અન્ય પ્રોસિજર કોલ માટે થઈ શકે છે. દરેક સ્ટૅક ફ્રેમમાં અનુરૂપ કોલનો ખાનગી ડેટા હોય છે, જેમાં સામાન્ય રીતે પ્રક્રિયાના પરિમાણો અને આંતરિક ચલ અને વળતરનું સરનામું શામેલ હોય છે. કોલ ક્રમ સામાન્ય સૂચનાઓના ક્રમ દ્વારા અમલમાં મૂકી શકાય છે (એક અભિગમ હજુ પણ રિડ્યુસ્ડ ઇન્સ્ટ્રક્શન સેટ કમ્પ્યુટિંગ (RISC) અને ખૂબ લાંબા ઇન્સ્ટ્રક્શન વર્ડ (VLIW) આર્કિટેક્ચરમાં વપરાય છે), પરંતુ 1960 ના દાયકાના અંતથી રચાયેલ ઘણા પરંપરાગત મશીનોએ તે હેતુ માટે વિશેષ સૂચનાઓનો સમાવેશ કર્યો છે. કોલ સ્ટેક સામાન્ય રીતે મેમરીના સંલગ્ન વિસ્તાર તરીકે લાગુ કરવામાં આવે છે. તે એક મનસ્વી ડિઝાઇન પસંદગી છે કે શું સ્ટેકનો નીચેનો ભાગ આ વિસ્તારની અંદર સૌથી નીચો અથવા સૌથી ઊંચો સરનામું છે, જેથી સ્ટેક મેમરીમાં આગળ અથવા પાછળની તરફ વધી શકે; જો કે, ઘણા આર્કિટેક્ચરોએ પછીનું પસંદ કર્યું. કેટલીક ડિઝાઇન, ખાસ કરીને કેટલાક ફોર્થ અમલીકરણ, બે અલગ-અલગ સ્ટેક્સનો ઉપયોગ કરે છે, એક મુખ્યત્વે નિયંત્રણ માહિતી માટે (જેમ કે રીટર્ન સરનામાંઓ અને લૂપ કાઉન્ટર્સ) અને બીજું ડેટા માટે. પહેલું કોલ સ્ટૅક હતું અથવા તેની જેમ કામ કરતું હતું અને તે માત્ર અન્ય ભાષાની રચનાઓ દ્વારા પ્રોગ્રામર માટે પરોક્ષ રીતે સુલભ હતું જ્યારે બાદમાં વધુ સીધા સુલભ હતું. જ્યારે સ્ટૅક-આધારિત પ્રક્રિયા કૉલ્સ સૌપ્રથમ રજૂ કરવામાં આવ્યા હતા, ત્યારે એક મહત્વપૂર્ણ પ્રેરણા કિંમતી મેમરીને બચાવવાની હતી. આ યોજના સાથે, કમ્પાઇલરે દરેક પ્રક્રિયાના ખાનગી ડેટા (પરિમાણો, વળતર સરનામું અને સ્થાનિક ચલ) માટે મેમરીમાં અલગ જગ્યા અનામત રાખવાની જરૂર નથી. કોઈપણ સમયે, સ્ટૅકમાં ફક્ત એવા કૉલ્સનો ખાનગી ડેટા હોય છે જે હાલમાં સક્રિય છે (એટલે કે, જેને કૉલ કરવામાં આવ્યા છે પરંતુ હજુ સુધી પરત નથી આવ્યા). જે રીતે કાર્યક્રમો સામાન્ય રીતે પુસ્તકાલયોમાંથી એસેમ્બલ કરવામાં આવતા હતા તેના કારણે, હજારો કાર્યોનો સમાવેશ કરતા કાર્યક્રમો શોધવા અસામાન્ય ન હતા (અને હજુ પણ છે), જેમાંથી કોઈ પણ ક્ષણે માત્ર મુઠ્ઠીભર જ સક્રિય હોય છે. આવા કાર્યક્રમો માટે, કોલ સ્ટૅક મિકેનિઝમ નોંધપાત્ર માત્રામાં મેમરી બચાવી શકે છે. ખરેખર, કોલ સ્ટૅક મિકેનિઝમને ઓટોમેટિક મેમરી મેનેજમેન્ટ માટેની સૌથી પ્રારંભિક અને સરળ પદ્ધતિ તરીકે જોઈ શકાય છે. જો કે, કોલ સ્ટેક પદ્ધતિનો બીજો ફાયદો એ છે કે તે રિકર્સિવ ફંક્શન કૉલ્સને મંજૂરી આપે છે, કારણ કે સમાન પ્રક્રિયામાં દરેક નેસ્ટેડ કૉલને તેના ખાનગી ડેટાનું એક અલગ ઉદાહરણ મળે છે. બહુ-થ્રેડેડ વાતાવરણમાં, સામાન્ય રીતે એક કરતાં વધુ સ્ટેક હોય છે. જે વાતાવરણ કોરોટીન્સ અથવા આળસુ મૂલ્યાંકનને સંપૂર્ણપણે ટેકો આપે છે તે તેમના સક્રિયકરણ રેકોર્ડને સંગ્રહિત કરવા માટે સ્ટેક્સ સિવાયના ડેટા સ્ટ્રક્ચરનો ઉપયોગ કરી શકે છે. વિલંબિત સ્ટેકિંગ કોલ સ્ટૅક મિકેનિઝમનો એક ગેરલાભ એ છે કે પ્રોસિજર કોલની વધેલી કિંમત અને તેના મેળ ખાતા વળતર. વધારાના ખર્ચમાં સ્ટેક પોઇન્ટરને વધારવું અને ઘટાડવું (અને, કેટલાક આર્કિટેક્ચરમાં, સ્ટેક ઓવરફ્લો માટે તપાસ કરવી), અને સંપૂર્ણ સરનામાંઓને બદલે ફ્રેમ-સંબંધિત સરનામાંઓ દ્વારા સ્થાનિક ચલો અને પરિમાણોને ઍક્સેસ કરવાનો સમાવેશ થાય છે. ખર્ચ વધેલા અમલીકરણ સમય, અથવા વધેલી પ્રોસેસર જટિલતા, અથવા બંનેમાં અનુભવી શકાય છે. આ ઓવરહેડ પાંદડાની પ્રક્રિયાઓ અથવા પાંદડાના કાર્યોમાં સૌથી વધુ સ્પષ્ટ અને વાંધાજનક છે, જે કોઈ પણ પ્રક્રિયા કર્યા વિના પોતાને બોલાવે છે. તે ઓવરહેડને ઘટાડવા માટે, ઘણા આધુનિક કમ્પાઇલર્સ કોલ સ્ટેકના ઉપયોગને ત્યાં સુધી વિલંબિત કરવાનો પ્રયાસ કરે છે જ્યાં સુધી તેની ખરેખર જરૂર ન પડે. ઉદાહરણ તરીકે, પ્રક્રિયા P નો કૉલ ચોક્કસ પ્રોસેસર રજિસ્ટરમાં કહેવાતી પ્રક્રિયાના વળતર સરનામાં અને પરિમાણોને સંગ્રહિત કરી શકે છે, અને સરળ કૂદીને પ્રક્રિયાના મુખ્ય ભાગમાં નિયંત્રણ સ્થાનાંતરિત કરી શકે છે. જો પ્રક્રિયા પી અન્ય કોઈ કોલ કર્યા વિના પરત આવે છે, તો કોલ સ્ટેકનો બિલકુલ ઉપયોગ થતો નથી. જો પી ને બીજી પ્રક્રિયા ક્યૂ પર કૉલ કરવાની જરૂર હોય, તો તે પછી તે કોઈપણ રજિસ્ટર (જેમ કે રીટર્ન સરનામું) ની સામગ્રીને સાચવવા માટે કૉલ સ્ટેકનો ઉપયોગ કરશે જે ક્યૂ રીટર્ન પછી જરૂરી હશે. ઉદાહરણો સી અને સી + + સી અને સી + + પ્રોગ્રામિંગ ભાષાઓમાં, સબપ્રોગ્રામ્સને વિધેયો કહેવામાં આવે છે (જ્યારે વર્ગ સાથે સંકળાયેલા હોય ત્યારે સભ્ય વિધેયો તરીકે વર્ગીકૃત કરવામાં આવે છે, અથવા જ્યારે ન હોય ત્યારે મુક્ત વિધેયો તરીકે વર્ગીકૃત કરવામાં આવે છે). આ ભાષાઓ વિશિષ્ટ કીવર્ડને રદબાતલ કરવા માટે ઉપયોગ કરે છે જે સૂચવે છે કે કાર્ય કોઈ મૂલ્ય પરત કરતું નથી. નોંધ લો કે C/C + + વિધેયોની આડઅસરો હોઈ શકે છે, જેમાં કોઈપણ ચલમાં ફેરફાર કરવાનો સમાવેશ થાય છે, જેમના સરનામાંઓ પરિમાણો તરીકે પસાર થાય છે. ઉદાહરણોઃ શૂન્ય કાર્ય 1 () {/* અમુક કોડ */} કાર્ય મૂલ્ય પરત કરતું નથી અને તેને એકલ કાર્ય તરીકે ઓળખાવવું પડે છે, દા. ત. કાર્ય 1 (); પૂર્ણાંક કાર્ય 2 () {પાછું કાર્ય 5;} આ કાર્ય પરિણામ આપે છે (સંખ્યા 5), અને કૉલ અભિવ્યક્તિનો ભાગ હોઈ શકે છે, દા. ત., x + કાર્ય 2 () ચાર કાર્ય 3 (પૂર્ણાંક સંખ્યા) {ચાર પસંદગી [] = {'S', 'M', 'T', 'W', 'T', 'F', 'S', 'વળતર પસંદગી [સંખ્યા]; આ કાર્ય 0 અને 6 વચ્ચેની સંખ્યાને પ્રારંભિક અક્ષરમાં રૂપાંતરિત કરે છે. તેને કૉલ કરવાનું પરિણામ ચલને સોંપવામાં આવી શકે છે, દા. ત., num _ દિન = કાર્ય 3 (સંખ્યા); શૂન્ય કાર્ય 4 (પૂર્ણાંક પોઇન્ટરથી વર) {(* પોઇન્ટરથી વર) + +;} આ કાર્ય મૂલ્ય પરત કરતું નથી પરંતુ તે ચલમાં ફેરફાર કરે છે જેનું સરનામું પરિમાણ તરીકે પસાર થાય છે; તેને કાર્ય 4 (& ચલથી વૃદ્ધિ) સાથે બોલાવવામાં આવશે. બેઝિક બોલીઓ માઈક્રોસોફ્ટ સ્મોલ બેઝિક એક્ઝામ્પલ () 'કોલ્સ ધ સબરૂટિન સબ એક્ઝામ્પલ' સબરૂટિન TextWindow.WriteLine થી શરૂ થાય છે ("આ માઈક્રોસોફ્ટ સ્મોલ બેઝિકમાં સબરૂટિનનું ઉદાહરણ છે".) 'સબરૂટિન એન્ડસબ શું કરે છે' સબરૂટિનને સમાપ્ત કરે છે ઉપરના ઉદાહરણમાં, ઉદાહરણ () સબરૂટિનને બોલાવે છે. વાસ્તવિક સબરૂટિનને વ્યાખ્યાયિત કરવા માટે, સબ કીવર્ડ્સનો ઉપયોગ કરવો આવશ્યક છે, જેમાં સબરૂટિન નામ સબને અનુસરે છે. સામગ્રી અનુસર્યા પછી, એન્ડસબ ટાઇપ કરવું આવશ્યક છે. વિઝ્યુઅલ બેઝિક (ક્લાસિક) વિઝ્યુઅલ બેઝિક (ક્લાસિક) ભાષામાં, પેટા કાર્યક્રમોને કાર્યો અથવા પેટા (અથવા જ્યારે વર્ગ સાથે સંકળાયેલા હોય ત્યારે પદ્ધતિઓ) તરીકે ઓળખવામાં આવે છે. વિઝ્યુઅલ બેઝિક 6 પરિમાણ તરીકે શું પસાર થઈ રહ્યું છે તે વ્યાખ્યાયિત કરવા માટે પ્રકારો તરીકે ઓળખાતા વિવિધ શબ્દોનો ઉપયોગ કરે છે. મૂળભૂત રીતે, અચોક્કસ ચલ એક પ્રકાર તરીકે નોંધાયેલ છે અને તેને બાયરેફ (મૂળભૂત) અથવા બાયવલ તરીકે પસાર કરી શકાય છે. ઉપરાંત, જ્યારે કોઈ કાર્ય અથવા પેટા જાહેર કરવામાં આવે છે, ત્યારે તેને જાહેર, ખાનગી અથવા મિત્ર હોદ્દો આપવામાં આવે છે, જે નક્કી કરે છે કે તેને મોડ્યુલ અથવા પ્રોજેક્ટની બહાર એક્સેસ કરી શકાય છે કે કેમ જેમાં તેને જાહેર કરવામાં આવ્યું હતું. મૂલ્ય દ્વારા [બાયવલ]-સરનામું પસાર કરવાને બદલે, મૂલ્યની નકલ પસાર કરીને પ્રક્રિયામાં દલીલના મૂલ્યને પસાર કરવાની એક રીત. પરિણામે, ચલનું વાસ્તવિક મૂલ્ય તેને પસાર કરવામાં આવેલી પ્રક્રિયા દ્વારા બદલી શકાતું નથી. સંદર્ભ દ્વારા [બાયરેફ]-ચલનું સરનામું પસાર કરીને, તેના મૂલ્યની નકલ પસાર કરવાને બદલે, દલીલના મૂલ્યને પ્રક્રિયામાં પસાર કરવાની રીત. આ પ્રક્રિયાને વાસ્તવિક ચલ સુધી પહોંચવાની મંજૂરી આપે છે. પરિણામે, ચલનું વાસ્તવિક મૂલ્ય તેને પસાર કરવામાં આવેલી પ્રક્રિયા દ્વારા બદલી શકાય છે. જ્યાં સુધી અન્યથા નિર્દિષ્ટ ન હોય ત્યાં સુધી, દલીલો સંદર્ભ દ્વારા પસાર કરવામાં આવે છે. સાર્વજનિક (વૈકલ્પિક)-સૂચવે છે કે કાર્ય પ્રક્રિયા તમામ મોડ્યુલોમાં અન્ય તમામ પ્રક્રિયાઓ માટે સુલભ છે. જો વિકલ્પ ખાનગી ધરાવતા મોડ્યુલમાં ઉપયોગ કરવામાં આવે, તો પ્રક્રિયા પ્રોજેક્ટની બહાર ઉપલબ્ધ નથી. ખાનગી (વૈકલ્પિક)-સૂચવે છે કે કાર્ય પ્રક્રિયા માત્ર મોડ્યુલમાં અન્ય પ્રક્રિયાઓ માટે સુલભ છે જ્યાં તેને જાહેર કરવામાં આવે છે. મિત્ર (વૈકલ્પિક)-માત્ર વર્ગ મોડ્યુલમાં વપરાય છે. સૂચવે છે કે કાર્ય પ્રક્રિયા સમગ્ર પ્રોજેક્ટમાં દૃશ્યમાન છે, પરંતુ ઑબ્જેક્ટના ઉદાહરણના નિયંત્રકને દૃશ્યમાન નથી. ખાનગી કાર્ય કાર્ય 1 () 'અમુક કોડ અહીં અંતિમ કાર્ય કાર્ય કાર્ય મૂલ્ય પાછું આપતું નથી અને તેને એકલ કાર્ય તરીકે ઓળખાવવું પડે છે, દા. ત., કાર્ય 1 ખાનગી કાર્ય કાર્ય 2 () પૂર્ણાંક કાર્ય 2 = 5 અંતિમ કાર્ય તરીકે આ કાર્ય પરિણામ આપે છે (સંખ્યા 5), અને કોલ અભિવ્યક્તિનો ભાગ હોઈ શકે છે, દા. ત., x + કાર્ય 2 () ખાનગી કાર્ય કાર્ય 3 (પૂર્ણાંક તરીકે byVal intValue) તરીકે સ્ટ્રિંગ ડિમ સ્ટ્રે (6) તરીકે સ્ટ્રિંગ સ્ટ્રેરે = એરે ("M", "T", "W", "T", "F", "S". તેને કૉલ કરવાનું પરિણામ ચલને સોંપવામાં આવી શકે છે, દા. ત., num _ દિન = કાર્ય 3 (સંખ્યા). ખાનગી કાર્ય કાર્ય 4 (પૂર્ણાંક તરીકે byRef intValue) intValue = intValue + 1 અંતિમ કાર્ય આ કાર્ય મૂલ્ય પરત કરતું નથી પરંતુ તે ચલમાં ફેરફાર કરે છે જેનું સરનામું પરિમાણ તરીકે પસાર થાય છે; તેને "કાર્ય 4 (ચલ થી વૃદ્ધિ)" સાથે બોલાવવામાં આવશે. પી. એલ./આઈ. પી. એલ./આઈ. માં કહેવાતી પ્રક્રિયાને શબ્દમાળાની લંબાઈ અને એરે બાઉન્ડ્સ જેવી દલીલ વિશેની માહિતી પૂરી પાડતા ડિસ્ક્રીપ્ટર દ્વારા પસાર કરી શકાય છે. આ પ્રક્રિયાને વધુ સામાન્ય બનાવવાની મંજૂરી આપે છે અને પ્રોગ્રામરને આવી માહિતી પસાર કરવાની જરૂરિયાતને દૂર કરે છે. મૂળભૂત રીતે પીએલ/આઇ સંદર્ભ દ્વારા દલીલો પસાર કરે છે. દ્વિ-પરિમાણીય એરેના દરેક તત્વની નિશાની બદલવા માટે એક (તુચ્છ) કાર્ય આના જેવું દેખાઈ શકે છેઃ ફેરફાર _ સંકેતઃ પ્રક્રિયા (એરે); એરે (*, *) ફ્લોટ જાહેર કરો; એરે =-એરે; અંત ફેરફાર _ ચિહ્ન; આને નીચે મુજબ વિવિધ એરે સાથે કૉલ કરી શકાય છેઃ/* પ્રથમ એરે-5 થી + 10 અને 3 થી 9 */એરે 1 (-5:10,3:9) ફ્લોટ જાહેર કરે છે;/* બીજી એરે સીમા 1 થી 16 અને 1 થી 16 * જાહેર કરે છે/એરે 2 (16,16) ફ્લોટ કૉલ ચેન્જ સાઇન (એરે 1); કૉલ ચેન્જ સાઇન (એરે 2); પાયથોનમાં પાયથોન, મુખ્ય શબ્દ ડિફનો ઉપયોગ ફંક્શનને વ્યાખ્યાયિત કરવા માટે થાય છે. જે નિવેદનો કાર્યના મુખ્ય ભાગની રચના કરે છે તે કાં તો તે જ રેખા પર ચાલુ રહેવું જોઈએ અથવા આગલી રેખાથી શરૂ થવું જોઈએ અને ઇન્ડેન્ટેડ હોવું જોઈએ. નીચેનું ઉદાહરણ પ્રોગ્રામ "હેલો વર્લ્ડ!" પ્રિન્ટ કરે છે. ત્યારબાદ આગામી line.def સિમ્પ્લ _ ફંક્શન () પર "વિકિપીડિયા" આવે છેઃ પ્રિન્ટ કરો ('હેલો વર્લ્ડ!') પ્રિન્ટ ('વિકિપીડિયા') સિમ્પલી _ ફંક્શન () #આઉટપુટ હશેઃ હેલો વર્લ્ડ! વિકિપીડિયા ડેફ ફંક (નામ) પ્રિન્ટ ("સ્વાગત" + નામ) પ્રિન્ટ (ફંક ("માર્ટિન"))) #output હશેઃ વેલકમ માર્ટિન લોકલ વેરિયેબલ્સ, રિકર્શન અને રીએન્ટ્રેન્સી એક સબપ્રોગ્રામ ચોક્કસ માત્રામાં સ્ક્રેચ સ્પેસનો ઉપયોગ કરવા માટે ઉપયોગી થઈ શકે છે; એટલે કે, મધ્યવર્તી પરિણામો રાખવા માટે તે સબપ્રોગ્રામના અમલ દરમિયાન ઉપયોગમાં લેવાતી મેમરી. આ સ્ક્રેચ જગ્યામાં સંગ્રહિત ચલને સ્થાનિક ચલ કહેવામાં આવે છે, અને સ્ક્રેચ જગ્યાને સક્રિયકરણ રેકોર્ડ કહેવામાં આવે છે. સક્રિયકરણ રેકોર્ડમાં સામાન્ય રીતે વળતરનું સરનામું હોય છે જે તેને કહે છે કે જ્યારે સબપ્રોગ્રામ સમાપ્ત થાય ત્યારે નિયંત્રણ ક્યાં પાછું આપવું. પેટા કાર્યક્રમમાં કોલ સાઇટ્સની કોઈપણ સંખ્યા અને પ્રકૃતિ હોઈ શકે છે. જો પુનરાવર્તન સપોર્ટેડ હોય, તો પેટા પ્રોગ્રામ પોતાને કૉલ પણ કરી શકે છે, જેના કારણે તેનો અમલ સ્થગિત થઈ શકે છે જ્યારે તે જ પેટા પ્રોગ્રામનો બીજો નેસ્ટેડ અમલ થાય છે. પુનરાવર્તન એ કેટલાક જટિલ અલ્ગોરિધમ્સને સરળ બનાવવા અને જટિલ સમસ્યાઓને તોડવા માટે ઉપયોગી માધ્યમ છે. પુનરાવર્તિત ભાષાઓ સામાન્ય રીતે દરેક કોલ પર સ્થાનિક ચલની નવી નકલ પ્રદાન કરે છે. જો પ્રોગ્રામર ઇચ્છે છે કે સ્થાનિક ચલોનું મૂલ્ય કૉલ્સ વચ્ચે સમાન રહે, તો તેને કેટલીક ભાષાઓમાં સ્થિર જાહેર કરી શકાય છે, અથવા વૈશ્વિક મૂલ્યો અથવા સામાન્ય ક્ષેત્રોનો ઉપયોગ કરી શકાય છે. ફિબોનાકી સંખ્યાઓ શોધવા માટે C/C + + માં પુનરાવર્તિત વિધેયનું અહીં એક ઉદાહરણ છેઃ int Fib (int n) {જો (n <= 1) {રીટર્ન n;} રીટર્ન Fib (n-1) + Fib (n-2);} ફોરટ્રાન જેવી પ્રારંભિક ભાષાઓ શરૂઆતમાં પુનરાવર્તનને સમર્થન આપતી ન હતી કારણ કે ચલ સ્થિર રીતે ફાળવવામાં આવ્યા હતા, તેમજ રીટર્ન સરનામા માટેનું સ્થાન. પ્રારંભિક કોમ્પ્યુટર સૂચના સમૂહોએ વળાંક પર વળતર સરનામાંઓ અને ચલોનો સંગ્રહ કરવાનું મુશ્કેલ બનાવ્યું હતું. અનુક્રમણિકા રજિસ્ટર અથવા સામાન્ય હેતુના રજિસ્ટર ધરાવતી મશીનો, દા. ત., CDC 6000 શ્રેણી, PDP-6, GE 635, સિસ્ટમ/360, UNIVAC 1100 શ્રેણી, તેમાંથી એક રજિસ્ટરનો ઉપયોગ સ્ટેક પોઇન્ટર તરીકે કરી શકે છે. એએલજીઓએલ પછીની આધુનિક ભાષાઓ જેમ કે પીએલ/આઈ અને સી લગભગ નિશ્ચિતપણે એક માળખાનો ઉપયોગ કરે છે, જે સામાન્ય રીતે મોટાભાગના આધુનિક કમ્પ્યુટર સૂચના સમૂહો દ્વારા સમર્થિત હોય છે, જે પેટા કાર્યક્રમના દરેક અમલ માટે નવો સક્રિયકરણ રેકોર્ડ પ્રદાન કરે છે. આ રીતે, નેસ્ટેડ એક્ઝેક્યુશન પ્રગતિમાં અન્ય સસ્પેન્ડેડ ફાંસીની સજા પરની અસરની ચિંતા કર્યા વિના તેના સ્થાનિક ચલમાં ફેરફાર કરવા માટે મુક્ત છે. જેમ જેમ નેસ્ટેડ કૉલ્સ એકઠા થાય છે, તેમ તેમ કૉલ સ્ટેક માળખું રચાય છે, જેમાં દરેક સસ્પેન્ડેડ સબપ્રોગ્રામ માટે એક સક્રિયકરણ રેકોર્ડ હોય છે. હકીકતમાં, આ સ્ટેક માળખું વર્ચ્યુઅલ રીતે સર્વવ્યાપક છે, અને તેથી સક્રિયકરણ રેકોર્ડ્સને સામાન્ય રીતે સ્ટેક ફ્રેમ્સ કહેવામાં આવે છે. પાસ્કલ, પી. એલ./આઈ. અને એ. ડી. એ. જેવી કેટલીક ભાષાઓ પણ નેસ્ટેડ કાર્યોને ટેકો આપે છે, જે ફક્ત બાહ્ય (પેરેન્ટ) કાર્યના અવકાશમાં જ કૉલ કરી શકાય તેવા કાર્ય છે. આંતરિક કાર્યોને બાહ્ય કાર્યના સ્થાનિક ચલની પહોંચ હોય છે જે તેમને કહે છે. સક્રિયકરણ રેકોર્ડમાં વધારાની સંદર્ભ માહિતી સંગ્રહિત કરીને આ પરિપૂર્ણ થાય છે, જેને પ્રદર્શન પણ કહેવાય છે. જો એક જ પેટા કાર્યક્રમનો બીજો અમલ પહેલેથી જ ચાલી રહ્યો હોય ત્યારે પણ પેટા કાર્યક્રમ યોગ્ય રીતે ચલાવી શકાય, તો તે પેટા કાર્યક્રમને પુનરાવર્તિત કહેવાય છે. પુનરાવર્તિત પેટા કાર્યક્રમ પુનરાવર્તિત હોવો જોઈએ. પુનરાવર્તિત પેટા પ્રોગ્રામ્સ બહુ-થ્રેડેડ પરિસ્થિતિઓમાં પણ ઉપયોગી છે કારણ કે બહુવિધ થ્રેડો એકબીજા સાથે દખલ કરવાના ભય વિના સમાન પેટા પ્રોગ્રામને કૉલ કરી શકે છે. IBM CICS ટ્રાન્ઝેક્શન પ્રોસેસિંગ સિસ્ટમમાં, અર્ધ-રીન્ટન્ટ થોડી ઓછી પ્રતિબંધિત હતી, પરંતુ સમાન, એપ્લિકેશન પ્રોગ્રામ્સ માટેની જરૂરિયાત જે ઘણા થ્રેડો દ્વારા શેર કરવામાં આવી હતી. ભારપૂર્વક ટાઇપ કરેલી ભાષાઓમાં, કેટલીકવાર એક જ નામ સાથે સંખ્યાબંધ કાર્યો કરવા ઇચ્છનીય હોય છે, પરંતુ વિવિધ પ્રકારના ડેટા પર અથવા વિવિધ પરિમાણ રૂપરેખાઓ સાથે કાર્યરત હોય છે. ઉદાહરણ તરીકે, વર્ગમૂળના કાર્યને વાસ્તવિક, જટિલ મૂલ્યો અથવા મેટ્રિસીસ પર કામ કરવા માટે વ્યાખ્યાયિત કરી શકાય છે. દરેક કિસ્સામાં ઉપયોગમાં લેવાતું અલ્ગોરિધમ અલગ છે, અને વળતરનું પરિણામ અલગ હોઈ શકે છે. એક જ નામ સાથે ત્રણ અલગ-અલગ કાર્યો લખીને, પ્રોગ્રામરને દરેક પ્રકારના ડેટા માટે અલગ-અલગ નામો યાદ ન રાખવાની સુવિધા મળે છે. વધુમાં, જો પેટા પ્રકારને વાસ્તવિક માટે, હકારાત્મક અને નકારાત્મક વાસ્તવિકને અલગ કરવા માટે વ્યાખ્યાયિત કરી શકાય, તો વાસ્તવિક માટે બે કાર્યો લખી શકાય છે, એક જ્યારે પરિમાણ હકારાત્મક હોય ત્યારે વાસ્તવિક પરત કરે છે, અને બીજું જ્યારે પરિમાણ નકારાત્મક હોય ત્યારે જટિલ મૂલ્ય પરત કરે છે. ઓબ્જેક્ટ-ઓરિએન્ટેડ પ્રોગ્રામિંગમાં, જ્યારે સમાન નામની વિધેયોની શ્રેણી વિવિધ પરિમાણ રૂપરેખાઓ અથવા વિવિધ પ્રકારનાં પરિમાણોને સ્વીકારી શકે છે, ત્યારે દરેક વિધેયો ઓવરલોડ હોવાનું કહેવાય છે. અહીં C + + માં ફંક્શન ઓવરલોડિંગનું ઉદાહરણ છે, જે સમાન નામ (વિસ્તાર) સાથે બે કાર્યોના અમલીકરણનું નિદર્શન કરે છે પરંતુ વિવિધ પરિમાણોઃ #include <iost stream> ડબલ એરિયા (ડબલ h, ડબલ w) {રીટર્ન h * w;}/* પ્રથમ વિસ્તાર કાર્ય લંબચોરસનું ક્ષેત્રફળ શોધવા માટે છે, * તેથી તે ઊંચાઈ અને પહોળાઈ માટે બે સંખ્યાઓને પરિમાણો તરીકે સ્વીકારે છે. */ડબલ એરિયા (ડબલ r) {રીટર્ન r * r * 3.14;}/* બીજું એરિયા ફંક્શન વર્તુળનું ક્ષેત્રફળ શોધવા માટે છે, તેથી તે ત્રિજ્યા માટે માત્ર એક જ સંખ્યાને પરિમાણ તરીકે સ્વીકારે છે. */પૂર્ણાંક મુખ્ય () {ડબલ લંબચોરસ _ વિસ્તાર = વિસ્તાર (3,4);// આ પ્રથમ વિસ્તાર કાર્યને બોલાવે છે, કારણ કે બે પરિમાણો પૂરા પાડવામાં આવ્યા છે. ડબલ સર્કલ _ એરિયા = એરિયા (5);// આ બીજા એરિયા ફંક્શનને બોલાવે છે, કારણ કે માત્ર એક જ પરિમાણ આપવામાં આવ્યું છે. std:: cout <<"લંબચોરસનું ક્ષેત્રફળ છે" <<લંબચોરસ _ ક્ષેત્ર <<std:: એન્ડલ; std:: cout <<"વર્તુળનું ક્ષેત્રફળ છે" <<વર્તુળ _ ક્ષેત્ર <<std:: એન્ડલ;} અન્ય ઉદાહરણ તરીકે, કાર્ય એવી વસ્તુ બનાવી શકે છે જે દિશાઓ સ્વીકારશે, અને સ્ક્રીન પર આ બિંદુઓ પર તેનો માર્ગ શોધી કાઢશે. એવા ઘણા પરિમાણો છે જે કન્સ્ટ્રક્ટરમાં પસાર કરી શકાય છે (ટ્રેસનો રંગ, x અને y કોઓર્ડિનેટ્સ શરૂ કરીને, ટ્રેસ સ્પીડ). જો પ્રોગ્રામર ઇચ્છતો હોય કે કન્સ્ટ્રક્ટર માત્ર રંગ પરિમાણને જ સ્વીકારી શકે, તો તે અન્ય કન્સ્ટ્રક્ટરને કૉલ કરી શકે છે જે ફક્ત રંગને જ સ્વીકારે છે, જે બદલામાં કન્સ્ટ્રક્ટરને અન્ય તમામ પરિમાણો માટે મૂળભૂત મૂલ્યોના સમૂહમાં પસાર થતા તમામ પરિમાણો સાથે કૉલ કરે છે (X અને Y સામાન્ય રીતે સ્ક્રીન પર કેન્દ્રિત હશે અથવા મૂળ પર મૂકવામાં આવશે, અને ઝડપ કોડરની પસંદગીના અન્ય મૂલ્ય પર સેટ કરવામાં આવશે). પીએલ/આઈ પાસે વિવિધ પ્રકારની દલીલો સાથે ઓળખાતા પ્રવેશ સંદર્ભોના સમૂહ માટે સામાન્ય નામને વ્યાખ્યાયિત કરવા માટે સામાન્ય લક્ષણ છે. ઉદાહરણ તરીકેઃ (નામ ક્યારે (નિશ્ચિત બાયનરી), ફ્લેમ ક્યારે (ફ્લોટ), પાથનેમ અન્ય); દરેક એન્ટ્રી માટે બહુવિધ દલીલ વ્યાખ્યાઓ સ્પષ્ટ કરી શકાય છે. "જીએન _ નેમ" પર કૉલ કરવાથી જ્યારે દલીલ નિશ્ચિત થાય ત્યારે "નામ" પર કૉલ થશે, જ્યારે ફ્લોટ થાય ત્યારે "ફ્લેમ" વગેરે. જો દલીલ કોઈ પણ પસંદગી સાથે મેળ ખાતી હોય તો "પાથનેમ" બોલાવવામાં આવશે નહીં. ક્લોઝર એ એક પેટા પ્રોગ્રામ છે જે તેના કેટલાક ચલોનાં મૂલ્યો સાથે મળીને તે પર્યાવરણમાંથી લેવામાં આવે છે જેમાં તે બનાવવામાં આવ્યું હતું. જ્હોન મેકકાર્થી દ્વારા રજૂ કરાયેલ લિસ્પ પ્રોગ્રામિંગ લેંગ્વેજનું બંધ કરવું એ એક નોંધપાત્ર લક્ષણ હતું. અમલીકરણના આધારે, બંધ કરવાથી આડઅસરો માટે એક પદ્ધતિ તરીકે કામ કરી શકે છે. સંમેલનો કાર્યોના કોડિંગ માટે વિશાળ સંખ્યામાં સંમેલનો વિકસાવવામાં આવ્યા છે. તેમના નામકરણને લગતા, ઘણા વિકાસકર્તાઓએ અભિગમ અપનાવ્યો છે કે કાર્યનું નામ જ્યારે તે ચોક્કસ કાર્ય કરે છે ત્યારે તે ક્રિયાપદ હોવું જોઈએ, જ્યારે તે કોઈ પૂછપરછ કરે છે ત્યારે વિશેષણ અને જ્યારે ચલ બદલવા માટે તેનો ઉપયોગ થાય છે ત્યારે સંજ્ઞા. કેટલાક પ્રોગ્રામરો સૂચવે છે કે કાર્યએ માત્ર એક જ કાર્ય કરવું જોઈએ, અને જો કાર્ય એકથી વધુ કાર્ય કરે છે, તો તેને વધુ કાર્યોમાં વહેંચવું જોઈએ. તેઓ દલીલ કરે છે કે કાર્ય કોડ જાળવણીમાં મુખ્ય ઘટકો છે, અને કાર્યક્રમમાં તેમની ભૂમિકા અલગ હોવી જોઈએ. મોડ્યુલર પ્રોગ્રામિંગ (મોડ્યુલરાઇઝિંગ કોડ) ના સમર્થકો એવી હિમાયત કરે છે કે દરેક કાર્યમાં કોડના અન્ય ભાગો પર ઓછામાં ઓછી નિર્ભરતા હોવી જોઈએ. ઉદાહરણ તરીકે, વૈશ્વિક ચલોનો ઉપયોગ સામાન્ય રીતે આ પરિપ્રેક્ષ્યના હિમાયતીઓ દ્વારા અવિવેકી માનવામાં આવે છે, કારણ કે તે કાર્ય અને આ વૈશ્વિક ચલ વચ્ચે ચુસ્ત જોડાણ ઉમેરે છે. જો આવા જોડાણની જરૂર ન હોય, તો તેમની સલાહ એ છે કે તેના બદલે પસાર કરેલા પરિમાણોને સ્વીકારવા માટે રીફેક્ટર ફંક્શન્સ. જો કે, વિધેયોમાં પસાર થતા પરિમાણોની સંખ્યામાં વધારો કોડની વાંચનીયતાને અસર કરી શકે છે. રીટર્ન કોડ્સ તેની મુખ્ય અથવા સામાન્ય અસર ઉપરાંત, સબરૂટીનને તેના અમલીકરણ દરમિયાન આવી હોય તેવી અપવાદરૂપ પરિસ્થિતિઓ વિશે કૉલિંગ પ્રોગ્રામને જાણ કરવાની જરૂર પડી શકે છે. કેટલીક ભાષાઓ અને પ્રોગ્રામિંગ ધોરણોમાં, આ ઘણીવાર રીટર્ન કોડ દ્વારા કરવામાં આવે છે, જે અમુક પ્રમાણભૂત સ્થાનમાં સબપ્રોગ્રામ દ્વારા મૂકવામાં આવેલ પૂર્ણાંક મૂલ્ય છે, જે સામાન્ય અને અપવાદરૂપ પરિસ્થિતિઓને એન્કોડ કરે છે. આઇબીએમ સિસ્ટમ/360માં, જ્યાં સબરૂટીનમાંથી વળતર કોડની અપેક્ષા રાખવામાં આવતી હતી, વળતર મૂલ્ય ઘણીવાર 4ના ગુણાંક તરીકે તૈયાર કરવામાં આવતું હતું-જેથી તેનો ઉપયોગ શાખા કોષ્ટકમાં સીધા શાખા કોષ્ટક અનુક્રમણિકા તરીકે થઈ શકે, જે ઘણીવાર કોલની સૂચના પછી તરત જ સ્થિત હોય, જેથી વધારાના શરતી પરીક્ષણો ટાળી શકાય, જેનાથી કાર્યક્ષમતામાં વધુ સુધારો થાય. સિસ્ટમ/360 એસેમ્બલી લેંગ્વેજમાં, કોઈ વ્યક્તિ લખી શકે છે, ઉદાહરણ તરીકેઃ BAL 14, SUBRTN01 સબરૂટિન પર જાઓ, R14 B કોષ્ટકમાં વળતર સરનામું સંગ્રહિત કરો (15) શાખા કોષ્ટકને અનુક્રમિત કરવા માટે રેગ 15 માં પરત કરેલ મૂલ્યનો ઉપયોગ કરો, * યોગ્ય શાખા ઇન્સ્ટોર પર શાખા કરો. કોષ્ટક બી ઓકે રીટર્ન કોડ = 00 ગુડ} બી બેડ રીટર્ન કોડ = 04 અમાન્ય ઇનપુટ} શાખા કોષ્ટક બી એરર રીટર્ન કોડ = 08 અનપેક્ષિત સ્થિતિ} ફંક્શન કૉલ્સનું ઓપ્ટિમાઇઝેશન ફંક્શનને કૉલ કરવામાં નોંધપાત્ર રનટાઇમ ઓવરહેડ છે, જેમાં દલીલો પસાર કરવી, સબપ્રોગ્રામ પર શાખાઓ કરવી અને કોલ કરનારને પાછા શાખાઓ કરવી. ઓવરહેડમાં ઘણીવાર ચોક્કસ પ્રોસેસર રજિસ્ટરને બચાવવા અને પુનઃસ્થાપિત કરવા, કોલ ફ્રેમ સંગ્રહની ફાળવણી અને પુનઃપ્રાપ્તિનો સમાવેશ થાય છે. કેટલીક ભાષાઓમાં, દરેક ફંક્શન કોલ એ ફંક્શનના રીટર્ન કોડનું સ્વચાલિત પરીક્ષણ અથવા તે ઉભા કરી શકે તેવા અપવાદોનું સંચાલન પણ સૂચવે છે. ઓબ્જેક્ટ-ઓરિએન્ટેડ ભાષાઓમાં ઓવરહેડનો નોંધપાત્ર સ્રોત મેથડ કોલ્સ માટે સઘન રીતે ઉપયોગમાં લેવાતું ડાયનેમિક ડિસ્પેચ છે. પ્રક્રિયા કૉલના કેટલાક દેખીતી રીતે સ્પષ્ટ ઓપ્ટિમાઇઝેશન છે જે પ્રક્રિયાઓની આડઅસરો હોઈ શકે તો લાગુ કરી શકાતા નથી. ઉદાહરણ તરીકે, અભિવ્યક્તિ (f (x)-1)/(f (x) + 1) માં, કાર્ય f ને બે વાર કૉલ કરવું આવશ્યક છે, કારણ કે બે કૉલ્સ જુદા જુદા પરિણામો આપી શકે છે. વધુમાં, ડિવિઝન ઓપરેટરના ઓપરેન્ડ્સના મૂલ્યાંકનના ક્રમને વ્યાખ્યાયિત કરતી કેટલીક ભાષાઓમાં, x નું મૂલ્ય બીજા કોલ પહેલાં ફરીથી મેળવવું આવશ્યક છે, કારણ કે પ્રથમ કોલથી તે બદલાઈ ગયું હશે. પેટા કાર્યક્રમની આડઅસર થઈ શકે છે કે કેમ તે નક્કી કરવું ખૂબ જ મુશ્કેલ છે (ખરેખર, રાઇસના પ્રમેયના આધારે અનિશ્ચિત). તેથી, જ્યારે તે ઓપ્ટિમાઇઝેશન શુદ્ધ કાર્યાત્મક પ્રોગ્રામિંગ ભાષાઓમાં સલામત હોય છે, ત્યારે લાક્ષણિક અનિવાર્ય પ્રોગ્રામિંગના કમ્પાઇલરોએ સામાન્ય રીતે સૌથી ખરાબ ધારણ કરવું પડે છે. આ ઓવરહેડને દૂર કરવા માટે ઉપયોગમાં લેવાતી એક પદ્ધતિ એ છે કે દરેક કોલ સાઇટ પર સબપ્રોગ્રામના મુખ્ય ભાગનું ઇનલાઇન વિસ્તરણ અથવા ઇનલાઇનિંગ (વિરુદ્ધ કાર્ય અને પાછળના ભાગમાં શાખાઓ). આ માત્ર કૉલ ઓવરહેડને જ ટાળતું નથી, પરંતુ તે કમ્પાઇલરને તે કૉલના સંદર્ભ અને દલીલોને ધ્યાનમાં લઈને પ્રક્રિયાના મુખ્ય ભાગને વધુ અસરકારક રીતે ઑપ્ટિમાઇઝ કરવાની પણ મંજૂરી આપે છે. શામેલ કરેલ બોડી કમ્પાઇલર દ્વારા ઓપ્ટિમાઇઝ કરી શકાય છે. જો કે, ઇનલાઇનિંગ સામાન્ય રીતે કોડનું કદ વધારશે, સિવાય કે પ્રોગ્રામમાં કાર્ય માટે માત્ર એક જ કૉલ હોય. એસિંક્રોનસ પ્રોસિજર કોલ પણ જુઓ, એક સબપ્રોગ્રામ કે જેને તેના પરિમાણો પછી બોલાવવામાં આવે છે તે અન્ય પ્રવૃત્તિઓ દ્વારા સેટ કરવામાં આવે છે બિલ્ટ-ઇન ફંક્શન કમાન્ડ-ક્વેરી સેપરેશન (સીક્યુએસ) કમ્પાઉન્ડ ઓપરેશન કોરોટાઇન્સ, સબપ્રોગ્રામ કે જે એકબીજાને બોલાવે છે જાણે કે બંને મુખ્ય પ્રોગ્રામ હોય મૂલ્યાંકન વ્યૂહરચના ઇવેન્ટ હેન્ડલર, એક સબપ્રોગ્રામ કે જેને ઇનપુટ ઇવેન્ટ અથવા ઇન્ટરપ્ટ ફંક્શનના જવાબમાં બોલાવવામાં આવે છે (ગણિત) કાર્યાત્મક પ્રોગ્રામિંગ ફ્યુઝ્ડ ઓપરેશન લેમ્બડા ફંક્શન (કમ્પ્યુટર પ્રોગ્રામિંગ), એક કાર્ય જે ઓળખકર્તા પદ્ધતિ (કમ્પ્યુટર પ્રોગ્રામિંગ) મોડ્યુલર પ્રોગ્રામિંગ ઓપરેટર ઓવરલોડિંગ સુરક્ષિત પ્રક્રિયા ટ્રાન્સક્લૂઝન સંદર્ભો સ્રોત કોડ લેખો ઉદાહરણ તરીકે સી કોડ હોલિઝમ પ્રોગ્રામિંગ રચનાઓ સાથે