Nowości z php.internals – rfc: comparable interface

Z ostatniej chwili – Adam Harvey w swoim wpisie na grupie php.internals, zaproponował aby dodać do języka możliwość przeciążania operatorów porównania: >,<,== etc. Implementacja miałaby polegać na dodaniu interfejsu podobnego do countable nazywającego się „comparable”. Klasa, która implementowała by ten interfejs mogła by zaimplementować we własny sposób ten operator. Został utworzony odpowiedni dokument RFC wraz z patchem na najnowszą wersję w repozytorium. Funkcjonalność ta jest prawie dokładną kalką z Javy.

Moim zdaniem idea jest dość ciekawa, a Wy co myślicie ?

  1. Alan Gabriel Bem pisze:

    W momencie kiedy encje porównuje się przez identyfikatory, a VO przez wartości to do DDD ta propozycja pasuje jak ulał.

    Z drugiej strony może to trochę zagmatwać kod, bo do tej pory nie musiałem się bać, że porównanie dwóch wartości rzuci mi wyjątkiem :)

  2. Dlaczego w ogóle nie „ściągnąć” tej możliwości z C++ i nie umożliwić tworzenia funkcji typu „operator==” ?

  3. Wojciech Soczyński pisze:

    @tomasz

    powodów dla których zrezygnowano w wielu obiektowych językach z przeciążania operatorów jest to, że w pewnym sensie zaciemniają kod, przeciążając operator, zmieniasz jego domyślne, znane wszystkim działanie, jest to fajny feature ale należy do tej kategorii cech języków programowania, które użyte bezmyślnie z łatwością odstrzelą ci stopę (należy do nich też dziedziczenie po wielu klasach bazowych),

    @alan niby pasuje, ale ja widziałbym to inaczej, mogliby wprowadzić do php natywne value objects – możliwość utworzenia klas, których obiekty z definicji były by przekazywane przez kopie (tak jak typy proste) i immutable (stan można by było ustawić tylko przez konstruktor), w takich klasach dopuściłbym przeciążanie operatorów

  4. Wojciech Soczyński pisze:

    Btw. nawet pojawiła się pewna propozycja immutable value objects -> http://bradley-holt.com/2010/09/immutable-value-objects-in-php/

  5. batman pisze:

    Dziwny ten świat. C# z każdą nową wersją zbliża się do języków typu PHP (var, dynamic), a PHP odwrotnie – celuje w języki kompilowane. Pewnie za 10 – 15 lat będziemy mieli jeden wspólny język :)

  6. Wojciech Soczyński pisze:

    Generalnie to się nazywa globalizacja :P. Nie sądzę, żebyśmy mieli jeden wspólny język kiedyś, natomiast naturalne jest, że ludzie znają kilka języków i często brakuje im jakiś cech z jednych w drugich, to je po prostu kopiują. A dlaczego nie będzie jednego wspólnego języka ? Bo niektóre języki bardziej nadają się do jednych rzeczy a inne do innych i to jest ich siłą. Poza tym, ludzie mają różne filozofie tworzenia oprogramowania i przekładają je na języki które tworzą, wybór języka to w zasadzie kwestia „religii”.

  7. batman pisze:

    W sumie jeden język nie byłby taki zły. Musiałby być on na tyle złożony, żeby móc pokryć zapotrzebowanie na wszystkie potrzeby. Ot taka utopia :)

  8. Wojciech Soczyński pisze:

    @batman

    to już było – jeden wódz, jedna partia, jedna religia, taka jest prawda, że tylko pluralizm w każdej dziedzinie życia daje zadowolenie wszystkim zainteresowanym ;), każdy korzysta z tego co mu najbardziej odpowiada :)

  9. batman pisze:

    Oj tam, oj tam . Pomarzyć zawsze można 😉

    A wracając do tematu. Przeciążanie operatorów fajna rzecz, jednak jeszcze nigdy nie miałem potrzeby stosowania tego. Z drugiej moje wypociny C# to małe aplikacyjki, które nie potrzebowały tego typu funkcjonalności.

  10. Wojciech Soczyński pisze:

    Generalnie przeciążanie operatorów często stosuje się właśnie w aplikacjach realizowanych w metodyce Domain Driven Design o ile język na to pozwala – dzięki temu kod jest bliższy językowi problemu

  1. […] wiadomości z tego serwisu Follow us on Twitter 71 śledzących RSS Feed 358 czytelników Nowości z php.internals – rfc: comparable interface 1 głosuj! Zmiany w php – propozycja dodania możliwości przeciążania operatorów […]

Leave a Reply

Informuj mnie o odpowiedziach poprzez e-mail. Możesz również subskrybować wpis bez zostawiania komentarza.