Jump to content

SUBIECTE NOI
« 1 / 5 »
RSS
teava rezistenta panou apa calda

Acces in Curte din Drum National

Sub mobila de bucatarie si sub fr...

Rezultat RMN
 Numar circuite IPAT si prindere t...

Pareri brgimportchina.ro - teapa ...

Lucruri inaintea vremurilor lor

Discuții despre TVR Sport HD
 Cost abonament clinica privata

Tremura toata, dar nu de la ro...

Renault Android

Recomandare bicicleta e-bike 20&#...
 Bing-Content removal tool

Nu pot accesa monitorulsv.ro de l...

Cum sa elimini urmele de acnee?

Wc Geberit
 

Cati programatori stiu sa programeze?

- - - - -
  • Please log in to reply
77 replies to this topic

#37
OriginalCopy

OriginalCopy

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

  • Grup: Senior Members
  • Posts: 27,268
  • Înscris: 10.08.2006
! nu afecteaza miliardele de operatii pe care orice smartphone le poate face intr-o secunda. Nu va mai copilariti cu microoptimizari d-astea.

Locurile din cod in care ! sau ne-! conteaza sunt izolate si impachetate in metode, izolate in arhitectura in intregimea sa.

n <= 0 are cu siguranta o semnificatie mai adanca, deci trebuie pus intr-o metoda, si acea metoda reutilizata.

View Postdani.user, on 03 iulie 2018 - 22:47, said:

Pana la urma, din atatea moduri de a scrie if castiga ... pattern maching.
E misto cand compilatorul nu te lasa sa uiti una dintre variante, mai ales daca ai conditii pe o enum, si mai tarziu adaugi o noua valoare la enum ;)

Presupun ca afirmatia vine dupa ce ai citit din rust: ai nevoie de disciplina ca sa nu folosesti _ => in mod abuziv, daca vrei sa profiti de pattern matching. In C++, chiar daca pattern matching e posibil, codul tot compileaza.

#38
karax

karax

    Guru Member

  • Grup: Senior Members
  • Posts: 21,839
  • Înscris: 14.10.2017
Pe sistemul pattern matching atunci ar putea sa iti spuna compilatorul tau daca ai facut cod eficient sau nu, daca are acces la o baza de date cu coduri pe care sunt puse n programe. Pur si simplu ruleaza un program si calculeaza timpul de raspuns pentru fiecare sectiune in parte a codului, apoi compara cu timpii altor softuri

Si tot pe sistemul asta , conectezi compilatorul la stackflow sau superuser si iti  da automat n variante de cod pentru fiecare bucata scrisa....Daca ai si ceva gen AI atunci ai rezolvat si problema Ai-ului care sa scrie singur cod. Avand o baza de date uriasa de coduri organizate pe specializari si pe categorii.

Et voila , practic tocmai ce am inlocuit programatorii..

#39
karax

karax

    Guru Member

  • Grup: Senior Members
  • Posts: 21,839
  • Înscris: 14.10.2017
Chestia e ca trebuie sa aplici machine learning la AI-ul ala. Adica pe sistemul daca la x,y,z codul se foloseste asa la a,b,c cum se va folosi? Si in felul asta separa ceea ce este user imput de ceea ce este structura , ca la schelele de la santierul de lucru, pe care se construieste un program. Si invata unde sa aplice fiecare structura ,schela. Pe modelul unor site cum ar veni care separa ce e rau de ce bun.

Dar asta e nitel OFF ...sa teminam cu asta...

#40
UlrichVans

UlrichVans

    Active Member

  • Grup: Members
  • Posts: 1,091
  • Înscris: 28.06.2018

View PostStefanSC, on 03 iulie 2018 - 22:26, said:

Nu prea. Astia ne-autodidacti (daca prin asta  intelegem cu studii formale) au habar de un minim de coding standard.
De unde sa stie cand majoritatea profesorilor nu stiu nici pentru ei? Si nu cred ca a ajuns chestia asta materie de studiu la facultate(doar daca ai noroc de un profesor mai bune sa te indrepte in sensul asta). In plus bunele practici si /standardele/recomandarile cu privire la stil tind sa cam varieze de la limbaj la limbaj, si uneori depind si de biblioteci/framework/platforma.

Ca sa ai habar de asa ceva, pornesti cu ceva standarde/recomandari oficiale(daca exista) si termini cu ceva carti gen code complete - pe care nu cred ca le-am vazut in bibliografii de facultati. Adica tot autodidact trebuie sa fii.

#41
karax

karax

    Guru Member

  • Grup: Senior Members
  • Posts: 21,839
  • Înscris: 14.10.2017
