MANIFESTUL ÎMPOTRIVA PARAMETRILOR DE TIP BOOLEAN
De ce valorile "true" și "false" aruncate la întâmplare în apelurile tale de metode îți sabotează designul software.
Către toți dezvoltatorii obosiți de codul greu de înțeles, de bug-urile neprevăzute și de orele pierdute descifrând intențiile altora:
Ne-am săturat să deschidem fișiere de cod și să fim întâmpinați de apeluri de metode complet oarbe. Când citești cod scris de alții (sau chiar de tine, acum o lună), acest gen de instrucțiune este o barieră cognitivă:
Ce reprezintă acel true? Dar acel false? Fără a naviga în interiorul implementării metodei, ești complet blocat. Acest design trădează regula numărul unu din software engineering: Codul trebuie să fie ușor de citit la locul de utilizare.
Ocultează Intenția
Un simplu „true” într-un apel este anonim. Te obligă să îți fragmentezi atenția ca să înțelegi ce comportament dictează.
Încalcă SRP
Dacă o metodă își schimbă complet logica internă în funcție de un flag primit, înseamnă că face **două lucruri distincte**.
Evoluție Rigidă
Când apare a treia stare de rulare, ești tentat să adaugi un alt boolean, creând monștri de genul: `proceseaza(true, false, true)`.
Soluțiile: Cum procedăm corect?
Avem la dispoziție tehnici elegante de refactorizare recomandate de standardele Clean Code de pretutindeni.
Dacă flag-ul controlează execuția globală, desparte metoda respectivă în două implementări dedicate și clare.
serviciu.comanda(date, true);
// Ce înseamnă true?
serviciu.comandaUrgenta(date);
// Intenția este auto-documentată.
Când vrei să transmiți o opțiune sau o stare, înlocuiește bitul anonim de tip boolean cu o structură explicită de tip Enum.
raport.genereaza("buget", false);
// Ce înseamnă false? Fără CSV? Sau XLS?
raport.genereaza("buget", Format.EXCEL);
// Oricine citește înțelege instantaneu.
Laborator Interactiv: Refactorează Acum!
Scor Clean Code: 40%Apasă pe opțiunea optimă de mai jos pentru a repara această metodă dăunătoare dintr-un serviciu fictiv de notificări.
public void trimiteNotificare(Utilizator u, String msg, boolean emailOnly) { if (emailOnly) { // Trimite doar e-mail serviciuEmail.trimite(u.getEmail(), msg); } else { // Trimite e-mail și SMS serviciuEmail.trimite(u.getEmail(), msg); serviciuSms.trimite(u.getTelefon(), msg); } }
Alegerea îți aparține la următorul commit
Fiecare linie de cod este o carte de vizită a profesionalismului tău. Spune nu argumentelor magice de tip `true` și `false`.