tifyty

pure Java, what else ?

Havi archívumok: december 2014

Mit gondolhatott a költő

Volt már olyan, hogy csúnya kódot kellett refaktorálnom. Ez mindenkivel előfordul az élete során, talán csak a nepáli kecskepásztorok a kivételek, főleg ha birkák. Eleddig azonban ezek a csúnyaságok javarészt tapasztalatlanságból adódtak. Igen, akár az én tapasztalatlanságomból is: elő nem venném a kódot amit 2005-ben gyártottam. Mostanában azonban olyan kódokat látok, amelyiket nem gyárthatott kezdő junior. Meg van a súlya a kódnak, benne van a programozó egyénisége, gondolkodásmódja. Szinte már költészet.

Vannak egyszerűbbek:

String attrib = businessObject.getBusinessAttribute();
if( attrib == null || attrib.length() <= 0 ){
 ...

Már az is egy általánosan felteendő kérdés, hogy miért stringek az üzleti objektumok. Ez azonban általánosan elterjedt kódolási szokás, még abból a korból ered, amikor Perl-ben programoztunk (vagy nem). Végül is egy cím, egy irányítószám, egy bankszámlaszám, egy rendelési azonosító, egy láda térbeli mérete (pl. “22cm x 18cm x 11cm”) mind stringek (vagy nem). De mikor, és hogyan lehet egy string hossza negatív? A nulla hosszal nincs, gond, az is tiszta, hogy lehet a visszaadott érték null. De negatív hosszúságú string? CharSequence még csak csak lehetséges, na de string?

Mire gondolhatott a költő, amikor ezt írta? Mindig ezt a kérdést tették fel irodalom órán, és akkor sem értettem. Mondjuk arra, hogy éppen csikart a hasa, vagy kellett a honorárium a lakbér kifizetéséhez. Nem mindegy? Sokkal fontosabb, hogy milyen gondolatokat ébreszt a vers olvasása bennem. Szép ez a vers? Mert programkódnak csak limitáltan nevezhető, annál több benne a művészi érték. Mit gondoljak a tisztelt kollégáról, aki fentieket írta?

Valószínűleg megfontolt, és óvatos ember. Nem azt nézi, hogy egy string nulla hosszú-e, inkább arra kíváncsi, hogy pozitív számú karakter van-e benne. Biztos, ami biztos. Hátha egyszer szembe jön egy string aminek negatív a hossza. Az, hogy eddig még senki nem látott ilyet, nem bizonyítja, hogy valóban nincs is! Pont mint a jeti. (Már megint Nepál! Lehet ott valami!)

De a fenti kis kód maximum haiku-nak nevezhető. A következő viszont egy igazi szonett, amelyik felkészül a párhuzamosan futó szálra. Van olyan? Nem több szál, hanem egy. Egy szál, ami párhuzamosan fut. Még senki nem látott olyat? Az nem bizonyít semmit!

final ThreadLocal<MyType> lock = new ThreadLocal<MyType>();
	
  public void method() {
    if (lock.get() == null) {
      lock.set(this);
      try {
        init();
      } finally {
        lock.set(null);				
      }
    }
  }

Mit zárol ez a lock? Az adott szálat. Ha tehát az adott szál akarja még egyszer párhuzamosan futtatni a method() metódust, akkor az nem fog menni. Persze ki tudja mi van az init()-ben? Lehet, hogy rekurzívan vissza hív sok rétegen keresztül, és így varrja el a program a végtelen rekurziót. De nem, ezt megnéztük. Ilyet nem tesz. Annak egyébként lehetne értelme, hogy a szálhelyi (threadlocal) változó nem statikus. A rekurzív hívás (már ha lenne) ha másik objektumon hívná meg method() metódust, akkor ott egy másik szálhelyi változó állna strázsát az init() hívás előtt, és így beengedhetné. Tehát lehetne értelme a nem statikus szálhelyi változónak, ha éppen nem lenne az egész teljesen értelmetlen. Vagy én vagyok nepáli helikopter.

Hogy lehet ezt kezelni? Talán sztoikus nyugalommal, amit mi sem fejez ki jobban, mint egy haiku:

Ők programoznak,
Révedünk magunk elé.
Gyűlik sok maszat.

Karácsony előtti hangulat

Utolsó munkanapon, utolsó meeting első perceiben, még nem minden kolléga jött be a terembe, hangulat nem volt túl munkaorientált.

  • Zoli: Pár éve még mekkora truváj volt egy lézer pointer.
  • Péter: De ma már nincsenek pointerek, mert Java-ban programozunk.
  • Zsolt: De a kutyák között vannak.
  • Péter: Viszont ott a garbage colletion-t magadnak kell csinálni.

Hát mindenkinek boldog karácsonyt, aki akar az még dolgozzon, mi már elég fáradtak vagyunk…