Function (computer programming)
কম্পিউটার প্রোগ্রামিং-এ, একটি ফাংশন বা সাবরুটিন হল প্রোগ্রাম নির্দেশাবলীর একটি ক্রম যা একটি নির্দিষ্ট কাজ সম্পাদন করে, একটি ইউনিট হিসাবে প্যাকেজ করা। এই ইউনিটটি তারপর যেখানেই সেই নির্দিষ্ট কাজটি সম্পাদন করা উচিত সেখানে প্রোগ্রামগুলিতে ব্যবহার করা যেতে পারে। ফাংশনগুলি প্রোগ্রামের মধ্যে বা গ্রন্থাগারগুলিতে পৃথকভাবে সংজ্ঞায়িত করা যেতে পারে যা অনেক প্রোগ্রাম দ্বারা ব্যবহার করা যেতে পারে। বিভিন্ন প্রোগ্রামিং ভাষায়, একটি ফাংশনকে রুটিন, সাবপ্রোগ্রাম, সাবরুটিন বা পদ্ধতি বলা যেতে পারে; অবজেক্ট-ওরিয়েন্টেড প্রোগ্রামিং (ওওপি)-এ, এটিকে একটি পদ্ধতি বলা যেতে পারে। প্রযুক্তিগতভাবে, এই সমস্ত শব্দের বিভিন্ন সংজ্ঞা রয়েছে এবং নামকরণ ভাষাভেদে পরিবর্তিত হয়। সাধারণ ছাতা শব্দ কলযোগ্য একক কখনও কখনও ব্যবহার করা হয়। একটি ফাংশনকে প্রায়শই কোড করা হয় যাতে এটি অন্যান্য ফাংশন সহ প্রোগ্রামের একটি সম্পাদনের সময় বেশ কয়েকবার এবং বিভিন্ন জায়গা থেকে শুরু করা যায় এবং তারপরে কলের পরে পরবর্তী নির্দেশে শাখা (ফেরত) করা যায়, একবার ফাংশনটির কাজ শেষ হয়ে গেলে। একটি সাবরুটিনের ধারণাটি প্রাথমিকভাবে জন মাউচলি এবং ক্যাথলিন অ্যান্টোনেলির দ্বারা ই. এন. আই. এ. সি-তে তাদের কাজের সময় কল্পনা করা হয়েছিল এবং 1947 সালের জানুয়ারিতে হার্ভার্ড সিম্পোজিয়ামে "ইডিভিএসি-টাইপ মেশিনের জন্য সমস্যাগুলির প্রস্তুতি" শীর্ষক রেকর্ড করা হয়েছিল। মরিস উইল্কস, ডেভিড হুইলার এবং স্ট্যানলি গিলকে সাধারণত এই ধারণার আনুষ্ঠানিক উদ্ভাবনের জন্য কৃতিত্ব দেওয়া হয়, যাকে তারা একটি বদ্ধ সাব-রুটিন বলে অভিহিত করে, যা একটি খোলা সাব-রুটিন বা ম্যাক্রোর বিপরীতে। যাইহোক, অ্যালান টুরিং 1945 সালের একটি গবেষণাপত্রে এন. পি. এল এসিই-এর জন্য নকশা প্রস্তাবের উপর সাবরুটিন নিয়ে আলোচনা করেছিলেন, যা একটি রিটার্ন অ্যাড্রেস স্ট্যাকের ধারণা উদ্ভাবন পর্যন্ত যায়। ফাংশনগুলি একটি শক্তিশালী প্রোগ্রামিং সরঞ্জাম, এবং অনেক প্রোগ্রামিং ভাষার বাক্যবিন্যাসে সাবরুটিন লেখার এবং ব্যবহারের জন্য সমর্থন অন্তর্ভুক্ত রয়েছে। ফাংশনগুলির বিচক্ষণ ব্যবহার (উদাহরণস্বরূপ, কাঠামোগত প্রোগ্রামিং পদ্ধতির মাধ্যমে) প্রায়শই একটি বড় প্রোগ্রামের মান এবং নির্ভরযোগ্যতা বাড়ানোর পাশাপাশি বিকাশ এবং রক্ষণাবেক্ষণের ব্যয়কে যথেষ্ট পরিমাণে হ্রাস করবে। ফাংশনগুলি, যা প্রায়শই গ্রন্থাগারে সংগ্রহ করা হয়, সফ্টওয়্যার ভাগ করে নেওয়ার এবং ব্যবসায়ের জন্য একটি গুরুত্বপূর্ণ প্রক্রিয়া। ও. ও. পি-র শৃঙ্খলা বস্তু এবং পদ্ধতির উপর ভিত্তি করে (যা এই বস্তু বা বস্তু শ্রেণীর সাথে সংযুক্ত ফাংশন)। মূল ধারণাগুলি একটি ফাংশনের বিষয়বস্তু হল তার বডি, যা প্রোগ্রাম কোডের অংশ যা ফাংশনটি কল বা আহ্বান করার সময় কার্যকর করা হয়। একটি ফাংশন এমনভাবে লেখা যেতে পারে যাতে এটি কলিং প্রোগ্রাম থেকে এক বা একাধিক ডেটা মান পাওয়ার আশা করে (তার পরামিতি বা আনুষ্ঠানিক পরামিতিগুলি প্রতিস্থাপনের জন্য)। কলিং প্রোগ্রাম এই পরামিতিগুলির জন্য প্রকৃত মান প্রদান করে, যাকে আর্গুমেন্ট বলা হয়। বিভিন্ন প্রোগ্রামিং ভাষাগুলি আর্গুমেন্ট পাস করার জন্য বিভিন্ন রীতিনীতি ব্যবহার করতে পারেঃ একটি ফাংশন কলের পার্শ্বপ্রতিক্রিয়াও থাকতে পারে যেমন কম্পিউটার মেমরিতে ডেটা স্ট্রাকচার পরিবর্তন করা, একটি পেরিফেরাল ডিভাইসে পড়া বা লেখা, একটি ফাইল তৈরি করা, প্রোগ্রাম বা মেশিন বন্ধ করা, এমনকি একটি নির্দিষ্ট সময়ের জন্য প্রোগ্রামের কার্যকারিতা বিলম্বিত করা। পার্শ্বপ্রতিক্রিয়া সহ একটি সাবপ্রোগ্রাম প্রতিবার কল করার সময় ভিন্ন ফলাফল দিতে পারে, এমনকি যদি এটি একই আর্গুমেন্ট দিয়ে কল করা হয়। একটি উদাহরণ হল একটি এলোমেলো সংখ্যা ফাংশন, যা অনেক ভাষায় পাওয়া যায়, যা প্রতিবার কল করার সময় একটি ভিন্ন ছদ্ম-এলোমেলো সংখ্যা প্রদান করে। পার্শ্বপ্রতিক্রিয়া সহ ফাংশনগুলির ব্যাপক ব্যবহার অপরিহার্য প্রোগ্রামিং ভাষার একটি বৈশিষ্ট্য। একটি ফাংশনকে কোড করা যেতে পারে যাতে এটি তার কাজ সম্পাদনের জন্য এক বা একাধিক জায়গায় নিজেকে পুনরাবৃত্তিমূলক বলে অভিহিত করতে পারে। এই পদ্ধতিটি গাণিতিক আনয়ন এবং পুনরাবৃত্তিমূলক বিভাজন এবং অ্যালগরিদম জয় দ্বারা সংজ্ঞায়িত ফাংশনগুলির সরাসরি বাস্তবায়নের অনুমতি দেয়। একটি ফাংশন যার উদ্দেশ্য একটি বুলিয়ান-মূল্যবান ফাংশন গণনা করা (অর্থাৎ, একটি হ্যাঁ/না প্রশ্নের উত্তর দেওয়া) কখনও কখনও একটি বিধেয় বলা হয়। লজিক প্রোগ্রামিং ভাষাগুলিতে, প্রায়শই সমস্ত ফাংশনকে প্রেডিকেট বলা হয়, কারণ তারা প্রাথমিকভাবে সাফল্য বা ব্যর্থতা নির্ধারণ করে। যে ফাংশন কোনও মান প্রদান করে না বা একটি নাল মান প্রদান করে তাকে কখনও কখনও পদ্ধতি বলা হয়। পদ্ধতিগুলি সাধারণত তাদের যুক্তিগুলি সংশোধন করে এবং পদ্ধতিগত প্রোগ্রামিংয়ের একটি মূল অংশ। পরিভাষা একটি সাবরুটিন এমন একটি ফাংশন যা কোনও মান প্রদান করে না। ফাংশনের প্রাথমিক উদ্দেশ্য হল জটিল গণনাগুলিকে অর্থপূর্ণ অংশে বিভক্ত করা এবং সেগুলির নাম দেওয়া। ফাংশনটি তার কলারকে (তার রিটার্ন মান) একটি গণনাকৃত মান ফেরত দিতে পারে, অথবা বিভিন্ন ফলাফলের মান বা আউটপুট পরামিতি প্রদান করতে পারে। প্রকৃতপক্ষে, ফাংশনের একটি সাধারণ ব্যবহার হল গাণিতিক ফাংশনগুলি বাস্তবায়ন করা, যেখানে ফাংশনের উদ্দেশ্য হল বিশুদ্ধভাবে এক বা একাধিক ফলাফল গণনা করা যার মানগুলি সম্পূর্ণরূপে ফাংশনে প্রেরিত আর্গুমেন্ট দ্বারা নির্ধারিত হয়। (উদাহরণের মধ্যে একটি সংখ্যার লগারিদম বা একটি ম্যাট্রিক্সের নির্ধারক গণনা করা অন্তর্ভুক্ত থাকতে পারে।) কিছু ভাষায় একটি পদ্ধতির বাক্যবিন্যাস যা একটি মান প্রদান করে তা মূলত এমন একটি পদ্ধতির বাক্যবিন্যাসের মতোই যা একটি মান প্রদান করে না, উদাহরণস্বরূপ, রিটার্নস ধারার অনুপস্থিতি ব্যতীত। কিছু ভাষায় একটি পদ্ধতি তার যুক্তিগুলির উপর নির্ভর করে গতিশীলভাবে কোনও মান সহ বা ছাড়াই ফিরে আসতে পারে। ভাষা সমর্থন উচ্চ-স্তরের প্রোগ্রামিং ভাষাগুলিতে সাধারণত নির্দিষ্ট গঠনগুলি অন্তর্ভুক্ত থাকেঃ ফাংশনটি তৈরি করে এমন প্রোগ্রামের (বডি) অংশটি সীমাবদ্ধ করুন ফাংশনে একটি শনাক্তকারী (নাম) বরাদ্দ করুন এর প্যারামিটার এবং রিটার্ন মানগুলির নাম এবং ডেটা প্রকারগুলি নির্দিষ্ট করুন এর অস্থায়ী ভেরিয়েবলগুলির জন্য একটি ব্যক্তিগত নামকরণের সুযোগ প্রদান করুন ফাংশনের বাইরের ভেরিয়েবলগুলি সনাক্ত করুন যা এর মধ্যে অ্যাক্সেসযোগ্য ফাংশনটিকে কল করুন ফাংশনটির প্যারামিটারগুলিতে মান সরবরাহ করুন প্রধান প্রোগ্রামে ফাংশন কলের পরবর্তী নির্দেশের ঠিকানা রয়েছে মূল প্রোগ্রামে রিটার্ন মানগুলি নির্দিষ্ট করুন কলিং প্রোগ্রামে ফিরে আসুন কল হ্যান্ডেলের সময় যে কোনও ব্যতিক্রমী শর্তের সম্মুখীন হওয়া মানগুলি একটি মডিউল, লাইব্রেরি, অবজেক্টে ফিরিয়ে দিন। এই ভাষাগুলিতে, ফাংশন কলগুলি সাধারণত এক্সপ্রেশনগুলিতে এম্বেড করা থাকে (যেমন, একটি এসকিউআরটি ফাংশনকে ওয়াই = জেড + এসকিউআরটি (এক্স) বলা যেতে পারে)। পদ্ধতিগত কলগুলি হয় বাক্যবিন্যাস হিসাবে বিবৃতি হিসাবে আচরণ করে (উদাহরণস্বরূপ, একটি মুদ্রণ পদ্ধতিকে x> 0 বলা যেতে পারে তারপর মুদ্রণ (x) বলা যেতে পারে বা কল বা জিওএসইউবি (উদাহরণস্বরূপ, কল প্রিন্ট (x)) এর মতো বিবৃতি দ্বারা স্পষ্টভাবে আহ্বান করা হয়। অন্যান্য ভাষা, যেমন সি এবং লিস্প, ফাংশন এবং সাবরুটিনের মধ্যে পার্থক্য করে না। হাস্কেলের মতো কঠোরভাবে কার্যকরী প্রোগ্রামিং ভাষাগুলিতে, সাবপ্রোগ্রামগুলির কোনও পার্শ্ব প্রতিক্রিয়া থাকতে পারে না, যার অর্থ প্রোগ্রামের বিভিন্ন অভ্যন্তরীণ অবস্থা পরিবর্তন হবে না। একই আর্গুমেন্ট দিয়ে বারবার কল করলে ফাংশনগুলি সর্বদা একই ফলাফল প্রদান করবে। এই ধরনের ভাষাগুলি সাধারণত শুধুমাত্র এমন ফাংশনগুলিকে সমর্থন করে যা একটি মান প্রদান করে, যেহেতু যে ফাংশনগুলি একটি মান প্রদান করে না তাদের কোনও ব্যবহার নেই যদি না তারা কোনও পার্শ্ব প্রতিক্রিয়া সৃষ্টি করতে পারে। সি, সি + + এবং সি #-এর মতো প্রোগ্রামিং ভাষাগুলিতে, যে ফাংশনগুলি একটি মান প্রদান করে এবং যে ফাংশনগুলি কোনও মান প্রদান করে না, উভয়কেই "ফাংশন" বলা হয় (গাণিতিক ফাংশন বা কার্যকরী প্রোগ্রামিংয়ের সাথে বিভ্রান্ত হবেন না, যা বিভিন্ন ধারণা)। একটি ভাষার সংকলক সাধারণত পদ্ধতি কলগুলি অনুবাদ করে এবং একটি সুনির্দিষ্ট কলিং কনভেনশন অনুসারে মেশিনের নির্দেশাবলীতে ফিরে আসে, যাতে ফাংশনগুলি কল করা প্রোগ্রামগুলি থেকে আলাদাভাবে সংকলিত করা যায়। কল এবং রিটার্ন স্টেটমেন্টের সাথে সম্পর্কিত নির্দেশের ক্রমকে পদ্ধতির প্রস্তাবনা এবং উপসংহার বলা হয়। একটি প্রোগ্রামকে ফাংশনে বিভক্ত করার সুবিধার মধ্যে রয়েছেঃ একটি জটিল প্রোগ্রামিং কাজকে সহজ ধাপে বিভক্ত করাঃ ডেটা স্ট্রাকচার সহ এটি স্ট্রাকচার্ড প্রোগ্রামিংয়ের দুটি প্রধান সরঞ্জামের মধ্যে একটি, একটি প্রোগ্রামের মধ্যে ডুপ্লিকেট কোড হ্রাস করা একাধিক প্রোগ্রাম জুড়ে কোডের পুনঃব্যবহার সক্ষম করা বিভিন্ন প্রোগ্রামার বা প্রকল্পের বিভিন্ন পর্যায়ে একটি বড় প্রোগ্রামিং কাজকে ভাগ করা ফাংশন ব্যবহারকারীদের কাছ থেকে বাস্তবায়নের বিবরণ লুকিয়ে রাখা একটি ফাংশন কল দিয়ে কোডের একটি ব্লক প্রতিস্থাপন করে কোডের পঠনযোগ্যতা উন্নত করা যেখানে একটি বর্ণনামূলক ফাংশন নাম কোডের ব্লক বর্ণনা করতে কাজ করে। ফাংশনটি পুনরায় ব্যবহার করার জন্য না হলেও এটি কলিং কোডটিকে সংক্ষিপ্ত এবং পাঠযোগ্য করে তোলে। ট্রেসেবিলিটির উন্নতি (অর্থাৎ। বেশিরভাগ ভাষাগুলি কল ট্রেস পাওয়ার উপায় সরবরাহ করে যার মধ্যে জড়িত ফাংশনগুলির নাম এবং সম্ভবত আরও তথ্য যেমন ফাইলের নাম এবং লাইন নম্বর রয়েছে); কোডটিকে ফাংশনে বিভক্ত না করলে, ডিবাগিং গুরুতরভাবে ক্ষতিগ্রস্ত হবে ইন-লাইন কোড ব্যবহারের তুলনায় অসুবিধা, একটি ফাংশন আহ্বান কল পদ্ধতিতে কিছু গণনামূলক ওভারহেড আরোপ করে। একটি ফাংশনে সাধারণত স্ট্যান্ডার্ড হাউসকিপিং কোডের প্রয়োজন হয়-ফাংশনে প্রবেশ এবং প্রস্থান উভয় সময়েই (ফাংশন প্রোলগ এবং উপসংহার-সাধারণত সাধারণ উদ্দেশ্য রেজিস্টার এবং রিটার্ন ঠিকানা ন্যূনতম হিসাবে সংরক্ষণ করা হয়)। ইতিহাস কম্পিউটিং মেশিনগুলি ইতিমধ্যে কিছু সময়ের জন্য বিদ্যমান থাকার পরে একটি সাবরুটিনের ধারণা তৈরি করা হয়েছিল। গাণিতিক এবং শর্তাধীন লাফ নির্দেশাবলী সময়ের আগে পরিকল্পনা করা হয়েছিল এবং তুলনামূলকভাবে সামান্য পরিবর্তিত হয়েছে, তবে পদ্ধতি কলগুলির জন্য ব্যবহৃত বিশেষ নির্দেশাবলী বছরের পর বছর ধরে ব্যাপকভাবে পরিবর্তিত হয়েছে। ম্যানচেস্টার বেবি এবং আরসিএ 1802-এর মতো প্রাচীনতম কম্পিউটার এবং মাইক্রোপ্রসেসরগুলিতে একটিও সাবরুটিন কল নির্দেশনা ছিল না। সাবরুটিনগুলি প্রয়োগ করা যেতে পারে, তবে তাদের প্রোগ্রামারদের প্রতিটি কল সাইটে কল সিকোয়েন্স-নির্দেশাবলীর একটি সিরিজ-ব্যবহার করার প্রয়োজন ছিল। 1945 সালে কনরাড জুসের জেড4-এ সাবরুটিন প্রয়োগ করা হয়। 1945 সালে, অ্যালান এম টুরিং সাবরুটিন থেকে কল এবং ফিরে আসার উপায় হিসাবে "কবর" এবং "আনবারি" শব্দগুলি ব্যবহার করেছিলেন। 1947 সালের জানুয়ারিতে জন মাউক্লি হার্ভার্ড বিশ্ববিদ্যালয় এবং মার্কিন যুক্তরাষ্ট্রের নৌবাহিনীর ব্যুরো অফ অর্ডন্যান্সের যৌথ পৃষ্ঠপোষকতার অধীনে 'এ সিম্পোজিয়াম অফ লার্জ স্কেল ডিজিটাল ক্যালকুলেটিং মেশিনারি'-তে সাধারণ নোট উপস্থাপন করেন। এখানে তিনি সিরিয়াল এবং সমান্তরাল অপারেশন নিয়ে আলোচনা করেছেন যে কে ম্যাকনাল্টি ইএনআইএসি দলে জন মাউচলির সাথে ঘনিষ্ঠভাবে কাজ করেছিলেন এবং দ্বিতীয় বিশ্বযুদ্ধের সময় তিনি যে ইএনআইএসি কম্পিউটার প্রোগ্রামিং করছিলেন তার জন্য সাবরুটিনের জন্য একটি ধারণা তৈরি করেছিলেন। তিনি এবং অন্যান্য ই. এন. আই. এ. সি প্রোগ্রামাররা ক্ষেপণাস্ত্রের গতিপথ গণনায় সহায়তা করার জন্য সাবরুটিনগুলি ব্যবহার করেছিলেন। গোল্ডস্টাইন এবং ভন নিউম্যান 1948 সালের 16ই আগস্ট তারিখে সাবরুটিনের ব্যবহার নিয়ে আলোচনা করে একটি গবেষণাপত্র লিখেছিলেন। কিছু খুব প্রাথমিক কম্পিউটার এবং মাইক্রোপ্রসেসর, যেমন আইবিএম 1620, ইন্টেল 4004 এবং ইন্টেল 8008, এবং পিআইসি মাইক্রোকন্ট্রোলারগুলির একটি একক-নির্দেশমূলক সাবরুটিন কল রয়েছে যা রিটার্ন অ্যাড্রেসগুলি সংরক্ষণ করার জন্য একটি ডেডিকেটেড হার্ডওয়্যার স্ট্যাক ব্যবহার করে-এই ধরনের হার্ডওয়্যার শুধুমাত্র কয়েকটি স্তরের সাবরুটিন নেস্টিং সমর্থন করে, তবে পুনরাবৃত্তিমূলক সাবরুটিনগুলিকে সমর্থন করতে পারে। 1960-এর দশকের মাঝামাঝি সময়ের আগে-যেমন ইউনিভাক আই, পিডিপি-1 এবং আইবিএম 1130-সাধারণত একটি কলিং কনভেনশন ব্যবহার করে যা সাবরুটিনের প্রথম মেমরি অবস্থানে নির্দেশ কাউন্টারটি সংরক্ষণ করে। এটি নির্বিচারে গভীর স্তরে সাবরুটিন বাসা বাঁধার অনুমতি দেয় তবে পুনরাবৃত্তিমূলক সাবরুটিনগুলিকে সমর্থন করে না। আইবিএম সিস্টেম/360-এর একটি সাবরুটিন কল নির্দেশ ছিল যা সংরক্ষিত নির্দেশ পাল্টা মানকে একটি সাধারণ-উদ্দেশ্য রেজিস্টারে স্থাপন করেছিল; এটি নির্বিচারে গভীর সাবরুটিন নেস্টিং এবং পুনরাবৃত্তিমূলক সাবরুটিনগুলিকে সমর্থন করতে ব্যবহার করা যেতে পারে। পিডিপি-11 (1970) স্ট্যাক-পুশিং সাবরুটিন কল নির্দেশ সহ প্রথম কম্পিউটারগুলির মধ্যে একটি; এই বৈশিষ্ট্যটি নির্বিচারে গভীর সাবরুটিন নেস্টিং এবং পুনরাবৃত্তিমূলক সাবরুটিন উভয়কেই সমর্থন করে। ভাষা সমর্থন খুব প্রাথমিক সমাবেশগুলিতে, সাবরুটিন সমর্থন সীমিত ছিল। সাবরুটিনগুলি একে অপরের থেকে বা মূল প্রোগ্রাম থেকে স্পষ্টভাবে পৃথক করা হয়নি এবং প্রকৃতপক্ষে একটি সাবরুটিনের সোর্স কোড অন্যান্য সাবপ্রোগ্রামের সাথে ছড়িয়ে দেওয়া যেতে পারে। কিছু অ্যাসেম্বলার কল এবং রিটার্ন সিকোয়েন্স তৈরি করতে পূর্বনির্ধারিত ম্যাক্রো অফার করবে। 1960-এর দশকে, অ্যাসেম্বলারদের সাধারণত ইনলাইন এবং পৃথকভাবে একত্রিত সাবরুটিন উভয়ের জন্য অনেক বেশি পরিশীলিত সমর্থন ছিল যা একসাথে সংযুক্ত করা যেতে পারে। ব্যবহারকারী-লিখিত সাবরুটিন এবং ফাংশনগুলিকে সমর্থন করার জন্য প্রথম প্রোগ্রামিং ভাষাগুলির মধ্যে একটি ছিল ফোরট্রান II। আইবিএম ফোরট্রান II সংকলক 1958 সালে মুক্তি পায়। এএলজিওএল 58 এবং অন্যান্য প্রাথমিক প্রোগ্রামিং ভাষাগুলিও পদ্ধতিগত প্রোগ্রামিংকে সমর্থন করেছিল। গ্রন্থাগার এই জটিল পদ্ধতির মধ্যেও সাবরুটিনগুলি খুব কার্যকর প্রমাণিত হয়েছিল। তারা বিভিন্ন প্রোগ্রামে একই কোড ব্যবহারের অনুমতি দেয়। প্রাথমিক কম্পিউটারগুলিতে মেমরি একটি খুব দুর্লভ সম্পদ ছিল এবং সাবরুটিনগুলি প্রোগ্রামের আকারে উল্লেখযোগ্য সঞ্চয় করতে পারত। অনেক প্রাথমিক কম্পিউটার একটি ঘুষি দেওয়া কাগজের টেপ থেকে প্রোগ্রামের নির্দেশাবলী মেমরিতে লোড করে। প্রতিটি সাবরুটিন তারপর একটি পৃথক টুকরো টেপ দ্বারা সরবরাহ করা যেতে পারে, প্রধান প্রোগ্রামের আগে বা পরে (বা "মেইনলাইন") লোড বা স্প্লাইস করা যেতে পারে; এবং একই সাবরুটিন টেপ তারপর বিভিন্ন প্রোগ্রাম দ্বারা ব্যবহার করা যেতে পারে। একই ধরনের পদ্ধতি কম্পিউটারে ব্যবহার করা হত যা পাঞ্চড কার্ড থেকে প্রোগ্রামের নির্দেশাবলী লোড করত। সাবরুটিন লাইব্রেরি নামের আক্ষরিক অর্থ হল একটি গ্রন্থাগার, যা সমষ্টিগত ব্যবহারের জন্য টেপ বা কার্ডের ডেকের সূচীকৃত সংগ্রহ রাখে। স্ব-পরিবর্তনকারী কোডের প্রয়োজনীয়তা দূর করার জন্য, কম্পিউটার ডিজাইনাররা অবশেষে একটি পরোক্ষ লাফ নির্দেশ প্রদান করেছিলেন, যার অপারেন্ড, রিটার্ন অ্যাড্রেস হওয়ার পরিবর্তে, রিটার্ন অ্যাড্রেস ধারণকারী একটি পরিবর্তনশীল বা প্রসেসর রেজিস্টারের অবস্থান ছিল। সেই কম্পিউটারগুলিতে, ফাংশনের রিটার্ন জাম্প পরিবর্তন করার পরিবর্তে, কলিং প্রোগ্রামটি রিটার্ন অ্যাড্রেসটিকে একটি পরিবর্তনশীল স্থানে সংরক্ষণ করবে যাতে ফাংশনটি শেষ হলে, এটি একটি পরোক্ষ লাফ কার্যকর করবে যা পূর্বনির্ধারিত পরিবর্তনশীল দ্বারা প্রদত্ত অবস্থানে কার্যকর করবে। আরেকটি অগ্রগতি ছিল সাব-রুটিন নির্দেশে লাফ দেওয়া, যা কলিং জাম্পের সাথে রিটার্ন অ্যাড্রেসের সঞ্চয়কে একত্রিত করে, যার ফলে ওভারহেড উল্লেখযোগ্যভাবে হ্রাস পায়। উদাহরণস্বরূপ, আইবিএম সিস্টেম/360-এ, শাখা নির্দেশাবলী বিএএল বা বিএএলআর, পদ্ধতি কলিংয়ের জন্য ডিজাইন করা হয়েছে, কনভেনশন রেজিস্টার 14 দ্বারা নির্দেশে নির্দিষ্ট প্রসেসর রেজিস্টারে রিটার্ন ঠিকানাটি সংরক্ষণ করবে। ফিরে আসার জন্য, সাবরুটিনের শুধুমাত্র সেই রেজিস্টারের মাধ্যমে একটি পরোক্ষ শাখা নির্দেশ (বি. আর) কার্যকর করতে হত। যদি সাবরুটিনের অন্য কোনও উদ্দেশ্যে সেই রেজিস্টারের প্রয়োজন হয় (যেমন অন্য সাবরুটিনে কল করা), তবে এটি রেজিস্টারের বিষয়বস্তুগুলিকে একটি ব্যক্তিগত মেমরি অবস্থান বা একটি রেজিস্টার স্ট্যাকে সংরক্ষণ করবে। এইচপি 2100-এর মতো সিস্টেমে, জে. এস. বি নির্দেশটি একটি অনুরূপ কাজ সম্পাদন করবে, ব্যতীত রিটার্ন অ্যাড্রেসটি মেমরি অবস্থানে সংরক্ষণ করা হয়েছিল যা শাখার লক্ষ্য ছিল। প্রক্রিয়াটির সম্পাদন আসলে পরবর্তী স্মৃতির অবস্থান থেকে শুরু হবে। উদাহরণস্বরূপ, এইচপি 2100 অ্যাসেম্বলি ভাষায় একজন লিখবেন. জে. এস. বি এম. ওয়াই. এস. ইউ. বি (কল সাবরুটিন এম. ওয়াই. এস. ইউ. বি)। বিবি। (মাইসুব শেষ হওয়ার পর এখানে ফিরে আসব।) মূল প্রোগ্রাম থেকে এমওয়াইএসইউবি নামে একটি সাবরুটিনে কল করা। সাব-রুটিনটি এমওয়াইএসইউবি এনওপি (এমওয়াইএসইউবি-র রিটার্ন ঠিকানার জন্য সঞ্চয়) হিসাবে কোড করা হবে। এএ। (মাইসুবের মূল অংশের সূচনা।) . জেএমপি মাইসুব, আই (কলিং প্রোগ্রামে ফিরে আসে।) জে. এস. বি নির্দেশটি পরবর্তী নির্দেশের ঠিকানা (যথা, বি. বি) তার অপারেন্ড (যথা, এম. ওয়াই. এস. ইউ. বি) হিসাবে নির্দিষ্ট স্থানে স্থাপন করে এবং তারপরে পরবর্তী অবস্থানে (যথা, এ. এ = এম ওয়াই. এস. ইউ. বি + 1) শাখা স্থাপন করে। সাবরুটিনটি তখন পরোক্ষ লাফ জেএমপি এমওয়াইএসইউবি কার্যকর করে মূল প্রোগ্রামে ফিরে আসতে পারে, যা এমওয়াইএসইউবি অবস্থানে সংরক্ষিত অবস্থানে শাখা স্থাপন করে। ফোরট্রান এবং অন্যান্য ভাষার জন্য সংকলকগুলি যখন পাওয়া যায় তখন সহজেই এই নির্দেশাবলী ব্যবহার করতে পারে। এই পদ্ধতিটি একাধিক স্তরের কলগুলিকে সমর্থন করেছিল; তবে, যেহেতু একটি সাবরুটিনের রিটার্ন অ্যাড্রেস, প্যারামিটার এবং রিটার্ন মানগুলিকে নির্দিষ্ট মেমরি অবস্থান বরাদ্দ করা হয়েছিল, তাই এটি পুনরাবৃত্তিমূলক কলগুলির অনুমতি দেয়নি। ঘটনাচক্রে, 1980-এর দশকের গোড়ার দিকে লোটাস 1-2-3 একটি স্প্রেডশীটে পুনঃগণনার নির্ভরতা আবিষ্কার করতে একই ধরনের পদ্ধতি ব্যবহার করেছিল। অর্থাৎ, ফেরতের ঠিকানা সংরক্ষণের জন্য প্রতিটি কক্ষে একটি স্থান সংরক্ষিত ছিল। যেহেতু বৃত্তাকার রেফারেন্সগুলি প্রাকৃতিক পুনঃগণনার ক্রমের জন্য অনুমোদিত নয়, তাই এটি স্মৃতিতে স্ট্যাকের জন্য স্থান সংরক্ষণ না করে একটি ট্রি ওয়াকের অনুমতি দেয়, যা আইবিএম পিসির মতো ছোট কম্পিউটারগুলিতে খুব সীমিত ছিল। কল স্ট্যাক একটি ফাংশন কলের বেশিরভাগ আধুনিক বাস্তবায়ন একটি কল স্ট্যাক ব্যবহার করে, যা ফাংশন কল এবং রিটার্ন বাস্তবায়নের জন্য স্ট্যাক ডেটা কাঠামোর একটি বিশেষ কেস। প্রতিটি পদ্ধতি কল স্ট্যাকের শীর্ষে একটি নতুন এন্ট্রি তৈরি করে, যাকে স্ট্যাক ফ্রেম বলা হয়; যখন প্রক্রিয়াটি ফিরে আসে, তখন তার স্ট্যাক ফ্রেম স্ট্যাক থেকে মুছে ফেলা হয় এবং এর স্থানটি অন্যান্য প্রক্রিয়া কলের জন্য ব্যবহার করা যেতে পারে। প্রতিটি স্ট্যাক ফ্রেমে সংশ্লিষ্ট কলের ব্যক্তিগত তথ্য থাকে, যার মধ্যে সাধারণত পদ্ধতির পরামিতি এবং অভ্যন্তরীণ পরিবর্তনশীল এবং রিটার্ন ঠিকানা অন্তর্ভুক্ত থাকে। কল সিকোয়েন্সটি সাধারণ নির্দেশাবলীর একটি ক্রম দ্বারা প্রয়োগ করা যেতে পারে (একটি পদ্ধতি যা এখনও রিডিউসড ইন্সট্রাকশন সেট কম্পিউটিং (আরআইএসসি) এবং খুব দীর্ঘ ইন্সট্রাকশন ওয়ার্ড (ভিএলআইডাব্লু) আর্কিটেকচারে ব্যবহৃত হয়), তবে 1960-এর দশকের শেষের দিক থেকে ডিজাইন করা অনেক ঐতিহ্যবাহী মেশিনে সেই উদ্দেশ্যে বিশেষ নির্দেশাবলী অন্তর্ভুক্ত করা হয়েছে। কল স্ট্যাক সাধারণত স্মৃতির একটি সংলগ্ন ক্ষেত্র হিসাবে প্রয়োগ করা হয়। স্ট্যাকের নীচের অংশটি এই অঞ্চলের মধ্যে সর্বনিম্ন বা সর্বোচ্চ ঠিকানা কিনা তা একটি নির্বিচারে নকশা পছন্দ, যাতে স্ট্যাকটি স্মৃতিতে সামনের দিকে বা পিছনের দিকে বাড়তে পারে; তবে, অনেক আর্কিটেকচার পরেরটি বেছে নিয়েছে। কিছু নকশা, বিশেষত কিছু ফোর্থ বাস্তবায়ন, দুটি পৃথক স্ট্যাক ব্যবহার করে, একটি মূলত নিয়ন্ত্রণ তথ্যের জন্য (যেমন রিটার্ন অ্যাড্রেস এবং লুপ কাউন্টার) এবং অন্যটি ডেটার জন্য। প্রথমটি ছিল, বা একটি কল স্ট্যাকের মতো কাজ করে এবং অন্যান্য ভাষা গঠনের মাধ্যমে প্রোগ্রামারের কাছে পরোক্ষভাবে অ্যাক্সেসযোগ্য ছিল, যেখানে পরেরটি আরও সরাসরি অ্যাক্সেসযোগ্য ছিল। যখন স্ট্যাক-ভিত্তিক পদ্ধতি কলগুলি প্রথম চালু করা হয়েছিল, তখন একটি গুরুত্বপূর্ণ প্রেরণা ছিল মূল্যবান স্মৃতি সংরক্ষণ করা। এই পরিকল্পনার মাধ্যমে, সংকলককে প্রতিটি পদ্ধতির ব্যক্তিগত তথ্যের (পরামিতি, ফেরত ঠিকানা এবং স্থানীয় পরিবর্তনশীল) জন্য স্মৃতিতে আলাদা জায়গা সংরক্ষণ করতে হবে না। যে কোনও মুহূর্তে, স্ট্যাকটিতে বর্তমানে সক্রিয় কলগুলির ব্যক্তিগত তথ্য থাকে (যথা, যেগুলি কল করা হয়েছে কিন্তু এখনও ফিরে আসেনি)। সাধারণত গ্রন্থাগার থেকে প্রোগ্রামগুলি একত্রিত করার উপায়গুলির কারণে, হাজার হাজার ফাংশন অন্তর্ভুক্ত এমন প্রোগ্রামগুলি খুঁজে পাওয়া অস্বাভাবিক ছিল না (এবং এখনও রয়েছে), যার মধ্যে যে কোনও নির্দিষ্ট মুহুর্তে কেবল হাতে গোনা কয়েকটি সক্রিয় থাকে। এই ধরনের প্রোগ্রামগুলির জন্য, কল স্ট্যাক প্রক্রিয়া উল্লেখযোগ্য পরিমাণে মেমরি সঞ্চয় করতে পারে। প্রকৃতপক্ষে, কল স্ট্যাক প্রক্রিয়াকে স্বয়ংক্রিয় মেমরি পরিচালনার জন্য প্রাচীনতম এবং সহজতম পদ্ধতি হিসাবে দেখা যেতে পারে। যাইহোক, কল স্ট্যাক পদ্ধতির আরেকটি সুবিধা হল এটি পুনরাবৃত্তিমূলক ফাংশন কলের অনুমতি দেয়, কারণ একই পদ্ধতিতে প্রতিটি নেস্টেড কল তার ব্যক্তিগত তথ্যের একটি পৃথক উদাহরণ পায়। মাল্টি-থ্রেডেড পরিবেশে সাধারণত একাধিক স্ট্যাক থাকে। একটি পরিবেশ যা সম্পূর্ণরূপে করোটিন বা অলস মূল্যায়নকে সমর্থন করে, তাদের সক্রিয়করণ রেকর্ড সংরক্ষণ করতে স্ট্যাক ব্যতীত অন্য ডেটা কাঠামো ব্যবহার করতে পারে। বিলম্বিত স্ট্যাকিং কল স্ট্যাক পদ্ধতির একটি অসুবিধা হল একটি পদ্ধতি কলের বর্ধিত খরচ এবং তার ম্যাচিং রিটার্ন। অতিরিক্ত খরচের মধ্যে রয়েছে স্ট্যাক পয়েন্টার বৃদ্ধি ও হ্রাস করা (এবং, কিছু আর্কিটেকচারে, স্ট্যাক ওভারফ্লো পরীক্ষা করা), এবং পরম ঠিকানার পরিবর্তে ফ্রেম-রিলেটিভ অ্যাড্রেস দ্বারা স্থানীয় ভেরিয়েবল এবং প্যারামিটারগুলি অ্যাক্সেস করা। ব্যয়টি কার্যকর করার সময় বৃদ্ধি, বা প্রসেসর জটিলতা বৃদ্ধি, বা উভয় ক্ষেত্রেই উপলব্ধি করা যেতে পারে। এই ওভারহেডটি পাতার পদ্ধতি বা পাতার ক্রিয়াকলাপে সবচেয়ে সুস্পষ্ট এবং আপত্তিকর, যা কোনও পদ্ধতি ছাড়াই ফিরে আসে। সেই ওভারহেড কমাতে, অনেক আধুনিক সংকলক কল স্ট্যাকের ব্যবহার বিলম্বিত করার চেষ্টা করে যতক্ষণ না এটি সত্যিই প্রয়োজন হয়। উদাহরণস্বরূপ, একটি পদ্ধতি পি-এর কল নির্দিষ্ট প্রসেসর রেজিস্টারে কল করা পদ্ধতির রিটার্ন অ্যাড্রেস এবং প্যারামিটারগুলি সংরক্ষণ করতে পারে এবং একটি সাধারণ লাফ দিয়ে পদ্ধতির মূল অংশে নিয়ন্ত্রণ স্থানান্তর করতে পারে। যদি পদ্ধতি পি অন্য কোনও কল না করে ফিরে আসে, কল স্ট্যাকটি মোটেও ব্যবহার করা হয় না। যদি 'পি'-কে অন্য একটি পদ্ধতি 'কিউ' কল করতে হয়, তবে এটি 'কিউ' রিটার্নের পরে প্রয়োজনীয় যে কোনও রেজিস্টারের (যেমন রিটার্ন অ্যাড্রেস) বিষয়বস্তু সংরক্ষণ করতে 'কল স্ট্যাক' ব্যবহার করবে। উদাহরণস্বরূপ সি এবং সি + + প্রোগ্রামিং ভাষাগুলিতে, সাবপ্রোগ্রামগুলিকে ফাংশন বলা হয় (কোনও শ্রেণীর সাথে যুক্ত হলে আরও সদস্য ফাংশন হিসাবে শ্রেণীবদ্ধ করা হয়, বা না হলে মুক্ত ফাংশন হিসাবে)। এই ভাষাগুলি বিশেষ কীওয়ার্ড অকার্যকর ব্যবহার করে নির্দেশ করে যে কোনও ফাংশন কোনও মান প্রদান করে না। লক্ষ্য করুন যে সি/সি + + ফাংশনগুলির পার্শ্ব প্রতিক্রিয়া থাকতে পারে, যার মধ্যে যে কোনও ভেরিয়েবলের পরিবর্তন করা রয়েছে যার ঠিকানা প্যারামিটার হিসাবে পাস করা হয়। উদাহরণস্বরূপঃ অকার্যকর ফাংশন1 () {/* কিছু কোড */} ফাংশনটি একটি মান প্রদান করে না এবং এটিকে একটি স্বতন্ত্র ফাংশন হিসাবে অভিহিত করতে হয়, যেমন, ফাংশন1 (); int ফাংশন2 () {রিটার্ন 5;} এই ফাংশনটি একটি ফলাফল প্রদান করে (সংখ্যা 5), এবং কলটি একটি অভিব্যক্তির অংশ হতে পারে, যেমন, x + ফাংশন2 () চার ফাংশন3 (int সংখ্যা) {চার নির্বাচন [] = {'S', 'M', 'T', 'W', 'T', 'F', 'S'}; রিটার্ন নির্বাচন [সংখ্যা]; এই ফাংশনটি 0 এবং 6 এর মধ্যে একটি সংখ্যাকে প্রাথমিক অক্ষরে রূপান্তরিত করে। এটিকে কল করার ফলাফল একটি পরিবর্তনশীলকে বরাদ্দ করা যেতে পারে, যেমন, num _ দিন = ফাংশন 3 (সংখ্যা);। অকার্যকর ফাংশন 4 (int * pointer _ to _ ver) {(* pointer _ to _ ver) + +;} এই ফাংশনটি কোনও মান প্রদান করে না কিন্তু সেই পরিবর্তনশীলকে পরিবর্তন করে যার ঠিকানা প্যারামিটার হিসাবে পাস করা হয়; এটি ফাংশন 4 (& পরিবর্তনশীল _ থেকে _ বৃদ্ধি) দিয়ে ডাকা হবে। বেসিক উপভাষাগুলি মাইক্রোসফ্ট স্মল বেসিক এক্সাম্পল () 'কলস দ্য সাবরুটিন সাব এক্সাম্পল' সাবরুটিন TextWindow.WriteLine শুরু করে ("এটি মাইক্রোসফ্ট স্মল বেসিকের একটি সাবরুটিনের উদাহরণ")। 'সাবরুটিন কি করে এন্ডসব' সাবরুটিন শেষ করে উপরের উদাহরণে, উদাহরণ () সাবরুটিনকে কল করে। প্রকৃত সাব-রুটিন সংজ্ঞায়িত করতে, সাব-রুটিন নাম সহ সাব-রুটিন কীওয়ার্ড ব্যবহার করতে হবে। বিষয়বস্তু অনুসরণ করার পরে, এন্ডসাব অবশ্যই টাইপ করতে হবে। ভিজ্যুয়াল বেসিক (ক্লাসিক) ভাষায়, সাবপ্রোগ্রামগুলিকে ফাংশন বা সাব (বা কোনও শ্রেণীর সাথে যুক্ত হলে পদ্ধতি) বলা হয়। ভিজ্যুয়াল বেসিক 6 একটি পরামিতি হিসাবে কী পাস করা হচ্ছে তা সংজ্ঞায়িত করতে প্রকার নামে বিভিন্ন শব্দ ব্যবহার করে। ডিফল্টরূপে, একটি অনির্দিষ্ট পরিবর্তনশীল একটি বৈকল্পিক প্রকার হিসাবে নিবন্ধিত হয় এবং বাইরেফ (ডিফল্ট) বা বাইভাল হিসাবে পাস করা যেতে পারে। এছাড়াও, যখন কোনও ফাংশন বা সাব ঘোষণা করা হয়, তখন এটিকে একটি পাবলিক, প্রাইভেট বা ফ্রেন্ড উপাধি দেওয়া হয়, যা নির্ধারণ করে যে এটি যে মডিউল বা প্রকল্পে ঘোষণা করা হয়েছিল তার বাইরে অ্যাক্সেস করা যেতে পারে কিনা। মান দ্বারা [বাইভাল]-একটি যুক্তির মান একটি পদ্ধতিতে পাস করার একটি উপায়, মূল্যের একটি অনুলিপি পাস করে, ঠিকানাটি পাস করার পরিবর্তে। ফলস্বরূপ, পরিবর্তনশীলের প্রকৃত মানটি যে পদ্ধতিতে পাস করা হয় তার দ্বারা পরিবর্তন করা যায় না। রেফারেন্স দ্বারা [বাইরেফ]-একটি যুক্তির মান তার মানের একটি অনুলিপি পাস করার পরিবর্তে, পরিবর্তনশীলের একটি ঠিকানা পাস করে একটি পদ্ধতিতে পাস করার একটি উপায়। এটি প্রক্রিয়াটিকে প্রকৃত পরিবর্তনশীলটি অ্যাক্সেস করার অনুমতি দেয়। ফলস্বরূপ, পরিবর্তনশীলের প্রকৃত মানটি যে পদ্ধতিতে পাস করা হয় তার দ্বারা পরিবর্তিত হতে পারে। অন্যথায় নির্দিষ্ট না করা হলে, যুক্তিগুলি রেফারেন্স দ্বারা পাস করা হয়। সর্বজনীন (ঐচ্ছিক)-নির্দেশ করে যে ফাংশন পদ্ধতিটি সমস্ত মডিউলের অন্যান্য সমস্ত পদ্ধতির জন্য অ্যাক্সেসযোগ্য। যদি কোনও মডিউলে ব্যবহার করা হয় যার মধ্যে একটি বিকল্প ব্যক্তিগত থাকে, তবে পদ্ধতিটি প্রকল্পের বাইরে উপলব্ধ নয়। ব্যক্তিগত (ঐচ্ছিক)-নির্দেশ করে যে ফাংশন পদ্ধতিটি শুধুমাত্র মডিউলের অন্যান্য পদ্ধতির জন্য অ্যাক্সেসযোগ্য যেখানে এটি ঘোষণা করা হয়। বন্ধু (ঐচ্ছিক)-শুধুমাত্র একটি শ্রেণী মডিউলে ব্যবহৃত হয়। নির্দেশ করে যে ফাংশন পদ্ধতিটি পুরো প্রকল্প জুড়ে দৃশ্যমান, তবে কোনও বস্তুর উদাহরণের নিয়ন্ত্রকের কাছে দৃশ্যমান নয়। প্রাইভেট ফাংশন ফাংশন 1 () 'কিছু কোড এখানে শেষ ফাংশন ফাংশনটি একটি মান ফেরত দেয় না এবং এটিকে একটি স্বতন্ত্র ফাংশন হিসাবে ডাকতে হয়, উদাহরণস্বরূপ, ফাংশন 1 প্রাইভেট ফাংশন ফাংশন 2 () পূর্ণসংখ্যা ফাংশন 2 = 5 শেষ ফাংশন হিসাবে এই ফাংশনটি একটি ফলাফল (5 নম্বর) প্রদান করে এবং কলটি একটি এক্সপ্রেশনের অংশ হতে পারে, উদাহরণস্বরূপ, x + ফাংশন 2 () প্রাইভেট ফাংশন ফাংশন 3 (পূর্ণসংখ্যা হিসাবে বাইভাল ইন্টভ্যালু) স্ট্রিং ডিম স্ট্রারে (6) স্ট্রিং স্ট্রারে = অ্যারে ("M", "T", "W", "T", "F", "S") হিসাবে। এটিকে কল করার ফলাফল একটি পরিবর্তনশীলকে বরাদ্দ করা যেতে পারে, যেমন, num _ দিন = ফাংশন 3 (সংখ্যা)। ব্যক্তিগত ফাংশন ফাংশন 4 (পূর্ণসংখ্যা হিসাবে বাইরেফ ইন্টভ্যালু) 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 হবেঃ ওয়েলকাম মার্টিন স্থানীয় চলক, পুনরাবৃত্তি এবং পুনঃপ্রবেশ একটি উপ-প্রোগ্রাম নির্দিষ্ট পরিমাণ স্ক্র্যাচ স্থান ব্যবহার করতে কার্যকর বলে মনে করতে পারে; অর্থাৎ, মধ্যবর্তী ফলাফল ধরে রাখার জন্য সেই উপ-প্রোগ্রামটি কার্যকর করার সময় ব্যবহৃত মেমরি। এই স্ক্র্যাচ স্পেসে সঞ্চিত ভেরিয়েবলগুলিকে স্থানীয় ভেরিয়েবল বলা হয় এবং স্ক্র্যাচ স্পেসকে অ্যাক্টিভেশন রেকর্ড বলা হয়। একটি অ্যাক্টিভেশন রেকর্ডে সাধারণত একটি রিটার্ন অ্যাড্রেস থাকে যা সাবপ্রোগ্রাম শেষ হওয়ার পরে নিয়ন্ত্রণ কোথায় ফিরিয়ে দিতে হবে তা বলে। একটি উপ-প্রোগ্রামে কল সাইটের যে কোনও নম্বর এবং প্রকৃতি থাকতে পারে। যদি পুনরাবৃত্তি সমর্থিত হয়, একটি সাবপ্রোগ্রাম এমনকি নিজেকে কল করতে পারে, যার ফলে একই সাবপ্রোগ্রামের আরেকটি নেস্টেড এক্সিকিউশন ঘটার সময় তার এক্সিকিউশন স্থগিত হতে পারে। কিছু জটিল অ্যালগরিদমকে সহজতর করার এবং জটিল সমস্যাগুলিকে ভেঙে ফেলার জন্য পুনরাবৃত্তি একটি কার্যকর উপায়। পুনরাবৃত্তিমূলক ভাষাগুলি সাধারণত প্রতিটি কলে স্থানীয় পরিবর্তনশীলগুলির একটি নতুন অনুলিপি সরবরাহ করে। প্রোগ্রামার যদি কলের মধ্যে স্থানীয় ভেরিয়েবলের মান একই রাখতে চান, তবে সেগুলিকে কিছু ভাষায় স্থির ঘোষণা করা যেতে পারে, অথবা বৈশ্বিক মান বা সাধারণ ক্ষেত্রগুলি ব্যবহার করা যেতে পারে। এখানে ফিবোনাচ্চি সংখ্যা খুঁজে বের করার জন্য সি/সি + +-এ একটি পুনরাবৃত্তিমূলক ফাংশনের একটি উদাহরণ রয়েছেঃ ইন্টি ফাইব (ইন্টি এন) {যদি (এন <= 1) {রিটার্ন এন;} রিটার্ন ফাইব (এন-1) + ফাইব (এন-2);} ফোরট্রানের মতো প্রাথমিক ভাষাগুলি প্রাথমিকভাবে পুনরাবৃত্তিকে সমর্থন করত না কারণ ভেরিয়েবলগুলি স্থিতিশীলভাবে বরাদ্দ করা হয়েছিল, পাশাপাশি রিটার্ন ঠিকানার জন্য অবস্থানও ছিল। প্রাথমিক কম্পিউটার নির্দেশ সেটগুলি একটি স্ট্যাকে রিটার্ন অ্যাড্রেস এবং ভেরিয়েবল সংরক্ষণ করা কঠিন করে তোলে। সূচক রেজিস্টার বা সাধারণ-উদ্দেশ্য রেজিস্টার সহ মেশিনগুলি, যেমন, সিডিসি 6000 সিরিজ, পিডিপি-6, জিই 635, সিস্টেম/360, ইউনিভাক 1100 সিরিজ, স্ট্যাক পয়েন্টার হিসাবে সেই রেজিস্টারগুলির মধ্যে একটি ব্যবহার করতে পারে। এএলজিওএল-এর পরে আধুনিক ভাষাগুলি যেমন পিএল/আই এবং সি প্রায় অপরিবর্তনীয়ভাবে একটি স্ট্যাক ব্যবহার করে, যা সাধারণত একটি সাবপ্রোগ্রামের প্রতিটি সম্পাদনের জন্য একটি নতুন সক্রিয়করণ রেকর্ড সরবরাহ করতে বেশিরভাগ আধুনিক কম্পিউটার নির্দেশ সেট দ্বারা সমর্থিত। এইভাবে, নেস্টেড এক্সিকিউশন চলমান অন্যান্য স্থগিত মৃত্যুদণ্ডের উপর প্রভাবের জন্য উদ্বেগ ছাড়াই তার স্থানীয় ভেরিয়েবলগুলি সংশোধন করতে পারে। নেস্টেড কলগুলি জমা হওয়ার সাথে সাথে একটি কল স্ট্যাক কাঠামো তৈরি হয়, যা প্রতিটি স্থগিত উপ-প্রোগ্রামের জন্য একটি সক্রিয়করণ রেকর্ড নিয়ে গঠিত। প্রকৃতপক্ষে, এই স্ট্যাক কাঠামো কার্যত সর্বব্যাপী, এবং তাই অ্যাক্টিভেশন রেকর্ডগুলিকে সাধারণত স্ট্যাক ফ্রেম বলা হয়। কিছু ভাষা যেমন পাস্কাল, পিএল/আই এবং অ্যাডা নেস্টেড ফাংশনগুলিকেও সমর্থন করে, যা শুধুমাত্র একটি বাইরের (প্যারেন্ট) ফাংশনের আওতায় কলযোগ্য ফাংশন। অভ্যন্তরীণ ফাংশনগুলির বাইরের ফাংশনের স্থানীয় চলকগুলিতে প্রবেশাধিকার রয়েছে যা তাদের বলে। এটি অ্যাক্টিভেশন রেকর্ডের মধ্যে অতিরিক্ত প্রসঙ্গ তথ্য সংরক্ষণ করে সম্পন্ন করা হয়, যাকে ডিসপ্লেও বলা হয়। যদি একটি সাবপ্রোগ্রাম সঠিকভাবে কার্যকর করা যায় এমনকি যখন একই সাবপ্রোগ্রামের আরেকটি এক্সিকিউশন ইতিমধ্যে চলছে, সেই সাবপ্রোগ্রামটিকে পুনরায় প্রবেশযোগ্য বলা হয়। একটি পুনরাবৃত্তিমূলক উপ-প্রোগ্রাম অবশ্যই পুনরায় প্রবেশযোগ্য হতে হবে। পুনঃপ্রবেশকারী উপ-প্রোগ্রামগুলি বহু-থ্রেডেড পরিস্থিতিতেও কার্যকর কারণ একাধিক থ্রেড একে অপরের সাথে হস্তক্ষেপের ভয় ছাড়াই একই উপ-প্রোগ্রামকে কল করতে পারে। আইবিএম সি. আই. সি. এস লেনদেন প্রক্রিয়াকরণ ব্যবস্থায়, আধা-প্রবেশকারী কিছুটা কম সীমাবদ্ধ ছিল, তবে একই রকম, অ্যাপ্লিকেশন প্রোগ্রামগুলির জন্য প্রয়োজনীয়তা যা অনেক থ্রেড দ্বারা ভাগ করা হয়েছিল। প্রবলভাবে টাইপ করা ভাষাগুলিতে, কখনও কখনও একই নামের বেশ কয়েকটি ফাংশন থাকা বাঞ্ছনীয়, তবে বিভিন্ন ধরনের ডেটাতে বা বিভিন্ন পরামিতি প্রোফাইলের সাথে কাজ করে। উদাহরণস্বরূপ, একটি বর্গমূল ফাংশনকে বাস্তব, জটিল মান বা ম্যাট্রিক্সের উপর কাজ করার জন্য সংজ্ঞায়িত করা যেতে পারে। প্রতিটি ক্ষেত্রে ব্যবহৃত অ্যালগরিদম ভিন্ন, এবং রিটার্ন ফলাফল ভিন্ন হতে পারে। একই নামে তিনটি পৃথক ফাংশন লেখার মাধ্যমে, প্রোগ্রামার প্রতিটি ধরনের ডেটার জন্য বিভিন্ন নাম মনে না রাখার সুবিধা পায়। উপরন্তু, যদি একটি উপপ্রকারকে বাস্তবগুলির জন্য সংজ্ঞায়িত করা যায়, ধনাত্মক এবং ঋণাত্মক বাস্তবগুলিকে পৃথক করার জন্য, বাস্তবগুলির জন্য দুটি ফাংশন লেখা যেতে পারে, একটি প্যারামিটারটি ধনাত্মক হলে বাস্তবকে ফেরত দেয় এবং অন্যটি প্যারামিটারটি ঋণাত্মক হলে একটি জটিল মান ফেরত দেয়। অবজেক্ট-ওরিয়েন্টেড প্রোগ্রামিং-এ, যখন একই নামের ফাংশনের একটি সিরিজ বিভিন্ন ধরনের বিভিন্ন প্যারামিটার প্রোফাইল বা প্যারামিটার গ্রহণ করতে পারে, তখন প্রতিটি ফাংশনকে ওভারলোড বলা হয়। এখানে সি + +-এ ফাংশন ওভারলোডিংয়ের একটি উদাহরণ রয়েছে, যা একই নামে (এলাকা) কিন্তু বিভিন্ন পরামিতি সহ দুটি ফাংশনের বাস্তবায়ন প্রদর্শন করেঃ #include <আইওস্ট্রিম> ডাবল এরিয়া (ডাবল এইচ, ডাবল ডাব্লু) {রিটার্ন এইচ * ডাব্লু;}/* প্রথম এলাকা ফাংশনটি একটি আয়তক্ষেত্রের এলাকা খুঁজে বের করার জন্য, * তাই এটি উচ্চতা এবং প্রস্থের জন্য দুটি সংখ্যাকে পরামিতি হিসাবে গ্রহণ করে। */ডাবল এরিয়া (ডাবল r) {রিটার্ন r * r * 3.14;}/* দ্বিতীয় এরিয়া ফাংশনটি একটি বৃত্তের ক্ষেত্রফল খুঁজে বের করার জন্য, তাই এটি ব্যাসার্ধের জন্য শুধুমাত্র একটি সংখ্যাকে পরামিতি হিসাবে গ্রহণ করে। */int মেইন () {ডবল আয়তক্ষেত্র _ এলাকা = এলাকা (3,4);// এটি প্রথম এলাকা ফাংশনকে কল করে, কারণ দুটি পরামিতি প্রদান করা হয়। ডাবল সার্কেল _ এরিয়া = এরিয়া (5);// এটি দ্বিতীয় এরিয়া ফাংশনকে কল করে, কারণ শুধুমাত্র একটি পরামিতি প্রদান করা হয়। একটি আয়তক্ষেত্রের ক্ষেত্রফল হল "<<আয়তক্ষেত্র _ এলাকা <<std:: এন্ডল; std:: cout <<" একটি বৃত্তের ক্ষেত্রফল হল "<<বৃত্ত _ এলাকা <<std:: এন্ডল;} আরেকটি উদাহরণ হিসাবে, একটি ফাংশন এমন একটি বস্তু তৈরি করতে পারে যা দিকনির্দেশ গ্রহণ করবে এবং পর্দায় এই বিন্দুগুলিতে তার পথ চিহ্নিত করবে। এমন অনেকগুলি পরামিতি রয়েছে যা কনস্ট্রাক্টরের কাছে প্রেরণ করা যেতে পারে (ট্রেসের রঙ, x এবং y কো-অর্ডিনেট শুরু করা, ট্রেসের গতি)। যদি প্রোগ্রামার চান যে কনস্ট্রাক্টর শুধুমাত্র রঙের প্যারামিটার গ্রহণ করতে সক্ষম হন, তবে তিনি অন্য কনস্ট্রাক্টরকে কল করতে পারেন যা শুধুমাত্র রঙ গ্রহণ করে, যা অন্য সমস্ত প্যারামিটারের জন্য ডিফল্ট মানগুলির একটি সেটে পাস করা সমস্ত প্যারামিটার সহ কনস্ট্রাক্টরকে কল করে (এক্স এবং ওয়াই সাধারণত পর্দায় কেন্দ্রিক হবে বা উৎসে স্থাপন করা হবে এবং গতি কোডারের পছন্দের অন্য মানে সেট করা হবে)। পিএল/আই-এর সাধারণ বৈশিষ্ট্য রয়েছে যা বিভিন্ন ধরনের আর্গুমেন্টের সাথে পরিচিত এন্ট্রি রেফারেন্সের একটি সেটের জন্য একটি সাধারণ নাম সংজ্ঞায়িত করে। উদাহরণস্বরূপঃ ডিক্লেয়ার জেন _ নেম জেনেরিক (নাম কখন (ফিক্সড বাইনারি), ফ্লেম কখন (ফ্লোট), পাথনাম অন্যান্য); প্রতিটি এন্ট্রির জন্য একাধিক আর্গুমেন্ট সংজ্ঞা নির্দিষ্ট করা যেতে পারে। "জেন _ নেম"-এ একটি কলের ফলে "নাম"-এ একটি কল হবে যখন আর্গুমেন্টটি দ্বিগুণ স্থির করা হবে, "ফ্লেম" যখন ফ্লোট "ইত্যাদি। যদি যুক্তিটি কোনও পছন্দের সাথে মেলে তবে "পাথনেম" বলা হবে না। যে পরিবেশে এটি তৈরি করা হয়েছিল সেখান থেকে নেওয়া কিছু চলকের মান সহ একটি উপ-প্রোগ্রাম হল একটি ক্লোজার। জন ম্যাকার্থি দ্বারা প্রবর্তিত লিস্প প্রোগ্রামিং ভাষার একটি উল্লেখযোগ্য বৈশিষ্ট্য ছিল ক্লোজার। বাস্তবায়নের উপর নির্ভর করে, বন্ধ করা পার্শ্ব-প্রতিক্রিয়াগুলির জন্য একটি প্রক্রিয়া হিসাবে কাজ করতে পারে। কনভেনশন ফাংশন কোডিংয়ের জন্য বিস্তৃত সংখ্যক কনভেনশন তৈরি করা হয়েছে। তাদের নামকরণের সাথে সম্পর্কিত, অনেক বিকাশকারী এই পদ্ধতিটি গ্রহণ করেছেন যে কোনও ফাংশনের নাম একটি নির্দিষ্ট কাজ করার সময় একটি ক্রিয়া হওয়া উচিত, যখন এটি কিছু অনুসন্ধান করে তখন একটি বিশেষণ এবং যখন এটি ভেরিয়েবল প্রতিস্থাপনের জন্য ব্যবহৃত হয় তখন একটি বিশেষ্য। কিছু প্রোগ্রামার পরামর্শ দেন যে একটি ফাংশন শুধুমাত্র একটি কাজ সম্পাদন করা উচিত, এবং যদি একটি ফাংশন একাধিক কাজ সম্পাদন করে তবে এটি আরও ফাংশনগুলিতে বিভক্ত করা উচিত। তারা যুক্তি দেয় যে কোড রক্ষণাবেক্ষণে ফাংশনগুলি মূল উপাদান এবং প্রোগ্রামে তাদের ভূমিকা অবশ্যই স্বতন্ত্র থাকতে হবে। মডুলার প্রোগ্রামিং (মডুলারাইজিং কোড)-এর প্রবক্তারা পরামর্শ দেন যে প্রতিটি ফাংশনের অন্যান্য কোডের উপর ন্যূনতম নির্ভরতা থাকা উচিত। উদাহরণস্বরূপ, গ্লোবাল ভেরিয়েবলের ব্যবহার সাধারণত এই দৃষ্টিকোণের সমর্থকদের দ্বারা অযৌক্তিক বলে মনে করা হয়, কারণ এটি ফাংশন এবং এই গ্লোবাল ভেরিয়েবলগুলির মধ্যে শক্ত সংযোগ যোগ করে। যদি এই ধরনের সংযোগের প্রয়োজন না হয়, তবে তাদের পরামর্শ হল পাস করা প্যারামিটারগুলি গ্রহণ করার জন্য রিফ্যাক্টর ফাংশনগুলি করা। যাইহোক, ফাংশনে পাস করা পরামিতিগুলির সংখ্যা বৃদ্ধি কোড পাঠযোগ্যতাকে প্রভাবিত করতে পারে। রিটার্ন কোড এর প্রধান বা স্বাভাবিক প্রভাব ছাড়াও, একটি সাবরুটিনের কলিং প্রোগ্রামকে তার সম্পাদনের সময় ঘটে যাওয়া ব্যতিক্রমী পরিস্থিতি সম্পর্কে অবহিত করার প্রয়োজন হতে পারে। কিছু ভাষা এবং প্রোগ্রামিং মানগুলিতে, এটি প্রায়শই একটি রিটার্ন কোডের মাধ্যমে করা হয়, একটি পূর্ণসংখ্যা মান যা কিছু মানক অবস্থানে সাবপ্রোগ্রাম দ্বারা স্থাপন করা হয়, যা স্বাভাবিক এবং ব্যতিক্রমী শর্তগুলিকে এনকোড করে। আইবিএম সিস্টেম/360-এ, যেখানে সাবরুটিনের কাছ থেকে রিটার্ন কোড আশা করা হত, রিটার্ন মানটি প্রায়শই 4-এর গুণিতক হিসাবে ডিজাইন করা হত-যাতে এটি একটি শাখা টেবিলে সরাসরি শাখা টেবিল সূচক হিসাবে ব্যবহার করা যেতে পারে যা প্রায়শই কলের নির্দেশের পরে অবিলম্বে অবস্থিত অতিরিক্ত শর্তাধীন পরীক্ষা এড়াতে, দক্ষতা আরও উন্নত করে। সিস্টেম/360 অ্যাসেম্বলি ভাষায়, কেউ লিখবেন, উদাহরণস্বরূপঃ বি. এ. এল 14, এস. ইউ. বি. আর. টি. এন01 একটি সাবরুটিনে যান, আর 14 বি টেবিলে রিটার্ন অ্যাড্রেস সংরক্ষণ করুন (15) শাখা টেবিলকে সূচীভুক্ত করতে রেগুলেশন 15-এ ফেরত দেওয়া মান ব্যবহার করুন, * উপযুক্ত শাখা ইনস্টারে শাখা করুন। টেবিল বি ওকে রিটার্ন কোড = 00 গুড} বি খারাপ রিটার্ন কোড = 04 অবৈধ ইনপুট} শাখা টেবিল বি ত্রুটি রিটার্ন কোড = 08 অপ্রত্যাশিত শর্ত} ফাংশন কলগুলির অপ্টিমাইজেশন একটি ফাংশন কল করার ক্ষেত্রে একটি উল্লেখযোগ্য রানটাইম ওভারহেড রয়েছে, যার মধ্যে রয়েছে আর্গুমেন্টগুলি পাস করা, সাবপ্রোগ্রামে শাখা করা এবং কলকারীর কাছে শাখা করা। ওভারহেডের মধ্যে প্রায়শই নির্দিষ্ট প্রসেসর রেজিস্টার সংরক্ষণ এবং পুনরুদ্ধার, কল ফ্রেম স্টোরেজ বরাদ্দ এবং পুনরুদ্ধার ইত্যাদি অন্তর্ভুক্ত থাকে। কিছু ভাষায়, প্রতিটি ফাংশন কল ফাংশনটির রিটার্ন কোডের স্বয়ংক্রিয় পরীক্ষা বা এটি উত্থাপন করতে পারে এমন ব্যতিক্রমগুলির পরিচালনাকেও বোঝায়। অবজেক্ট-ওরিয়েন্টেড ভাষাগুলিতে ওভারহেডের একটি উল্লেখযোগ্য উৎস হল মেথড কলগুলির জন্য নিবিড়ভাবে ব্যবহৃত গতিশীল প্রেরণ। পদ্ধতি কলগুলির কিছু আপাতদৃষ্টিতে সুস্পষ্ট অপ্টিমাইজেশান রয়েছে যা প্রয়োগ করা যায় না যদি পদ্ধতির পার্শ্ব প্রতিক্রিয়া থাকতে পারে। উদাহরণস্বরূপ, অভিব্যক্তি (f (x)-1)/(f (x) + 1)-এ, f ফাংশনটিকে অবশ্যই দুবার কল করতে হবে, কারণ দুটি কল ভিন্ন ফলাফল দিতে পারে। অধিকন্তু, যে কয়েকটি ভাষায় ডিভিশন অপারেটরের অপারেন্ডগুলির মূল্যায়নের ক্রম নির্ধারণ করা হয়, সেখানে x-এর মান অবশ্যই দ্বিতীয় কলের আগে আবার আনতে হবে, কারণ প্রথম কলটি এটি পরিবর্তন করে থাকতে পারে। একটি উপ-প্রোগ্রামের কোনও পার্শ্বপ্রতিক্রিয়া থাকতে পারে কিনা তা নির্ধারণ করা খুব কঠিন (প্রকৃতপক্ষে, রাইসের উপপাদ্যের ভিত্তিতে অনিশ্চিত)। সুতরাং, যদিও এই অপ্টিমাইজেশানগুলি সম্পূর্ণরূপে কার্যকরী প্রোগ্রামিং ভাষাগুলিতে নিরাপদ, সাধারণ আবশ্যক প্রোগ্রামিংয়ের সংকলকদের সাধারণত সবচেয়ে খারাপ অনুমান করতে হয়। এই ওভারহেড দূর করার জন্য ব্যবহৃত একটি পদ্ধতি হল প্রতিটি কল সাইটে সাবপ্রোগ্রামের মূল অংশের ইনলাইন সম্প্রসারণ বা ইনলাইনিং (বনাম ফাংশন এবং পিছনে শাখা স্থাপন)। এটি কেবল কল ওভারহেডই এড়ায় না, এটি সংকলককে সেই কলের প্রসঙ্গ এবং যুক্তিগুলি বিবেচনা করে পদ্ধতির মূল অংশটিকে আরও কার্যকরভাবে অনুকূল করতে দেয়। ঢোকানো বডি কম্পাইলার দ্বারা অপ্টিমাইজ করা যেতে পারে। তবে, ইনলাইনিং সাধারণত কোডের আকার বৃদ্ধি করবে, যদি না প্রোগ্রামে ফাংশনে শুধুমাত্র একটি কল থাকে। আরও দেখুন অ্যাসিঙ্ক্রোনাস পদ্ধতি কল, একটি উপ-প্রোগ্রাম যা তার পরামিতিগুলির পরে বলা হয় অন্যান্য ক্রিয়াকলাপ দ্বারা সেট করা হয় বিল্ট-ইন ফাংশন কমান্ড-কোয়ারি সেপারেশন (সি. কিউ. এস) কম্পাউন্ড অপারেশন করোটিন্স, উপ-প্রোগ্রাম যা একে অপরকে এমনভাবে ডাকে যেন উভয়ই প্রধান প্রোগ্রাম মূল্যায়ন কৌশল ইভেন্ট হ্যান্ডলার, একটি উপ-প্রোগ্রাম যা একটি ইনপুট ইভেন্ট বা ইন্টারাপ্ট ফাংশনের প্রতিক্রিয়ায় বলা হয় (গণিত) কার্যকরী প্রোগ্রামিং ফিউজড অপারেশন ল্যাম্বডা ফাংশন (কম্পিউটার প্রোগ্রামিং), একটি ফাংশন যা একটি সনাক্তকারী পদ্ধতির (কম্পিউটার প্রোগ্রামিং) মডুলার প্রোগ্রামিং অপারেটর ওভারলোডিংয়ের সাথে আবদ্ধ নয় সুরক্ষিত পদ্ধতি স্থানান্তর রেফারেন্স সোর্স কোড নিবন্ধগুলি উদাহরণস্বরূপ সি কোড হোলিজম প্রোগ্রামিং নির্মাণের সাথে নিবন্ধ