Akcesory w Javie, Pythonie, Ruby i PHP5

Opublikowane przez Jarosław Zabiełło Tue, 07 Feb 2006 22:25:00 GMT

Java, język który dobył sobie silną pozycję na rynku korporacyjnym, jest od jakiegoś czasu pod obstrzałem krytyki z różnych stron. Wyszła cała seria książek krytykujących model obiektowy oraz metodologie promowane przez Javę (od najsłynniejszej Beyond Java po Bitter Java, Bitter EJB, czy inne)

Nie umniejszając zalet Javy, jej krytycy wytykają jej niepotrzebną nadmiarowość kodu, ociężałość i małą zwrotność, która powoduje że język ten słabo nadaje się do modnej ostatnio metodologii _agile programming. _ Aby lepiej ten problem zobaczyć, przyjrzyjmy się typowej praktyce programistów Javy. Tekst ten zainspirowany jest niedawną dyskusją jaka miała miejsce w jednym z blogów mojego kolegi.

Czym są akcesory?

Akcesory (lub inaczej: gettery i settery) to slangowe okreslenie metod jakie używa obiekt do odczytu i modyfikacji swoich atrybutów. Są one tak nagminnie używane przez programistów Javy, że niektóre edytory (np. Eclipse) zostały nawet wyposażone w makra do automatycznego ich generowania.

Dorzucanie nieużywanego kodu “na wszelki wypadek”...

Nagminna (wśród programistów Javy) praktyka dodawania akcesorów do atrybutów klasy pachnie jakimś antipatternem i są głosy, które używanie akcesorów nazywają wprost złą praktyką . Jest w tym trochę racji. Ale, jak to poniżej wykażę, jest to pewnego rodzaju kompromis w związku ze słabym modelem obiektowy Javy.

Dlaczego programiści Javy generują akcesory dla każdego atrybutu nawet, jak nie przewidują potrzeby ich używania? Otóż czynią to “na wszelki wypadek” bo nie wiedzą, czy w przyszłości nie będzie im to potrzebne…

Weźmy np. taki kod (z powodu kolejnego ograniczenia Javy nie można w jednym pliku trzymać więcej, niż jednej klasy; tu dla krótkości umieszczam kod z obu plików razem)

public class First {
  public String msg = "hello";
}

public class Second extends First {
  public static void main(String[] args) {
    First obj = new First();        
    System.out.println(obj.msg);
  }
}

Jak widać, w Javie można sięgać do atrybutu w sposób bezpośredni.

Wyobraźmy sobie jednak, że projekt nam się rozrósł i mamy już całkiem sporo kodu oraz sporo plików (pomnażanych wydatnie przez javowe ograniczenia co do ilości klas mogących wystąpić w pliku). Teraz przychodzi polecenie aby w momencie odczytu i zapisu atrybutu coś dodatkowego wykonać. (Np. niech to będzie logowanie informacji o takim zdarzeniu, albo zablokowanie możliwości modyfikacji treści atrybutu. Wszystko jedno co)

Mamy zatem pierwszy problem. Trzeba w tych wszystkich milionach miejsc, gdzie odwoływaliśmy się bezpośrednio do atrybutów, wymienić kod…

Właśnie dlatego, aby takich niespodzianek uniknąć w przyszłości, programiści Javy dorzucają dodatkowe metody opakowujące odczyt i zapis atrybutów. Eclipse upraszcza ten proces zwalniając programistę od ręcznego wpisywania tego kodu.

Klasa First po zmianie:

public class First {
  public String msg = "hello";
  public String getMsg() {
    return msg;
  }
  public void setMsg(String msg) {
    this.msg = msg;
  }
}

Wydaje się, że problem jest rozwiązany. Ale to dopiero początek innych problemów.

Jeśli bowiem, automatycznie dorzucamy te metody do wszystkich tysięcy atrybutów nowo tworzonych klas, to pierwszą rzeczą którą zauważamy, jest nagłe “spuchnięcie kodu”. Mamy kupę nieużywanych linii kodu, z których prawdopodobnie większość nie będzie nigdy używana!

