প্রোগ্রামিংয়ের মৌলিক ধারণা/ডেটা টাইপ রূপান্তর
সংক্ষিপ্ত বিবরণ
[সম্পাদনা]একটি মানের ডেটা টাইপ পরিবর্তন করাকে “টাইপ রূপান্তর” বলা হয়। এটি দুটি উপায়ে করা যেতে পারে:
- ইমপ্লিসিট (অস্পষ্ট) – রূপান্তরটি স্বয়ংক্রিয়ভাবে ঘটে
- এক্সপ্লিসিট (স্পষ্ট) – রূপান্তরটি একটি অপারেটর বা ফাংশনের মাধ্যমে স্পষ্টভাবে করা হয়
যে মানটি পরিবর্তিত হচ্ছে তা হতে পারে:
- প্রমোশন – ছোট ডোমেইন থেকে বড় ডোমেইনে যাওয়া
- ডিমোশন – বড় ডোমেইন থেকে ছোট ডোমেইনে যাওয়া
আলোচনা
[সম্পাদনা]ইমপ্লিসিট টাইপ রূপান্তর
[সম্পাদনা]একটি প্রোগ্রামিং ভাষা যখন স্বয়ংক্রিয়ভাবে কোনো মানকে এক ডেটা টাইপ থেকে অন্য ডেটা টাইপে রূপান্তর করে, প্রোগ্রামার সরাসরি কিছু না করেও, তখন একে ইমপ্লিসিট টাইপ রূপান্তর বলা হয়। এটি তখন ঘটে যখন কোনো বাইনারি অপারেটরের দুইটি অপারেন্ডের ডেটা টাইপ ভিন্ন হয়। অপারেটরের উপর নির্ভর করে, একটি অপারেন্ডকে অন্যটির ডেটা টাইপে রূপান্তর করা হয়। এটি প্রমোশন বা ডিমোশন হতে পারে।
ইমপ্লিসিট প্রমোশন 55 + 1.75 এই উদাহরণে, পূর্ণসংখ্যা মান ৫৫ কে একটি ফ্লোটিং-পয়েন্ট মানে (সম্ভবত ডাবল) রূপান্তর করা হয়েছে ৫৫.০-তে। এটি প্রমোশন হয়েছে।
ইমপ্লিসিট ডিমোশন যেসব প্রোগ্রামিং ভাষায় এক্সপ্লিসিট পূর্ণসংখ্যা ডেটা টাইপ রয়েছে (C++, C#, Java), সেখানে ইমপ্লিসিট ডিমোশন এড়াতে সতর্ক থাকা দরকার। যেমন:
int money; money = 23.16;
এই উদাহরণে, money একটি পূর্ণসংখ্যা ভেরিয়েবল। আমরা ২৩.১৬ ফ্লোটিং-পয়েন্ট মানটি একটি পূর্ণসংখ্যার সংরক্ষণস্থানে রাখতে চাইছি। এটি একটি ডিমোশন এবং সাধারণত ফ্লোটিং-পয়েন্ট মানটি কেটে ২৩-তে পরিণত হয়।
প্রমোশন
[সম্পাদনা]প্রমোশন কোনো সমস্যা সৃষ্টি করে না, কারণ নিচের ডেটা টাইপ (কম রেঞ্জ) উচ্চ ডেটা টাইপের (বড় রেঞ্জ) একটি উপসেট। প্রমোশন সাধারণত তিনটি স্ট্যান্ডার্ড ডেটা টাইপের মধ্যে ঘটে: ক্যারেক্টার, পূর্ণসংখ্যা, এবং ফ্লোটিং-পয়েন্ট। অনুমোদিত মানগুলো (বা ডোমেইনগুলো) এক টাইপ থেকে আরেক টাইপে অগ্রসর হয়। অর্থাৎ, ক্যারেক্টার ডেটা টাইপের মানগুলো পূর্ণসংখ্যার একটি উপসেট এবং পূর্ণসংখ্যাগুলো ফ্লোটিং-পয়েন্টের উপসেট; এবং ফ্লোটিং-পয়েন্টের মধ্যে float মানগুলো double-এর উপসেট। যদিও ক্যারেক্টার ডেটা অক্ষর, সংখ্যা (০-৯), ও অন্যান্য চিহ্ন উপস্থাপন করে, তবে এর বিট প্যাটার্ন ০ থেকে ২৫৫ পর্যন্ত পূর্ণসংখ্যাও উপস্থাপন করে। এই ধারাবাহিকতা আমাদের ক্যারেক্টার থেকে পূর্ণসংখ্যা, তারপর float, তারপর double-এ প্রমোশন করতে দেয়।
ডিমোশন
[সম্পাদনা]ডিমোশন অনেক সময় সমস্যা তৈরি করে, যেমন ট্রাংকেশন (কাটা পড়া) বা অপ্রত্যাশিত ফলাফল দেখা যায়। আপনি কিভাবে ৪৫৬ পূর্ণসংখ্যা মানকে একটি ক্যারেক্টার মানে রূপান্তর করবেন? বা ৪৫৬৫৬.৪৫৩ ফ্লোটিং-পয়েন্ট মানকে কিভাবে পূর্ণসংখ্যায় রূপান্তর করবেন? বেশিরভাগ কম্পাইলার ডিমোশন সনাক্ত করলে একটি সতর্কবার্তা দেয়। সতর্কবার্তা কম্পাইলেশন বন্ধ করে না, তবে প্রোগ্রামারকে জানায় ডিমোশনটি যৌক্তিক কিনা যাচাই করতে।
যদি আমি হিসাব করি কত ক্যান স্যুপ কিনতে হবে মানুষের সংখ্যার ভিত্তিতে (ধরি ৮ জন) এবং প্রতি ক্যান কতজন খেতে পারে (ধরি ২.৩), তাহলে আমার দরকার হবে ১৮.৪ ক্যান। আমি চাইতে পারি ১৮.৪ কে পূর্ণসংখ্যায় রূপান্তর করতে। এটি ১৮.৪ কে ট্রাংকেট করে ১৮-তে রূপান্তর করবে, এবং যেহেতু ১৮ একটি পূর্ণসংখ্যার ডোমেইনের মধ্যে পড়ে, তাই এটি ডিমোশন হবে ট্রাংকেশনের পার্শ্বপ্রতিক্রিয়াসহ।
যদি আমি মিল্কিওয়ে গ্যালাক্সির তারা সংখ্যার একটি double মানকে পূর্ণসংখ্যায় রূপান্তর করার চেষ্টা করি, তবে আমি অপ্রত্যাশিত ফলাফল পেতে পারি (ধরে নিচ্ছি তারা সংখ্যা পূর্ণসংখ্যার অনুমোদিত মানের চেয়ে বড়)।
এক্সপ্লিসিট টাইপ রূপান্তর
[সম্পাদনা]বেশিরভাগ ভাষার একটি পদ্ধতি রয়েছে যার মাধ্যমে প্রোগ্রামার একটি মানকে এক ডেটা টাইপ থেকে অন্য টাইপে রূপান্তর করতে পারে; একে এক্সপ্লিসিট টাইপ রূপান্তর বলা হয়। কিছু ভাষা cast অপারেটর সমর্থন করে। cast অপারেটর একটি ইউনারি অপারেটর; এর একটি মাত্র অপারেন্ড থাকে এবং সেটি অপারেটরের ডানে থাকে। অপারেটরটি একটি বন্ধনীর মধ্যে নতুন ডেটা টাইপকে ঘিরে থাকে। অন্য ভাষাগুলিতে এক্সপ্লিসিট টাইপ রূপান্তরের জন্য ফাংশন থাকে। নিচের প্রতিটি উদাহরণে, এক্সপ্রেশনের মান হবে ৩।
| Language | Floating-Point to Integer Type Conversion Example |
|---|---|
| C++ | (int) 3.14
|
| C# | Convert.ToInt32(3.14)
|
| Java | Math.floor(3.14)
|
| JavaScript | Math.floor(3.14)
|
| Python | int(3.14)
|
| Swift | Int(3.14)
|
In each of the following examples, the expression value would be 3.14.
| Language | String to Floating-Point Type Conversion Example |
|---|---|
| C++ | #include <string.h>std::stod("3.14")
|
| C# | Convert.ToDouble("3.14")
|
| Java | Double.parseDouble("3.14")
|
| JavaScript | parseFloat("3.14")
|
| Python | float("3.14")
|
| Swift | Double("3.14")
|
মূল শব্দসমূহ
[সম্পাদনা]- ডিমোশন
- বড় ডোমেইন থেকে ছোট ডোমেইনে যাওয়া।
- এক্সপ্লিসিট
- কাস্ট অপারেটরের মাধ্যমে একটি মানের ডেটা টাইপ পরিবর্তন করা।
- ইমপ্লিসিট
- একটি মানের ডেটা টাইপ স্বয়ংক্রিয়ভাবে পরিবর্তন হওয়া।
- প্রমোশন
- ছোট ডোমেইন থেকে বড় ডোমেইনে যাওয়া।
- ট্রাংকেশন
- একটি ফ্লোটিং-পয়েন্ট ডেটা টাইপকে পূর্ণসংখ্যায় রূপান্তর করার সময় ভগ্নাংশ অংশ বাদ যাওয়া।