tifyty

pure Java, what else ?

Kód revjúzom

code review

Mi járhat annak a Java programozónak a fejében, aki egy konstruktorban beállított final mező gettere elé odaírja, hogy synchronized?

19 responses to “Kód revjúzom

  1. Botond december 8, 2012 1:50 du.

    Távol álljon tőlem, hogy védjem az illetőt.. mert ugye sületlenséget benne hagyni egy kódban épp csak egy fokkal jobb, mint beletenni őket. No de elképzelhető, hogy az említett mező hajdanán még nem final-nak indult, volt neki setter-e is és synchronized-dal vala védve. Majd egy későbbi döntés mentén final lett, a setter megszűnt, hisz a fordító rögvest jelezte, hogy valami nem gömbölyű… Na de a synchronized nem zavart senkit, nem szúrt szemet senkinek, a kód fordult és működött.

    A kérdés persze azonnal fel is merül, miszerint a findbugs teszem azt mit szól az ilyesmihez? (No mindjárt utána is járok)

  2. Botond december 8, 2012 2:04 du.

    Jelentem megnéztem és némi csalódottan kellett látnom, hogy nem zavarja egyik általam ismert code quality eszközt sem a jelenség..

  3. tamasrev december 8, 2012 3:02 du.

    Jóhiszeműen: lehet olyan is, hogy az osztálynak van több, nagyobb művelete, aminek része az adott mező olvasása. És van, amelyik a getterrel kezdődik, és olyan is van, ami mással. Persze még mindig rossz a design, mert akkor miért nem publikálja a nagyobb műveleteket külön metódusként, és miért nem dugja el a gettert?

    Amúgy, szerintem Botondnak lesz igaza: elkezdte csinálni, meggondolta magát párszor, aztán bent maradt egy-egy baki.

  4. tamasrev december 8, 2012 3:26 du.

    Gondolom én, gondolom. Találtam egy pongyola megfogalmazást. Azt írtam, hogy “az osztálynak van több, nagyobb művelete”. Helyesen így lenne: “az osztályt több, nagyobb művelet végrehajtására használják más osztályok, több kisebb metódust meghívni rajta.”

    Másik gondolat: azt kéne végiggondolnom, hogy a synchronized metódus, ami szemantikailag (nem teljesítményben) egyenértékű a synchronized(this) -szel reentrant-e. (Az.)

    Ha még mindig rosszfelé gondolkodok, akkor fejtsd ki kérlek, mivel van problémád.

    • v december 8, 2012 3:33 du.

      Semmilyen felhasználás sem tudja megokolni a synchronized használatát. Vagy nem érti aki írta, hogy mi is az a synchronized, és/vagy final, vagy másképp volt a kód és ez a része úgy maradt.

      • tamasrev december 8, 2012 3:45 du.

        Ő, hm, igen. Azt a fieldet bármikor le lehet kérdezni, és mindig ugyanaz lesz az eredménye. Ebben teljesen igazad van – én se mondtam mást.

        Esetleg a fejlesztő fejében lehetett valami olyasmi, hogy
        – az A művelet lekérdezi a final B fieldet, aztán egy hosszú számolás közben ír C-be és D-be is;
        – a B művelet egy hosszú számolás közben olvassa C-t, aztán B-t és ő is D-be ír
        – és a két műveletnek nem szabad átlapolódnia
        – és rossz a design, mert nem definál metódust ezekre a műveletekre, hanem szépen mindegyik részébe beírja, hogy syncronized
        Na, akkor el lehet érni ilyet.

        Vagy ha máshogy rossz a design, mert leakel a konstruktor (van benne new Foo(this) hívás, és foo visszahív erre a getterre), akkor is számíthat.

        Félre ne érts: ez a megoldás szerintem is Rossz. Csak próbálok rá magyarázatot keresni, mert hogy “tökhülye a fejlesztő” az túl egyszerű lenne. Mert jó, elbaszta. Nade miért? És hogyan?

      • Zs december 10, 2012 11:02 du.

        Max ha valami memory barriert akarna implementálni … bár azt hiszem, akkor se ez lenne a legjobb – legérthetőbb – megoldás rá

  5. v december 8, 2012 5:12 du.

    Nem gondoltam ezt a bejegyzést ennyire komolyan. Azt vártam, hogy a legkomolyabb válasz az lesz, hogy csákány.

    De megtiszteltetésnek veszem, hogy egy ilyen komolytalan bejegyzésre is halál komoly kommenteket írtok.

    Cserébe írok jövő hétre egy kis filozofálást refaktorálásról, azután pedig a karácsonyi szünetre a thread local változókról valami komolyabbat.

  6. mefiblogger december 8, 2012 6:07 du.

    CTRL+C tervezési minta? 🙂

  7. mefiblogger december 8, 2012 6:10 du.

    CTRL+C tervezési minta? 🙂

    Az a vicces, hogy a Java hivatalos doksijában kifejezetten kitérnek rá, higy a final és a synchronized együtt értelmetlen.

  8. tvik december 10, 2012 10:46 de.

    Az illető nagyon szálbiztos programot akart csinálni, de nem érti teljesen a koncepciókat. Van ilyen, de nem kell ezért senkit sem kalodába zárni. Kódrevjúzni kell és megosztani a tudást.

    • kinga december 14, 2012 10:37 de.

      Igazad van. De mint a post elkovetje is irta, komolytalan a post. Csak akkor meg egy ilyen valószínűleg érzelmi felindulásból irt 1 mondatos post nem illik egy szakmai blogba. Max. a twitterre.
      Kar, hogy egyes szakmai blogolok keverik a szakmai reszt a sallanggal…

      • v december 14, 2012 12:51 du.

        Én azt gondolom, hogy egy pénteken egy kicsit könnyebb, rövidebb téma is belefér. A blog olyan műfaj, amikor a cikk elválaszthatatlanul a kommentektől, egységben teremt értéket. Néha a kommentek több értéket képviselnek, mint a cikk maga, és ez így rendjén is van.

        Szerintem ez a bejegyzés is ilyen. Ahogy a bejegyzésekből is látszik, sokan alaposan elgondolkodtak a kérdésen, és néha az olyan kérdések is előre viszik a világot, amelyekre nem lehet válaszolni. Egyszerűen annak módján, hogy a meg nem található válasz keresése közben értékes gondolatok születnek.

    • v december 14, 2012 12:53 du.

      Nem zártuk kalodába 😀

      Nem állítottuk pellengérre. 🙂

      Megtörtént a kód review, készült róla egy dokumentum, és lesz személyes megbeszélés is. Azt hiszem részemről elég hiteles az az állítás, hogy szeretem megosztani a tudást.

  9. hatásvadász december 14, 2012 8:23 de.

    Kissé a téma feldobás eleve provokatív és demagóg.
    Pl. az se derül ki, hogy egy 100.000 soros forráskódról vagy valami szösszenetről beszélünk. Ugye már ez se mindegy egy ilyen hibánál. Egy olyannál, amire a compiler és más tool-ok nem reklamálnak.
    Az se derül ki, hogy a kód honnan, hogyan stb. került elő.
    Pl. doksival együtt, rendezett cucc, akkor mondjuk tényleg érdekes a kérdés. Benne maradt vagy tudásbeli gond?
    De ha cucc amúgy is gány, akkor meg eleve kár ilyenekkel görcsölni, mert végkép nem derül ki, ha nem ismerjük az illetőt, hogy miért csinálta. Simán lehet, hogy felmondási idejét töltötte és magasan sz*rt az egészre.

  10. Gábor Lipták december 14, 2012 11:00 du.

    Amikor az ötödik “A” osztály tagjai el akarják fogni az egy évvel idősebbeket, akkor joggal nevezhetjük őket hatásvadásznak.

    Viccet félretéve: én minden ilyen esetben megnézem, ki írta a sort. A veled dolgozókról semmi nem árul el többet, mint a kód amit csinálnak. Ha olyan fajta ember, akit tudom, hogy jobb akar lenni, akkor szólok neki, hogy mit találtam. Ha nem, akkor tudom, hogy a legközelebbi kódját óvatosan kell kezelni, át kell nézni ha bütykölöm. Szóval nálam ez automatikus “Blame”, és nem azért, mert rossz vagyok. Csak ismerkedek 😉

Vélemény, hozzászólás?

Adatok megadása vagy bejelentkezés valamelyik ikonnal:

WordPress.com Logo

Hozzászólhat a WordPress.com felhasználói fiók használatával. Kilépés / Módosítás )

Twitter kép

Hozzászólhat a Twitter felhasználói fiók használatával. Kilépés / Módosítás )

Facebook kép

Hozzászólhat a Facebook felhasználói fiók használatával. Kilépés / Módosítás )

Google+ kép

Hozzászólhat a Google+ felhasználói fiók használatával. Kilépés / Módosítás )

Kapcsolódás: %s

%d blogger ezt kedveli: