Operatori ciudati (negare & increment/decrement)

Salut,

De obicei cand am timp liber si nu il petrec pe devforum (:sweat_smile:) imi place sa ma dau pe stackoverflow, incercand sa rezolv diferite probleme sau sa citesc anumite intrebari.

Problema e ca am tot vazut intrebari de genul asta sau asta (doar doua dintre topicurile descoperite recent) si nu inteleg de ce cineva ar scrie cod asa de ambiguu (daca sapati prin comentarii o sa vedeti ca nu sunt singurul care crede ca e stupid sa folosesti chestii de genul).

while (x --> 0) {}

sau

if (!--pending) {}

Nu am intalnit pana acum cod ambiguu, desi am lucrat in mai multe echipe, pe cod scris de alti developeri. Ma pot considera un pic norocos :smiley:

E cineva care le foloseste? Daca da, de ce, care e scopul?

1 Like

Eu in schimb nu inteleg intrebari precum ale tale. Ce scop ar putea fi? Habar n-am. O fi, oh vai, liberatea umana exprimandu-se intr-o gramatica libera sau… pompozitate, concizie sau poate nu stia cum sa faca altfel. Ce-i asa enigmatic?

--> nu-i ambiguu, doar unu poate facand misto de altii. Sunt convins ca unii pot citi si cod scris foate laconic sau chiar surse de js backdoors. :stuck_out_tongue:

“De ce lumea sparge un site?” ar fi in aceeasi specie ca intrebarea ta.

PS: Nu gasesc !--pending sa fie atat de greu de inteles (n-as folosi “cod ambiguu” - asta ar sugera ca lexerul ramane blocat, fiindca nu stiu ce semantica sa aleaga, si nu stiu de cate ori se intampla asta… intr-un deceniu). Mai ales cand pending e o variabila verificata intr-o iteratie.

@nush: înțepi omul gratuit :slightly_smiling:

Poate că nu este cod ambiguu cât cod mai… puțin întâlnit. Asta și pentru că e un pic mai greu de citit - mie așa mi se pare - și pentru că mulți nu știu care este diferență între ++foo și foo++.

2 Likes

Ok. Dar tu de ce crezi ca lumea scrie asa?

Pentru ca ei inteleg ce face si este mai putin de scris.

Yep, daaar apare o mica problema. De foarte multe ori codul scris de tine va trece si prin mana altor oameni. Fara sa mai vorbim, evident, de situatia unde se lucreaza intr-o echipa.

2 Likes

Si nu pentur asta exista comentariile? Sau documentatia? Sau, mai ales, Google? Sau vrei sa spui ca intr-o firma serioasa nu ai voie sa faci research?

Exact! Sunt oameni care intentionat scriu cod ciudat, care “merge”, uneori nu e insotit de teste. Am observat ca asa cred ei ca isi protejeaza jobul, prin obfuscare.

2 Likes

Un prieten imi povestea zilele astea de un fost coleg de munca ca alege cele mai grele solutii in rezolvarea problemelor pentru a nu permite altora sa lucreze pe codul lui.
N-am vrut sa fiu eu cel care inainteaza ipoteza asta dar daca tot ai spus-o tu am zis sa interesc afirmatia.

2 Likes

Situatiile de genul acesta sunt departe de cele ideale.La ce iti folosesc comentarii in maghiara?

Ai voie sa faci research, dar facand mentenanta pe un astfel de cod vei fi perceput ca ineficient, iar colegul care l-a scris ca smart.

2 Likes

In exemplul cu operatorii ciudati, nu sunt chestii atat de complicate. Adica trebuie doar sa stii ca operatorii se pot combina fara spatii si ordinea de executie a operatorilor si ai rezolvat “problema”.

Nu este clar ca senior developerii scriu cod diferit, fata de average developers sau junior developers.
In general, odata ce ai anumite cunostinte, tinzi sa le iei drept granted (presupui ca ceilalti devs deja au cunostintele acelea), asa ca iti permiţi sa folosesti acel tip de cod.

