Erlang-এ Variables Binding এবং Scope
Erlang একটি ফাংশনাল প্রোগ্রামিং ভাষা, যেখানে variables binding এবং scope গুরুত্বপূর্ণ ধারণা। Erlang ভাষার মধ্যে variables সাধারণত immutable থাকে, অর্থাৎ একবার একটি ভেরিয়েবলে মান অ্যাসাইন করা হলে, তা পরিবর্তন করা যায় না। এই চরিত্রগুলি বিভিন্ন প্রোগ্রামিং কনসেপ্টকে প্রভাবিত করে, যেমন variable binding (ভেরিয়েবল বাঁধন) এবং scope (স্কোপ)।
1. Variable Binding (ভেরিয়েবল বাঁধন)
Variable Binding হল একটি প্রক্রিয়া যেখানে একটি ভেরিয়েবলকে একটি মান দেওয়া হয়। Erlang-এ, একবার একটি ভেরিয়েবলকে মান দেওয়া হলে, তা পরিবর্তন করা যায় না। এই কারণে variables immutable (অপরিবর্তনীয়) থাকে।
1.1 ভেরিয়েবল বাঁধন (Binding a Variable)
এrlang-এ, একটি ভেরিয়েবলকে মান দেওয়ার সময় তাকে একটি "binding" বলা হয়। একবার মান অ্যাসাইন করা হলে, সেই ভেরিয়েবলের মান আর পরিবর্তন করা যায় না।
উদাহরণ:
X = 5.এখানে, ভেরিয়েবল X-কে 5 মান দিয়ে বাঁধা হয়েছে। এটি একটি binding, এবং এরপর X আর পরিবর্তিত হতে পারে না।
1.2 Immutable Variables (অপরিবর্তনীয় ভেরিয়েবল)
Erlang-এ, একবার একটি ভেরিয়েবল বাঁধা হলে, তাকে আবার মান দেয়া সম্ভব নয়। অর্থাৎ, Erlang-এ immutable variables ব্যবহার করা হয়।
উদাহরণ:
X = 5,
X = 10. % এটি ত্রুটি (error) তৈরি করবেএখানে, প্রথম লাইনে X-কে 5 দিয়ে বাঁধা হয়েছে। দ্বিতীয় লাইনে, যখন X-কে 10 দিয়ে আবার বাঁধার চেষ্টা করা হচ্ছে, তখন এটি ত্রুটি সৃষ্টি করবে, কারণ Erlang এ X একবার বাঁধার পর তাকে আবার মান দেওয়া সম্ভব নয়।
1.3 Pattern Matching (প্যাটার্ন ম্যাচিং)
Erlang এর ভেরিয়েবল বাঁধনের আরেকটি গুরুত্বপূর্ণ দিক হল pattern matching। এটি ভেরিয়েবলকে মানের সাথে ম্যাচ করার মাধ্যমে একটি নতুন ভেরিয়েবলকে মান দিয়ে বাঁধে। প্যাটার্ন ম্যাচিং Erlang-এ কোডের কার্যকারিতা উন্নত করে এবং ডাটা স্ট্রাকচার সহজে প্রক্রিয়া করতে সহায়ক হয়।
উদাহরণ:
{ok, X} = {ok, 10}.এখানে, {ok, X} প্যাটার্ন এবং {ok, 10} মানের সাথে ম্যাচ করছে। এই ম্যাচিং এর মাধ্যমে X ভেরিয়েবলটি 10 মান নিয়ে বাঁধা হয়েছে।
2. Scope (স্কোপ)
Scope হল একটি ভেরিয়েবল কোথায় প্রযোজ্য এবং এটি কখন পর্যন্ত অ্যাক্সেস করা যাবে তা নির্ধারণ করে। Erlang-এ, স্কোপের ধারণা সাধারণত local এবং global স্কোপে বিভক্ত থাকে।
2.1 Local Scope (লোকাল স্কোপ)
Erlang-এ, একটি ভেরিয়েবল যদি একটি ফাংশনের ভিতরে বাঁধা হয়, তবে তা শুধুমাত্র ঐ ফাংশনের মধ্যে প্রযোজ্য থাকে। এর মানে, ভেরিয়েবলটি অন্য ফাংশন বা সিস্টেমের বাইরের জায়গায় অ্যাক্সেস করা যাবে না।
উদাহরণ:
my_function() ->
X = 5, % X শুধুমাত্র এই ফাংশনের মধ্যে প্রযোজ্য
Y = X + 1,
Y.এখানে, X এবং Y ভেরিয়েবল দুটি শুধুমাত্র my_function ফাংশনের মধ্যে প্রযোজ্য। এটি ফাংশনের বাইরের স্কোপে অ্যাক্সেস করা সম্ভব নয়।
2.2 Global Scope (গ্লোবাল স্কোপ)
Erlang-এ গ্লোবাল স্কোপের জন্য মডিউল এবং গ্লোবাল ভেরিয়েবল ব্যবহৃত হয়। তবে, Erlang-এ ভেরিয়েবলগুলি মূলত লোকাল স্কোপের মধ্যে সীমাবদ্ধ থাকে, এবং এক্ষেত্রে global variables এর ধারণা তুলনামূলকভাবে কম ব্যবহৃত হয়। কিন্তু মডিউল নামকরণ এবং তাদের ফাংশন ব্যবহারের মাধ্যমে গ্লোবাল স্কোপে পরিবর্তন করা সম্ভব।
উদাহরণ:
-module(math).
-export([add/2]).
add(X, Y) ->
Z = X + Y,
Z.এখানে, X এবং Y শুধুমাত্র add/2 ফাংশনের ভিতরে প্রযোজ্য। তবে add/2 ফাংশনকে অন্য মডিউল বা ফাংশন থেকে কল করা যেতে পারে।
2.3 Pattern Matching in Scope
Erlang-এ প্যাটার্ন ম্যাচিং স্কোপের বাইরে চলে যাওয়ার জন্য সাহায্য করে। এটি ভেরিয়েবলকে একটি নির্দিষ্ট স্কোপে বাঁধে।
উদাহরণ:
{ok, X} = {ok, 10},
io:format("The value of X is: ~p~n", [X]).এখানে, X মডিউলের স্কোপে বাঁধা হয়েছে এবং এটি পরবর্তী কোডের মধ্যে ব্যবহারযোগ্য।
3. Binding এবং Scope এর মধ্যে পার্থক্য
- Binding:
- একটি ভেরিয়েবলকে নির্দিষ্ট মানের সাথে যুক্ত করা। একবার একটি ভেরিয়েবল বাঁধা হলে, সেটি পরিবর্তনযোগ্য নয়।
- Scope:
- একটি ভেরিয়েবল কতটুকু এলাকায় ব্যবহৃত হতে পারে, তার সীমা বা পরিধি। ভেরিয়েবলটি কোথায় অ্যাক্সেস করা যাবে, তা স্কোপ দ্বারা নির্ধারিত হয়।
উপসংহার
Erlang-এ variables binding এবং scope দুটি গুরুত্বপূর্ণ ধারণা। Erlang-এ ভেরিয়েবলগুলি immutable থাকে, যা মানে একবার ভেরিয়েবলকে মান দিলে সেটি পরবর্তীতে পরিবর্তিত হতে পারে না। এর সাথে সাথে, ভেরিয়েবলের scope নির্ধারণ করে এটি কোডের কোন অংশে অ্যাক্সেসযোগ্য হবে। এই ধারণাগুলি কোডের কার্যকারিতা এবং রক্ষণাবেক্ষণযোগ্যতা উন্নত করতে সহায়ক হয়।
Read more