Jump to content

SUBIECTE NOI
« 1 / 5 »
RSS
Consum ulei masina de tuns iarba...

"Moda" tinerilor care se ...

E.on energie aplicație intre...

Masina de tuns... buruieni
 Recomandare drona

Exista un soft care sa reia autom...

Identificare plante

Cum declari o variabila care nu s...
 Schimbare certificat de inmatricu...

Poligon auto București

nelamurire legata de pret la mode...

Hotel cu restaurant si Demipensiu...
 Croaziera in Mediterana de Vest 1...

Copilot are pica pe Vladimir Putin

MicroSoft Edge: Cum pun Google in...

Dashcam
 

Operator overloading – da sau ba?

- - - - -
  • This topic is locked This topic is locked
99 replies to this topic

#55
Mosotti

Mosotti

    Geniu umil

  • Grup: Senior Members
  • Posts: 33,295
  • Înscris: 21.04.2004
Ambele suck, pentru ca presupune ca separatorul de cale este “/“.

#56
dani.user

dani.user

    Guru Member

  • Grup: Senior Members
  • Posts: 30,243
  • Înscris: 24.02.2007
Prima da, dar in cazul celei de-a 2-a, fiind vorba de o clasa separata (nu rezulta un string), aceasta poate contine logica necesara alegerii separatorului nativ al platformei curente.

#57
Mosotti

Mosotti

    Geniu umil

  • Grup: Senior Members
  • Posts: 33,295
  • Înscris: 21.04.2004
Eu n-as folosi separatori diferiti in logica de pastrare a cailor. As folosi peste tot "/" si doar cind vreau sa tiparesc sau sa interactionez cu biblioteci specifice as face schimbarea. Problema este de perceptie, pentru cineva care a lucrat doar pe Windows ani si ani, daca trebuie sa foloseasca un asemenea cod nu percepe la fel de clar ce vrei sa faci. Pentru el / inseamna impartire. Si daca codul mai ii si de genul

auto a = b / c;

l-ai spart.

De-aia dpdmv si auto ala e cam cancer. Te ajuta sa fii lazy pe moment, dar peste 5 ani mult succes ca sa intelegi ca functia x returneaza nus ce hashmap sau functia y returneaza nus ce array de dracu stie de pointeri...


Daca clasa este utilizata intern si nu are nimeni acces la ea, evident ca poti folosi ce vrei... :)

#58
TS030

TS030

    Guru Member

  • Grup: Senior Members
  • Posts: 15,193
  • Înscris: 25.06.2012
Of, copiii astia... whatever, nu merita.

OriginalCopy: vorbim de doua lucruri diferite, de aceea pare ca nu ne-ntelegem Posted Image
Exemplele tale cu proiecte de tip 1 si de tip 2 pun aceleasi probleme, indiferent de cum ai concatena caile respective - corect? Eu nu spun sa concatenezi folosind operator/ in locul folosirii unui dictionar.
Vezi exemplul lui dani.user, este exact la ce ma refer. Cu o precizare: ambele exemple presupun overloading pentru operator+ Posted Image

Am lucrat destul intr-un limbaj care nu suporta nici o forma de overloading - C - si am vazut tot soiul de uratenii, unele pe care nu ai cum sa le ocolesti. Acelasi exemplu simplu ar fi mult mai urat - si da, va trebui sa tii cont "manual" de separatorul nativ al platformei, ceea ce in std::filesystem e automat. Mi-e si sila sa scriu codul.

View PostMosotti, on 27 aprilie 2019 - 11:07, said:

Si daca codul mai ii si de genul

auto a = b / c;

l-ai spart.
As lua mediocrul care-a scris o asemenea bazaconie intr-o sala si i-as explica, asa, cu binisorul, cum sta situatia.
Stii care-i problema cu exemplul tau? Nu operator/, ci numele de variabile.
auto settingsFilePath = configPath / settingsFileName;

nu te duce cu gandul la impartire. Desi e unul din exemplele in care e discutabila folosirea lui auto.

Edited by MarianG, 27 April 2019 - 15:04.
daca nu merita, ne abtinem


#59
parabellum

parabellum

    Senior Member

  • Grup: Senior Members
  • Posts: 2,453
  • Înscris: 06.01.2010
Nu stiu ce rost are toata discutia asta. Cand au fost concepute limbajele (sau cand au fost modificate/imbunatatite) s-au gandit la subiect oameni probabil mult mai priceputi decat noi.