Da dar examenele si mai apoi angajarea la firma se fac pe programa oficiala aia de la scoala.....acuma ca tu spui pe forum ceva si altcineva tot de pe forum zice altceva pai pe cine sa mai crezi? Pai daca te iei dupa sfaturi de pe net te duci la angajare la locul de munca si faci ce ai invatat de pe forum si te pomenesti ca trebuia fix invers. Eu de multe ori nu stiu pe cine sa mai cred pe forum. Tocmai de aia poate cea mai buna metoda de a vedea ce mesaj e corect si ce nu e sa vezi cate persoane au dat like si sunt de aocrd pentr ca mergem pe principiul acolo unde mai multi ochi au vazut acelasi lucru asa inseamna ca este.

#42
WinstonMontana

WinstonMontana

    Active Member

  • Grup: Members
  • Posts: 1,913
  • Înscris: 20.02.2018

View Postkarax, on 04 iulie 2018 - 07:21, said:

Poate sunt  situatii de nested if statements in care
Ai mai mult de 3 nivele de  if-uri refactorieaza toata logica ,doarece codul nu este bun.

#43
WinstonMontana

WinstonMontana

    Active Member

  • Grup: Members
  • Posts: 1,913
  • Înscris: 20.02.2018

View PostOriginalCopy, on 04 iulie 2018 - 07:09, said:

Nu e absolut deloc OK.

