ডাটা টাইপ
ডাটা টাইপ এটা আবার কি আজব তো! আজবের কিছুই নাই। আমাদের মানুষ জাতির মধ্যে অনেকেরই ভিতরেই নানা ধরনের বৈষিষ্ট্য বিদ্যমান থাকে। একেকজনের একেক ধরনের বৈষিষ্ট্য। উদাহরনস্বরুপ, কেউ পাগলা, কেউ ঘাড়তেড়া, কেউ রাগী, কেউ বদমেজাজী, কেউবা ঠান্ডা প্রকৃতির কিংবা কেউ আবার হাবলু টাইপের। এই যে এত এত টাইপের মানুষ আমরা। আমরা এইগুলাকে বলতে পারি মানুষের টাইপ। তেমনি সব প্রোগ্রামিং এ টাইপ থাকে যেইগুলাকে আমরা ডাটা টাইপ বলে থাকি। আসুন দেখি আর প্রোগ্রামিং এ কত ধরনের ডাটা টাইপ আছে তবে সব গুলার বিস্তারিত হয়তো এখানে বলে আর প্রোগ্রামিং এর সতীত্ব শেষ করে দিবো না। আবার ভয়েরও একটা ব্যাপার আছে!
ক্যারেক্টার, ইন্টিজার এবং ডাবল
আমরা আগের "Hello World" এবং সুদখোড়দের কাছে ফেরত যাই, আমরা যে খুব সহজেই print() ফাংশনের ভিতরে 'Hello World' কে মেকআপের জন্যে ঢুকিয়ে দিয়েছিলাম। ওইখানে বলেছিলাম print() একটা ফাংশন এবং 'Hello World' একটা ক্যারেক্টার। অপরদিকে আমরা সুদখোড়দের জন্যে পূর্নসংখ্যার সুদের হিসাব লিখছিলাম। পূর্নসংখ্যা মানে আমরা লিখেছিলাম ৫০০ টাকা মমতাজ আফা সুদ খায়। এখানে ৫০০ হল পূর্নসংখ্যা আর সব সময় তো পূর্নসংখ্যা নাও হতে পারে ব্যাংক মমতাজ আফাকে ৫০ পয়সা প্রতিমাসে উপহার হিসাবে বাড়তি দিবে তাহলে মমতাজ আফার সুদের পরিমান দাঁড়াবে ৫০০.৫০। যেহেতু মমতাজ আফা সেক্ষেত্রে সে তো অনেক খুশি ৫০ পয়সা ব্যাংক তাকে উপহার দিবে। তাহলে এই ৫০০.৫০ এইটাকে কি টাইপ বলবো? এইটা হলো ডাবল টাইপ। শয়তান আমি তর কোন কথাই বিশ্বাস করি না। বিশ্বাস না করলে আমরা একটা ভ্যারিয়েবলে 'Hello World', আরেকটা ভ্যারিয়েবলে মমতাজ আফার সুদের আগের ৫০০ টাকা এবং আরেকটা ভ্যারিয়েবলে আপডেট ৫০০.৫০ সুদের পরিমানটাকে এসাইন করে টাইপ গুলা দেখে নিতে পার। বাহ ছেলের মাথায় তো অনেক বুদ্ধি।
> ch <- 'Hello World'
> typeof(ch)
[1] "character"
> Momotaz <- 500
> typeof(Momotaz)
[1] "double"
> Momo <- 500.50
> typeof(Momo)
[1] "double"
typeof() লিখে তার ভিতরে ভ্যারিয়েবলটি লিখে দিলেই আমরা ডাটা টাইপটি পেয়ে গেলাম। যা দুষ্ট আপনি না আগে বললেন ৫০০ ইন্টিজার আর ৫০০.৫০ ডাবল এখন দেখি দুইটাই ডাবল। জ্বী ভুল বলছিলাম কারন আর প্রোগ্রামিং এ আপনি পূর্নসংখ্যা বা দশমিক সংখ্যা যা লিখেন না কেন সবই ডাবল হিসাবে স্টোর করে। তাহলে উপায় কি! বুদ্ধি থাকলে উপায় হয়। এইবার দেখি কিভাবে ইন্টিজার হিসাবে ডাটা টাইপ পাবো।
> Momotaz <- 50L
> typeof(Momotaz)
[1] "integer"
> Momo <- as.integer(50)
> typeof(Momo)
[1] "integer"
খুবই সহজ একটা পদ্ধতি শুধু মানের সাথে একটা বড় হাতের 'L' সংযুক্ত করলেই হয়ে যায়। আবার as.intger() এর ভিতরেও মান দিলে হয়। যে যেভাবে খেতে চায় আর কি। যেহেতু ইন্টিজার (intger) সেক্ষেত্রে 'i' দিলেই পারতো। হা তা হয়তো পারতো কিন্তু সমস্যা হলো যখন জটিল সংখ্যা নিয়ে কাজ করবো তখন, আমরা গণিত বইয়ে কিছু জটিল সংখ্যার অঙ্ক দেখছিলাম। যেমন 6 + 9i ইহা একটি জটিল সংখ্যা এখানে ৬ বাস্তব সংখ্যা এবং ৯ হলো জটিল সংখ্যা। আর প্রোগ্রামিং তাই জটিল সংখ্যার জন্যে 'i' টাকে নিয়ে নিছে। তাই আমাদের 'L' ই লিখতে হবে।
লজিক্যাল
লজিক্যাল ডাটা টাইপটি হলো সত্য মিথ্যা যাচাই বাচাই করার জন্যে। যেমন ধরেন বাচ্চা নিয়ে আদালতে মামলা করেছে এ বলছে এটা আবুলের বাচ্চা ও বলছে এটা হাবুলের বাচ্চা। তো বাচ্চা কার সেটা প্রমাণের জন্যে মেডিকেলের ভাষায় যাকে বলে ডিএন টেষ্ট করা। এখানে মেডিকেলের কোন কাজ কাম নাই। তাই এখানে আমরা নাম নিয়ে চেক করে দেখবো।
> a <- TRUE
> typeof(a)
[1] "logical"
> b <- FALSE
> typeof(b)
[1] "logical"
> Abul <- 'Alal'
> Habul <- 'Dulal'
> coat <- 'Kabul'
> DNA_T1 <- Abul == coat
> print(DNA_T1)
[1] FALSE
> typeof(DNA_T1)
[1] "logical"
> DNA_T2 <- Habul == coat
> print(DNA_T2)
[1] FALSE
> typeof(DNA_T2)
[1] "logical"
এখানে প্রথমে আমরা a <- TRUE এবং b <- FALSE লিখে টাইপটি চেক করে দেখলাম। হ্যাঁ আসলেই তো লজিক্যাল ডাটা টাইপ। এরপর আমরা কি করলাম আবুল বলেছে আদালতে তার বাচ্চার নাম আলাল এবং হাবুল বলেছে তার বাচ্চার নাম দুলাল। তাই আমরা লিখেছি Abul <- 'Alal' এবং Habul <- 'Dulal' পরে আমরা দুইটা ডিএন টেষ্ট করলাম যা DNA_T1 এবং DNA_T2। দুইক্ষেত্রে দেখলাম ফলাফল FALSE। কারন আদালতে যে বাচ্চাটি ছিলো সেটা ছিলো Kabul তাই FALSE মানে মিথ্যা। কোডে এক জায়গায় লিখা coat <- 'Kabul'। এই coat এর বাচ্চাটার সাথে আবুল এবং হাবুলের টেষ্ট করলাম == অপারেটর দিয়ে। এই == অপারেটর এর মানে হলো দুইপাশের দুইটা ভ্যালু বা মান সমান কিনা। অপারেটর অধ্যায় যাওয়ার আগেই আমরা একটা অপারেটর নিয়ে জেনে গেলাম। == এর একটা সুনির্দিষ্ট নামে আছে। নামটা অপারেটর অধ্যায়ে যেয়ে দেখবো এবং আরো কিছু উদাহরণও দেখতে পারি বোনাস হিসাবে।
অধ্যায় রিভিউ
এখানে আমরা কি শিখলাম ৪ ধরনের ডাটা টাইপ নিয়ে শিখে ফেললাম। আর প্রোগ্রামিং আমরা এই ৪ ধরনের ডাটা টাইপ নিয়ে কাজ বেশী করবো।
character: আবুলের চরিত্র ফুলের মতন পবিত্র 'Abul er chorito fhuler moton pobitro'। বাংলা ভাষাটাকে আর প্রোগ্রামিং এর উপযোগী করে ফেললাম। সহজ কথা সিঙ্গেল কোটের ভিতরে যাই লিখবো সবই ক্যারেক্টার টাইপ। " " কোটেশনে লিখলেও হবে। একবার ট্রাই করে দেখেন।
integer: পূর্নসংখ্যার ব্যাপার স্যাপার আসলেই আমরা ইন্টিজার ব্যবহার করবো। তবে কারিশমাটা মনে আছে তো পূর্নসংখ্যা লিখার পর একটা L দিবো বা as.integer() এর ভিতরে ঢুকিয়ে দিবো।
double: দশমিকওলা সংখ্যা হইলো গিয়া আমাদের ডাবল ভাই। যেমনঃ 500.50, 1.98, 3.1415 ইত্যাদি।
logical: সত্য মিথ্যা দ্বিধা দ্বন্ধ বা সন্দেহ এর ব্যাপারে আছে লজিক্যাল অপারেটর দাদা। তিনি এতই ক্ষমতা সম্পন্ন যে ডাইরেক্ট একশন TRUE কিংবা FALSE বলে দেয় কাউকে তোক্কা না করে।
তবে আরো আছে যেমন complex, vectors, matrices, array, data frame, list, factor ইত্যাদি। এগুলরোও ব্যবহার আছে না থাকলে তো আর এমনেই এমনেই বানাইতো না। তবে আস্তে ধীরে আমরা এদের সর্ম্পকে জানবো।