O comparatie intre x <-- y si x < --y este (partial) similara cu o comparatie intre if(a){b;}else{c;} si a?b:c;, in opinia mea… Daca iti este mai usor sa intelegi codul, poti folosi astel de artificii. Sigur, uneori este nevoie de umpic de research, sau macar sa lasi un comentariu, in documentatie, cu faptul ca x --> y este similar cu x-- > y, dar atata timp cat metodele pot fi gasite cu un simplu search pe Gogu’, I call it a fair use.

Uitati inca ceva operatori ciudati:

In C, cel putin, <: se traduce ca [ si :> se traduce ca ].

Related:

Disclaimer: Nu am atata experienta ca majoritatea userilor de pe acest forum, asa ca informatiile date de mine pot fi inaccurate, at least.

Eu tot nu inteleg astfel de intrebari. Mi se par aproape evidente. Adica, daca iti pui intrebarea tie insuti, si tot afli un raspuns. Au mai fost astfel de intrebari pe forumul asta, de asta nu prea inteleg de ce o persoana ar pune tot felul de intrebari ciudate despre operatori ciudati. Adica, nu-i putin evident? Ce-i de discutat aci? M-ar interesa mai mult sansele de reusita in cazul celor care scriu aiurea numai sa-si pastreze job-ul. Does that shit work?

Care e evidenta? Mie nu mi-e clar de ce dracu ar scrie cineva asa ceva?

De câte ori ai întâlnit cod scris în acest fel? De câte ori ai scris if(!--foo) ?

Fără să cunosc ce experiență ai, aș spune că foarte rar (spre niciodată). Pentru că oricât de smart ar fi codul tău, ar trebui, în primul rând, să fie readable.

Judecând după numărul de :+1: de pe stackoverflow, aș zice că astfel de exprimări nu sunt chiar cele mai comune chestii…

while( 0 <-------------------- x ) {}
1 Like

@stefanz
Dacă echipa nu are un lead care face code review și sa se asigure că astfel de cod nu ajunge checked-in, atunci programatorii vor scrie cum au chef.

Nu e doar vina ăluia care scrie, e vina ălora care permit. Compania are parte de codul care-l merita. Arata-mi codul unei companii ca sa-ti spun cum e compania.

Companiile ar trebui sa arate la interviu cum se scrie cod la ei in companie :slightly_smiling:
Nimeni nu scrie cod perfect, inclusiv eu. Dar sunt greșeli și greșeli.
Fara a minimliza exemplele respective, exista orori mult mai mari.

2 Likes

Asta fiindca nu stai 5 minute sa te gandesti. Eu cum am putut? Nu garantez ca am dreptate 100%, dar acopar 80% din cazuri cu 3 scenarii. Really.

Este irelevant de cate ori am intalnit sau scris. De cate ori ai vazut oameni cazand de la balcon? Chiar daca niciodata, totusi, imi pot imagina ca ai sti sa inferezi.

M-ati inteles gresit. N-am sugerat ca, bleah, intrebarile astea is prea simple pt creierul meu, ci doar tre sa stai sa te gandesti oleaca, wtf.

Mie imi pare ca aceasta discutie a fost pusa in Learning pentru ca cei care nu stiu de astfel de operatori ciudati (adica faptul ca operatorii pot fi combinati), sa afle.

Just my 2 cents.

Nu, nu cred.
In cazul descris de tine, intrebarile ar viza efectiv ce inseamna, nu motivatia lor. OP intelege foarte bine sintaxa, numai ca dureaza 2-10 secunde in plus sa-si dea seama, ca si in cazul meu.

Mi s-a parut ca se potriveste cu ce se discuta.
E din cartea Clean code.

2 Likes

De 2 ori am intalnit cod oarecum asemanator. Prima data a fost la un coleg care facea tot felul de prostii (die in index.php si trimis pe live), la o luna dupa ce m-am angajat la firma respectiva, el era dat afara. La inca doua saptamani am inteles de ce toti ii recunosteau codul si il injurau, cand a trebuit sa modific ceva oarecum obfuscat, un bit mask facut cu doua shiftari de biti care nu functiona.
A doua oara a fost la un interviu, la o firma la care am lucrat si am aflat dupa interviu ca toate intrebarile care aveau “operatori ciudati” au fost propuse de un coleg care invata pentru certificarea Zend.