Ale to nie wszystko. Załóżmy, że stajemy przed potrzebą zmiany nazwy atrybutu. Oczywiście, możemy to zmienić w jednym miejscu (w ciele akcesora), ale wtedy wprowadzamy chaos w pozostałej części odnośnie… nazw (atrybut “msg” zmieniony na “title” trochę głupio wygląda z akcesorami o nazwie “getMsg” i “setMsg”) Musimy przekopać się przez miliony miejsc w kodzie i pozmieniać nazwy starym wywołaniom.

Zobaczmy jak ta sytuacja wygląda w językach dynamicznych.

Python

Python (podobnie jak Java) pozwala na bezpośredni dostęp do atrybutów klasy. A co w sytuacji kiedy chcemy opakować atrybut akcesorami? Nic prostszego. Python pozwala na dodanie akcesorów wtedy, i tylko wtedy, kiedy są potrzebne. Na dodatek czyni to w sposób całkowicie przezroczysty dla pozostałej części kodu. Programista Javy może sobie o tym tylko pomarzyć.

class X(object):
    def get_msg(self):
        return self.__msg
    def set_msg(self, val):
        self.__msg = val
    msg = property(get_msg, set_msg)

obj = X()
obj.msg = "hello" 
print obj.msg

Python pozwala także związać z dowolną metodą, atrybutem, klasą czy modułem docstring, czyli tekst z dokumentacją, objaśnieniem itp. To jedna z genialnych cech Pythona specjalnie pomyślana dla leniwych programistów, którym nie chce się pisać dokumentacji. ;)

Ruby

W języku Ruby z definicji nie ma żadnej możliwości dostępu do atrubutów klasy inaczej jak przez akcesory. Odpada więc problem zapominania aby je dodać. Ruby jednak narzuca nazwy dla akcesorów (mają nazwę taką jak atrybut!) i całość wygląda tak, jakby operowano bezpośrednio na atrybucie.

class X
  def msg
    @msg
  end
  def msg=(val)
    @msg = val
  end
end

obj = X.new
obj.msg = "hello" 
puts obj.msg

Dla osób, które nie lubią za dużo pisać, Ruby ma wygodne skróty. Powyższą definicję klasy można zapisać także w ten sposób:

class X
  attr_accessor :msg
end

Istnieją także oddzielne skróty dla getterów i setterów. No i można po przecinku dodać akcesory dla całej grupy atrybutów.

PHP5

PHP w wersji 5 ma przebudowany model obiektowy od podstaw. Twórcy języka PHP nie starali się poprawiać modelu obiektowego PHP4 (był on tak zły, że prościej było im napisać go od nowa). W nowym PHP5 mamy już możliwość przezroczystego dodania akcesora.

<?php
class X {
  private $attributes = array('msg'=>null);
  private function __get($attrname) {
    return $this->attributes[$attrname];
  }
  private function __set($attrname, $val) {
    $this->attributes[$attrname] = $val;
  }
}

$obj = new X();
$obj->msg = "hello";
print $obj->msg;
?>

Składnia może nie jest tak prosta jak w Ruby, ale (przynajmniej w tym miejscu), PHP5 zachowuje się tu sensownie i unika dylematów Javy.

Posted in , ,  | Tagi , , ,  | 25 comments

