আমাদের আজকের আলোচনার বিষয় প্রসিডিউরের মধ্যে ভেরিয়েবল পাসিং পদ্ধতি – যা অধ্যায় ৩ ”ভিজ্যুয়াল বেসিক ভেরিয়েবল, কনস্ট্যান্ট ও কীওয়ার্ড” এর অন্তর্ভুক্ত। বর্তমান বিশ্বের সর্বাধুনিক প্রযুক্তি হচ্ছে কম্পিউটার প্রযুক্তি। কারণ শিল্পকারখানা, গবেষণা, শিক্ষাপ্রতিষ্ঠান, চিকিৎসাশাস্ত্র ইত্যাদি সকল ক্ষেত্রই আজ কম্পিউটার অটোমেটেড। কম্পিউটার অটোমেশনের সঙ্গে কম্পিউটার প্রোগ্রামিং ও প্রোগ্রামিং লেখার জন্য প্রোগ্রামিং ল্যাংগুয়েজ অত্যন্ত গুরুত্বপূর্ণ।
তাই শিক্ষা ও গবেষণার জন্য প্রোগ্রামিং ল্যাংগুয়েজ অধ্যয়ন একটি অতি আবশ্যকীয় বিষয়। বিষয়টি অত্যন্ত গুরুত্বসহ বিবেচনা করে বর্তমানে কারিগরি শিক্ষার সকল টেকনোলজিতে কম্পিউটার প্রোগ্রামিং ল্যাংগুয়েজ বিষয়কে আবশ্যিক করা হয়েছে ।

