PHP 8.5 Pipe Operator vs Laravel Collections

PHP 8.5 പൈപ്പ് ഓപ്പറേറ്റർ (pipe operator) അവതരിപ്പിച്ചു. മിക്ക Laravel ഡെവലപ്പർമാരും ഇത് അവഗണിച്ചു. വർഷങ്ങളായി നമ്മൾ collect()->filter()->map() ആണ് ഉപയോഗിക്കുന്നത്. അത് കൃത്യമായി പ്രവർത്തിക്കുന്നുണ്ട്.

പിന്നീട് Spatie 'Piper' പുറത്തിറക്കി. പൈപ്പ് ഓപ്പറേറ്ററിലേക്ക് Laravel ശൈലിയിലുള്ള ഹെൽപ്പറുകളെ (helpers) കൊണ്ടുവരുന്ന ഒരു ലൈബ്രറിയാണിത്. ഇത് അറേകൾക്കും (arrays) സ്ട്രിംഗുകൾക്കും (strings) വേണ്ടി സ്റ്റാൻഡ്‌ലോൺ ഫംഗ്ഷനുകൾ ഉപയോഗിക്കുന്നു.

Piper എന്നത് Collections-ന് പകരമാണോ? അല്ല. ഇത് വ്യത്യസ്തമായ ഒരു ആവശ്യത്തിനാണ് ഉപയോഗിക്കുന്നത്.

Where Piper wins

• നേറ്റീവ് വാല്യൂസ് (Native values). Collections നിങ്ങളുടെ ഡാറ്റയെ ഒരു ഒബ്‌ജക്റ്റിൽ (object) പൊതിഞ്ഞു വെക്കുന്നു. അതിനാൽ അറേകളെ collections ആക്കി മാറ്റുകയും പിന്നീട് തിരികെ അറേകളാക്കി മാറ്റുകയും വേണം. എന്നാൽ Piper സാധാരണ അറേകളും സ്ട്രിംഗുകളും ഉപയോഗിച്ച് പ്രവർത്തിക്കുന്നു. ഡാറ്റ നേറ്റീവ് രൂപത്തിൽ തന്നെ അകത്തേക്ക് പോകുന്നു, നേറ്റീവ് രൂപത്തിൽ തന്നെ പുറത്തേക്ക് വരുന്നു.

• ഫംഗ്ഷനുകൾ മിക്സ് ചെയ്യാം. ഒരു Collection ചെയിൻ (chain) Collection ക്ലാസിലെ മെത്തേഡുകൾ മാത്രമേ വിളിക്കൂ. എന്നാൽ ഒരു പൈപ്പ് ചെയിൻ ഏത് ഫംഗ്ഷനെയും സ്വീകരിക്കും. നിങ്ങൾക്ക് Piper ഹെൽപ്പറുകൾ, നേറ്റീവ് PHP ഫംഗ്ഷനുകൾ, നിങ്ങളുടെ സ്വന്തം കസ്റ്റം ഫംഗ്ഷനുകൾ എന്നിവ ഒരൊറ്റ ഫ്ലോയിൽ ഉപയോഗിക്കാം.

• ഡിപെൻഡൻസികൾ ഇല്ല (Zero dependencies). Piper-ന് Laravel ഫ്രെയിംവർക്ക് ആവശ്യമില്ല. കനത്ത ഡിപെൻഡൻസികൾ ഇല്ലാതെ ക്ലീൻ കോഡ് ആഗ്രഹിക്കുന്ന പാക്കേജ് ഓതർമാർക്ക് (package authors) ഇത് അനുയോജ്യമാണ്.

Where Collections win

• ഫീച്ചറുകളുടെ ആഴം (Feature depth). Collections-ൽ groupBy() , pluck() തുടങ്ങിയ 100-ലധികം മെത്തേഡുകൾ ഉണ്ട്. എന്നാൽ Piper-ൽ ഏറ്റവും സാധാരണമായവ മാത്രമേയുള്ളൂ.

