Chirurgia endoscopică a hipofizei
"Standardul de aur" în chirurgia hipofizară îl reprezintă endoscopia transnazală transsfenoidală. Echipa NeuroHope este antrenată în unul din cele mai mari centre de chirurgie a hipofizei din Europa, Spitalul Foch din Paris, centrul în care a fost introdus pentru prima dată endoscopul în chirurgia transnazală a hipofizei, de către neurochirurgul francez Guiot. Pe lângă tumorile cu origine hipofizară, prin tehnicile endoscopice transnazale pot fi abordate numeroase alte patologii neurochirurgicale. www.neurohope.ro |
Operator overloading – da sau ba?
Last Updated: Apr 29 2019 08:12, Started by
dani.user
, Apr 20 2019 11:27
·
0
#19
Posted 22 April 2019 - 12:34
adamsd, on 22 aprilie 2019 - 08:41, said:
Trebuie sa devii mai intai programator experimentat pentru a intelege ce spun. Din ala real, angajat intr-o firma si responsabil de rezultatele unei echipe. Pana atunci, poti sa asisti de pe langa, emitand tot felul de opinii gresite. Ca fapt divers, subiectul acestui thread este Operator overloading, nu "De ce Java e cel mai bun limbaj". Iar operator overloading poate fi considerat syntactic sugar... deci despre ce vorbim noi aici? Argumentul pe care-l ofer eu este ca operator overloading iti permite sa scrii cod mai logic, consistent, clar. Nu stiu de ce sari asa in sus... Java, evident, isi are locul sau - dat de multitudinea de framework-uri si librarii. Este un limbaj util? Este. Este un limbaj perfect? No way. C++, evident, isi are locul sau - dat de combinatia unica intre apropierea de hardware si mecanismele high-level de abstractizare. Google este unul din principalii actori din spatele C++ - membri ai comitetului de standardizare. Google foloseste o serie de limbaje, si chiar a dezvoltat propriul limbaj; cu toate acestea, C++ ramane esential pentru ei. Cauta-l pe Chandler Carruth, are cateva prezentari interesante. Ca sa folosim exemplul cu accesul verificat la elementele unui vector - pai, in majoritatea cazurilor nu ai nevoie de asa ceva. In majoritatea cazurilor nici nu ai nevoie sa accesezi un vector prin index. Exemplu acum clasic: for (auto&elem : vec) ...Nu-ti lasa nici o posibilitate de buffer overflow. La fel daca folosesti begin() si end(), un idiom clasic in C++, pe care se bazeaza multi algoritmi. Oare cum ar fi ca o simpla aplicare unui algoritm, fara posibilitatea de-a accesa elemente din afara containerului, sa implice o asemenea verificare - absolut inutila - pentru fiecare acces? Apropo, Java iti permite bine mersi sa-ti bagi picioarele in SOLID. Dar, nu despre asta este topicul. |
#20
Posted 22 April 2019 - 16:28
oameni buni, lasati-o naibi de consistenta, si fiti consecventi.
|
#21
Posted 22 April 2019 - 16:33
Muica, ce-o dadui pe engleza fara sa-mi dau seama
Da, consecvent mergea acolo... Edited by TS030, 22 April 2019 - 16:34. |
#22
Posted 23 April 2019 - 18:44
Un exemplu de operator overloading dintr-un cod de-al meu:
Untitled.png 10.8K 19 downloads Este inceputul unei metode, ea continand mai multe validari similare. La prima vedere, ce vi se pare ca face codul respectiv? |
#23
Posted 23 April 2019 - 19:21
Nu stiu sigur, dar pare sa faca niste verificari - daca e empty stringul, daca se incadreaza intre min si max ca lungime, daca are leading/trailing whitespace
ideea de baza insa e cu totul alta: operatorul in sine sugereaza in mod natural ceva? daca e ceva gen + si e adunare e ok.. daca in schimb e ceva arbitrar, oricat de clara e definitia implementarii, ai o problema masiva, sau mai bine zis, cei care vor folosi codul tau vor avea o problema masiva! Oamenii, in vasta majoritate a cazurilor, cel mai simplu comunica prin cuvinte, nu prin semne! Cand te apuci sa definesti semne ce depasesc cele cateva intelesuri intelese de majoritatea oamenilor(iar in cazul programatorilor, bonus, acele semne larg raspandite intelese de majoritatea programatorilor), vei ajunge sa ai cod greu de inteles de catre toata lumea (programatori sau nu) - si nu de putine ori inclusiv de catre autorii originali(peste ceva vreme - luni sau ani). |
#24
Posted 23 April 2019 - 19:45
De acord, daca redefinesti semnificatia operatorilor in chestii arbitrare, ai o problema masiva. De HR
Hai sa-ti dau un exemplu: o clasa oarecare care defineste a.equals(b) pentru a aduna a si b. Este exact aceeasi problema, doar ca functia se numeste equals si nu operator==. Ce facem, banam functiile? Pe de alta parte, in cazul in care urmezi conventii existente, cum e mai bine - sa ai sau sa nu ai aceasta optiune? result = (a.plus(b)).divides(c);vs result = (a+b)/c |
#25
Posted 23 April 2019 - 20:02
TS030, on 23 aprilie 2019 - 19:45, said:
De acord, daca redefinesti semnificatia operatorilor in chestii arbitrare, ai o problema masiva. De HR Cam toate firmele de o anumita importanta au reguli stricte cu privire la operator overloading, nu faci ce-ti zboara prin creieras. TS030, on 23 aprilie 2019 - 19:45, said:
Pe de alta parte, in cazul in care urmezi conventii existente, cum e mai bine - sa ai sau sa nu ai aceasta optiune? |
#26
Posted 23 April 2019 - 21:11
Nu trebuie sa ai nici o regula stricta; o asemenea bazaconie nu trece de review.
Ai fi surprins cat de bine te descurci fara un style guide stufos. Desigur, iti trebuie si echipa pe masura. Te mai las sa te gandesti daca merge chestia cu "exceptii la nivel de compilator". |
#27
Posted 23 April 2019 - 23:24
Quote
Pt. cazurile uzuale de tipuri (big decimal/big integer, numere complexe), se pot implementa exceptii la nivel de compilator Dar daca ai nevoie de vectori multi-dimensionali? Din punctul meu de vedere, matricile sunt un tip uzual, si cam in orice foarte multe tipuri de calcule ce au treaba cu ingineria si stiinta. Nu toate limbajele de programare exista pentru a face lucruri triviale. |
#28
Posted 24 April 2019 - 04:35
Right. Doar in C++ si doar cu operator overloading poti inmulti sau aduna doua matrici. Sa nu mai zic de vectori multidimensionali, se stie ca C++ e singurul limbaj care poate face asa ceva
|
|
#29
Posted 24 April 2019 - 07:09
Eu nu inteleg de ce o tot dati zor cu matematicile. Nimeni nu are nimic cu operator overloading atunci cand are sens dpv semantic.
|
#30
Posted 24 April 2019 - 09:00
Citind posturile precedente,
OriginalCopy, on 24 aprilie 2019 - 07:09, said:
Nimeni nu are nimic cu operator overloading atunci cand are sens dpv semantic. Chestia e ca si tipurile matematice, complex, matrici etc. nu sunt primitive ci user defined - deci un limbaj care nu ofera operator overloading te forteaza sa scrii result = (a.plus(b)).divides(c);Exceptii "la nivel de compilator", cum ai implementa asa ceva? Un hack urat care sa ocoleasca specificatiile core language-ului? "daca tipul este BigInteger atunci permiti +,-, etc"? Si nu doar trebuie sa determini caror tipuri sa aplici aceste "exceptii" - ceea ce inseamna zero sanse ca o librarie 3rd-party sa beneficieze de asa ceva - ci si ce fel de exceptii. Compararea de numere complexe, de exemplu, e problematica. Nu are nici un sens. Nu stiu nici un limbaj care sa procedeze astfel. Ori ofera operator overloading, ori nu. @Mosotti: Nu stii nimic. 1. operator overloading fata de function overloading e syntactic sugar, cum am mai zis 2. ia de citeste: https://en.wikipedia...loading#Catalog |
#31
Posted 24 April 2019 - 09:22
Quote
se stie ca C++ e singurul limbaj care poate face asa ceva Sigur ca pentru unii 'poate face' e un argument, indiferent daca 'putinta' aia implica un miliard de linii de cod in loc de una, sau un carnat lung si indescifrabil in loc de folosirea unor operatori direct transferabili din formula matematica. |
#32
Posted 24 April 2019 - 10:06
Totusi, pentru un limbaj de uz general eu am o pretentie: sa foloseasca doar caractere care sunt pe tastatura
|
#33
Posted 25 April 2019 - 07:46
TS030, on 24 aprilie 2019 - 09:00, said:
@Mosotti: Nu stii nimic. 1. operator overloading fata de function overloading e syntactic sugar, cum am mai zis 2. ia de citeste: https://en.wikipedia...loading#Catalog T &QList::operator[](int i) Well, great, foarte usor de folosit, dar sigur vrei sa-l folosesti? Pentru ca daca citesti in documentatie vezi ca: Quote
Returns the item at index position i as a modifiable reference. i must be a valid index position in the list (i.e., 0 <= i < size()). <- Asta e ceea ce te astepti sa se intimple cind folosesti [] If this function is called on a list that is currently being shared, it will trigger a copy of all elements. Otherwise, this function runs in constant time. If you do not want to modify the list you should use QList::at(). <- Asta e ceva complet particular pentru Qt Dar mai mult, QList are si operatorul const T &QList::operator[](int i) const Quote
This is an overloaded function. Same as at(). This function runs in constant time. Deci practic ai acelasi operator, care poate ori sa-ti returneze ceva ce crezi ca ar trebui sa returneze, ori cu totul altceva, al carui sens nu-l intelegi decit daca citesti despre containerele din Qt. Ma intreb citi si-au luat teapa (si nici macar nu si-au dat) seama folosind [], pentru ca e mai usor de scris decit at() |
|
#34
Posted 25 April 2019 - 08:23
Asta voiam si eu sa zic: operator overloading e ok daca e o functie pura: https://en.wikipedia...i/Pure_function si daca se pastreaza semantica din alte domenii, de exemplu din matematica.
Orice e mai mult de atat pune presiune cognitiva pe programator. Si aici nu vorbim despre tu-cel-mai-vechi-programator-din-echipa care a luat deciziile initiale si care stie si cele mai intunecate colturi ale proiectului, ci de orice nou-venit in echipa care scaneaza codul. Oricat de avansat as fi, cand citesc +, vad +, nu vad cai verzi pe pereti. Scopul lui sintactic sugar e sa usureze munca, nu sa o ingreuneze, nu sa introduca cai verzi pe pereti. Deci: operator overloading? depinde. Edited by OriginalCopy, 25 April 2019 - 08:18. |
#35
Posted 25 April 2019 - 09:09
OriginalCopy, on 25 aprilie 2019 - 08:23, said:
Asta voiam si eu sa zic: operator overloading e ok daca e o functie pura: https://en.wikipedia...i/Pure_function si daca se pastreaza semantica din alte domenii, de exemplu din matematica. OriginalCopy, on 25 aprilie 2019 - 08:23, said: Deci: operator overloading? depinde. Am vazut prea multe moduri de-a o da in bara pentru a crede in zana maseluta si in programatorul care scrie cod bun datorita lipsei unei anume facilitati. Operator overloading este util pentru cazurile in care poate fi, si este folosit corespunzator. |
#36
Posted 25 April 2019 - 16:19
parabellum, on 23 aprilie 2019 - 23:24, said:
Un vector 3D e un tip uzual pentru grafica 3d, de exemplu. Si pentru ca ai pomenit de numere complexe si eu de grafica, ce zici de cuaternioni? Dar de octonioni? Dar daca ai nevoie de vectori multi-dimensionali? Din punctul meu de vedere, matricile sunt un tip uzual, si cam in orice foarte multe tipuri de calcule ce au treaba cu ingineria si stiinta. parabellum, on 23 aprilie 2019 - 23:24, said:
Nu toate limbajele de programare exista pentru a face lucruri triviale. |
Anunturi
▶ 0 user(s) are reading this topic
0 members, 0 guests, 0 anonymous users