PHP 8.5 Pipe Operator বনাম Laravel Collections
PHP 8.5-এ pipe operator প্রবর্তন করা হয়েছে। বেশিরভাগ Laravel ডেভেলপার এটি উপেক্ষা করেছেন। আমরা বছরের পর বছর ধরে collect()->filter()->map() ব্যবহার করে আসছি। এটি কাজ করে।
তারপর Spatie Piper রিলিজ করেছে। এটি এমন একটি লাইব্রেরি যা pipe operator-এ Laravel-স্টাইল হেল্পার নিয়ে আসে। এটি array এবং string-এর জন্য standalone function ব্যবহার করে।
Piper কি Collections-এর বিকল্প? না। এটি ভিন্ন উদ্দেশ্যে ব্যবহৃত হয়।
যেখানে Piper এগিয়ে আছে
• Native values. Collections আপনার ডেটাকে একটি object-এর মধ্যে wrap করে রাখে। আপনাকে array-কে collection-এ এবং আবার আগের অবস্থায় রূপান্তর করতে হয়। Piper সাধারণ array এবং string নিয়ে কাজ করে। ডেটা native হিসেবে প্রবেশ করে এবং native হিসেবেই বেরিয়ে আসে।
• Mixing functions. একটি Collection chain শুধুমাত্র Collection class-এর method গুলো কল করে। একটি pipe chain যেকোনো function গ্রহণ করতে পারে। আপনি একটি flow-তে Piper helpers, native PHP functions এবং আপনার নিজস্ব custom functions মিশ্রিত করতে পারেন।
• Zero dependencies. Piper-এর জন্য Laravel framework-এর প্রয়োজন নেই। এটি সেই সব package author-দের জন্য উপযুক্ত যারা ভারী dependency ছাড়া ক্লিন কোড চান।
যেখানে Collections এগিয়ে আছে
• Feature depth. Collections-এ groupBy() এবং pluck()-এর মতো ১০০টিরও বেশি method রয়েছে। Piper-এ শুধুমাত্র সবচেয়ে সাধারণ গুলো রয়েছে।
• Lazy evaluation. LazyCollections কম মেমরি ব্যবহার করে বিশাল dataset হ্যান্ডেল করতে পারে। Piper প্রতিটি ধাপে একটি নতুন array তৈরি করে। বড় ডেটার ক্ষেত্রে এটি আপনার অ্যাপকে ধীর করে দিতে পারে।
• Ecosystem fit. Eloquent Collections রিটার্ন করে। Query builders Collections রিটার্ন করে। Piper ব্যবহার করার জন্য framework-এর সাথে লড়াই করা প্রায়শই বাড়তি কাজের সৃষ্টি করে।
• Discoverability. একটি Collection-এর পরে ড্যাশ টাইপ করলে আপনার IDE প্রতিটি method দেখিয়ে দেয়। Piper-এর ক্ষেত্রে, আপনাকে ম্যানুয়ালি প্রতিটি function ইমপোর্ট করতে হবে।
আসল সমস্যা
আপনাকে PHP 8.5 চালাতে হবে। বেশিরভাগ production server এখনও 8.2 বা 8.4 চালাচ্ছে। আপনি যদি 8.5 ব্যবহার না করেন, তবে Piper এই মুহূর্তে আপনার জন্য অকেজো।
ব্যবহারের টিপস
আপনি যদি package বা framework-agnostic কোড লেখেন তবে Piper ব্যবহার করুন। যখন আপনি object-এর বাড়তি ঝামেলা (overhead) ছাড়াই native array রূপান্তর করতে চান, তখন এটি ব্যবহার করুন।
আপনার Laravel অ্যাপের ভেতরে Collections ব্যবহার চালিয়ে যান। এগুলো ইন্টিগ্রেটেড, শক্তিশালী এবং আপনার টিম যা প্রত্যাশা করে।
Piper কোনো বিকল্প নয়। এটি প্রজেক্টগুলোর মধ্যবর্তী ফাঁক পূরণের একটি টুল।