• ലേസി ഇവാലുവേഷൻ (Lazy evaluation). കുറഞ്ഞ മെമ്മറി ഉപയോഗിച്ച് വലിയ ഡാറ്റാസെറ്റുകൾ കൈകാര്യം ചെയ്യാൻ LazyCollections-ന് സാധിക്കും. എന്നാൽ Piper ഓരോ ഘട്ടത്തിലും പുതിയൊരു അറേ നിർമ്മിക്കുന്നു. വലിയ ഡാറ്റ കൈകാര്യം ചെയ്യുമ്പോൾ ഇത് നിങ്ങളുടെ ആപ്പിന്റെ വേഗത കുറയ്ക്കാൻ കാരണമായേക്കാം.

• ഇക്കോസിസ്റ്റവുമായുള്ള പൊരുത്തം (Ecosystem fit). Eloquent റിട്ടേൺ ചെയ്യുന്നത് Collections ആണ്. Query builders-ഉം Collections ആണ് നൽകുന്നത്. Piper ഉപയോഗിക്കാനായി ഫ്രെയിംവർക്കിനോട് പൊരുതുന്നത് പലപ്പോഴും കൂടുതൽ ജോലിഭാരം ഉണ്ടാക്കും.

• ഡിസ്കവറബിലിറ്റി (Discoverability). ഒരു Collection-ന് ശേഷം ഡാഷ് (-) ടൈപ്പ് ചെയ്യുമ്പോൾ നിങ്ങളുടെ IDE എല്ലാ മെത്തേഡുകളും കാണിച്ചുതരും. എന്നാൽ Piper ഉപയോഗിക്കുമ്പോൾ ഓരോ ഫംഗ്ഷനും നിങ്ങൾ മാനുവലായി ഇംപോർട്ട് ചെയ്യേണ്ടി വരും.

The Big Catch

നിങ്ങൾക്ക് PHP 8.5 ഉപയോഗിക്കേണ്ടതുണ്ട്. മിക്ക പ്രൊഡക്ഷൻ സെർവറുകളും ഇപ്പോഴും 8.2 അല്ലെങ്കിൽ 8.4 ആണ് ഉപയോഗിക്കുന്നത്. നിങ്ങൾ 8.5 ഉപയോഗിക്കുന്നില്ലെങ്കിൽ, നിലവിൽ Piper നിങ്ങൾക്ക് പ്രയോജനപ്പെടില്ല.

Adoption Tips

നിങ്ങൾ പാക്കേജുകളോ ഫ്രെയിംവർക്ക്-അഗ്നോസ്റ്റിക് (framework-agnostic) കോഡോ ആണ് എഴുതുന്നതെങ്കിൽ Piper ഉപയോഗിക്കാം. ഒബ്‌ജക്റ്റുകളുടെ അധികഭാരം ഇല്ലാതെ നേറ്റീവ് അറേകളെ മാറ്റിയെടുക്കാൻ (transform) ഇത് ഉപയോഗിക്കാം.

നിങ്ങളുടെ Laravel ആപ്പിനുള്ളിൽ Collections തന്നെ ഉപയോഗിക്കുക. അവ ഫ്രെയിംവർക്കുമായി സംയോജിപ്പിക്കപ്പെട്ടതും (integrated) ശക്തവുമാണ്, കൂടാതെ നിങ്ങളുടെ ടീം പ്രതീക്ഷിക്കുന്നതും അവയാണ്.

Piper ഒരു പകരക്കാരനല്ല. പ്രോജക്റ്റുകൾക്കിടയിലുള്ള വിടവുകൾ നികത്താനുള്ള ഒരു ടൂൾ മാത്രമാണ് അത്.

Source: https://dev.to/hafiz619/php-85s-pipe-operator-vs-laravel-collections-where-piper-fits-and-where-it-doesnt-1bkl