PHP 8.5 Pipe Operator vs Laravel Collections
PHP 8.5 ਨੇ pipe operator ਪੇਸ਼ ਕੀਤਾ ਹੈ। ਜ਼ਿਆਦਾਤਰ Laravel developers ਨੇ ਇਸ ਨੂੰ ਨਜ਼ਰਅੰਦਾਜ਼ ਕਰ ਦਿੱਤਾ। ਅਸੀਂ ਸਾਲਾਂ ਤੋਂ collect()->filter()->map() ਦੀ ਵਰਤੋਂ ਕਰ ਰਹੇ ਹਾਂ। ਇਹ ਕੰਮ ਕਰਦਾ ਹੈ।
ਫਿਰ Spatie ਨੇ Piper ਰਿਲੀਜ਼ ਕੀਤਾ। ਇਹ ਇੱਕ ਅਜਿਹੀ library ਹੈ ਜੋ pipe operator ਵਿੱਚ Laravel-style helpers ਲਿਆਉਂਦੀ ਹੈ। ਇਹ arrays ਅਤੇ strings ਲਈ standalone functions ਦੀ ਵਰਤੋਂ ਕਰਦੀ ਹੈ।
ਕੀ Piper, Collections ਦਾ ਬਦਲ ਹੈ? ਨਹੀਂ। ਇਹ ਇੱਕ ਵੱਖਰੇ ਉਦੇਸ਼ ਲਈ ਹੈ।
Where Piper wins
• Native values. Collections ਤੁਹਾਡੇ ਡੇਟਾ ਨੂੰ ਇੱਕ object ਵਿੱਚ ਲਪੇਟ ਦਿੰਦੀਆਂ ਹਨ। ਤੁਹਾਨੂੰ arrays ਨੂੰ collections ਵਿੱਚ ਅਤੇ ਫਿਰ ਵਾਪਸ ਬਦਲਣਾ ਪੈਂਦਾ ਹੈ। Piper ਸਾਧਾਰਨ arrays ਅਤੇ strings ਨਾਲ ਕੰਮ ਕਰਦਾ ਹੈ। ਡੇਟਾ native ਰੂਪ ਵਿੱਚ ਜਾਂਦਾ ਹੈ ਅਤੇ native ਰੂਪ ਵਿੱਚ ਹੀ ਬਾਹਰ ਆਉਂਦਾ ਹੈ।
• Mixing functions. ਇੱਕ Collection chain ਸਿਰਫ਼ Collection class ਦੇ methods ਨੂੰ ਹੀ ਕਾਲ ਕਰਦੀ ਹੈ। ਇੱਕ pipe chain ਕਿਸੇ ਵੀ function ਨੂੰ ਸਵੀਕਾਰ ਕਰਦੀ ਹੈ। ਤੁਸੀਂ ਇੱਕ ਹੀ flow ਵਿੱਚ Piper helpers, native PHP functions, ਅਤੇ ਆਪਣੇ ਖੁਦ ਦੇ custom functions ਨੂੰ ਮਿਲਾ ਸਕਦੇ ਹੋ।
• Zero dependencies. Piper ਨੂੰ Laravel framework ਦੀ ਲੋੜ ਨਹੀਂ ਹੈ। ਇਹ ਇਸਨੂੰ ਉਹਨਾਂ package authors ਲਈ ਸੰਪੂਰਨ ਬਣਾਉਂਦਾ ਹੈ ਜੋ ਭਾਰੀ dependencies ਤੋਂ ਬਿਨਾਂ ਸਾਫ਼ ਕੋਡ ਚਾਹੁੰਦੇ ਹਨ।
Where Collections win
• Feature depth. Collections ਵਿੱਚ groupBy() ਅਤੇ pluck() ਵਰਗੇ 100 ਤੋਂ ਵੱਧ methods ਹਨ। Piper ਵਿੱਚ ਸਿਰਫ਼ ਸਭ ਤੋਂ ਆਮ ਵਾਲੇ ਹੀ ਹਨ।
• Lazy evaluation. LazyCollections ਘੱਟ ਮੈਮੋਰੀ ਨਾਲ ਵਿਸ਼ਾਲ datasets ਨੂੰ ਸੰਭਾਲਦੀਆਂ ਹਨ। Piper ਹਰ ਕਦਮ 'ਤੇ ਇੱਕ ਨਵਾਂ array ਬਣਾਉਂਦਾ ਹੈ। ਇਹ ਵੱਡੇ ਡੇਟਾ ਦੇ ਨਾਲ ਤੁਹਾਡੀ app ਨੂੰ ਹੌਲੀ ਕਰ ਸਕਦਾ ਹੈ।
• Ecosystem fit. Eloquent, Collections ਰਿਟਰਨ ਕਰਦਾ ਹੈ। Query builders, Collections ਰਿਟਰਨ ਕਰਦੇ ਹਨ। Piper ਦੀ ਵਰਤੋਂ ਕਰਨ ਲਈ framework ਨਾਲ ਲੜਨਾ ਅਕਸਰ ਵਧੇਰੇ ਕੰਮ ਪੈਦਾ ਕਰਦਾ ਹੈ।
• Discoverability. ਜਦੋਂ ਤੁਸੀਂ Collection ਤੋਂ ਬਾਅਦ ਡੈਸ਼ (-) ਟਾਈਪ ਕਰਦੇ ਹੋ, ਤਾਂ ਤੁਹਾਡਾ IDE ਹਰ method ਦਿਖਾਉਂਦਾ ਹੈ। Piper ਦੇ ਨਾਲ, ਤੁਹਾਨੂੰ ਹਰ function ਨੂੰ ਮੈਨੂਅਲੀ import ਕਰਨਾ ਪੈਂਦਾ ਹੈ।
The Big Catch
ਤੁਹਾਨੂੰ PHP 8.5 ਚਲਾਉਣਾ ਪਵੇਗਾ। ਜ਼ਿਆਦਾਤਰ production servers ਅਜੇ ਵੀ 8.2 ਜਾਂ 8.4 ਚਲਾ ਰਹੇ ਹਨ। ਜੇਕਰ ਤੁਸੀਂ 8.5 'ਤੇ ਨਹੀਂ ਹੋ, ਤਾਂ Piper ਇਸ ਸਮੇਂ ਤੁਹਾਡੇ ਲਈ ਬੇਕਾਰ ਹੈ।
Adoption Tips
ਜੇਕਰ ਤੁਸੀਂ packages ਜਾਂ framework-agnostic code ਲਿਖਦੇ ਹੋ ਤਾਂ Piper ਦੀ ਵਰਤੋਂ ਕਰੋ। ਇਸਦੀ ਵਰਤੋਂ ਉਦੋਂ ਕਰੋ ਜਦੋਂ ਤੁਸੀਂ objects ਦੇ ਵਾਧੂ ਬੋਝ (overhead) ਤੋਂ ਬਿਨਾਂ native arrays ਨੂੰ ਬਦਲਣਾ ਚਾਹੁੰਦੇ ਹੋ।
ਆਪਣੀ Laravel app ਦੇ ਅੰਦਰ Collections ਦੀ ਹੀ ਵਰਤੋਂ ਕਰੋ। ਉਹ integrated, ਸ਼ਕਤੀਸ਼ਾਲੀ ਹਨ, ਅਤੇ ਤੁਹਾਡੀ team ਉਹੀ ਉਮੀਦ ਕਰਦੀ ਹੈ।
Piper ਕੋਈ ਬਦਲ ਨਹੀਂ ਹੈ। ਇਹ ਪ੍ਰੋਜੈਕਟਾਂ ਦੇ ਵਿਚਕਾਰਲੇ ਖਾਲੀਆਂ ਸਥਾਨਾਂ (gaps) ਲਈ ਇੱਕ ਟੂਲ ਹੈ।
