আমার মত যারা নিতান্তই সাধারণ মানুষ, ইন্টারনেটে প্রাইভেসি নিয়ে তারা খুব একটা চিন্তা করেন না। কোনো একটা পণ্যের খোঁজ করার পর কী ফেসবুক, কী গুগল অ্যাড সবজায়গায় সেই পণ্য বা কাছাকাছি পণ্যের অ্যাড দেখে হয়ত বিরক্ত হন, হয়ত অবাক হন এই ভেবে যে আপনার পেছনে কেন এরা গুপ্তচরের মত লেগে আছে!? কেউ কেউ ‘অ্যাডব্লকার’-ও ইন্সটল করে থাকেন তারপর। কিন্তু এই পর্যন্তই। এরপর আমরা কমই ভাবি। আসুন, আমরা প্রাইভেসি নিয়ে ভাবার চেষ্টা করি একটু।

“কিন্তু আমার এত দিয়ে কী দরকার? আমি তো গোপন কিছু করছি না!” - প্রায় সকল সাধারণ মানুষ

আসলে আপনারও দরকার আছে। তার আগে একটা ঘটনা বলে নিই।


ডার্টে অ্যাসিনক্রোনাস প্রোগ্রামিঙের জন্য বেশ ভালো ব্যবস্থা আছে। আছে ফিউচারস্ট্রীম। কিন্তু ডার্ট তো সিঙ্গেল-থ্রেডেড। ফলে অ্যাসিনক্রোনাস কোডগুলো প্রায়োরিটিতে পিছনে পড়ে যায়। এখন ভাবুন, আপনি অ্যাসিনক্রোনাসলি গ্রাফিক্স রেন্ডার করছেন বা অন্য কোনোকিছু যেখানে আপনার বেশ মেমরি ও প্রসেসিং পাওয়ার লাগছে। ভালো হত যদি আরেকটি থ্রেডে কাজটি করতে পারতেন, তাই না?

Lo and behold! Isolate!

আইসোলেট (Isolate) হচ্ছে এমন একটি লাইব্রেরি যেটার সাহায্যে আপনি আলাদা একটি থ্রেডে কোনো কাজ করতে পারবেন, এবং প্রয়োজনে দুটি থ্রেডের ভেতর তথ্য আদান-প্রদান করতে পারবেন।


পূর্ববর্তী একটি পোস্টে আমরা ডার্টের প্রাথমিক অ্যাসিনক্রোনি নিয়ে কথা বলেছি। এবার আমরা ডার্টে অ্যাসিনক্রোনির আরেকটি গুরুত্বপূর্ণ অংশ স্ট্রীম (Stream) নিয়ে কথা বলবো।

Before stream there was iterable…

স্ট্রীম কী সেটা বোঝার আগে আসুন ইটারেবলের সাথে পরিচিত হই। আসলে ইটারেটর আপনি সবসময়ই ব্যবহার করে এসেছেন। যার ভেতর থেকে ক্রমানুসারে বারবার এক-একটা ভ্যালু পাওয়া যায় সেটাই ইটারেবল। যত জায়গায় আপনি for (var x in iterable) এই সিনট্যাক্সে লিখেছেন সবই ইটারেবল। সে অর্থে লিস্ট নিশ্চয়ই ইটারেবল। তবে ইটারেবল মানেই লিস্ট না। ইটারেবল একটা জেনারেটরও হতে পারে। জেনারেটর হচ্ছে এমন একধরনের ফাংশন যা আসলে ইটারেবল রিটার্ন করে।


এই পোস্টে আমরা ডার্টের অ্যাসিনক্রোনির (Asynchrony) একদম প্রাথমিক বিষয়গুলো নিয়ে কথা বলতে যাচ্ছি। যদিও পোস্টটা ডার্ট স্পেসিফিক, তবে অ্যাসিনক্রনির ফিচারগুলো অন্য অনেক ল্যাঙ্গুয়েজর সাথে মিলে যাবে। আমরা অ্যাসিনক্রোনাস প্রোগ্রামিং নিয়ে কথা বলবো, তারপর দেখতে চেষ্টা করবো কীভাবে ডার্টে অ্যাসিনক্রোনি কাজ করে।


অবজেক্ট-ওরিয়েন্টেড প্রোগ্রামিঙে যাদের সদ্য হাতেখড়ি হয়েছে তারাও ইনহেরিট্যান্স (Inheritance) কী তা জানেন। তবুও একটু দেখা যাক:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
class Animal {
  bool alive;
  Animal reproduce(){
    return new Animal();
  }
}
class Dog extends Animal {}
class Human extends Animal {}
main() {
  var niki = new Dog();
  print(niki is Dog); // >> true
  print(niki is Animal); // >> true

  var abul = new Human();
  print(abul is Human); // >> true
  print(abul is Animal); // >> true
}

হুম! খুবই সোজা বিষয়, কুকুর তো আসলে প্রাণীই, তাই Dog তো Animal এরই চাইল্ড ক্লাস হবে। স্বাভাবিকভাবেই niki নামের আমাদের কুকর কি Dog?, বা niki কি Animal? দুটির উত্তরই true। আবার আবুল নামের আমাদের মানুষটাও একইভাবে HumanAnimal