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)