Wikipedia are chiar un tabel cu limbaje pe tema asta https://en.wikipedia...tor_overloading Java e unul dintre limbajele care au ales sa nu aiba operator overloading si cat pe ce nu aiba method overloading (v-ar fi placut?), folosind exact aceeasi logica. Bine, daca duci logica la limita, limbajul care iti interzice sa faci orice e perfect, pentru ca programul care nu face nimic nu contine nici o eroare.

Din lista aia, la unele care nu au, se poate argumenta ca nu e asa de mare nevoie de operator overloading. Multe sunt fie niste limbaje simpliste si jenibile la ora actuala (BASIC? Posted Image ), altele, cum ar fi ObjectiveC, lucreaza foarte bine impreuna cu C++ (si C). Personal am folosit ObjectiveC doar la partea cu UIul si folosirea SDKului, in rest a fost C si C++. Asa ca n-am simtit limitarile.

Fortran, MATLAB, C++, ca sa numesc cateva, au operator overloading. Asta sugereaza ca daca lucrezi la un program care contine in specificatii mai mult decat blablaologie, deja e un lucru util sa ai operator overloading. Ada, pomenit pe acolo, e inca folosit substantial in avionica. Fortran e inca rege in calcule matematice. https://wordsandbutt...ll_a_thing.html Multi care scriu in limbaje hyped de fapt fac o gramada din treaba prin apeluri in biblioteci implementate in fortran. MATLAB e folosit o gramada in stiinta si inginerie. C++ e C++. In Mathematica (limbajul e Wolfram) care nu-i pomenita pe-acolo, se pot implementa chiar operatori care n-au semnificatie 'by default': https://reference.wo...InMeanings.html

Edited by parabellum, 27 April 2019 - 12:04.


#60
adamsd

adamsd

    Member

  • Grup: Members
  • Posts: 611
  • Înscris: 16.04.2019

View PostTS030, on 24 aprilie 2019 - 09:00, said:

Exceptii "la nivel de compilator", cum ai implementa asa ceva?  
Eh, daca ai avea cunostinte de baza despre cum functioneaza un compilator, nu ai mai intreba asta.

View PostTS030, on 24 aprilie 2019 - 09:00, said:

Nu are nici un sens. Nu stiu nici un limbaj care sa procedeze astfel. Ori ofera operator overloading, ori nu.
Pai normal ca nu stii. Programatorii stiu. E de notorietate faptul ca mai multe limbaje de larga raspandire ce nu suporta op. overloading (intre care si java si javascript) au + supraincarcat pentru concatenare de stringuri pe langa functia matematica de adunare. Apoi ai alti operatori sau simboluri cum ar fi (), []. {} care au semnificatii diferite in functie de context.

View Postdani.user, on 27 aprilie 2019 - 09:57, said:

Cu ce-i atat de diferit:
String settingsFilePath = configPath + "/" + settingsFileName


De
Path settingsFilePath = configPath / settingsFileName

?
Pai e. in prima varianta ai variabila + "string" + variabila

Ce poate fi aia altceva decat concatenare de stringuri? Intr-o lume normala la cap ma refer, ca in c++ cine stie... sunt destule limbaje in care + e folosit pt. concatenare de stringuri

In cate limbaje ai vazut tu / utilizat pentru concatenare? Aia pentru majoritatea programatorilor va duce a impartire. Si esti foarte optimist cu denumirea variabilelor.

Intr-un limbaj OOP eu zic ca solutia potrivita ar fi o clasa Path care sa contina diverse elemente ce formeaza o cale: root, separator, directoare, fisier(poate si symbolic link) plus o varietate de operatiuni care pot face(inclusiv concatenare) sau iti pot arata diverse chestii,

#61
Mosotti

Mosotti

    Geniu umil

  • Grup: Senior Members
  • Posts: 33,295
  • Înscris: 21.04.2004

View PostTS030, on 27 aprilie 2019 - 11:12, said:

As lua mediocrul care-a scris o asemenea bazaconie intr-o sala si i-as explica, asa, cu binisorul, cum sta situatia.
Stii care-i problema cu exemplul tau? Nu operator/, ci numele de variabile.
auto settingsFilePath = configPath / settingsFileName;

nu te duce cu gandul la impartire. Desi e unul din exemplele in care e discutabila folosirea lui auto.

Ai lua pe dracu lacu daca codul a fost scris acum 5-7-10 ani. Sau daca codul a fost scris de cineva caruia nu i-a pasat de chestiile astea, de exemplu cod open source facut de o singura persoana, care a facut  ce a avut chef. Elitismul asta retardat pe care-l afisezi nu are nici o legatura cu lumea reala. Programarea nu exista doar in conditii ideale. Este de notorietate folosirea numelor de variable prescurtate la extrem, mai ales in limbaje de genul C / C++, gen "strrchr" sau "crbegin", chestii extrem de sugestive, nici nu trebuie sa cauti ce ar putea sa insemne. Poti multumi limbajelor de genul Java ca au venit cu ideea fabuloasa de a folosi limbaj natural Posted Image

