( SzBlackY | 2019. 06. 11., k – 10:27 )

de az meg nagyon hülyén nézne ki, hogy pidof_daemon_and_unlock_if_not_running(), nem? :P

Valóban, camelCase-ben jobban nézne ki, meg ha egy utility class egyik metódusa lenne: new PidofDaemonUtil()->getPidAndUnlockIfRunning() [és ugyanitt: new PidofDaemonUtil()->getPid()] :) Bár még kéne bele egy abstract factory, egy-két decorator, és legalább három Exception osztály :) [de a mellékhatással járó, ezt névben nem tükröző függvényektől továbbra is kiráz a hideg, még ha C-ben standardak is :( ]

Mi nem érthető?

Érthető, csak... legalábbis furcsa. Megértem, hogy ez nagyrészt a C marhasága, de mindig kiakadok, amikor ilyet látok:


if(!foo()) { // negált feltétel, ami általában azt jelenti, hogy foo-val valami nem stimmelt
   // minden ok
} else {
   // valami el lett bökve
}

Ha viszont nem negálod a feltételt (ami szerencsés), akkor az if() ágba kerül a hibakezelés, ami ront az olvashatóságon (ha a sikeres code path-et akarod megnézni [mit csinál az fgv], akkor is kénytelen vagy átfutni az összes hibakezelő kódot]). Ráadásul nem is 0 - valami hibakód a visszatérési érték, hanem tényleges C-stílusú bool érték, a hibakódért úgyis az Ernőt kell kérdezgetni...

Vesd össze:
(te verziód)


if(assign_signal(...)) {
    /* Hibalehetőség 1 */
} else {
   /* Happy path 1 */
   if(daemonize(...)) {
     /* Hibalehetőség 2 */
   } else {
       /* Még mindig a happy path */
       if(foobar(...)) {
          /* Na, ezt a kódrészletet keresed */
       }
   }
}

vagy


if(!assign_signal(...)) {
    if(!daemonize()) {
        if(!foobar()) {
            /* Na, ezt a kódrészletet keresed, ez van legfelül */
        } else {
            /* Hibalehetőség 1 */
        }
    } else {
        /* Hibalehetőség 2 */
    }
} else {
     /* Hibalehetőség 3 */
}

(megfordított assign_signal visszatéréssel)


if(assign_signal(...)) {
    if(daemonize()) {
        if(foobar()) {
            /* Na, ezt a kódrészletet keresed, ez van legfelül */
        } else {
            /* Hibalehetőség 1 */
        }
    } else {
        /* Hibalehetőség 2 */
    }
} else {
     /* Hibalehetőség 3 */
}

És persze a képzeletbeli exceptionökkel:


try {
   assign_signal(...);
   daemonize(...);
   foobar(...);
   /* Na, ezt a kódrészletet keresed */
} catch (...) {
   /* Hibalehetőség 1 */
} catch (...) {
   /* Hibalehetőség 2 */
} catch (...) {
   /* Hibalehetőség 3 */
}

Az olvashatóságot nagyban nem rontja, ha minden if()-nél negálod a feltételt, viszont minden függvénynél az olvasónak is tudnia kell majd, hogy a hamis visszatérés = igaz ágon van a helyes futás.

BlackY
--
"en is amikor bejovok dolgozni, nem egy pc-t [..] kapcsolok be, hanem a mainframe-et..." (sj)