Comments

  1. Avatar szymonk powiedział 8 months later:

    nie zgadzam się z autorem w kwestii wad akcesorów javowych. Fakt jest faktem że nie można ich “przezroczyście” dodać, lecz nie jest to problemem, gdyż zaawansowane narzedzia (Eclipse, NetBeans) mają wsparcie dla refaktoryzacji kodu i pozwalają załatwić to kilkoma kliknięciami Zaś samo przezroczyste modyfikowanie akcesorów jest dostępne także w VB

  2. Avatar Jarosław Zabiełło powiedział 8 months later:

    To jest problemem, bo albo dodajesz wszędzie akcesory “na wszelki wypadek” i masz kupę nadmiarowego, nieużywanego kodu, z którego większość prawdopodobnie nigdy nie będzie użyta. Albo ich nie dodajesz i wtedy jakakolwiek zmiana (np. nazwy czy typu) atrybutu klasy wymaga wymiany kodu we wszystkich milionach innych miejsc, które gdzieś z tego korzystają. Poleganie w 100% na zachowaniu IDE to raczej monkey patching, a nie rozwiązanie problemu. A jeśli część kolejnych bibliotek jest już skompilowana i dostępna tylko w tej formie? Wtedy nawet NetBeans nic nie pomoże.

    Niedawno Sun zatrudnił programistów JRuby. Myślę, że rola Javy może tylko maleć, gdyż JRuby posiada niezrównanie bardziej prostą i elastyczną składnię, a ma taki sam dostęp do wszystkich, dopracowanych przez lata, bibliotek Javy. Bo tak naprawdę, to nie chodzi o (toporną) składnię Javy ale o jej biblioteki. I jeśli JRuby da nam ten sam dostęp przy znacznie mniejszym nakładzie kodowania, to czemu nie?

  3. Avatar Pawel powiedział 8 months later:

    Hmm, generalnie zgadzam się z artykułem, ale nie przesadzajmy i nie demonizujmy Javy. Nie wiem czy wiecie, ale w najnowszej wersji JDK, problem metod dostępowych będzie można załatwić za pomocą adnotacji (metadanych). Osobiście bardzo lubię Pythona i uważam, że Java sporo się uczy od języków dynamicznych, ale jest to tak naprawdę niewielki ułamek w porównaniu do tego, w czym naśladują Javę np. Ruby lub Python. Często dochodzą powoli dopiero do rozwiązań, jakie w Javie funkcjonują od dawna. Zresztą dobra składnia języka to świetny punkt wyjścia i podstawa, ale to dopiero początek dłuuugiej drogi rozwoju.

  4. Avatar Pawel powiedział 8 months later:

    Oj muszę dopisać, bo zapomniałem: Czemu w Rubym i Pythonie listing kodu jest pokazany ze ślicznym kolorowaniem składni, a w Javie i PHP surowym tekstem, czyżby taka mała propagandka? ;)

  5. Avatar Jarosław Zabiełło powiedział 8 months later:

    Ta aplikacja koloruje tylko format Rubiego, YAML i XML. Python jest tu kolorowany jako Ruby.

    Słusznie przyznajesz, że Python i Ruby mają lepszą składnię, bo mają. Java ma tylko dojrzalsze zaplecze bibliotek, zoptymalizowaną JVM, kupę książek i rozbudowaną teorię. Ale to nic dziwnego, bo to efekt milionów dolarów pompowanych przez lata przez duże korporacje. Na pewno nie wieku. bo Java powstała w 1994 r roku. Ruby jest tylko rok młodszy. A Python jest starszy od obu, bo powstał w 1991 r. Hehe, nawet JVM Java zerżnęła z języka dynamicznego (SmallTalk). Java ostatnio usiłuje trochę się modernizować, ale wiele osób uważa, że jej czas się kończy i że nadchodzi era wysokopoziomowych języków dynamicznych. Wielcy w branży nie są w stanie już ignorować tego trendu. M$ zaczął jawnie wspierać Pythona (IronPython). A Sun po początkowym wsparciu dla PHP zatrudnił niedawno developerów projektu JRuby.

    Ruby w ogóle jakoś dziwnym trafem dosyć łatwo pozyskuje sobie programistów Javy, którzy potem stają się jego wielkimi zwolennikami. :)

  6. Avatar Mentat powiedział 8 months later:

    Autor artykułu nie ma racji co do accesorów javy – tak powinno się właśnie programiwać i jest to dobra praktyka.

    Moim zdaniem przykład który pokazano z rubym jest właśnie dziwny, ale to tak trochę o mówieniu wyższości świąt Bożego Narodzenia nad świętami Wielkiej Nocy.

    A co do świetlanej przyszłości Rubiego (JRuby) to jest tak samo jak z CORBA – “zawsze będzie miała świetlaną przyszłość” – nie bądź naiwny – jeśli Sun coś robi to robi to wyłącznie dla javy… (i dla siebie, ale to chyba oczywiste).

  7. Avatar stforek powiedział about 1 year later:

    W Javie może uzyskać podobny efekt co w Pythonie i Rubym przez AOP.

  8. Avatar Piotr powiedział about 1 year later:

    Też lubię rubina – choć najwięcej pisze w Javie :) .

  9. Avatar michal powiedział over 2 years later:

    sam AOP przewyzsza mozliwosciami cale Ruby. Nigdy ten jezyk nie bedzie popularniejszy od javy. JAVA to jest cala platforma. Wole pisac gettery i settery (a raczej generowac) ,a wiedziec o co chodzi w kodzie. Mam zagadke dla Pana Jarka. Jak polaczyc Rubego z: -OpenGL -Catia,UGS,I-deas -jak odpalic metody z dll -jak uruchomic Rubego jako aplet -jak zintegrowac go z komorka -jak napisac silnik do gier w Rubym -dlaczego SAP jest na javie -dlaczego Windchill jest na javie -jak odczytac w RUBYM dxf, mpeg -dlaczego Google szuka tylko programistow JAVY (aktualnie) -dlaczego google inwestuje w GWT,Androida -dlaczego Apache Fundation to w 90% java -dlaczego oracle investuje w jave (IDE,TOP-LINK) -dlaczego IBM investuje w jave? itp. idt. Mam Beyond java – nie nadaje sie nawet na papier toaletowy – propaganda i tyle, ktos musial niezle zaplacic.

    RUBY zastosowaniu biznesowym = smiech…

  10. Avatar michal. powiedział over 2 years later:

    Java straci na popularnosci? Pisales kiedys projekt ,ktory ma wiecej niz 1000 klas? W rubym? Nie? dziekuje. To jest zabawka, nie platforma z prawdziwym wsparciem. Slyszles o certyfikatach z RUBY? przez prometrica? nie? dziekuje.

    Nie mow ,ze maluch lepszy jest od mercedesa. Bo mnie smiech bierze.

  11. Avatar Jarosław Zabiełło powiedział over 2 years later:

    @michal: Komentowany artykuł nie wypowiada się o platformie Javy, ale o języku Java, który jest prostszy i dużo bardziej prymitywny niż Ruby. Każdy ci to powie.

    Jeśli chodzi o dostęp do bibliotek javowych, to powinieneś poczytać sobie coś o JRuby (rozwijany aktualnie przez Sun’a). Dostęp do apletów, JDBC czy dowolnych bibliotek Javy to tam śmiesznie prosta sprawa.

    Co do Beyond Java, to trzeba było przeczytać książkę, a nie tylko spis treści. Autor ma rację, że do lekkich frontonów korzystających z RBDMS, Java to kiepski pomysł. A co do Google, to zdaje się, że oni mają większość webowych rzeczy w Pythonie, a nie Javie. Python jest tam główną technologią webową.

  12. Avatar michal powiedział over 2 years later:

    Jest duzo potezniejszy. Watpie ,zebys znal jave na poziomie SCJD, wiec sie nie wypowiadaj. Dla mnie jestes czlowiekiem niekompetentym. Czytam Twoje artykuly i jest do podniecanie sie czyms, co przeczytasz na innych blogach. Takie kolko wzajemnej adoracji. Piszesz takie bzdury ,a ktos mlody przeczyta i Ci uwierzy. Ksiazke czytalem do polowy i wieje od nich propaganda jak z ksiazek od M$. A to ,ze sun wchlonal Twojego Bozka ;] Coz – zawsze tak jest ,ze potega polyka male rybki ;] JRuby to bardziej java niz ruby. Musisz sie nauczyc bibiliotek i architektury, a to 95% nauki. Skladnia jezyka jest banalna – do nauczenia w tydzien.

    Ujawnij jakis swoj projekt – zobaczymy ,czy masz powody, aby tak negowac jave.

    A jak nic w zyciu nie napisales, poza szukaczem cytatow w koranie – to idz sie algorytmow poucz, bo ruby Ci mozg spralo.

    ZP

  13. Avatar michal powiedział over 2 years later:

    I nie podniecaj sie ta rozmowa z dublina – lepiej wejdz na google carieers ;]

    Poza tym: IBM oracle sun sparx ds ptc sap

    czy oni slyszeli o rubym?

    No tak Sun slyszal – i go zaimplementowal dla ludzi, ktorym Java jest za trudna;]

    Rozumiem ,ze niektorych to moze przerazac ale jakbys sie poczul z projektem ,ktory instaluje sie z 15 plyt?

  14. Avatar Jarosław Zabiełło powiedział over 2 years later:

    @michal: Dlaczego trolujesz komentarze, oszołomie? Temat artykułu dotyczył składni akcesorów która jest kiepsko zaprojektowana w Javie powodując sztuczne tworzenie kodu, który nic nie robi w nadziei, że “może kiedyś się przyda”.

    Główną zaletą platformy Java jest JVM. Sun zrozumiał, że wcześniejsze pienia o tym aby Java była dobra na wszystko to utopia. Stąd inwestuje w alternatywne języki dla JVM (JRuby, Jython, Groovy itp) bo do pewnych zastosowań są one dużo lepsze od Javy. Kropka. Zaś książki “Beyond Java” zupełnie nie zrozumiałeś, no cóż, nie każdy potrafi czytać ze zrozumieniem.

    Tak w ogóle jakaś ironia losu. Do Javy pierwotnie zniechęciła mnie książka “Thinking in Java” bo Bruce Eckel (niechcący) zareklamował tam świetnego Pythona. Teraz po paru latach, dzięki JRubiemu zainteresowałem się z powrotem Javą. Nawet na język, mimo że prymitywny, nie patrzę już tak surowo jak dwa lata temu, kiedy powstawał ten wpis na blogu.

  15. Avatar Marek Dominiak powiedział over 2 years later:

    Co do akcesorów w javie to nie jest aż taka kiepska sprawa jakby mogło się wydawać – trzeba tylko trzymać się dobrych praktyk programistycznych tzn.:

    Jeśli pole chcemy udostępnić publicznie to dobrą praktyką programistyczną zahermetyzowanie jej w taki sposób aby odczyt/zapis odbywał się tylko przez metody dostępowe.

    Jednak częściej potrzebujemy pól o zasięgu private – możemy sobie z nimi robić co chcemy robić w klasie, a jeśli pojawi się wymaganie że musimy coś robić przy zapisie czy odczycie to Eclipse i Netbeans potrafią zamienić te wywołania na użycie metod dostępowych

    A co jeśli zmieni się nazwa pola który udostępniliśmy publicznie przez metody dostępowe? Eclipse zrefaktoryzuje nazwy metod ich wywołania oraz oczywiście nazwę pola, netbeans w większych bólach też. Ale przecież zmiana nazwy atrybutu w Rubym też nie będzie taka przyjemna – też w milionie miejsc w kodzie musisz zmienić nazwę atrybutu w wywołaniach!

    Odnośnie “Thinking in Java” – Bruce Eckel raczej świadomie zreklamował Pythona w tej książce.

    Co do technologii webowych moim zdaniem języki dynamiczne będą częściej wykorzystywane do lekkich projektów, a języki takie jak java do dużych biznesowych projektów (ja na razie, możliwe że to się zmieni). Niemniej nie można zauważyć tego że sun ładuje sporo szmalu w języki dynamiczne i ich wsparcie (JRuby, Groovy, wspracie Rails i Grails w netbeansie).

  16. Avatar Jarosław Zabiełło powiedział over 2 years later:

    A co zrobisz w wypadku kiedy wcześniej używany atrybut publiczny chcesz rozbudować o dodatkowo wykonywany kod czego wcześniej tego nie planowałeś? Leżysz i kwiczysz. Musisz zmienić nie tylko jego nazwę, ale i miliony miejsc, które z tego korzystają. I nawet Eclipse nic nie pomoże, jak to jest używane w różnych projektach.

    Albo możesz od początku każdy atrybut opakowywać w metody dostępowe, tylko że (1) to głupio wygląda, (2) tworzysz kod, który nic nie robi dodając go “na wszelki wypadek”. To, co nazwałeś “dobrą praktyką programistyczną” ja bym raczej tu nazwał “javowym złem koniecznym” (składnia Javyj est za prymitywna, aby to jakoś lepiej rozwiązać).

    Co zaś do zmiany nazwy metody dostępowej w klasie Rubiego, to najprościej jest dodać alias do starej nazwy i już. Nic nie trzeba zmieniać w milionach projektów i bibliotek które z tego korzystają.

    Co do reszty, to się zgadzam.

  17. Avatar michal powiedział over 2 years later:

    @Jareczku nie unos sie. Widzialem Twoje stronki – sa godne pozalowania.

  18. Avatar michal powiedział over 2 years later:

    “Jeśli chodzi o dostęp do bibliotek javowych, to powinieneś poczytać sobie coś o JRuby (rozwijany aktualnie przez Sun’a). Dostęp do apletów, JDBC czy dowolnych bibliotek Javy to tam śmiesznie prosta sprawa.”

    Smiesznie prosta sprawa? A dlaczego prosiles o pomoc na pl.org.ruby? Zeby Ci powiedziali jak uzywac metod?

  19. Avatar Jarosław Zabiełło powiedział over 2 years later:

    Chodzi ci o obejście kolizji nazwy konstruktora z identycznie nazwaną metodą w Javie? To akurat była dosyć niebanalna sprawa i nie było nigdzie udokumentowane rozwiązanie. Opisałem w innym miejscu jak to obejść. Coś ty taki zgryźliwy? Wyjaśnisz też o jakież to konkretnie “stronki” ci chodzi? Nie wiem o co ci chodzi.

  20. Avatar michal powiedział over 2 years later:

    Poprostu jedziesz po ludziach programujacych w innych jezykach niz Ruby . Nie mam do Ciebie nic osobistego ale Twoja postawa budzi u czesci ludzi – w tym mnie postawe obronna. Jezeli jeszcze nazywasz mnie oszolomem, mimo ze mnie nie znasz – nie dziw sie takich postow.

    Zeby podsumowac – kazdy jezyk ma zastosowanie i szanuje Rubego ale nie mozna ludziom wmawiac ,ze to jest jedynie sluszna droga i w kazdym aspekcie przewyzsza jave. Bo np. ja jestem bardzo zadowolony z tego jezyka i nie podzielam Twojej fascynacji Rubym. Nie zauwazam problemow, ktore Ty wyolbrzymiasz. Znam dobrze miejsce javy, znam tez miejsce Rubego. Ale poprostu mi uwierz, ze projekty komercyjne rzadza sie zupelnie innymi prawami i firmy nie odejda od Javy. I to nie tylko kwestia przyzwyczajenia , czy dostepu do bibliotek. Naprawde – mozna na ten temat pisac ksiazki ale wielokrotnie musialeme pisac programy w Javie 1.4 nie w 1.6 bo taka byla konwencja w firmie. Przepraszam za off Topic – nie bede wiecej rozwijal tego tematu. Poprostu mniej atakuj – bedziesz mniej atakowany.

  21. Avatar Jarosław Zabiełło powiedział over 2 years later:

    @michal: Po pierwsze, udowodniłeś że nie potrafisz czytać ze zrozumieniem. Artykuł do którego odnoszą się te komentarze dotyczył składni języków a nie jakości ich bibliotek. Po drugie, nie przedstawiłeś niczego konkretnego na argumenty w w/w tekście i rozpocząłeś swoją krucjatę (nie na temat) niczym rasowy troll. Jeśli chcesz zobaczyć komu spłukano mózg to się lepiej przejrzyj w lusterku.

  22. Avatar michal powiedział over 2 years later:

    Ale nigdy nie odpowiedziales mi na pytania ,ktore Ci zadaje. Podniecasz sie skladnia, jakby byla najwazniejsza. Jakby ludzie potrzebowali prostego jezyka – programowali by VB. Ale ludzie potrzebuja poterznego narzedzia, sprawdzonego i przetestowaonego, z odpowiednia iloscia fachowcow. Nie chcialem rozwiajac tematu ale w/g mnie nie jestes czlowiekiem, z ktorym mozna dyskutowac o inzynierii oprogramowania. Jestes koderem jednego z najprostrzych jezykow (jak sam mowisz) i probujesz wmowic, ze jak ktos opanowal ( i dobrze sie czuje w trudniejszym/potezniejszym ) to jest gorszy od Ciebie bo jest zacofany. Linki , oktorych mowilem: “Moje serwisy” po prawej stronie.

    Smiac mi sie chce ,ze ktos taki jak Ty (piszacy takie prymitywne rzeczy) i tak malej wiedzy (chyba ,ze jestes skromny:D), kluci sie na tematy ,o ktorych nie ma pojecia.

    Przyznaj sie prosze szczerze – czy jest jakas rzecz, ktora napisales w zyciu ktora sie mozesz pochwalic?

    Ja nie jestem ograniczony z tego wzgledu, ze dla mnie wazniejsze od jezyka jest cel,uzyte procesy, technologia ,oraz wymagania klienta.

    Prosze Cie, zaloz topic:

    Zabiello (nie ruby – to jezyk jak jezyk) vs Reszta swiata ( Nie java – bo to jest 10% Projektu )

    Pamietaj: Jezyk to narzedzie!!! Nie religia :P

  23. Avatar michal powiedział over 2 years later:

    A zeby nie byc calkowicie o/t :) Lubie gettery i settery w Javie. Chociaz najbardzizej podoba mi sie konwencja C#.

  24. Avatar Jarosław Zabiełło powiedział over 2 years later:

    @michal: ty nie tylko lubisz akcesory, ale także Strażnicę, co? Charakterystyczna kłótliwość i zgryźliwość połączona z pieniactwem oraz nieumiejętność formowania konkretnych zarzutów okraszona śmiesznymi błędami ortograficznymi doskonale pasuje do profilu typowego, jehowickiego trolla.

    Co prawda mam wątpliwości, czy ta notka o akcesorach jest do tego odpowiednim miejscem, ale chętnie usłyszę jakikolwiek konkretny merytorycznie zarzut co do “moich stronek”. Na razie nie podałeś niczego konkretnego poza epitetami które wystawiają ci nie najlepsze świadectwo.

    Co do innych kwestii, to robisz z siebie idiotę, bo ja nigdzie nie twierdzę, że Ruby jest najprostszym językiem. Jest może piękniejszy i dużo bardziej ekspresywny od Javy, ale na pewno nie jest jednym z najprostszych języków – Java jest dużo prostsza. (Inna sprawa, że jak już się trochę zna JRuby, to zwykle można w nim wyrazić to samo w ułamku tego, co trzeba by napisać w Javie.)

    Abyś jednak już więcej nie wyskakiwał ze swoją krucjatą przeciwko wiatrakom, wyrażę to wprost: nie mam nic przeciwko platformie Javy. Wpompowano w nią miliardy dolarów to i wiele bibliotek jest porządnie zrobionych. Nie znaczy to jednak, że wszystko jest tam idealne. Jeśli nie podoba ci się książka Bruce’a Tate (każdy inteligentny widzi, że ona jest celowo prowokująca) to poczytaj sobie to, co piszą tacy ludzie jak np. Martin Fowler czy Dave Thomas.

    Proponuję zatem trochę więcej otwarcia umysłu i oderwania się od wywołującej wzdęcia lektury “pokarmu na czas słuszny”, bo ewidentnie ci szkodzi na psychikę.

  25. Avatar artur ejsmont powiedział over 3 years later:

    hehe, zgodze sie w zupelnosci ze akcesory troche smierdza i ludzie ich naduzywajacy cierpia na eksplozje zaleznosci.

    Ale to ze w PHP5 mozna je zrobic przezroczyscie tak na prawde nie zmniejsza problemu a wrecz go pogarsza. Coz z tego ze nie ma samego akcesora jesli nadal mozna uzywac zmiennych.

    Tak czy inaczej dawanie akcesorow do wszystkiego czyni wszystko publiczny i enkapsulacja trafia do kosza.

    Do tego w PHP jesli atrybutu nie ma dostaniesz null a nie error ani wyjatek i zmiana nazwy moze byc jeszcze trudniejsza do wykrycia. No przynajmniej przydaloby sie walic wyjatkiem gdy nie ma zdefiniowanego.

    Art

(leave url/email »)

   Pomoc języka formatowania Obejrzyj komentarz