Faptul ca se pare ca tu nu ai maturitatea si experienta de a fi avut de a face cu proiecte la care au lucrat sute de oameni, proiecte care au trecut prin tot felul de crize, nu inseamna ca nu exista sau ca nu vor exista in continuare. Oricum e bine ca tu ai de-a face doar cu cod superb, scris de programatori supercompetenti, care nu au nici un fel de probleme in lumea reala si sint complet si absolut focusati pe frumusetea codului. Sa hi sanatos in bula ta ireala Posted Image

#62
parabellum

parabellum

    Senior Member

  • Grup: Senior Members
  • Posts: 2,453
  • Înscris: 06.01.2010

Quote

Ai lua pe dracu lacu daca codul a fost scris acum 5-7-10 ani
Constructia aia face parte din C++ 17. Despre ce vorbesti tu aici? Cine a folosit C++ 17 acum 10 ani?

Si stai linisit, nu java a inventat apa calda. Cat despre 'language verbosity' nu e neaparat un lucru bun. Chiar este criticat la java (si nu numai). Poti ajunge sa nu mai vezi padurea de copaci.

#63
MarianG

MarianG

    be that as it may

  • Grup: Moderators
  • Posts: 31,453
  • Înscris: 10.08.2005

View Postparabellum, on 27 aprilie 2019 - 13:22, said:

Constructia aia face parte din C++ 17. Despre ce vorbesti tu aici? Cine a folosit C++ 17 acum 10 ani?

Si stai linisit, nu java a inventat apa calda. Cat despre 'language verbosity' nu e neaparat un lucru bun. Chiar este criticat la java (si nu numai). Poti ajunge sa nu mai vezi padurea de copaci.
nu e C++ 11 ?

#64
parabellum

parabellum

    Senior Member

  • Grup: Senior Members
  • Posts: 2,453
  • Înscris: 06.01.2010
Trebuie sa prinzi tot contextul discutiei. Era vorba de asta: https://en.cpprefere...filesystem/path

#65
DemocracySucks

DemocracySucks

    Junior Member

  • Grup: Members
  • Posts: 227
  • Înscris: 06.04.2019

View Postparabellum, on 27 aprilie 2019 - 15:01, said:

Trebuie sa prinzi tot contextul discutiei. Era vorba de asta: https://en.cpprefere...filesystem/path
Exact unde anume vezi tu mai sus "aia"? Ca nu rezulta de absolut nicaieri! Citeaza postul, sa vedem!

#66
TS030

TS030

    Guru Member

  • Grup: Senior Members
  • Posts: 15,193
  • Înscris: 25.06.2012

View PostDemocracySucks, on 27 aprilie 2019 - 15:10, said:

Exact unde anume vezi tu mai sus "aia"? Ca nu rezulta de absolut nicaieri! Citeaza postul, sa vedem!
Rezulta din discutia despre cai si operator/ ;)
Dar ai dreptate, n-ar fi trebuit sa presupunem ca ceilalti stiu despre C++17, ci sa fi precizat explicit.

#67
DemocracySucks

DemocracySucks

    Junior Member

  • Grup: Members
  • Posts: 227
  • Înscris: 06.04.2019

View PostTS030, on 27 aprilie 2019 - 15:36, said:

Rezulta din discutia despre cai si operator/ Posted Image
Dar ai dreptate, n-ar fi trebuit sa presupunem ca ceilalti stiu despre C++17, ci sa fi precizat explicit.
Nu rezulta absolut deloc. Constructii de tipul auto a = b / c; exista din 11.

#68
TS030

TS030

    Guru Member

  • Grup: Senior Members
  • Posts: 15,193
  • Înscris: 25.06.2012
Chiar trebuie sa ne certam pe chestia asta? Citeste posturi din urma, se pornise de la compunerea cailor de fisiere. Iar ideea era ca acea constructie ar putea fi confundata cu o expresie matematica, fara a fi asta.
Si chiar daca n-ar reiesi din context, am clarificat acum - nu e asta cel mai important?

Edited by TS030, 27 April 2019 - 15:57.


#69
OriginalCopy

OriginalCopy

    I'm harmful, fear me please! :))

  • Grup: Senior Members
  • Posts: 27,268
  • Înscris: 10.08.2006

View PostTS030, on 27 aprilie 2019 - 11:12, said:

Of, copiii astia... whatever, nu merita.

