প্রোগ্রামিং ভাষার মধ্যে ডেটা টাইপ এবং ভেরিয়েবল দুটি অত্যন্ত গুরুত্বপূর্ণ ধারণা। এগুলি প্রোগ্রামে ডেটার ধরন এবং ডেটা সংরক্ষণ এবং পরিচালনা করার জন্য ব্যবহৃত বিভিন্ন ধরনের স্থান নির্ধারণে সহায়ক। Rexx ভাষাতেও ডেটা টাইপস এবং ভেরিয়েবলস গুরুত্বপূর্ণ ভূমিকা পালন করে।
ডেটা টাইপস (Data Types)
ডেটা টাইপ নির্ধারণ করে যে একটি ভেরিয়েবল কোন ধরনের ডেটা ধারণ করবে। Rexx-এ কিছু সাধারণ ডেটা টাইপ রয়েছে, যা নিচে আলোচনা করা হলো:
- String (স্ট্রিং):
- Rexx ভাষায়, স্ট্রিং হলো অক্ষরের একটি সিকোয়েন্স যা সাধারণত উদ্ধৃতি চিহ্ন ("") দ্বারা ঘিরে রাখা হয়। স্ট্রিংে অক্ষর, শব্দ, বা বিশেষ চিহ্ন থাকতে পারে।
উদাহরণ:
name = "Rexx Programming"
- Number (নম্বর):
- Rexx-এ সংখ্যার মান সাধারনত ইন্টিজার বা ফ্লোট পয়েন্ট সংখ্যা হতে পারে। Rexx ভাসমান বিন্দু বা দশমিক মানের উপর কাজ করে।
উদাহরণ:
age = 25 /* ইন্টিজার */ price = 19.99 /* ফ্লোট */
- Character (চরিত্র):
- Rexx সাধারণত স্ট্রিং ধারণ করতে ব্যবহার করে, তবে একটি মাত্র চরিত্রকে স্ট্রিং হিসাবে ধরা হয় এবং এটি একটি একক অক্ষর হতে পারে।
উদাহরণ:
letter = "A"
- List (লিস্ট):
- Rexx-এ লিস্ট হলো একাধিক উপাদান নিয়ে একটি সংগ্রহ। এটি ভেরিয়েবলগুলির একটি সিরিজ ধারণ করতে পারে, যেখানে প্রতিটি উপাদান আলাদাভাবে রেফারেন্স করা যায়।
উদাহরণ:
numbers = "1" "2" "3" "4" "5"
- Queue (কিউ):
- Rexx কিউ একটি ডেটা স্ট্রাকচার যা FIFO (First In First Out) ভিত্তিতে উপাদান সংগ্রহ করে। এটি একটি ডেটার লাইন বা কিউয়ের মতো কাজ করে।
উদাহরণ:
queue = "apple" "banana" "cherry"
ভেরিয়েবলস (Variables)
ভেরিয়েবল হল একটি নামকৃত স্থান যেখানে ডেটা সংরক্ষণ করা হয়। Rexx-এ, ভেরিয়েবলগুলি ডাইনামিকভাবে টাইপ করা হয়, অর্থাৎ, একটি ভেরিয়েবল যে ধরনের ডেটা ধারণ করবে তা আগে থেকে নির্ধারণ করতে হয় না। ভেরিয়েবলগুলিকে সাধারণত নাম দিয়ে চিহ্নিত করা হয় এবং সেই নামের মাধ্যমে ডেটা অ্যাক্সেস করা হয়।
ভেরিয়েবল ডিফাইন করা:
Rexx-এ ভেরিয়েবল ডিফাইন করার জন্য কেবল ভেরিয়েবলের নাম উল্লেখ করতে হয় এবং তারপর তার মান অ্যাসাইন করা হয়। এতে ডেটা টাইপ নির্ধারণ করার প্রয়োজন নেই, কারণ Rexx স্বয়ংক্রিয়ভাবে টাইপ সনাক্ত করে।উদাহরণ:
message = "Hello, Rexx!" count = 5ভেরিয়েবল অ্যাসাইনমেন্ট:
ভেরিয়েবলে ডেটা অ্যাসাইন করার সময় সরাসরি সমীকরণ চিহ্ন (=) ব্যবহার করা হয়। Rexx-এ ভেরিয়েবলগুলি সর্বদা অ্যাসাইনমেন্টের মাধ্যমে মান গ্রহণ করে।উদাহরণ:
name = "John" age = 30ভেরিয়েবল অ্যাক্সেস:
Rexx-এ যখন একটি ভেরিয়েবল অ্যাক্সেস করা হয়, তখন তার নাম সরাসরি ব্যবহার করা হয় এবং সেটি সেই ভেরিয়েবলের মান প্রদান করে।উদাহরণ:
say "Name: " name /* এখানে name ভেরিয়েবলের মান প্রদর্শন হবে */ say "Age: " age /* এখানে age ভেরিয়েবলের মান প্রদর্শন হবে */লিস্ট এবং কিউতে ভেরিয়েবল অ্যাক্সেস:
লিস্ট বা কিউতে একাধিক মান রাখলে, প্রতিটি উপাদানকে একে একে অ্যাক্সেস করতে হয়।উদাহরণ:
numbers = "1" "2" "3" say numbers.1 /* প্রথম উপাদান, আউটপুট হবে 1 */ say numbers.2 /* দ্বিতীয় উপাদান, আউটপুট হবে 2 */
স্ট্রিং অপারেশন এবং ভেরিয়েবল:
Rexx-এ স্ট্রিংগুলো সহজে ম্যানিপুলেট করা যায়। ভেরিয়েবলগুলোর মান পরিবর্তন, যোগ করা এবং সাবস্ট্রিং নেওয়া যায়।
উদাহরণ:
name = "John"
greeting = "Hello, " name /* স্ট্রিং যোগ */
say greeting /* আউটপুট হবে "Hello, John" */ভেরিয়েবল এবং মেমরি ব্যবস্থাপনা:
Rexx-এ ভেরিয়েবলগুলো ডাইনামিকভাবে মেমরিতে তৈরি এবং ধ্বংস হয়। Rexx কোনো নির্দিষ্ট মেমরি সাইজ বা টাইপের সীমাবদ্ধতার মুখে পড়ে না। এটি ভেরিয়েবলগুলি দ্রুত তৈরি এবং মুছে ফেলতে পারে।
সারাংশ:
Rexx ভাষায় ডেটা টাইপ এবং ভেরিয়েবল দুটি গুরুত্বপূর্ণ উপাদান। Rexx ডাইনামিক টাইপিং সমর্থন করে, তাই ডেটার ধরন এবং মান পরিবর্তন করা সহজ। স্ট্রিং, নম্বর, লিস্ট, এবং কিউসহ বিভিন্ন ডেটা টাইপগুলি ব্যবহারের মাধ্যমে ভেরিয়েবলগুলির মাধ্যমে ডেটা সংরক্ষণ এবং পরিচালনা করা হয়। Rexx এর সহজ সিনট্যাক্স এবং ব্যবহারের সুবিধা এটি নতুন প্রোগ্রামারদের জন্য একটি শক্তিশালী টুল বানায়।
Rexx একটি ডাইনামিক টাইপিং ভাষা, যা এর অন্যতম প্রধান বৈশিষ্ট্য। ডাইনামিক টাইপিং মানে হলো, একটি ভেরিয়েবল বা ডেটা এর ধরন (datatype) কেবলমাত্র রানটাইম (runtime) এর সময় নির্ধারিত হয়, কম্পাইল টাইমে নয়। এই প্রক্রিয়া প্রোগ্রামিংকে সহজ এবং দ্রুত বানায়, কারণ প্রোগ্রাম লেখার সময় ভেরিয়েবলগুলোর ডেটা টাইপের ব্যাপারে কোনো নির্দিষ্ট নিয়ম বা ঘোষণার প্রয়োজন হয় না।
Rexx এর Dynamic Typing এর বৈশিষ্ট্য:
ভেরিয়েবল ডেক্লেয়ারেশন প্রয়োজন হয় না:
Rexx ভাষায় ভেরিয়েবল ডেক্লেয়ার করার জন্য কোনো ধরনের টাইপ ঘোষণা করতে হয় না। এটি ভেরিয়েবলকে তার প্রথম ব্যবহারের সময়েই একটি টাইপ আসমান করে। অর্থাৎ, আপনি শুধু ভেরিয়েবল ব্যবহার করতে পারেন, এবং Rexx সেটি ডাইনামিকভাবে সেই ভেরিয়েবলের টাইপ নির্ধারণ করে নেবে।যেমন:
x = 5 /* x একটি সংখ্যার মান ধারণ করছে */ x = "Hello" /* এখন x একটি স্ট্রিং ধারণ করছে */টাইপ চেঞ্জ করা যায়:
যেহেতু টাইপিং ডাইনামিক, একটি ভেরিয়েবল একসময় একটি ডেটা টাইপ ধারণ করছে এবং পরবর্তী সময়ে তা অন্য একটি টাইপ ধারণ করতে পারে। এটি স্ক্রিপ্টিংয়ের জন্য বিশেষ উপকারী, কারণ কোডটি আরও নমনীয় এবং সুবিধাজনক হয়ে ওঠে।যেমন:
y = 10 /* y একটি ইনটিজার ধারণ করছে */ y = "Text" /* এখন y একটি স্ট্রিং ধারণ করছে */অটোমেটিক টাইপ কনভার্সন:
Rexx স্বয়ংক্রিয়ভাবে টাইপ কনভার্সন পরিচালনা করতে পারে। আপনি যদি একটি ভেরিয়েবলকে এমন একটি টাইপে ব্যবহার করেন যা তার প্রাথমিক টাইপের সাথে সঙ্গতিপূর্ণ নয়, Rexx তখন নিজে থেকেই টাইপ কনভার্ট করে নেয়।যেমন:
z = 5 /* z একটি সংখ্যা */ z = z + "3" /* Rexx এটি স্বয়ংক্রিয়ভাবে টাইপ কনভার্ট করবে এবং স্ট্রিং যোগ করবে */গণনা এবং স্ট্রিং অপারেশন একসাথে:
যেহেতু Rexx টাইপিং ডাইনামিক, এটি একসাথে সংখ্যা এবং স্ট্রিং এর উপর গণনা এবং অপারেশন করতে সক্ষম, এবং সেই কাজগুলো খুব সহজে পরিচালনা করা যায়। Rexx কোডের মধ্যে টাইপ মিশ্রণ সাধারণ এবং এতে কোন সমস্যা হয় না।যেমন:
total = 10 /* total একটি সংখ্যা */ total = total + "5" /* এটি স্ট্রিং কনক্যাটেনেশন হবে, ফলস্বরূপ "105" */
ডাইনামিক টাইপিং এর সুবিধা:
- কোডিং সহজ: ডাইনামিক টাইপিং প্রোগ্রাম লেখার সময় টাইপ ডিক্লেয়ারেশনের ঝামেলা কমিয়ে দেয়। এটি কোডিং প্রক্রিয়াকে দ্রুত এবং সহজ করে তোলে।
- নমনীয়তা: ভেরিয়েবল টাইপ পরিবর্তন করার ক্ষমতা কোডে আরও নমনীয়তা প্রদান করে, যা দ্রুত পরীক্ষা এবং প্রোটোটাইপিংয়ের জন্য উপকারী।
- কম কোডিং: টাইপ ডিক্লেয়ারেশন না করায় কোডের পরিমাণ কমে আসে, ফলে কোডিং দ্রুত এবং কম সময়ের মধ্যে শেষ করা যায়।
ডাইনামিক টাইপিং এর সীমাবদ্ধতা:
- টাইপ সম্পর্কিত ত্রুটি: রানটাইমে টাইপ সম্পর্কিত ত্রুটি হতে পারে, যেমন একটি ভেরিয়েবল যদি ভুল টাইপের মান ধারণ করে থাকে, তবে এটি ভুল ফলাফল দিতে পারে।
- ডিবাগিং জটিলতা: যেহেতু টাইপ চেকিং কম্পাইল টাইমে হয় না, তাই কিছু সময় ডিবাগিংয়ের সময় টাইপ সংক্রান্ত ত্রুটি চিহ্নিত করা কঠিন হতে পারে।
সারাংশ:
Rexx এর ডাইনামিক টাইপিং একটি শক্তিশালী বৈশিষ্ট্য যা প্রোগ্রামিং ভাষাকে সহজ, নমনীয় এবং দ্রুত তৈরি করে তোলে। এতে টাইপ ডিক্লেয়ারেশন ছাড়াই ভেরিয়েবল ব্যবহার করা যায় এবং টাইপ পরিবর্তন করা সম্ভব। তবে, এটি কিছু ক্ষেত্রে রানটাইম ত্রুটি বা ডিবাগিং সমস্যার কারণ হতে পারে। Rexx এর এই বৈশিষ্ট্যটি স্ক্রিপ্টিং এবং অটোমেশন কাজের জন্য আদর্শ।
Rexx ভাষায় ডেটার দুটি প্রধান টাইপ রয়েছে: Numeric (সংখ্যা) এবং String (স্ট্রিং)। Rexx-এর এই দুটি টাইপ খুবই গুরুত্বপূর্ণ এবং প্রতিটি টাইপের নিজস্ব বৈশিষ্ট্য রয়েছে যা স্ক্রিপ্ট লেখার সময় ব্যবহারকারীদের সুবিধা প্রদান করে। নিচে প্রতিটি টাইপের বিস্তারিত আলোচনা করা হল:
১. Numeric টাইপ (সংখ্যা)
Rexx ভাষায় Numeric টাইপে প্রধানত পূর্ণসংখ্যা (Integer) এবং দশমিক সংখ্যা (Floating point numbers) ব্যবহৃত হয়। Rexx স্বয়ংক্রিয়ভাবে যে কোনও সংখ্যা শনাক্ত করে এবং তাকে Numeric টাইপ হিসেবে পরিচালনা করে।
Numeric টাইপের বৈশিষ্ট্য:
- Rexx স্বয়ংক্রিয়ভাবে পূর্ণসংখ্যা এবং দশমিক সংখ্যা পার্থক্য করতে পারে।
- Rexx-এর Numeric টাইপে গাণিতিক অপারেশন সহজে করা যায়।
- Rexx স্বয়ংক্রিয়ভাবে সংখ্যার ধরন পরিবর্তন করতে পারে (যেমন, ১০০ একটি পূর্ণসংখ্যা হিসেবে শুরু হলেও, ১০০.৫ একটি দশমিক সংখ্যা হিসেবে ধরা হবে)।
Numeric টাইপ ব্যবহার:
- Integer (পূর্ণসংখ্যা):
- পূর্ণসংখ্যা গাণিতিক হিসাব বা কাউন্টিংয়ের জন্য ব্যবহার করা হয়।
উদাহরণ:
num = 100
- Floating Point (দশমিক সংখ্যা):
- দশমিক সংখ্যা সংখ্যার ভগ্নাংশ বা ডেসিমাল পয়েন্টের জন্য ব্যবহৃত হয়।
উদাহরণ:
num = 100.75
গাণিতিক অপারেশন:
Rexx বিভিন্ন গাণিতিক অপারেশন যেমন যোগ, বিয়োগ, গুণ, ভাগ ইত্যাদি সমর্থন করে।
উদাহরণ:
num1 = 10 num2 = 5 result = num1 + num2 /* ফলাফল হবে 15 */ result = num1 * num2 /* ফলাফল হবে 50 */
২. String টাইপ (স্ট্রিং)
Rexx ভাষায় String টাইপের মান হলো টেক্সট বা অক্ষরের একটি সিকোয়েন্স। স্ট্রিং-এর মধ্যে যেকোনো অক্ষর বা চিহ্ন থাকতে পারে, যেমন অক্ষর, সংখ্যার সিরিজ, স্পেস, বিশেষ চিহ্ন ইত্যাদি। Rexx-এ স্ট্রিং টাইপ অত্যন্ত গুরুত্বপূর্ণ, বিশেষ করে টেক্সট প্রসেসিং বা ফাইল ম্যানিপুলেশন কাজের জন্য।
String টাইপের বৈশিষ্ট্য:
- Rexx স্ট্রিং টাইপের মান হিসেবে অক্ষরের যেকোনো সিকোয়েন্স বা টেক্সট অনুমোদন করে।
- স্ট্রিংয়ে স্পেস বা বিশেষ চিহ্ন থাকতে পারে, এবং সেগুলি স্ট্রিংয়ের অংশ হিসেবে গণ্য হয়।
- Rexx ভাষায় স্ট্রিংয়ের মধ্যে থাকা অক্ষরের জন্য কোডিং এবং টেক্সট প্রসেসিং খুব সহজ।
String টাইপ ব্যবহার:
- String Assignment:
- স্ট্রিং ভ্যালু অ্যাসাইন করা যায় সরাসরি।
উদাহরণ:
name = "John Doe" greeting = "Hello, " name
- String Concatenation (স্ট্রিং সংযোগ):
- Rexx-এ দুটি স্ট্রিংকে একত্রিত করা যেতে পারে
||অপারেটর দিয়ে। উদাহরণ:
greeting = "Hello, " name = "John" message = greeting || name /* ফলাফল হবে "Hello, John" */
- Rexx-এ দুটি স্ট্রিংকে একত্রিত করা যেতে পারে
- String Length (স্ট্রিং দৈর্ঘ্য):
- স্ট্রিংয়ের দৈর্ঘ্য জানা যায়
length()ফাংশন ব্যবহার করে। উদাহরণ:
message = "Hello" len = length(message) /* ফলাফল হবে 5 */
- স্ট্রিংয়ের দৈর্ঘ্য জানা যায়
- String Comparison (স্ট্রিং তুলনা):
- Rexx-এ স্ট্রিং তুলনা করতে
=বা==ব্যবহার করা হয়। উদাহরণ:
str1 = "apple" str2 = "orange" if str1 = str2 then say "They are the same" else say "They are different"
- Rexx-এ স্ট্রিং তুলনা করতে
- String Search (স্ট্রিং অনুসন্ধান):
- Rexx-এ একটি স্ট্রিংয়ের মধ্যে অন্য স্ট্রিং খুঁজে বের করার জন্য
pos()ফাংশন ব্যবহার করা হয়। উদাহরণ:
sentence = "Hello world" position = pos("world", sentence) /* ফলাফল হবে 7 */
- Rexx-এ একটি স্ট্রিংয়ের মধ্যে অন্য স্ট্রিং খুঁজে বের করার জন্য
Numeric এবং String টাইপের মধ্যে পার্থক্য:
| বৈশিষ্ট্য | Numeric | String |
|---|---|---|
| ডেটার ধরন | সংখ্যার মান (Integer বা Floating Point) | অক্ষরের সিকোয়েন্স (যেমন: "Hello") |
| গাণিতিক অপারেশন | করা যায় (যেমন, +, -, *, /) | গাণিতিক অপারেশন সম্ভব নয় |
| স্ট্রিং অপারেশন | না | স্ট্রিং ম্যানিপুলেশন (Concatenation, Length) |
| দ্বন্দ্ব | শুধুমাত্র সংখ্যার মধ্যে | স্পেস, বিশেষ চিহ্ন, অক্ষর ইত্যাদি সমর্থিত |
| উদাহরণ | 100, 25.75 | "Hello", "1234", "Apple" |
সারাংশ:
Rexx-এ Numeric টাইপ এবং String টাইপ দুটি প্রধান ডেটা টাইপ হিসেবে ব্যবহৃত হয়। Numeric টাইপে গাণিতিক অপারেশন সহজভাবে করা যায়, আর String টাইপে টেক্সট বা অক্ষরের মধ্যে কাজ করা যায়। Rexx-এ দুই ধরনের টাইপের এই বৈশিষ্ট্যগুলি ব্যবহার করে, প্রোগ্রামিংয়ের বিভিন্ন প্রয়োজনীয় কাজ খুব সহজ এবং কার্যকরীভাবে সম্পন্ন করা সম্ভব।
Rexx একটি ডাইনামিক্যালি টাইপ করা ভাষা, যার মানে হল যে, পরিবর্তনশীল (variables) এর টাইপ আগে থেকেই নির্ধারিত হতে হয় না। এটি প্রোগ্রামারের জন্য সহজ করে তোলে কারণ পরিবর্তনশীলের টাইপ নির্বাচন করার জন্য অতিরিক্ত চিন্তা করতে হয় না। তবে, Rexx এ পরিবর্তনশীল নামকরণের কিছু নির্দিষ্ট নিয়ম এবং তা কীভাবে ইনিশিয়ালাইজ করতে হয়, তা জানা প্রয়োজন।
1. Variable Naming (পরিবর্তনশীলের নামকরণ)
Rexx এ পরিবর্তনশীল নামকরণের জন্য কিছু বিশেষ নিয়ম রয়েছে:
- শুরুতে অক্ষর: Rexx এ পরিবর্তনশীলের নাম একটি অক্ষর দিয়ে শুরু হতে হবে (এটা সংখ্যার সাথে শুরু হতে পারে না)।
- অক্ষর, সংখ্যা এবং আন্ডারস্কোর: Rexx এ পরিবর্তনশীলের নামের মধ্যে অক্ষর, সংখ্যা এবং আন্ডারস্কোর (_) থাকতে পারে। তবে, নামটি শুধুমাত্র অক্ষর দিয়ে শুরু হবে।
- বড়-ছোট অক্ষরের পার্থক্য: Rexx এ বড় এবং ছোট অক্ষরের পার্থক্য রাখা হয় না, অর্থাৎ "variable", "Variable" এবং "VARIABLE" সব একইভাবে বিবেচিত হবে।
- অপারেটর এবং কিওয়ার্ড ব্যবহার: Rexx এ নির্দিষ্ট কিছু কিওয়ার্ড এবং অপারেটর (যেমন
if,then,end,doইত্যাদি) নাম হিসেবে ব্যবহার করা যাবে না।
নামকরণের কিছু উদাহরণ:
- সঠিক নাম:
counter,user_name,totalValue - ভুল নাম:
123counter(যেহেতু নামটি সংখ্যা দিয়ে শুরু হচ্ছে),if(এটি একটি কিওয়ার্ড)
2. Variable Initialization (পরিবর্তনশীলের প্রাথমিক মান নির্ধারণ)
Rexx এ পরিবর্তনশীলগুলি ডাইনামিক্যালি টাইপ করা হয়, তাই কোনো নির্দিষ্ট টাইপের মান নির্ধারণের জন্য আপনাকে কোন বিশেষ কীওয়ার্ড ব্যবহার করতে হবে না। পরিবর্তনশীলের মান সরাসরি অ্যাসাইন করা যায়।
ব্যাসিক ইনিশিয়ালাইজেশন:
Rexx এ পরিবর্তনশীলকে একে একে মান দেওয়া হয়। ইনিশিয়ালাইজেশন খুবই সহজ, এবং এটি সরাসরি মান নির্ধারণ করে।
উদাহরণ:
counter = 10 /* counter নামক পরিবর্তনশীলকে 10 মান দেওয়া হয়েছে */
name = "Alice" /* name নামক পরিবর্তনশীলকে "Alice" মান দেওয়া হয়েছে */এখানে, counter পরিবর্তনশীলকে পূর্ণসংখ্যা 10 এবং name পরিবর্তনশীলকে স্ট্রিং "Alice" মান দেওয়া হয়েছে।
অফিসিয়ালভাবে ইনিশিয়ালাইজ করা না থাকলে ডিফল্ট মান:
Rexx এ যদি কোনো পরিবর্তনশীলকে ইনিশিয়ালাইজ না করা হয়, তবে তার মান "" (শূন্য স্ট্রিং) হবে। অর্থাৎ, Rexx একটি অপ্রাথমিকভাবে ইনিশিয়ালাইজ করা পরিবর্তনশীলের জন্য ডিফল্ট মান শূন্য স্ট্রিং বা শূন্য মান হিসেবে গ্রহণ করবে।
উদাহরণ:
var1 = "" /* var1 এ শূন্য স্ট্রিং মান */
var2 = 0 /* var2 এ শূন্য পূর্ণসংখ্যা মান */অ্যাসাইনমেন্টের মাধ্যমে মান পরিবর্তন:
একবার পরিবর্তনশীলকে ইনিশিয়ালাইজ করা হলে, পরবর্তীতে তা অন্য কোনো মানে পরিবর্তিত করা যেতে পারে। Rexx তে এটি খুব সহজ।
উদাহরণ:
x = 5 /* x নামক পরিবর্তনশীলকে 5 দেওয়া হয়েছে */
x = x + 2 /* এখন x এর মান 7 হবে */এখানে প্রথমে x এর মান ৫ দেওয়া হয়েছিল, এবং পরবর্তীতে তাকে ২ যোগ করার মাধ্যমে নতুন মান ৭ হয়ে গেল।
3. Special Variables (বিশেষ পরিবর্তনশীল)
Rexx এ কিছু বিশেষ পরিবর্তনশীলও থাকে, যা কিছু নির্দিষ্ট তথ্য রাখে, যেমন:
RC: এটি প্রোগ্রামের শেষ হওয়ার পর কমান্ডের রিটার্ন কোড (Return Code) ধারণ করে।ARG: এটি আর্গুমেন্ট হিসেবে প্রোগ্রামে প্রবেশ করা মানগুলিকে ধারণ করে।ADDRESS: এটি একটি বিশেষ কমান্ডের ঠিকানা ধারণ করে (যেমন, ডাটাবেস বা সিস্টেম কমান্ড)।
উদাহরণ:
RC = 0 /* Return code 0 দিয়ে ইনিশিয়ালাইজ */4. Constants (ধ্রুবক মান)
Rexx এ পরিবর্তনশীলকে ধ্রুবক বানানোর কোনো সরাসরি পদ্ধতি নেই, তবে আপনি পরিবর্তনশীলকে একটি নির্দিষ্ট মানে সেট করতে পারেন এবং তারপর সেটি পরিবর্তন করতে পারেন না। এটি মানসিকভাবে ধ্রুবক হিসেবে ব্যবহার করা যায়, যদিও ভাষার মধ্যে কোনো বিশেষ নিয়ম নেই।
উদাহরণ:
MAX_VALUE = 100 /* MAX_VALUE একটি ধ্রুবক মান হিসেবে ব্যবহৃত হতে পারে */সারাংশ:
- Rexx এ পরিবর্তনশীল নামকরণের নিয়ম হলো এটি অক্ষর দিয়ে শুরু হতে হবে এবং নামের মধ্যে অক্ষর, সংখ্যা বা আন্ডারস্কোর (_) থাকতে পারে।
- Rexx একটি ডাইনামিক্যালি টাইপ করা ভাষা হওয়ায়, পরিবর্তনশীলের টাইপ আগে থেকেই নির্ধারণ করতে হয় না।
- Rexx এ পরিবর্তনশীল ইনিশিয়ালাইজেশন সরাসরি অ্যাসাইনমেন্টের মাধ্যমে করা হয়, এবং ডিফল্ট মান হিসেবে শূন্য স্ট্রিং বা শূন্য পূর্ণসংখ্যা প্রদান করা হয়।
- Rexx তে পরিবর্তনশীলের মান সহজে পরিবর্তন করা যায় এবং বিশেষ কিছু পরিবর্তনশীল যেমন
RC,ARG,ADDRESSব্যবহৃত হয় নির্দিষ্ট তথ্য রাখতে।
Rexx ভাষায় ডেটা ম্যানিপুলেশন অত্যন্ত সহজ এবং কার্যকরী হয়, কারণ এতে অনেক ধরনের বিল্ট-ইন ফাংশন রয়েছে যা বিভিন্ন ধরনের ডেটা প্রসেসিং, স্ট্রিং ম্যানিপুলেশন, এবং অন্যান্য সিস্টেম অপারেশন সহজ করে তোলে। Rexx এর বিল্ট-ইন ফাংশনগুলি বিশেষত টেক্সট স্ট্রিং, ডেটা এক্সট্র্যাকশন, এবং ফাইল ম্যানিপুলেশন কাজগুলোর জন্য ব্যবহৃত হয়। এখানে কিছু গুরুত্বপূর্ণ Rexx Built-in ফাংশন এবং তাদের মাধ্যমে ডেটা ম্যানিপুলেশনের উদাহরণ দেয়া হলো।
১. SUBSTR() (Substring Extraction)
SUBSTR() ফাংশনটি একটি স্ট্রিং থেকে নির্দিষ্ট অংশ বের করার জন্য ব্যবহৃত হয়। এটি স্ট্রিংয়ের নির্দিষ্ট পজিশন থেকে সাবস্ট্রিং তৈরি করতে সাহায্য করে।
উদাহরণ:
string = "Hello, Rexx!"
sub_string = substr(string, 1, 5)
say sub_string /* Output: Hello */এখানে SUBSTR() ফাংশনটি "Hello, Rexx!" স্ট্রিং থেকে প্রথম ৫টি ক্যারেকটার (1 থেকে 5 পজিশন পর্যন্ত) নিয়ে আসবে।
২. INDEX() (Find the Position of a Substring)
INDEX() ফাংশনটি একটি সাবস্ট্রিংয়ের প্রথম উপস্থিতির ইনডেক্স পজিশন খুঁজে বের করতে ব্যবহৃত হয়।
উদাহরণ:
string = "Rexx Programming Language"
position = index(string, "Programming")
say position /* Output: 6 */এখানে INDEX() ফাংশনটি "Rexx Programming Language" স্ট্রিংয়ের মধ্যে "Programming" সাবস্ট্রিংয়ের প্রথম উপস্থিতির পজিশন ৬ রিটার্ন করবে।
৩. STRIP() (Remove Leading and Trailing Spaces)
STRIP() ফাংশনটি একটি স্ট্রিংয়ের অতিরিক্ত শূন্যস্থান (leading or trailing spaces) সরিয়ে ফেলে।
উদাহরণ:
string = " Rexx "
clean_string = strip(string)
say clean_string /* Output: Rexx */এখানে STRIP() ফাংশনটি " Rexx " স্ট্রিংয়ের শুরু এবং শেষের শূন্যস্থান সরিয়ে ফেলবে।
৪. TRANSLATE() (Replace Characters)
TRANSLATE() ফাংশনটি একটি স্ট্রিংয়ে থাকা নির্দিষ্ট চরিত্রকে অন্য চরিত্রে পরিবর্তন করে।
উদাহরণ:
string = "Rexx Programming"
new_string = translate(string, "xyz", "R")
say new_string /* Output: xexx Pxyzogamming */এখানে TRANSLATE() ফাংশনটি "Rexx Programming" স্ট্রিংয়ের সব "R" কে "x" এ পরিবর্তন করেছে।
৫. UPPER() এবং LOWER() (Convert Case)
UPPER() এবং LOWER() ফাংশনগুলি একটি স্ট্রিংয়ের সমস্ত অক্ষরকে যথাক্রমে বড় হাতের অক্ষরে (uppercase) অথবা ছোট হাতের অক্ষরে (lowercase) পরিবর্তন করতে ব্যবহৃত হয়।
উদাহরণ:
string = "Hello, Rexx!"
upper_string = upper(string)
lower_string = lower(string)
say upper_string /* Output: HELLO, REXX! */
say lower_string /* Output: hello, rexx! */এখানে UPPER() ফাংশনটি "Hello, Rexx!" স্ট্রিংটি বড় হাতের অক্ষরে এবং LOWER() ফাংশনটি ছোট হাতের অক্ষরে পরিবর্তন করবে।
৬. WORDS() (Count Words)
WORDS() ফাংশনটি একটি স্ট্রিংয়ে কয়টি শব্দ রয়েছে তা গুনতে ব্যবহৃত হয়।
উদাহরণ:
string = "Rexx is easy to learn"
word_count = words(string)
say word_count /* Output: 5 */এখানে WORDS() ফাংশনটি "Rexx is easy to learn" স্ট্রিংয়ের মধ্যে ৫টি শব্দ গণনা করবে।
৭. COMPARE() (Compare Strings)
COMPARE() ফাংশনটি দুটি স্ট্রিংয়ের তুলনা করে এবং ফলস্বরূপ একটি সংখ্যা রিটার্ন করে:
- 0: যদি স্ট্রিং দুটি সমান হয়।
- নেতিবাচক: যদি প্রথম স্ট্রিং দ্বিতীয়টির চেয়ে ছোট হয়।
- ধনাত্মক: যদি প্রথম স্ট্রিং দ্বিতীয়টির চেয়ে বড় হয়।
উদাহরণ:
string1 = "Rexx"
string2 = "Rexx"
result = compare(string1, string2)
say result /* Output: 0 */এখানে COMPARE() ফাংশনটি "Rexx" এবং "Rexx" স্ট্রিং দুটি সমান হওয়ায় 0 রিটার্ন করবে।
৮. EXTRACT() (Extract Data)
EXTRACT() ফাংশনটি একটি স্ট্রিং থেকে নির্দিষ্ট অংশ বা ডেটা এক্সট্র্যাক্ট করতে ব্যবহৃত হয়। এটি সাধারণত ডেটাবেস বা টেবিল থেকে নির্দিষ্ট তথ্য বের করার জন্য ব্যবহার করা হয়।
উদাহরণ:
string = "Name: John, Age: 30"
name = extract(string, 1, 5)
say name /* Output: Name: */এখানে EXTRACT() ফাংশনটি প্রথম ৫টি ক্যারেকটার বের করবে।
৯. SCAN() (Find a Substring)
SCAN() ফাংশনটি একটি স্ট্রিংয়ের মধ্যে একটি নির্দিষ্ট সাবস্ট্রিং খুঁজে বের করার জন্য ব্যবহৃত হয় এবং তার পজিশন রিটার্ন করে।
উদাহরণ:
string = "Rexx is a programming language"
position = scan(string, "programming")
say position /* Output: 8 */এখানে SCAN() ফাংশনটি "Rexx is a programming language" স্ট্রিংয়ের মধ্যে "programming" শব্দের প্রথম পজিশন খুঁজে পাবে, যা ৮ হবে।
সারাংশ:
Rexx ভাষায় ডেটা ম্যানিপুলেশন অত্যন্ত সহজ এবং কার্যকরী। এর বিল্ট-ইন ফাংশনগুলি ডেটা স্ট্রিং প্রসেসিং, এক্সট্র্যাকশন, পরিবর্তন, এবং ফর্ম্যাটিং-এর জন্য ব্যবহৃত হয়। এই ফাংশনগুলি কোড লেখা সহজ করে তোলে এবং স্ক্রিপ্টিং এবং অটোমেশন কাজগুলো আরও দ্রুত এবং কার্যকরভাবে সম্পন্ন করতে সাহায্য করে। Rexx এর এই ক্ষমতা বিভিন্ন সিস্টেম অ্যাডমিনিস্ট্রেশন, ফাইল ম্যানিপুলেশন, এবং ডেটাবেস কাজের জন্য অত্যন্ত উপকারী।
Read more