প্রোসিডিওর ওভারলোডিং এবং জেনেরিক ইন্টারফেস (Procedure Overloading and Generic Interfaces in Fortran)
ফোরট্রানে প্রোসিডিওর ওভারলোডিং এবং জেনেরিক ইন্টারফেস একটি শক্তিশালী বৈশিষ্ট্য যা একই নামের একাধিক ফাংশন বা প্রসিডিউর তৈরি করতে সহায়ক, তবে তাদের আর্গুমেন্ট বা ডেটা টাইপ অনুযায়ী তাদের আচরণ আলাদা থাকে। এটি কোডের পুনঃব্যবহারযোগ্যতা এবং সাদৃশ্য বজায় রাখতে সহায়ক।
১. প্রোসিডিওর ওভারলোডিং (Procedure Overloading)
প্রোসিডিওর ওভারলোডিং হলো একাধিক প্রসিডিউর বা ফাংশন একই নামের হলেও তাদের আর্গুমেন্টের সংখ্যা বা টাইপ অনুযায়ী আলাদা কাজ করতে পারে। ফোরট্রানে এটি একটি শক্তিশালী ফিচার যেখানে একই ফাংশন বা প্রসিডিউর বিভিন্ন ডেটা টাইপ বা প্যারামিটার সহ ব্যবহৃত হয়।
উদাহরণ:
ফোরট্রানে, আমরা একটি নির্দিষ্ট নামের সঙ্গে একাধিক ফাংশন বা প্রসিডিউর তৈরি করতে পারি যেগুলি বিভিন্ন ধরনের আর্গুমেন্ট গ্রহণ করবে।
module procedure_overloading
contains
! Integer type addition
function add(a, b)
integer :: a, b
integer :: add
add = a + b
end function add
! Real type addition
function add(a, b)
real :: a, b
real :: add
add = a + b
end function add
end module procedure_overloading
program test
use procedure_overloading
integer :: int_result
real :: real_result
! Integer addition
int_result = add(2, 3)
print *, "Integer addition: ", int_result
! Real addition
real_result = add(3.5, 4.5)
print *, "Real addition: ", real_result
end program testএখানে:
addফাংশন দুটি আলাদা ডেটা টাইপের জন্য তৈরি করা হয়েছে: একটিintegerটাইপ এবং আরেকটিrealটাইপ।- ফাংশন নাম একই থাকলেও তাদের ডেটা টাইপের ভিত্তিতে ভিন্ন ভিন্ন কাজ করবে।
২. জেনেরিক ইন্টারফেস (Generic Interfaces)
ফোরট্রান-এ জেনেরিক ইন্টারফেস ব্যবহার করা হয়, যাতে একাধিক প্রোসিডিউর বা ফাংশনকে একই নাম দিয়ে কল করা যায় এবং ফোরট্রান আর্গুমেন্টের ধরনের ভিত্তিতে সঠিক ফাংশন বা প্রসিডিউর নির্বাচন করতে পারে। এটি মূলত প্রোসিডিওর ওভারলোডিং এর সাথে সম্পর্কিত, তবে এটি আলাদা ফাংশন বা প্রসিডিউরের উপর ভিত্তি করে একটি সাধারণ ইন্টারফেস তৈরি করে।
উদাহরণ:
module generic_interface
contains
! Integer type addition
interface add
module procedure add_int
end interface add
! Real type addition
interface add
module procedure add_real
end interface add
! Integer addition procedure
function add_int(a, b)
integer :: a, b
integer :: add_int
add_int = a + b
end function add_int
! Real addition procedure
function add_real(a, b)
real :: a, b
real :: add_real
add_real = a + b
end function add_real
end module generic_interface
program test_generic
use generic_interface
integer :: int_result
real :: real_result
! Integer addition
int_result = add(2, 3)
print *, "Integer addition: ", int_result
! Real addition
real_result = add(3.5, 4.5)
print *, "Real addition: ", real_result
end program test_genericএখানে:
addনামের একটি জেনেরিক ইন্টারফেস তৈরি করা হয়েছে যা দুটি পৃথক ফাংশনকে নির্দেশ করছে:add_int(ইন্টিজার টাইপের জন্য) এবংadd_real(রিয়েল টাইপের জন্য)।- যখন
add(2, 3)কল করা হয়, ফোরট্রান এটিadd_intফাংশনকে কল করে এবং যখনadd(3.5, 4.5)কল করা হয়, এটিadd_realফাংশনকে কল করে।
৩. জেনেরিক ফাংশন বা প্রসিডিউর নির্বাচন
ফোরট্রান-এ জেনেরিক ফাংশন বা জেনেরিক প্রসিডিউর ব্যবহার করে, একাধিক সিমিলার ফাংশন বা প্রসিডিউরকে একটি নামের অধীনে গ্রুপ করা সম্ভব। ফোরট্রান আর্গুমেন্টের টাইপ অনুযায়ী সঠিক ফাংশন বা প্রসিডিউরটি নির্বাচন করবে। এটি প্রোগ্রামিংকে আরো পরিষ্কার এবং কোড পুনঃব্যবহারযোগ্য করে তোলে।
উদাহরণ (জেনেরিক ফাংশন):
module generic_addition
contains
interface add
module procedure add_integer, add_real
end interface add
function add_integer(a, b)
integer :: a, b
integer :: add_integer
add_integer = a + b
end function add_integer
function add_real(a, b)
real :: a, b
real :: add_real
add_real = a + b
end function add_real
end module generic_addition
program test_generic_addition
use generic_addition
integer :: i_result
real :: r_result
i_result = add(5, 10) ! Calls add_integer
r_result = add(3.5, 4.5) ! Calls add_real
print *, "Integer result: ", i_result
print *, "Real result: ", r_result
end program test_generic_additionএখানে:
addনামক জেনেরিক ইন্টারফেসটি দুটি ফাংশন (add_integerএবংadd_real) পদ্ধতিকে যুক্ত করেছে।- যখন
add(5, 10)কল করা হয়, এটিadd_integerফাংশনটিকে কল করবে। - যখন
add(3.5, 4.5)কল করা হয়, এটিadd_realফাংশনটিকে কল করবে।
৪. উপসংহার
- প্রোসিডিওর ওভারলোডিং ফোরট্রানে একাধিক ফাংশন বা প্রসিডিউর তৈরি করার একটি কৌশল, যার নাম একই থাকে, কিন্তু তাদের আর্গুমেন্টের সংখ্যা বা টাইপ অনুযায়ী তাদের আচরণ আলাদা থাকে।
- জেনেরিক ইন্টারফেস আপনাকে একাধিক ফাংশন বা প্রসিডিউরকে একসাথে একটি নামের অধীনে ব্যবহার করার সুযোগ দেয়। এটি আর্গুমেন্টের টাইপের ভিত্তিতে সঠিক ফাংশন বা প্রসিডিউর নির্বাচন করতে সহায়ক।
ফোরট্রান প্রোগ্রামিংয়ে এগুলি কোডকে আরো ক্লিন, নমনীয় এবং পুনঃব্যবহারযোগ্য করে তোলে, বিশেষত যখন একাধিক ডেটা টাইপের সঙ্গে কাজ করা হয়।