OriginalCopy: vorbim de doua lucruri diferite, de aceea pare ca nu ne-ntelegem Posted Image
Exemplele tale cu proiecte de tip 1 si de tip 2 pun aceleasi probleme, indiferent de cum ai concatena caile respective - corect? Eu nu spun sa concatenezi folosind operator/ in locul folosirii unui dictionar.
Daca te uiti doar la un copac, da, e aceeasi problema, dar daca privesti padurea in ansamblul sau, nu.

Eu vorbesc despre compromisuri si unde tragi linie, vorbesc despre factori umani, de managementul unei echipe (am zis "daca asta te face sa vii zambind la munca"), lucruri d-astea interdisciplinare, si rolul sau nerolul lui operator/ intr-un proiect.

Vorbesc integrativ.

Faptul ca plantezi intr-un cod "path1 / path2" e un detaliu de nivel incepator, dar cand si cum alegi sa folosesti sau sa nu folosesti acest syntactic sugar e o decizie mai complexa ce tine de alti factori.

Tipurile de proiecte 1 si 2 sunt diferite w.r.t. paths, deciziile pe care le iei ar fi bine sa fie diferite. Ca una e sa vrei sa schimbi temporar o cale intr-un singur loc din cod, alta e sa trebuiasca sa o faci consecvent in tot proiectul. Si "consecvent" e dificil intr-un proiect in care ai path1 / path2 de mii de ori rasfirat prin tot codul. Chiar daca suna usor, tipul asta de situatii este cel care creeaza buguri  bugurile mari nu se intampla aproape niciodata cand dezvolti initial, ci cand trebuie sa faci ulterior schimbari.


Per total nu inteleg ce vrei sa spui, pentru ca nu stii sa discuti. Spui doar "nu" la ce nu iti convine, dar nu articulezi clar lucrurile cu care esti de acord. Cand vorbesti cu cineva, decent e sa stabilesti si lucrurile comune sau macar compatibile.

A, si nu mi-ai raspuns la intrebare.

Edited by OriginalCopy, 27 April 2019 - 17:30.


#70
DemocracySucks

DemocracySucks

    Junior Member

  • Grup: Members
  • Posts: 227
  • Înscris: 06.04.2019

View PostTS030, on 27 aprilie 2019 - 15:50, said:

Citeste posturi din urma, se pornise de la compunerea cailor de fisiere. Iar ideea era ca acea constructie ar putea fi confundata cu o expresie matematica, fara a fi asta.
Si chiar daca n-ar reiesi din context, am clarificat acum - nu e asta cel mai important?
Se pornise, dar nu a pomenit nimeni de c++17 sau de vreo facilitate de acolo. Nu ca ar avea teribila relevanta.

Da, evident ca se confunda cu operatia de impartire. La fel cum se confunda multe altele in c++, avand codul cel mai ilizibil dintre limbajele majore. De aia nu-l mai foloseste nimeni decat unde e neaparata nevoie (low latency, grafica performanta, embedded & co.)

Edited by DemocracySucks, 27 April 2019 - 18:36.


#71
parabellum

parabellum

    Senior Member

  • Grup: Senior Members
  • Posts: 2,453
  • Înscris: 06.01.2010

Quote

La fel cum se confunda multe altele in c++, avand codul cel mai ilizibil dintre limbajele majore. De aia nu-l mai foloseste nimeni decat unde e neaparata nevoie
Cel mai ilizibil, pentru cei care nu cunosc limbajul.
Tiobe arata ca e destul de folosit: https://www.tiobe.com/tiobe-index/
Poate e neaparata nevoie in locurile alea.
Pe undeva am pus corespondenta C++ - python cand se folosesc librarii in stilul python (exemplul era pe OpenCV acolo). Ilizibilitatea aia nu era deloc evidenta. Dimpotriva, C++ e mai lizibil din cauza tipurilor.

Sa nu mai vorbim ca se aplica considerentele discutate la link-ul pe care l-am pus mai sus (Fortran is still a thing).

#72
dani.user

dani.user

    Guru Member

  • Grup: Senior Members
  • Posts: 30,243
  • Înscris: 24.02.2007

View Postdani.user, on 20 aprilie 2019 - 11:27, said:

Un caz unde mi se pare interesanta abordarea: concatenarea cailor spre fisiere in biblioteca standard a C++17 https://en.cpprefere.../operator_slash


Anunturi

Bun venit pe Forumul Softpedia!

0 user(s) are reading this topic

0 members, 0 guests, 0 anonymous users

Forumul Softpedia foloseste "cookies" pentru a imbunatati experienta utilizatorilor Accept
Pentru detalii si optiuni legate de cookies si datele personale, consultati Politica de utilizare cookies si Politica de confidentialitate