Categories
Bangla Python Screencast

Python – Decorators

Categories
Bangla Python Screencast

Built in Functions in Python: Part – 1

Categories
Bangla PHP

পিএইচপি ৫.৫ – নতুন কি এলো?

গত ২০শে জুন পিএইচপি ৫.৫ রিলিজ পেলেও আপগ্রেড করা হয়ে ওঠেনি । আজ একটু আগে আপগ্রেড করেই ভাবলাম নতুন ফিচারগুলো সম্বন্ধে লিখে ফেলি । তো আসুন দেখে নেই উল্লেখযোগ্য নতুন ফিচারগুলো কি কি ।

#১ – জেনারেটর

আমরা পিএইচপিতে আইটারেটর ব্যবহার করার জন্য এতদিন Iterator ইন্টারফেইস ব্যবহার করে এসেছি । কিন্তু নতুন আসা জেনারেটর সিনট্যাক্স ব্যবহার করে আমরা আইটারেশনটা আরো সহজে হ্যান্ডল করতে পারবো ।

জেনারেটর আসলে কি? জেনারেটর হচ্ছে ফাংশনের মতই কিন্তু ফাংশন একবার মাত্র ভ্যালু রিটার্ন করতে পারে কিন্তু জেনারেটর যতবার খুশি ভ্যালু রিটার্ন করতে পারে yield কিওয়ার্ডটি ব্যবহার করে । জেনারেটর থেকে রিটার্ন করা সব ভ্যালু একটি সিকুয়েন্স হিসেবে থাকে যেটি কিনা আইটারেট করা যায় অন্যসব আইটারেটর (যেমন: এ্যারে) এর মত করেই (যেমন: foreach ব্যবহার করে) । জেনারেটর যেহেতু একটি একটি করে ভ্যালু রিটার্ন করে, সেহেতু সব ডাটা এক সাথে এ্যারে তে রাখার প্রয়োজন পড়ে না । ফলে মোমোরী সেইভ করা সম্ভব । যেমন, range(0,1000000) ব্যবহার করে যদি আমরা একটি এ্যারে তৈরি করি এক মিলিয়ন সংখ্যার, তাহলে তার জন্য আমাদের প্রায় ১০০ মেগাবাইট মেমোরী প্রয়োজন হবে । একই কাজ যদি জেনারেটর ব্যবহার করে করি তবে থিওরেটিক্যালি কখনোই ১ কিলোবাইট এর বেশী মেমোরী ব্যবহারের প্রয়োজন পড়বে না ।

চলুন জেনারেটরের কোড এক্সাম্পল দেখি –

আউটপুট:

#২ – finally ব্লক

পিএইচপিতে আমরা এক্সেপশন হ্যান্ডলিং এর জন্য এতদিন try..catch ব্লক ব্যবহার করে এসেছি । এবার আমরা সেই সাথে পাচ্ছি আরেকটি নতুন ব্লক – finally । এই ব্লক সব সময়ই রান করবে । অর্থাৎ এক্সেপশন থাকুক বা নাই থাকুক এই ব্লক পিএইচপি চোখ বুজে এক্সিকিউট করবে । এই ব্লকের সুবিধাটা কি? ধরুন আপনি try ব্লকে একটি ডাটাবেইজ কানেকশন ওপেন করেছিলেন । এরপর পেলেন একটি এক্সেপশন এবং সেটিকে হ্যান্ডল করলেন কিন্তু ঐ ডাটাবেইজ কানেকশন? ওটা তো বন্ধ করা দরকার, তাই না? এই সুযোগটাই আপনি পাচ্ছেন finally ব্লকে ।

পিএইচপি ম্যানুয়াল থেকেই কোড স্যাম্পল তুলে দেই –

#৩ – পাসওয়ার্ড হ্যাশিং এপিআই

পাসওয়ার্ড হ্যাশিং সহজ করার জন্য এই ভার্সনে এসেছে – password_hash() এবং password_verify() । password_hash ফাংশনটি দুইটি প্যারামিটার নিয়ে কাজ করে – টেক্সট পাসওয়ার্ড, এবং হ্যাশিং এ্যালগরিদম (অনেকগুলো প্রিডিফাইন্ড কনস্টান্ট আছে) ।

উদাহরণ:

আউটপুট:

#৪ – ডিরেফারেন্সিং

এবার এ্যারে এবং স্ট্রিং লিটারেলের বেলায়ও ডিরেফারেন্সিং ফিচার যোগ করা হয়েছে –

#৫ – ক্লাস নেইম রেজুলেশন

ধরুন আপনি কোন একটি নেইমস্পেইস থেকে একটি ক্লাস ইম্পোর্ট করেছেন । এখন যদি আপনার প্রয়োজন হয় ঐ ক্লাস এর নেইমস্পেইস সহ পুরো নামের, তখন কি করবেন? আর বিশেষ করে যদি use…as ব্যবহার করে ক্লাসটিকে অন্য নামে ইম্পোর্ট করা হয় তবে ব্যাপারটি আরো জটিল হয়ে দাড়ায় । এই সমস্যার সহজ সমাধান নিয়ে এসেছে ক্লাস নেইম রেজুলেশন । যেকোনো ক্লাসে class কিওয়ার্ড ব্যবহার করে ফুল নেইম পাওয়া যাবে এভাবে – MyClass::class

আউটপুট:

অন্যান্য পরিবর্তন

অন্যান্য পরিবর্তনের মধ্য আছে –

# foreach লুপে list() ব্যবহার করা যায়
# foreach লুপে নন-স্ক্যালার (স্ট্রিং বা নাম্বার বাদের অন্য টাইপের ভ্যালু) ব্যবহার করা যায়
# OpCache এর মাধ্যমে পার্ফরমেন্স এ ইম্প্রুভমেন্ট