!(a && Posted Image ar trebui impachetat intr-o metoda privata, numita cum trebuie, si folosita in if(), iar codul mutat din else in if.
Atunci cand am mii de linii de cod , nu exista motiv sa impachetez  a && b intr-o metoda privata, duce la boiler-plate cod, adauga linii inutile si face si risipa de timp.

De multe ori, daca ai cod in productie , de care depind alte programe, si tu trebuie sa updatezi o sectiune de cod facuta fie acum cativa ani sau chiar de alt coleg,
tu trebuie sa citesti  sectiunea respectiva de cod repede si bine. De aceea codul trebuie scris ca efectiv  "sa-ti sara in ochi ", doarece patchul trebuie elaborat si implementat
in cateva ore maxim, pt a fi pus in productie ASAP.

De aceea la o  scriere de genul
if(!(afirmatie)) {}

acel (!) poate trece neobservat foarte usor. Nici implementarea cu metoda privata nu ma ajuta pentru ca trebuie sa  fac salturi intr-un cod de mii de linii, apoi sa revin  inapoi si tot asa.

pe cand o sciere de genul :
if (afirmatie) {
	/*JUMP*/
}else {
   .......
}

intr-un cod de mii de linii pentru care trebuie sa faci patch , testare si deployment in cateva ore , sare imediat in ochi.
Una este sa cauti albina in lanul de floarea soarelui si alta este cauti ditamai camionul.

#44
OriginalCopy

OriginalCopy

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

  • Grup: Senior Members
  • Posts: 27,268
  • Înscris: 10.08.2006
Iar nu vii cu afirmatii de programator serios.

In primul rand, sunt de acord cu evitarea negatiei - acolo unde ea are sens.

In al doilea rand, in majoritatea cazurilor, conditii de forma !(a && B) ascund in spate o poveste, o regula de business, ceva.

Indiferent de cum exprimi acea formula, intentia sa, valoarea sa semantica, e aceeasi.

De aceea cel mai bine e sa pui acea decizie (!(a && B)) in spatele unei metode. Doar asa in treacat, inlining functioneaza extraordinar de bine in mai toate compilatoarele si limbajele.


De exemplu, sa luam afirmatia n <= 0; ar putea insemna "daca nu sunt produse in depozit". Afirmatia insasi e o negatie, corect? Corect.

Astfel de afirmatii pot fi usor facute pozitive: "daca depozitul este gol".

if(this->empty()) {
 //else-code moved here
}

E un cod mult mai usor de citit, citesti practic povestea din spatele codului, fara sa fii fortat sa parsezi vizual tot felul de alambicari gen && sau alte lucruri.

Ba mai mult, un astfel de cod iti permite sa schimbi regulile de business intr-un loc central, consistent. Poate de exemplu adaugi un model de forecasting care trebuie luat in calcul. Nu te apuci sa ghicesti pe unde prin cod aveai decizia aia (si sigur vei uita unde se facea acea verificare), ci modifici doar metoda empty e "Warehouse" si pac, modificare consistenta in tot proiectul.


Nu am spus niciodata ca nu sunt de acord cu faptul ca negarea nu face codul dificil de parsat, am spus:

View PostOriginalCopy, on 04 iulie 2018 - 07:09, said:

Nu e absolut deloc OK.
!(a && b ) ar trebui impachetat intr-o metoda privata, numita cum trebuie, si folosita in if(), iar codul mutat din else in if.

Da, il ai pe ! in acel one-liner:

bool empty() {
  return !(a && B);
}


e adevarat ca acel ! poate fi usor trecut cu vederea, dar aia se intampla cand e prea mult alambicat codul, cand e mult de tinut minte. Dar cand ai antetul metodei cu nume foarte clar ("empty"), cand toata metoda are 3 linii cu tot cu acolade, cand presiunea cognitiva e extrem de redusa, e foarte usor de parsat vizual codul de catre programator, de inteles, de adaptat.

Ai putin de presiune congnitiva concentrata intr-o linie de cod, dar ai redus presiunea cognitiva peste tot in restul codului.

Ba mai mult, o metoda separata ofera oportunitatea de a reconcilia vocabularul de business cu cel tehnic. Vezi despre ubiquitous language.

#45
WinstonMontana

WinstonMontana

    Active Member

  • Grup: Members
  • Posts: 1,913
  • Înscris: 20.02.2018

Quote

De exemplu, sa luam afirmatia n <= 0; ar putea insemna "daca nu sunt produse in depozit". Afirmatia insasi e o negatie, corect? Corect.
Nu, nu este corect.
Afirmatia n<=0  inseamna ca o valoare este negativa sau egala cu zero atata tot.

Quote

ar putea insemna "daca nu sunt produse in depozit".
Nu, urmatoarea afirmatie poate insemna acest lucru:
if (existaProduseInDepozit) {
........
} else {
.......
}


Quote

"daca nu sunt produse in depozit".
Una din cele mai mari greseli care se pot face este fie sa analizezi sau (sa fii obligat sa analizezi)  negatii pe ramura IF.
De aici se pot trage o serie de concluzlie gresite  mai ales intre developeri si business care duc la confuzii, confuzii care se regasesc in cod.

Intotdeauna managerii de business cauta  sa gaseasca ceva(adica afirmatie) si nu ( sa nu gasesca ceva) adica negatie.

Caut daca produsul este in stoc (adica afirmatie) si nu "caut daca produsul nu este stoc" =>dpdv al business nu are nici o logica sa cauti ceva ce nu ar exista ci are logica sa cauti
ceva ce ar exista, Intotdeauna use-case-urile de business se fac pe afirmatii si nu pe negatii, iar in codul joburile acest lucru trebuie sa se reflecte vadit.

Edited by WinstonMontana, 04 July 2018 - 12:56.


#46
OriginalCopy

OriginalCopy

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

  • Grup: Senior Members
  • Posts: 27,268
  • Înscris: 10.08.2006
Esti pedant si intri in discutii contradictorii de amorul discutiei, vorbind despre forma, nu despre fondul celor expuse de mine.

Toate adjectivele au un antonim. Daca un adjectiv e negativ, il inversezi si aia e.

View PostShinji, on 03 iulie 2018 - 20:48, said:

Exemplu de azi:
if (a && b )
{
}
else
{
   *do stuff here*
}

Ai dreptate in ce zici. Posteaza mai elaborat despre ce fel de decizie e luata acolo si numele concrete ale variabilelor, si daca sunt membri ai clasei, parametri ai metodei, sau variabile locale.

#47
WinstonMontana

WinstonMontana

    Active Member

  • Grup: Members
  • Posts: 1,913
  • Înscris: 20.02.2018
Intre business si  programele care executa cerintele de business trebuie sa existe sinergie. Acesta este cel mai important criteriul si trebuie sa fie
respectat. Cerintele de business trebuie sa se regaseasca exact cum au fost formulate si in joburile pe care le executa.
Abaterea de la aceasta conformitate , intr-un ecosistem de business complicat, pot genera surse de confuzii si probleme => genereaza timp pierdut pt explicarea acestor probleme=>
timp pierdut inutil => pierdere de bani.

Edited by WinstonMontana, 04 July 2018 - 13:04.


#48
OriginalCopy

OriginalCopy

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

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

View PostWinstonMontana, on 04 iulie 2018 - 13:02, said:

Intre business si  programele care executa cerintele de business trebuie sa existe sinergie. Acesta este cel mai important criteriul si trebuie sa fie
respectat. Cerintele de business trebuie sa se regaseasca exact cum au fost formulate si in joburile pe care le executa.
Abaterea de la aceasta conformitate , intr-un ecosistem de business complicat, pot genera surse de confuzii si probleme => genereaza timp pierdut pt explicarea acestor probleme=>
timp pierdut inutil => pierdere de bani.
Sunt de acord. Nu am sustinut ceva contradictoriu.

#49
OriginalCopy

OriginalCopy

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

  • Grup: Senior Members
  • Posts: 27,268
  • Înscris: 10.08.2006
[ https://www.youtube-nocookie.com/embed/4F72VULWFvc?feature=oembed - Pentru incarcare in pagina (embed) Click aici ]

Am mai recomandat in trecut aceasta prezentatie.

Cazurile in care if-urile sunt if-uri, tot if-uri raman, dar daca aplici ce se spune in prezentatie, ar trebui sa te alegi cu cod fara if-uri de business, deciziile rezultand "automat" din polimorfism. In cazul nostru particular ar fi doua clase, EmptyWarehouse (ca null object) si WarehouseWithProducts. if-ul e practic eliminat din acel loc din cod.

#50
Shinji

Shinji

    Member

  • Grup: Members
  • Posts: 386
  • Înscris: 04.04.2005

View PostOriginalCopy, on 04 iulie 2018 - 12:57, said:

Posteaza mai elaborat despre ce fel de decizie e luata acolo si numele concrete ale variabilelor, si daca sunt membri ai clasei, parametri ai metodei, sau variabile locale.
You're gonna laugh when you see it... N-are legatura cu discutiile complicate de aici e pur si simplu cod stupid.

bool AppNameChangedForObviousReasons::eventFilter(QObject* obj, QEvent* event)
{
	if (event->type() == QEvent::KeyPress)
	{
		QKeyEvent* key = static_cast<QKeyEvent*>(event);

		if ((key->key() == Qt::Key_Enter) || (key->key() == Qt::Key_Return))
		{
			//Enter or return was pressed
		}
		else
		{
			return QObject::eventFilter(obj, event);
		}
		return true;
	}
	else
	{
		return QObject::eventFilter(obj, event);
	}
	return false;
}


Si asta a fost sugestia mea de refactorizare a codului:
bool AppNameChangedForObviousReasons::eventFilter(QObject* obj, QEvent* event)
{
	if (event->type() == QEvent::KeyPress)
	{
		QKeyEvent* key = static_cast<QKeyEvent*>(event);

		if ((key->key() == Qt::Key_Enter) || (key->key() == Qt::Key_Return))
		{
			return true;
		}
	}

	return QObject::eventFilter(obj, event);
}



#51
WinstonMontana

WinstonMontana

    Active Member

  • Grup: Members
  • Posts: 1,913
  • Înscris: 20.02.2018
bool AppNameChangedForObviousReasons::eventFilter(QObject* obj, QEvent* event) {
bool chestie = false;

if (event->type() == QEvent::KeyPress) {
	 QKeyEvent* key = static_cast<QKeyEvent*>(event);
chestie = (key->key() == Qt::Key_Enter) || (key->key() == Qt::Key_Return);
}
return chestie;
}

fara dublu (sau multiplu) return
O functie (in orice limbaj) are N intrari si o singura iesire.
O procedura poate avea N intrari si M iesiri( doar ca in C/C++ nu exista, dar exista in alte limbaje)

Care este diferenta (in acest framework) intre Key_Enter si Key_Return ? Nu sunt  asemenea ? Daca da atunci de ce am acel sau logic ?

Edited by MarianG, 04 July 2018 - 15:04.
quote inutil


#52
MarianG

MarianG

    be that as it may

  • Grup: Moderators
  • Posts: 31,383
  • Înscris: 10.08.2005
daca tot vorbiti de "pattern matching", cati dintre voi nu sunteti deranjati de Posted Image (zambicili) ?
 if (b && a) 

Edited by MarianG, 04 July 2018 - 15:04.


#53
alx42

alx42

    Senior Member

  • Grup: Senior Members
  • Posts: 2,802
  • Înscris: 26.06.2014
pe mine ma enerveaza disperatii aia care tin sa formateze codului dupa niste standarde imbecile.
de exemplu acolada singura pe linie noua, sau acolade pentru o singura declaratie, si 4 spatii indentare:
if(plm)
{
	return QObject::eventFilter(obj, event);
}


in loc de

if(plm)
  return QObject::eventFilter(obj, event);


si invoca ratiuni de lizibilitate sau consistenta.
adica umfli codul cu 30% mai multe linii inutile ca sa menajezi niste orbeti.

Edited by alx42, 04 July 2018 - 15:24.


#54
StefanSC

StefanSC

    Senior Member

  • Grup: Senior Members
  • Posts: 4,728
  • Înscris: 02.07.2011
@winstonmontana:
Care e diferenta intre o functie si o procedura?

De asemenea, vezi ca pe tastatura ai tasta (Carriage) Return si tasta Enter ;). Doua gaste in doua traiste separate.

@Shinji
Sper ca realizezi ca refactorizarea ta (a unui exemplu oferit de QTFoundation) schimba comportamentul codului si il face mai nesigur...

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