PHP 8.5'te Pipe Operatörü (|>) Tanıtıldı
(thephp.foundation)- PHP 8.5 için resmi olarak pipe operatörü (|>) eklendi ve fonksiyonel programlama tarzı zincirleme mümkün hale geldi
- Pipe operatörü, sol taraftaki değeri sağ taraftaki fonksiyonun (callable) argümanı olarak ileten bir sözdizimi kısaltması (syntax sugar) işlevi görür; böylece karmaşık veri dönüşüm pipeline'larını daha derli toplu yazabilirsiniz
- Daha önce iç içe çağrılar veya geçici değişken seli gerektiren kodlar, daha okunabilir zincir ifadelerine dönüştürüldüğü için bakım yapılabilirlik ve kullanım esnekliği belirgin biçimde artıyor
- F#, OCaml, Elixir gibi çeşitli fonksiyonel dillerdeki benzer özelliklerden esinlenilerek, PHP içinde birçok kez önerilip geliştirildikten sonra 2025'te sonunda resmi olarak eklendi
- Pipe operatörü, ileride Partial Function Application (kısmi fonksiyon uygulaması), fonksiyon bileşimi operatörü gibi fonksiyonel paradigma genişletmeleriyle de yakından bağlantılı olacak
- PHP 8.5 (2025'in Kasım ayında planlandığı gibi), topluluk tarafından uzun süredir istenen ama küçük bir değişiklik gibi görünen ve büyük potansiyele sahip pipe operatörü (|>) eklendi
- Uygulaması basit olsa da, kodun ifade gücünü büyük ölçüde artıran bir özellik olarak değerlendiriliyor
PHP 8.5 Pipe Operatörü Nedir?
- Pipe operatörü
|>, soldaki değeri sağdaki fonksiyona argüman olarak ileten basit bir operatördür- Fonksiyonun parametre girişini basitleştiren bir sözdizimi kısaltmasıdır (syntax sugar)
- Örnek:
$result = "Hello World" |> strlen(...); // Bu kod aşağıdakine eşdeğerdir $result = strlen("Hello World") - Birden fazla fonksiyonu zincirleyerek (chain) veri dönüşüm pipeline'ını satır satır yazabilirsiniz
$result = $arr |> fn($x) => array_column($x, 'tags') |> fn($x) => array_merge(...$x) |> array_unique(...) |> array_values(...); - Geleneksel yöntemle bu işi yapmak için karmaşık iç içe çağrılar yapmak veya çok fazla geçici değişken tanımlamak gerekiyordu
- Bu operatör, Unix/Linux kabuğundaki pipe (|) ile benzer biçimde tasarlandığından sezgisi yüksektir
Giriş ve Tarihçe
- F#, OCaml, Elixir gibi fonksiyonel dillerdeki pipe ile benzer bir kavramdır
- PHP'de de birçok kütüphane benzer işlev sunmasına rağmen, performans düşüşü ve karmaşıklık sorunları yaşanmıştı
- Kaynak, Hack/HHVM'den (Facebook'un PHP çatallaması) geliyor; PHP tarafında ise 2016'daki ilk öneriden sonra birçok RFC defalarca reddedilmişti
- 2025'te nihayet standart sözdizimi olarak kabul edildi ve First Class Callables (array-function call syntax) gibi daha önceki eklemelerle entegre edildi
Kullanım Örnekleri ve Özellikler
- Karmaşık dizi işleme, dize biçimlendirme ve veri akışı işleme gibi alanlarda geçici değişken olmadan sezgisel fonksiyon bağlama mümkün
- match() gibi yalnızca tek ifade kabul eden bağlamlarda bile zincirleme kullanılabildiği için kodun kullanılabilirliği en üst düzeye çıkar
- Sağ tarafta yalnızca fonksiyon çağrısı değil, closure (kapanış), yüksek düzey fonksiyon dönüşleri gibi farklı desenler de kullanılabilir
Fonksiyonel Paradigmayı Güçlendirme
- Pipe, herhangi bir fonksiyon, closure ve yüksek düzey fonksiyonla birleşebilir
- Örneğin koşullu (Null-safe) zincirleme, Maybe Monad, akış işleme gibi çeşitli fonksiyonel desenlerle doğal uyumluluk sağlar
- Pipe +
maybe()gibi bir yüksek düzey fonksiyonla null-safe pipeline'lar da uygulanabilir
Gelecekteki Gelişim Yönü
- Partial Function Application (kısmi fonksiyon uygulaması) ile birleşmesi bekleniyor; bu da çok daha çeşitli fonksiyon kombinasyonlarına imkan verecek
- Fonksiyon bileşimi operatörü (composition operator) da öneri aşamasında; birden fazla
mapgibi zinciri tek seferde birleştiren bir optimizasyon mümkün olacak
Pipe operatörü, yalnızca basit bir sözdizimi eklemesinin ötesinde üretkenlik, okunabilirlik ve ölçeklenebilirlikte bir yenilik sunar; PHP 8.5'ten sonra fonksiyonel programlama tarzında kod yazmak çok daha güçlü hale gelecek gibi görünüyor
Henüz yorum yok.