Erlang এর সিনট্যাক্স এবং বেসিক ধারণা
Erlang একটি ফাংশনাল প্রোগ্রামিং ভাষা, যেখানে কোডের প্রধান অংশ হল ফাংশন এবং প্রসেস। এই ভাষাটি উচ্চ স্তরের concurrency, fault tolerance, এবং distributed computing সমর্থন করে, যার কারণে এটি টেলিকমিউনিকেশন এবং ডিস্ট্রিবিউটেড সিস্টেমে বিশেষভাবে জনপ্রিয়।
Erlang এর সিনট্যাক্স এবং বেসিক ধারণাগুলোর সাথে পরিচিত হতে হলে প্রথমে কিছু মৌলিক বিষয় জেনে নেওয়া দরকার।
1. Erlang এর বেসিক সিনট্যাক্স
a. কোডের গঠন
Erlang-এর কোড সাধারণত মডিউল (module) এবং ফাংশন (function) নিয়ে গঠিত। মডিউল নামকরণ সাধারণত একটি বড় অক্ষর দিয়ে শুরু হয় এবং ফাংশনগুলি সাধারণত ছোট অক্ষরের মাধ্যমে ডিফাইন করা হয়।
-module(hello).
-export([world/0]).
world() ->
io:format("Hello, World!~n").-module(hello).: মডিউলের নামhello। Erlang এ প্রতিটি মডিউল একটি ফাইলের মধ্যে থাকে, যেমনhello.erl।-export([world/0]).: এই নির্দেশটি বলে যেworld/0ফাংশনটি পাবলিক হবে, অর্থাৎ আপনি এটি অন্য মডিউল থেকে কল করতে পারবেন।world() ->: ফাংশনworldএর সংজ্ঞা। এখানে0হলো আর্গুমেন্ট সংখ্যা, অর্থাৎ এটি কোন আর্গুমেন্ট নেবে না।
b. টেমপ্লেট এবং কলন
Erlang এ স্টেটমেন্টগুলির মধ্যে কলন (:) ব্যবহার করা হয়, যেটি গাণিতিক অপারেশন বা ফাংশন কলের জন্য ব্যবহৃত হয়।
X = 10,
Y = 20,
Z = X + Y. % গাণিতিক অপারেশনc. কমেন্ট
Erlang এ কোডের মধ্যে মন্তব্য যোগ করতে % চিহ্ন ব্যবহার করা হয়।
% এটি একটি মন্তব্যd. নতুন লাইন
Erlang এ একাধিক স্টেটমেন্ট একসাথে যোগ করতে কমা ব্যবহার করা হয়। একক স্টেটমেন্ট শেষ করার জন্য কোনো সেমিকোলন (;) ব্যবহার করা হয় না, বরং নতুন লাইনে চলে যায়।
2. ভেরিয়েবল ও ডেটা টাইপ
Erlang-এ ভেরিয়েবলগুলি বড় অক্ষর দিয়ে শুরু হয় এবং তারা immutable (অপরিবর্তনীয়)। একবার একটি ভেরিয়েবল সেট করলে, সেটি পরিবর্তিত হতে পারে না।
a. ভেরিয়েবল
X = 10. % X ভেরিয়েবল এখন 10
X = X + 1. % এর পর X 11 হবে, কিন্তু এটি অন্য কোনো ভেরিয়েবল হিসেবে আবার ব্যবহার করা যাবে নাb. ডেটা টাইপ
Erlang এর প্রধান ডেটা টাইপগুলোর মধ্যে রয়েছে:
- Integer: 10, -5, 1000
- Float: 3.14, -0.001
- Atom:
ok,error,true,false - Tuple:
{a, 1, true} - List:
[1, 2, 3],['a', 'b', 'c'] - Binary:
<<1, 2, 3>>
3. ফাংশন এবং প্যাটার্ন ম্যাচিং
Erlang ফাংশনগুলি প্যাটার্ন ম্যাচিং এর মাধ্যমে কাজ করে। ফাংশনের আর্গুমেন্টের সাথে মিলিয়ে সঠিক ফাংশন নির্বাচন করা হয়।
a. ফাংশন সংজ্ঞা
add(A, B) -> A + B.এখানে add/2 একটি ফাংশন যা দুটি আর্গুমেন্ট নেয় এবং তাদের যোগফল প্রদান করে। /2 মানে হল যে ফাংশনটি দুটি আর্গুমেন্ট নেয়।
b. প্যাটার্ন ম্যাচিং
Erlang এ ফাংশনের মধ্যে প্যাটার্ন ম্যাচিং কাজ করে। এর মাধ্যমে একাধিক ফাংশন একই নাম থাকতে পারে, তবে তাদের আর্গুমেন্টের ধরন বা সংখ্যা ভিন্ন হতে পারে।
factorial(0) -> 1;
factorial(N) when N > 0 -> N * factorial(N - 1).এখানে দুটি factorial ফাংশন রয়েছে:
- প্রথমটি
0এর জন্য। - দ্বিতীয়টি
Nএর জন্য যখনN > 0।
c. লেটস এবং উইথ ক্লজ
sum_list([]) -> 0;
sum_list([H | T]) -> H + sum_list(T).এখানে, sum_list একটি রিকার্সিভ ফাংশন যা একটি তালিকার সব উপাদানের যোগফল বের করে। এই ফাংশনে প্যাটার্ন ম্যাচিং ব্যবহার করা হয়েছে যেখানে [H | T] প্রথম উপাদান H এবং বাকি উপাদানগুলো T হিসাবে ধরা হয়েছে।
4. প্রসেস এবং কনকারেন্সি
Erlang-এ প্রতিটি কার্যক্রম একটি প্রসেস (process) হিসাবে চলে। এই প্রসেসগুলি একে অপরের থেকে আলাদা এবং তারা একে অপরের সাথে মেসেজ পাসিং এর মাধ্যমে যোগাযোগ করে।
a. প্রসেস তৈরি করা
start() ->
spawn(fun() -> io:format("Hello from Erlang process~n") end).এখানে spawn/1 ফাংশন একটি নতুন প্রসেস তৈরি করে যা io:format ফাংশনকে কল করে এবং একটি মেসেজ আউটপুট করে।
b. প্রসেস মেসেজ পাসিং
send_message() ->
Pid = spawn(fun() -> receive Message -> io:format("Received: ~p~n", [Message]) end end),
Pid ! hello.এখানে Pid হলো একটি প্রসেস আইডি যা তৈরি করা হয় spawn ফাংশনের মাধ্যমে, এবং তারপর আমরা Pid-এ hello মেসেজ পাঠাচ্ছি।
5. কন্ডিশনাল স্টেটমেন্ট
Erlang-এ if এবং case স্টেটমেন্ট ব্যবহার করা হয় কন্ডিশনাল লজিক প্রয়োগ করার জন্য।
a. if স্টেটমেন্ট
check_number(N) ->
if
N > 0 -> io:format("Positive~n");
N < 0 -> io:format("Negative~n");
true -> io:format("Zero~n")
end.এখানে, if স্টেটমেন্টে শর্ত অনুযায়ী আউটপুট হবে।
b. case স্টেটমেন্ট
check_case(X) ->
case X of
1 -> io:format("One~n");
2 -> io:format("Two~n");
_ -> io:format("Other~n")
end.case স্টেটমেন্টের মাধ্যমে নির্দিষ্ট মানের জন্য কোড ব্লক চালানো হয়, অন্যথায় _ ব্যবহার করা হয় ডিফল্ট কেস হিসেবে।
উপসংহার
Erlang একটি ফাংশনাল প্রোগ্রামিং ভাষা, যেখানে মডিউল, ফাংশন, প্রসেস এবং মেসেজ পাসিং গুরুত্বপূর্ণ ভূমিকা পালন করে। এর সিনট্যাক্স খুবই সরল, তবে এর শক্তিশালী ফিচারগুলি, যেমন concurrency এবং fault tolerance, এটি টেলিকমিউনিকেশন এবং ডিস্ট্রিবিউটেড সিস্টেম তৈরির জন্য আদর্শ একটি ভাষা করে তোলে।
Erlang এর সিনট্যাক্স এবং কোড স্ট্রাকচার
Erlang একটি ফাংশনাল প্রোগ্রামিং ভাষা এবং এর সিনট্যাক্স অন্যান্য ফাংশনাল ভাষার মতো কিছুটা ভিন্ন। এর কোড স্ট্রাকচার সরল, পরিষ্কার এবং পাঠযোগ্য। এখানে Erlang এর সিনট্যাক্স এবং কোড স্ট্রাকচার সম্পর্কে কিছু মূল ধারণা দেওয়া হলো।
1. Erlang সিনট্যাক্সের মৌলিক বৈশিষ্ট্য
1.1. কোডের শেষে সেমিকোলন (Semicolon)
Erlang কোডের প্রতিটি স্টেটমেন্টের শেষে সেমিকোলন (
;) ব্যবহার করা হয়, তবে শেষ স্টেটমেন্ট এর পরে সেমিকোলন দেয়া হয় না।উদাহরণ:
X = 5; Y = 10.
1.2. ফাংশন ডেফিনেশন (Function Definition)
Erlang-এ ফাংশনগুলি একটি মডিউলের (module) মধ্যে ডিফাইন করা হয়। ফাংশন ডিফাইন করতে
-module()এবং-export()ডিরেকটিভ ব্যবহার করা হয়।উদাহরণ:
-module(math_operations). -export([add/2, multiply/2]). add(X, Y) -> X + Y. multiply(X, Y) -> X * Y.
1.3. ভ্যারিয়েবল এবং কনস্ট্যান্ট
Erlang-এ ভ্যারিয়েবলগুলি বড় অক্ষরে (Uppercase) শুরু হয়, যেমন
X,Total,Valueইত্যাদি। লোয়ারকেসে শুরু হওয়া নামগুলি সাধারণত কনস্ট্যান্ট বা ফাংশনের আর্গুমেন্ট হিসেবে ব্যবহৃত হয়।উদাহরণ:
Total = 100, Value = 50.
1.4. প্যাটার্ন ম্যাচিং (Pattern Matching)
Erlang প্যাটার্ন ম্যাচিংয়ের উপর ভিত্তি করে কাজ করে। প্যাটার্ন মেটিং ভেরিয়েবলের মান নির্ধারণের সময় হয় এবং এটি একটি শক্তিশালী ফিচার।
উদাহরণ:
add({ok, X}, {ok, Y}) -> X + Y.
1.5. কমেন্টস (Comments)
Erlang-এ একক লাইন কমেন্ট
%%দিয়ে শুরু হয়।উদাহরণ:
%% এই ফাংশনটি দুটি সংখ্যা যোগ করে add(X, Y) -> X + Y.
2. Erlang কোড স্ট্রাকচার
Erlang কোডে সাধারণত মডিউল, ফাংশন এবং ব্যাসিক ডেটা টাইপস ব্যবহৃত হয়। নিচে Erlang এর কোড স্ট্রাকচার বিস্তারিতভাবে আলোচনা করা হয়েছে:
2.1. মডিউল (Module)
- একটি Erlang প্রোগ্রামে মডিউল ডিফাইন করতে
-module()ডিরেকটিভ ব্যবহার করা হয়। মডিউল কোডের একটি স্বতন্ত্র অংশ হিসেবে কাজ করে যা এক বা একাধিক ফাংশন ধারণ করে।
উদাহরণ:
-module(calculator).
2.2. এক্সপোর্ট (Export)
-export()ডিরেকটিভ ব্যবহার করে আপনি মডিউলের বাইরের ফাংশনগুলিকে এক্সপোর্ট করতে পারেন, অর্থাৎ অন্যান্য মডিউল বা কোড অংশ এই ফাংশনগুলোকে ব্যবহার করতে পারে।ফাংশনের নাম এবং আর্গুমেন্টের সংখ্যা
/চিহ্ন দিয়ে উল্লেখ করা হয়।উদাহরণ:
-export([add/2, subtract/2]).
2.3. ফাংশন (Function)
Erlang-এ প্রতিটি ফাংশন একটি নির্দিষ্ট কার্যাবলি সম্পাদন করে এবং এর মধ্যে প্যাটার্ন ম্যাচিং, কন্ডিশনাল স্টেটমেন্ট, এবং রিকার্সন থাকতে পারে।
উদাহরণ:
add(X, Y) -> X + Y. subtract(X, Y) -> X - Y.
2.4. রিকার্সন (Recursion)
Erlang-এ রিকার্সন ব্যবহৃত হয় প্রোগ্রামিং লজিক তৈরি করার জন্য, বিশেষ করে যখন একটি ফাংশন নিজেকে পুনরায় কল করে।
উদাহরণ:
factorial(0) -> 1; factorial(N) -> N * factorial(N - 1).
2.5. কন্ডিশনাল স্টেটমেন্ট (Conditional Statements)
Erlang-এ case, if, এবং receive স্টেটমেন্ট ব্যবহার করা হয় কন্ডিশনাল লজিক তৈরি করতে।
উদাহরণ:
case X of 1 -> io:format("X is 1~n"); 2 -> io:format("X is 2~n"); _ -> io:format("X is something else~n") end.if স্টেটমেন্ট:
if X == 1 -> io:format("X is 1~n"); X == 2 -> io:format("X is 2~n"); true -> io:format("X is something else~n") end.
3. Erlang এর কিছু গুরুত্বপূর্ণ সিনট্যাক্সের উদাহরণ
3.1. Hello World উদাহরণ
Erlang-এ "Hello World" প্রিন্ট করার একটি উদাহরণ:
-module(hello).
-exports([world/0]).
world() ->
io:format("Hello, World!~n").এখানে:
-module(hello).— মডিউল নাম।-export([world/0]).—worldফাংশনটি বাইরের কোডে ব্যবহারযোগ্য।io:format("Hello, World!~n").— কনসোলে "Hello, World!" প্রিন্ট করার জন্য।
3.2. List Operations
Erlang-এ লিস্টের অপারেশন করতে প্যাটার্ন ম্যাচিং ব্যবহার করা যায়:
sum([]) -> 0;
sum([H | T]) -> H + sum(T).এখানে:
- প্রথম ফাংশনটি খালি লিস্টের জন্য ০ রিটার্ন করে।
- দ্বিতীয় ফাংশনটি লিস্টের হেড (প্রথম উপাদান) যোগ করে টেল (অবশিষ্ট উপাদান) এর সাথে এবং রিকার্সন ব্যবহার করে এটি পুনরায় চালায়।
3.3. টিউপল (Tuple)
Erlang-এ টিউপল তৈরি এবং ব্যবহারের একটি উদাহরণ:
Person = {john, 25, male}.এখানে Person একটি টিউপল যা একটি নাম, বয়স এবং লিঙ্গ ধারণ করছে।
উপসংহার
Erlang এর সিনট্যাক্স খুবই সরল এবং পাঠযোগ্য, যা ফাংশনাল প্রোগ্রামিং এর দৃষ্টিকোণ থেকে কার্যকরী। মডিউল, ফাংশন, প্যাটার্ন ম্যাচিং, এবং রিকার্সন এর মাধ্যমে Erlang শক্তিশালী এবং দক্ষ প্রোগ্রামিং সমাধান তৈরি করতে সহায়ক। এর সিনট্যাক্স এবং কোড স্ট্রাকচার স্পষ্ট এবং কার্যকরী কোড লেখার জন্য উপযুক্ত, বিশেষ করে concurrency এবং distributed systems ব্যবহারের ক্ষেত্রে।
মডিউল এবং ফাংশনের ধারণা (Module and Function in Erlang)
Erlang একটি ফাংশনাল প্রোগ্রামিং ভাষা, যা মডিউল এবং ফাংশন ভিত্তিক ডিজাইন ব্যবহার করে। মডিউল এবং ফাংশন সমূহের মাধ্যমে প্রোগ্রামিং কোডকে সংগঠিত করা হয়, যা প্রোগ্রামটির রক্ষণাবেক্ষণ এবং বর্ধিত করা সহজ করে তোলে। Erlang ভাষায় মডিউল এবং ফাংশন কীভাবে কাজ করে এবং এর ব্যবহার কী তা বুঝে নেওয়া গুরুত্বপূর্ণ।
মডিউল (Module)
মডিউল হল একটি কোড সংগঠনের ইউনিট যা কোডের বিভিন্ন অংশকে গ্রুপ করতে ব্যবহৃত হয়। মডিউলগুলো সাধারণত কিছু নির্দিষ্ট কার্যকলাপ বা বৈশিষ্ট্য ধারণ করে, যেমন গণনা, ডেটাবেস হ্যান্ডলিং, বা নেটওয়ার্ক কমিউনিকেশন। Erlang ভাষায় একটি মডিউল তৈরি করতে -module ডিরেকটিভ ব্যবহার করতে হয়।
মডিউলের গঠন:
একটি মডিউল অন্তর্ভুক্ত করে:
- মডিউলের নাম
-exportডিরেকটিভের মাধ্যমে পাবলিক ফাংশনসমূহ- ফাংশন ডেফিনিশন
মডিউল তৈরির উদাহরণ:
-module(math).
-export([add/2, subtract/2]).
% ফাংশন add যা দুটি সংখ্যা যোগ করবে
add(X, Y) -> X + Y.
% ফাংশন subtract যা দুটি সংখ্যা বিয়োগ করবে
subtract(X, Y) -> X - Y.এখানে, math মডিউলটি দুটি ফাংশন add/2 এবং subtract/2 এক্সপোর্ট করেছে। /2 নির্দেশ করে যে এই ফাংশন দুটি দুটি আর্গুমেন্ট গ্রহণ করে।
মডিউল ব্যবহার:
একটি মডিউল ব্যবহারের জন্য এটি কম্পাইল করতে হবে এবং তারপর সেই মডিউলের ফাংশন কল করা যাবে। উদাহরণ:
1> c(math).
{ok,math}
2> math:add(5, 3).
8
3> math:subtract(10, 4).
6এখানে, c(math). কমান্ডটি math মডিউলটি কম্পাইল করে এবং add/2 এবং subtract/2 ফাংশনগুলো কল করা হয়েছে।
ফাংশন (Function)
ফাংশন হল কোডের একটি ব্লক যা কোনো নির্দিষ্ট কাজ সম্পন্ন করে এবং একটি ফলাফল প্রদান করে। Erlang-এ ফাংশন ডিফাইন করা হয় সাধারণভাবে {FunctionName}/{Arity}, যেখানে FunctionName হল ফাংশনের নাম এবং Arity হল ফাংশনটির প্যারামিটার সংখ্যা।
ফাংশন ডিফাইনিশনের উদাহরণ:
-module(calculator).
-export([multiply/2, divide/2]).
% ফাংশন multiply যা দুটি সংখ্যা গুণ করবে
multiply(X, Y) -> X * Y.
% ফাংশন divide যা দুটি সংখ্যা ভাগ করবে
divide(X, Y) -> X / Y.এখানে, multiply/2 এবং divide/2 ফাংশন দুটি calculator মডিউল থেকে এক্সপোর্ট করা হয়েছে।
ফাংশন কল:
একটি ফাংশন কল করতে হবে মডিউলের নাম এবং ফাংশন নাম দিয়ে:
1> c(calculator).
{ok,calculator}
2> calculator:multiply(6, 3).
18
3> calculator:divide(10, 2).
5.0ফাংশনের বৈশিষ্ট্য:
- অপারেশন: Erlang ফাংশন সাধারণত গাণিতিক বা লজিকাল অপারেশন সম্পাদন করে।
- রিটার্ন ভ্যালু: প্রতিটি ফাংশন একটি মান রিটার্ন করে। এটি গাণিতিক ফলাফল, লজিক্যাল ফলাফল অথবা ডেটা হতে পারে।
- প্যারামিটার: ফাংশনের মধ্যে ইনপুট প্যারামিটার নেওয়া হয় এবং সেই অনুযায়ী ফলাফল উৎপন্ন হয়।
- এলার্জি (Arity): Erlang-এ ফাংশনের এলার্জি নির্দেশ করে ফাংশনটির আর্গুমেন্টের সংখ্যা। যেমন,
add/2ফাংশনের এলার্জি হলো ২, কারণ এটি দুটি প্যারামিটার গ্রহণ করে।
Erlang এ ফাংশন এবং মডিউল কেন ব্যবহার করা হয়?
- কোড সংগঠন: মডিউল এবং ফাংশন কোডের অংশগুলোকে সুসংগঠিত করতে সাহায্য করে, যা কোডের রক্ষণাবেক্ষণ এবং বর্ধিত করার কাজকে সহজ করে তোলে।
- পুনঃব্যবহারযোগ্যতা: একবার ফাংশন তৈরি করার পর, সেই ফাংশনটি অনেক জায়গায় ব্যবহার করা যেতে পারে।
- ডিবাগিং: ছোট ছোট ফাংশন ব্যবহার করলে কোডের ত্রুটি খুঁজে বের করা সহজ হয়।
- সহজ টেস্টিং: মডিউল ও ফাংশনগুলো আলাদা আলাদা পরীক্ষা করা যায়, যা সিস্টেমের অন্যান্য অংশের ওপর প্রভাব না ফেলেই ত্রুটি সংশোধন করতে সাহায্য করে।
উপসংহার
মডিউল এবং ফাংশন হল Erlang প্রোগ্রামিং ভাষার দুটি প্রধান ভিত্তি। মডিউল কোডের বড় অংশগুলিকে সংগঠিত করে এবং ফাংশনগুলো ছোট ছোট কাজগুলো সম্পন্ন করে, যা কোডের কার্যকারিতা ও রক্ষণাবেক্ষণ সহজ করে তোলে। Erlang এ মডিউল ও ফাংশন ব্যবহার করার মাধ্যমে দ্রুত, স্থিতিস্থাপক এবং স্কেলেবল সিস্টেম তৈরি করা সম্ভব।
Erlang-এ Expressions এবং Statements এর ব্যবহার
Erlang একটি ফাংশনাল প্রোগ্রামিং ভাষা, তাই এখানে expressions এবং statements এর ব্যবহারের কিছু গুরুত্বপূর্ণ পার্থক্য ও বিশেষত্ব রয়েছে। যদিও অনেক প্রোগ্রামিং ভাষায় statements এবং expressions দুটি আলাদা ধারণা, Erlang-এ এই দুটি বৈশিষ্ট্য বিভিন্নভাবে কাজ করে।
1. Expression (এক্সপ্রেশন)
Erlang-এ expression একটি ফাংশন, অপারেশন বা কমান্ড যা মূল্য প্রদান করে এবং একটি মান (value) রিটার্ন করে। এক্সপ্রেশন সাধারণত কোনো কার্যক্রম সম্পন্ন করার জন্য ব্যবহৃত হয় এবং এর একটি ফলাফল থাকে। Erlang-এর অনেক কোডই এক্সপ্রেশন হিসেবে কাজ করে, কারণ এটি একটি ফাংশনাল ভাষা যেখানে এক্সপ্রেশন সাধারণত কোডের মূল অঙ্গ।
উদাহরণ:
1 + 2.এটি একটি এক্সপ্রেশন যেখানে 1 + 2 এর ফলাফল 3। Erlang-এ, সব এক্সপ্রেশন একযোগে একটি মান প্রদান করে।
আরেকটি উদাহরণ:
X = 5,
Y = X + 3.এখানে, X = 5 একটি এক্সপ্রেশন যা 5 রিটার্ন করে, এবং Y = X + 3 একটি এক্সপ্রেশন যা 8 রিটার্ন করে।
2. Statement (স্টেটমেন্ট)
Erlang-এ statement এমন একটি অংশ যা কোনো কার্যক্রম সম্পাদন করে কিন্তু কোনো মান রিটার্ন করে না। সাধারণত statements ফাংশনের মধ্যে ব্যবহৃত হয় এবং তাদের উদ্দেশ্য একটি নির্দিষ্ট কাজ সম্পাদন করা। Erlang-এ কোনো কিছু কার্যকরী করতে বা কোডের লজিক বাস্তবায়ন করতে statements ব্যবহৃত হয়।
উদাহরণ:
io:format("Hello, World!~n").এটি একটি statement কারণ এটি কেবল আউটপুট প্রদর্শন করে, কিন্তু কোনো মান রিটার্ন করে না। Erlang-এ io:format/1 স্টেটমেন্টের মাধ্যমে আউটপুট প্রিন্ট করা হয়।
Erlang-এ Expressions এবং Statements এর পার্থক্য
| বৈশিষ্ট্য | Expression (এক্সপ্রেশন) | Statement (স্টেটমেন্ট) |
|---|---|---|
| ফলাফল | এক্সপ্রেশন সর্বদা একটি মান (value) রিটার্ন করে। | স্টেটমেন্ট কোন মান রিটার্ন করে না। |
| ব্যবহার | এক্সপ্রেশনগুলি নির্দিষ্ট গণনা বা হিসাবের জন্য ব্যবহৃত হয়। | স্টেটমেন্টগুলি সাধারণত কার্যক্রম সম্পাদন করতে ব্যবহৃত হয়। |
| উদাহরণ | 1 + 2, X = 5, Y = X + 3 | io:format("Hello, World!") |
| কোড প্রবাহ | এক্সপ্রেশন সাধারণত ফাংশন বা কোড ব্লকে ব্যবহৃত হয়। | স্টেটমেন্ট একটি নির্দিষ্ট কাজ সম্পাদন করার জন্য ব্যবহৃত হয়। |
Erlang-এ Expressions এবং Statements এর ব্যবহার
1. Expressions in Function Definitions
Erlang-এ ফাংশনগুলিতে এক্সপ্রেশন ব্যবহার করা হয়। যেহেতু Erlang একটি ফাংশনাল ভাষা, তাই ফাংশনগুলি সাধারণত এক্সপ্রেশন রিটার্ন করে।
-module(math).
-export([add/2, multiply/2]).
add(X, Y) ->
X + Y.
multiply(X, Y) ->
X * Y.এখানে X + Y এবং X * Y উভয়ই এক্সপ্রেশন হিসেবে ব্যবহৃত হয়েছে এবং তারা ফলাফল হিসেবে মান প্রদান করছে।
2. Control Structures as Expressions
Erlang-এ control structures (যেমন if, case, receive ইত্যাদি) সাধারণত এক্সপ্রেশন হিসেবে ব্যবহৃত হয়, যার মান রিটার্ন করা হয়।
check_number(X) ->
case X of
0 -> "Zero";
_ -> "Non-zero"
end.এখানে, case একটি এক্সপ্রেশন, এবং এটি X এর মান অনুসারে একটি ফলাফল প্রদান করে।
3. Statements for Side Effects
যদিও Erlang একটি ফাংশনাল ভাষা, কিছু স্টেটমেন্ট যেমন I/O operations বা side effects সাধারণত কোডে ব্যবহৃত হয়।
print_hello() ->
io:format("Hello, World!~n"),
ok.এখানে io:format একটি স্টেটমেন্ট যা আউটপুট প্রদর্শন করে এবং পরবর্তী ok মান রিটার্ন করে (যা একটি এক্সপ্রেশন হতে পারে)।
উপসংহার
- Expressions এমন কোড যা একটি মান প্রদান করে এবং এগুলি সাধারণত গণনা বা মূল্য নির্ধারণে ব্যবহৃত হয়।
- Statements সাধারণত কার্যক্রম সম্পাদন করে এবং কোনো মান রিটার্ন করে না, তবে সেগুলি সিস্টেমের কোনো প্রভাব ফেলতে ব্যবহৃত হয়, যেমন আউটপুট প্রদর্শন বা ডাটাবেসে সংরক্ষণ।
Erlang একটি ফাংশনাল ভাষা হওয়ায়, এতে অধিকাংশ কোডই এক্সপ্রেশন হিসেবে কাজ করে, তবে side effects (যেমন I/O অপারেশন) পরিচালনা করতে স্টেটমেন্ট ব্যবহার করা হয়।
Erlang এ কমেন্টিং এবং কোড ফরম্যাটিং
Erlang ভাষায় কমেন্টিং এবং কোড ফরম্যাটিং এর সঠিক ব্যবহার কোডের পাঠযোগ্যতা এবং রক্ষণাবেক্ষণযোগ্যতা উন্নত করতে সাহায্য করে। এটি অন্য ডেভেলপারদের জন্য কোড বোঝা সহজ করে এবং একটি সিস্টেমের উন্নতি ও ডিবাগিং প্রক্রিয়া আরও কার্যকরী করে।
1. Erlang এ কমেন্টিং
Erlang এ কমেন্ট করার জন্য দুটি প্রধান ধরণ রয়েছে:
1.1 একলাইন কমেন্ট (Single-line Comment)
একটি একক লাইনে কমেন্ট করতে হলে, আপনি % চিহ্ন ব্যবহার করবেন। এর পরের অংশটুকু সেই লাইনে কমেন্ট হিসেবে গণ্য হবে এবং কোডের অংশ হিসেবে কার্যকরী হবে না।
উদাহরণ:
% এটি একটি একলাইন কমেন্ট
io:format("Hello, World!").1.2 বহু-লাইন কমেন্ট (Multi-line Comment)
Erlang ভাষায় বহুমাত্রিক (multi-line) কমেন্ট করা যায়, কিন্তু এটি block comments এর মতো নয়। আপনাকে প্রতিটি লাইনে % চিহ্ন ব্যবহার করতে হবে।
উদাহরণ:
% এটি একটি
% বহু-লাইন কমেন্ট
% যা একাধিক লাইনে
% বিভক্ত হয়েছে।1.3 ডকুমেন্টেশন কমেন্ট (Documentation Comments)
Erlang মডিউলগুলিতে ডকুমেন্টেশন কমেন্ট ব্যবহার করা হয়, যা মডিউল বা ফাংশনের উদ্দেশ্য, ইনপুট, আউটপুট ইত্যাদি ব্যাখ্যা করে। এটি -doc ডিরেকটিভ ব্যবহার করে করা হয় এবং সাধারণত মডিউল ডেফিনিশনের আগে আসে।
উদাহরণ:
-module(math).
% এটির উদ্দেশ্য দুটি সংখ্যার যোগফল প্রদান করা।
% @spec add(integer(), integer()) -> integer()
% দুটি পূর্ণসংখ্যার যোগফল দেয়।
-export([add/2]).
add(X, Y) -> X + Y.এই ডকুমেন্টেশন কমেন্টগুলি পরে Erlang's documentation tools যেমন edoc দ্বারা প্রসেস করা যেতে পারে এবং একটি HTML ডকুমেন্টেশন তৈরি করতে ব্যবহৃত হয়।
2. Erlang কোড ফরম্যাটিং
Erlang এ কোড ফরম্যাটিং কোডের পাঠযোগ্যতা উন্নত করার জন্য গুরুত্বপূর্ণ। সঠিক ফরম্যাটিং কোডের সঠিক বোঝাপড়া নিশ্চিত করতে সাহায্য করে।
2.1 ইন্ডেন্টেশন
Erlang কোডে সঠিক ইন্ডেন্টেশন ব্যবহার করা গুরুত্বপূর্ণ, যা কোডের স্তরের মধ্যে একটি পরিষ্কার পার্থক্য তৈরি করে। সাধারণত, 2 বা 4 স্পেস ব্যবহৃত হয় ইন্ডেন্টেশন হিসেবে। এর মাধ্যমে কোডের ব্লকগুলি আলাদা করা হয় এবং কোড আরও পরিষ্কার হয়।
উদাহরণ:
-module(math).
-export([add/2]).
add(X, Y) ->
Z = X + Y, % যুক্তির যোগফল
Z. % ফলাফল রিটার্ন2.2 কোড লাইনগুলি ছোট রাখা
এটা গুরুত্বপূর্ণ যে, এক লাইনে অনেক কোড না থাকে, কারণ এটি কোড বোঝা এবং রক্ষণাবেক্ষণ করা কঠিন করে দেয়। এক লাইনে একটি কার্যকরী কমান্ড বা এক্সপ্রেশন রাখা ভালো। যদি এক লাইনে অনেক কিছু লিখতে হয়, তবে এটি নতুন লাইনে ভাগ করা উচিত।
উদাহরণ:
% খারাপ উদাহরণ
calculate_sum(X, Y) -> X + Y + Z + A + B.
% ভালো উদাহরণ
calculate_sum(X, Y) ->
Z = X + Y,
A = Z + B,
A.2.3 সাদা স্থান (Whitespace)
Erlang কোডে সাদা স্থান ব্যবহার কোডের পাঠযোগ্যতা উন্নত করে। ব্লক বা কোডের বিভিন্ন অংশগুলির মধ্যে সাদা স্থান রেখে কোডকে আরও পরিষ্কার এবং সংগঠিত করা যায়।
উদাহরণ:
-module(math).
-export([add/2, multiply/2]).
% যোগফল
add(X, Y) ->
X + Y.
% গুণফল
multiply(X, Y) ->
X * Y.2.4 ফাংশন ডেফিনিশন এবং আর্গুমেন্ট
Erlang এ ফাংশনগুলির নাম এবং আর্গুমেন্ট সঠিকভাবে সাজানো হওয়া উচিত। আর্গুমেন্টের মধ্যে কোন অপ্রয়োজনীয় ফাঁকা স্থান রাখা উচিত নয় এবং ডকুমেন্টেশন মন্তব্যও ফাংশনের শুরুতে থাকা উচিত।
উদাহরণ:
-module(math).
-export([add/2, multiply/2]).
% @spec add(integer(), integer()) -> integer()
% @doc যোগফল প্রদান করে
add(X, Y) ->
X + Y.
% @spec multiply(integer(), integer()) -> integer()
% @doc গুণফল প্রদান করে
multiply(X, Y) ->
X * Y.2.5 কনভেনশনাল নামকরণ
Erlang এ মডিউল, ফাংশন এবং ভেরিয়েবল নামের জন্য কিছু নামকরণের নিয়ম রয়েছে। মডিউল নাম সাধারণত ছোট হাতের অক্ষরে রাখা হয় এবং _ ব্যবহার করা হয় শব্দ আলাদা করতে। ফাংশনের নাম সাধারণত ছোট হাতের অক্ষরে থাকে এবং ভেরিয়েবল নাম সাধারণত বড় হাতের অক্ষরে রাখা হয়।
উদাহরণ:
% মডিউল নাম: math_utils
-module(math_utils).
% ফাংশন নাম: calculate_sum
calculate_sum(X, Y) -> X + Y.উপসংহার
Erlang ভাষায় সঠিক কমেন্টিং এবং কোড ফরম্যাটিং ব্যবহার কোডের পাঠযোগ্যতা, রক্ষণাবেক্ষণ এবং ডিবাগিং প্রক্রিয়া উন্নত করে। সঠিক ইন্ডেন্টেশন, ফাংশন ডেফিনিশন, সাদা স্থান ব্যবহার এবং ডকুমেন্টেশন কমেন্ট আপনার কোডকে আরও পরিষ্কার, সংগঠিত এবং সহজবোধ্য করে তোলে। Erlang এর ক্ষেত্রে, কোডের ফরম্যাটিং এবং কমেন্টিং এই ভাষার একটি গুরুত্বপূর্ণ অংশ, যা উন্নত প্রোগ্রামিং এবং সিস্টেম ডিজাইনের জন্য অপরিহার্য।
Read more