Table of Contents
প্রসিডিউরের মধ্যে ভেরিয়েবল পাসিং পদ্ধতি
প্রতিটি Procedure এর ক্ষেত্রেই বিভিন্নভাবে Variable কে ব্যবহার করা যায়। তবে ভিজ্যুয়াল বেসিক অ্যাপ্লিকেশন ডেভেলপমেন্টের ক্ষেত্রে প্রসিডিউরের মধ্য দিয়ে Variable Passing এর জন্য বহুল প্রচলিত দু’টি পদ্ধতি বিদ্যমান। যথাঃ
- কল বাই রেফারেন্স (Pass/Call by Reference)
- কল বাই ভ্যালু (Pass/Call by Value)
নিম্নে এ দুটি পদ্ধতি বর্ণনা করা হলঃ
কল বাই রেফারেন্স
যে পদ্ধতিতে ফাংশন কল করার সময় এক ফাংশন থেকে আরেক ফাংশনে আরগুমেন্ট হিসেবে এর জন্য নির্ধারিত ভেরিয়েবলের মেমোরি অ্যাড্রেসকে পাঠানো হয় তাকে কল বাই রেফারেন্স বলে। এ ক্ষেত্রে প্রসিডিউর এর আরগুমেন্টের মান পরিবর্তন করা হলে ভেরিয়েবলের মান ও পরিবর্তিত হয়।
উদাহরণঃ
Sub Bookinfo(BName As String)
Print BName
End Sub
Private Sub Form_Click()
Dim setName As String
setName = “Tonny”
Bookinfo setName.
Print setName
End Sub
এখানে উপরোক্ত প্রোগ্রামটি লিখে ফর্মটা রান করে তাতে ক্লিক করা হলে প্রথমে setName ভেরিয়েবলে “Tonny” সংরক্ষিত হবে। এরপর Bookinfo procedure টা call করা হবে। এখানে Bookinfo procedure এর BName আরগুমেন্ট-এর জান্য satName ভেরিয়েবলটা নির্ধারণ করা হয়েছে। ফলে ভিজ্যুয়াল বেসিক Bookinfo procedure- এ এই ভেরিয়েবলের মেমোরী অ্যাড্রেসটা পাঠাবে।
ফলে Bookinfo procedure-এ ভিজ্যুয়াল বেসিক যখন PrintBName পাবে, তখন সে BName এর জন্য নির্ধারিত Tonny ভেরিয়েবলের মেমোরী অ্যাড্রেসে সংরক্ষিত ডাটা প্রদর্শন করবে। অর্থাৎ, ফর্মে Tonny প্রদর্শিত হবে।
Bookinfo procedure এর কাজ শেষে ভিজ্যুয়াল বেসিক আবার ফর্মের Click ইভেন্টে ফিরে আসবে এবং বাকি statement গুলো নিয়ে কাজ করবে। অর্থাৎ, Click ইভেন্টের Print setName স্টেটমেন্টটা কাজ করবে। ফলে ফর্মে আবারও Tonny প্রদর্শিত হবে। অর্থাৎ, ফর্মে দুবার Tonny লেখা হবে। কিন্তু নিম্নোক্ত প্রোগ্রামটি লিখে রান করি।
Sub BookInfo(BName As String)
BName = “Prime”
Print BName
End Sub
Private Sub Form_Click()
Dim setName As String
setName=”Tonny”
Bookinfo setName
Print setName
End Sub
এখানে Bookinto procedure এর মধ্যে BName এর জন্য “Prime” স্ট্রিং-টা নির্ধারণ করা হচ্ছে। ফলে এই procedure ব্যবহার করার সময় BName এর জন্য যে ভেরিয়েবলটা নির্ধারণ করা হবে, সেই ভেরিয়েবলের মেমোরী অ্যাড্রেসে “Prime” লেখা হবে এবং ভেরিয়েবলের পূর্বের মানটা মুছে যাবে। যেমন, আমরা যদি এখন ফর্মটা রান করে তাতে ক্লিক করি, তাহলে ফর্মে Prime দুবার প্রদর্শিত হবে।
প্রথমটা প্রিন্ট হবে Bookinfo procedure এর print এর মাধ্যমে এবং দ্বিতীয়টা প্রিন্ট হবে ফর্মের ক্লিক ইভেন্টে লেখা Print এর মাধ্যমে। এখানে লক্ষণীয় যে, ফর্মের Click ইভেন্টে আমরা কোথাও setName এর মান “Prime” নির্ধারণ করিনি। তবুও এই ইভেন্টের Print এর মাধ্যমে Prime প্রিন্ট হচ্ছে এবং এটা হওয়ার কারণ হল call by reference পদ্ধতি। তবে ফর্মের Click ইভেন্টের Print কে যদি Bookinfo এর পূর্বে লেখা হয়, তাহলে setName এর অপরিবর্তীত মান তথা Tonny প্রদর্শিত হবে।
কল বাই ভ্যালু
যে পদ্ধতিতে ফাংশন কল করার সময় এক ফাংশন থেকে আরেক ফাংশনে আরগুমেন্ট হিসেবে এর জন্য নির্ধারিত ভেরিয়েবলে সংরড়িতে ডাটার একটি কপি পাঠানো হয় তাকে কল বাই ভ্যালু বলে। এ পদ্ধতি ব্যবহারের ড়োত্রে ByVal কীওয়ার্ড ব্যবহৃত হয়।
কল বাই রেফারেন্স পদ্ধতিতে প্রসিডিউর এ’ বিদ্যমান আরগুমেন্টের মান পরিবর্তন করা হলে মূল ভেরিয়েবলের মান পরিবর্তন হয়ে যায়। কিন্তু কল বাই ভ্যালু পদ্ধতিতে প্রসিডিউর এ বিদ্যমান আরগুমেন্টের মান পরিবর্তন করা হলে ও মূল ভেরিয়েবলের মান পরিবর্তিত হয়না।
উদাহরণঃ
Sub BookInfo(ByVal BName As String)
BName = “Prime”
Print BName
End Sub
Private Sub Form_Click()
setNames = “Tonny
Bookinfo setName
Print setName
End Sub

এখানে BName এর পূর্বে ByVal লেখার ফলে Bookinfo ব্যবহার করার সময় BName এর জন্য যে ভেরিয়েবল নির্ধারণ করা হবে, সেই ভেরিয়েবলে সংরক্ষিত ডাটার একটা কপি পাঠানো হবে। অর্থাৎ ভিজ্যুয়াল বেসিক call by value পদ্ধতিটা অনুসরণ করবে। তাই এক্ষেত্রে Bookinfo- এর মধ্যে BName এর মান পরিবর্তন করা হলেও, তা এই Bookinfo procedure- এর মধ্যেই সীমাবদ্ধ থাকবে। এক্ষেত্রে আরগুমেন্ট-এর জন্য নির্ধারিত ভেরিয়েবলের মানের কোন পরিবর্তন হবে না।
ব্যাপারটা বোঝার জন্য ফর্মটা রান করে তাতে ক্লিক করা যাক। এক্ষেত্রে দেখা যাবে যে, ByVal ব্যবহার করার ফলে ফর্মে প্রথমে Prime এবং পরে Tonny প্রদর্শিত হবে। কেননা Bookinfo এর মধ্যে BName এর পরিবর্তন করা হলেও, ফর্মের Click ইভেন্টে setNameএর কোন পরিবর্তন হবে না।