{"id":995,"date":"2015-04-13T21:17:05","date_gmt":"2015-04-13T18:17:05","guid":{"rendered":"http:\/\/facemsoft.ro\/?p=995"},"modified":"2020-08-17T18:19:55","modified_gmt":"2020-08-17T15:19:55","slug":"clean-code-episodul-4","status":"publish","type":"post","link":"https:\/\/facemsoft.ro\/en\/tutoriale-video\/clean-code\/clean-code-episodul-4\/","title":{"rendered":"Clean Code &#8211; Episodul 4"},"content":{"rendered":"<div data-elementor-type=\"wp-post\" data-elementor-id=\"995\" class=\"elementor elementor-995\">\n\t\t\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-ixbn448 elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"ixbn448\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-22djt79\" data-id=\"22djt79\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-2jxli34 elementor-widget elementor-widget-video\" data-id=\"2jxli34\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;show_image_overlay&quot;:&quot;yes&quot;,&quot;image_overlay&quot;:{&quot;url&quot;:&quot;https:\\\/\\\/facemsoft.ro\\\/wp-content\\\/uploads\\\/2015\\\/04\\\/CleanCode4.png&quot;,&quot;id&quot;:996,&quot;size&quot;:&quot;&quot;},&quot;lightbox&quot;:&quot;yes&quot;,&quot;youtube_url&quot;:&quot;https:\\\/\\\/www.youtube.com\\\/watch?v=nlaWfC3flSQ&quot;,&quot;video_type&quot;:&quot;youtube&quot;,&quot;controls&quot;:&quot;yes&quot;}\" data-widget_type=\"video.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-wrapper elementor-open-lightbox\">\n\t\t\t\t\t\t\t<div class=\"elementor-custom-embed-image-overlay\" data-elementor-open-lightbox=\"yes\" data-elementor-lightbox=\"{&quot;type&quot;:&quot;video&quot;,&quot;videoType&quot;:&quot;youtube&quot;,&quot;url&quot;:&quot;https:\\\/\\\/www.youtube.com\\\/embed\\\/nlaWfC3flSQ?feature=oembed&amp;start&amp;end&amp;wmode=opaque&amp;loop=0&amp;controls=1&amp;mute=0&amp;rel=0&amp;cc_load_policy=0&quot;,&quot;autoplay&quot;:&quot;&quot;,&quot;modalOptions&quot;:{&quot;id&quot;:&quot;elementor-lightbox-2jxli34&quot;,&quot;entranceAnimation&quot;:&quot;&quot;,&quot;entranceAnimation_tablet&quot;:&quot;&quot;,&quot;entranceAnimation_mobile&quot;:&quot;&quot;,&quot;videoAspectRatio&quot;:&quot;169&quot;}}\" data-e-action-hash=\"#elementor-action%3Aaction%3Dlightbox%26settings%3DeyJ0eXBlIjoidmlkZW8iLCJ2aWRlb1R5cGUiOiJ5b3V0dWJlIiwidXJsIjoiaHR0cHM6XC9cL3d3dy55b3V0dWJlLmNvbVwvZW1iZWRcL25sYVdmQzNmbFNRP2ZlYXR1cmU9b2VtYmVkJnN0YXJ0JmVuZCZ3bW9kZT1vcGFxdWUmbG9vcD0wJmNvbnRyb2xzPTEmbXV0ZT0wJnJlbD0wJmNjX2xvYWRfcG9saWN5PTAiLCJhdXRvcGxheSI6IiIsIm1vZGFsT3B0aW9ucyI6eyJpZCI6ImVsZW1lbnRvci1saWdodGJveC0yanhsaTM0IiwiZW50cmFuY2VBbmltYXRpb24iOiIiLCJlbnRyYW5jZUFuaW1hdGlvbl90YWJsZXQiOiIiLCJlbnRyYW5jZUFuaW1hdGlvbl9tb2JpbGUiOiIiLCJ2aWRlb0FzcGVjdFJhdGlvIjoiMTY5In19\">\n\t\t\t\t\t\t\t\t\t\t\t<img fetchpriority=\"high\" decoding=\"async\" width=\"755\" height=\"510\" src=\"https:\/\/i0.wp.com\/facemsoft.ro\/wp-content\/uploads\/2015\/04\/CleanCode4.png?fit=755%2C510&amp;ssl=1\" class=\"attachment-full size-full wp-image-996\" alt=\"Clean Code curs 4\" srcset=\"https:\/\/i0.wp.com\/facemsoft.ro\/wp-content\/uploads\/2015\/04\/CleanCode4.png?w=755&amp;ssl=1 755w, https:\/\/i0.wp.com\/facemsoft.ro\/wp-content\/uploads\/2015\/04\/CleanCode4.png?resize=300%2C203&amp;ssl=1 300w\" sizes=\"(max-width: 750px) 100vw, 750px\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<div class=\"elementor-custom-embed-play\" role=\"button\" aria-label=\"Play Video\" tabindex=\"0\" data-no-translation-aria-label=\"\">\n\t\t\t\t\t\t\t<i aria-hidden=\"true\" class=\"eicon-play\"><\/i>\t\t\t\t\t\t<\/div>\n\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-c2057d6 elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"c2057d6\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-b545932\" data-id=\"b545932\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-862418c elementor-widget elementor-widget-spacer\" data-id=\"862418c\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"spacer.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-spacer\">\n\t\t\t<div class=\"elementor-spacer-inner\"><\/div>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-a10e5da elementor-widget elementor-widget-heading\" data-id=\"a10e5da\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h3 class=\"elementor-heading-title elementor-size-default\">Transcriere<\/h3>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-30f6958 elementor-widget elementor-widget-text-editor\" data-id=\"30f6958\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<h3><span style=\"font-weight: 400;\">Legat de variabile: \u00een primul r\u00e2nd nu e indicat ca variabilele de tip string sau \u0219ir de caractere s\u0103 con\u021bin\u0103 cod din alt limbaj de programare. Gen, \u00eentr-un string din C# s\u0103 salvez cod SQL, \u00eentr-un string din Java s\u0103 salvez cod CSS sau JavaScript sau HTML. De ce? P\u0103i, \u00een primul r\u00e2nd nu am validare pe acel cod, eu pot s\u0103 scriu acolo verzi \u0219i uscate c\u0103 nu o s\u0103 valideze niciun mediu de dezvoltare codul scris \u00een interiorul acestei variabile de tip \u0219ir de caractere. Apoi, nu func\u021bioneaz\u0103 \u201eIntellisense-ul\u201d. Dac\u0103 a\u0219 alege de exemplu s\u0103 folosesc clase pentru a scrie cod SQL sau CSS o s\u0103 mearg\u0103 \u201eIntellisense-ul\u201d, pot da imediat \u201efind\u201d pe chestiile respective. \u0218i mai apoi e destul de greu de urm\u0103rit, adic\u0103 trebuie formatat foarte bine acel cod ca s\u0103 poate fi lizibil \u0219i m\u0103 trezesc c\u00e2nd folosesc solu\u021bia de versionare \u0219i fac commit sau checkin sau cum se nume\u0219te (o s\u0103 vorbim imediat \u0219i despre solu\u021bii de versionare) c\u0103 acel cod scris de mine ok se duce \u00een toate p\u0103r\u021bile \u0219i nu mai arat\u0103 deloc bine. Deci, ca \u0219i regul\u0103, nu e indicat s\u0103 scriu un alt limbaj \u00eentr-un string dintr-un anumit limbaj.<\/span><\/h3>\n<h3><span style=\"font-weight: 400;\">Apoi, variabilele booleane (logice) trebuie s\u0103 sune ca o \u00eentrebare la care se poate r\u0103spunde cu adev\u0103rat sau fals. De exemplu, am un fi\u0219ier, salvez \u00eentr-o variabil\u0103 boolean\u0103 dac\u0103 e deschis sau \u00eenchis. O s\u0103 pun numele valabilei isOpen, nu open. Adic\u0103 eDeschis? La asta sigur pot r\u0103spunde cu adev\u0103rat sau fals. Din nou, verbalizarea m\u0103 ajut\u0103 s\u0103 \u00eemi dau seama dac\u0103 e ok ceea ce fac. Apoi, c\u00e2nd exist\u0103 variabile complementare numele trebuie s\u0103 fie simetrice. De exemplu, aveam fi\u0219ierul \u0103sta, aveam o variabil\u0103 isOpen, poate mai vrea s\u0103 mai am o variabil\u0103 isClosed. Exact a\u0219a o s\u0103 \u00eei spun, isClosed. N-o s\u0103-i spun isDepricated, is nu \u0219tiu ce, notOpen e \u0219i \u0103sta ok, dar nu isUsedByAnotherUser sau ceva de genul \u0103sta. Nu, isOpen\/isClosed. Trebuie s\u0103 am o oarecare simetrie.&nbsp;<\/span><\/h3>\n<h3><span style=\"font-weight: 400;\">Am vorbit p\u00e2n\u0103 acum despre entit\u0103\u021bi de program, hai s\u0103 vorbim despre entit\u0103\u021bi de programare. \u00cen structurile condi\u021bionale, trebuie s\u0103 evit compara\u021biile cu true \u0219i false. Vede\u021bi aici chiar eu am f\u0103cut o gre\u0219eal\u0103, am spus raspunsCorect == true. raspunsCorect nu e o \u00eentrebare, poate mai ok ar fi fost esteRaspunsulCorect, la asta sigur r\u0103spundeam la \u00eentrebare cu adev\u0103rat sau fals. \u0218i nu am de ce s\u0103 fac chestia asta if (raspunsCorect == true), \u0219i chiar sun\u0103 ciudat c\u00e2nd verbalizez. Spun, dac\u0103 r\u0103spunsul corect este adev\u0103rat? Pot s\u0103 spun dac\u0103 am r\u0103spuns corect, e mai simplu. De ce r\u0103spunsul corect s\u0103 fie adev\u0103rat, dac\u0103 e corect? Ok. Apoi pot instan\u021bia variabile booleane direct. Vede\u021bi aici c\u0103 am scris 5 linii de cod ca s\u0103 instan\u021biez variabila asta r\u0103spunsCorect, c\u00e2nd puteam s\u0103 scriu boolean raspunsCorect = (punctaj != 0). \u0218i gata! Dac\u0103 era diferit de 0 \u00eemi punea true, dac\u0103 era 0 \u00eemi punea false.&nbsp;<\/span>Apoi, \u00eencerca\u021bi s\u0103 nu fi\u021bi negativi\u0219ti. Adic\u0103, pune\u021bi condi\u021biile pe true \u00een general, nu pe false. Adic\u0103 \u00eencerca\u021bi prima dat\u0103 s\u0103 g\u00e2ndi\u021bi problema afirmativ\u0103, nu partea negativ\u0103. Nu s-o g\u00e2ndi\u021bi invers, negativ.<\/h3>\n<h3>Legat tot de reguli de clean code, de cod curat \u00een structuri condi\u021bionale. Ori de c\u00e2te ori e posibil, folosi\u021bi operatorul ternar. \u0102sta ce face? Spre deosebire de if, care e structur\u0103 de programare, semnul \u00eentreb\u0103rii acesta combinat cu dou\u0103 puncte e operator. E mult mai rapid. \u00centr-adev\u0103r acum \u00een sistemele curente, chiar nu mai conteaz\u0103 dac\u0103 scriu un if sau un operator ternar, n-o s\u0103 se simt\u0103 o mare diferen\u021b\u0103. Poate o diferen\u021b\u0103 o s\u0103 se simt\u0103 dac\u0103 apelez un if de un milion de ori \u00eentr-un for, s\u0103 zicem. Atunci da, poate o s\u0103 se simt\u0103 diferen\u021ba \u00eentre if \u0219i operatorul ternar. O s\u0103 termine for-ul \u0103la mult mai repede. Dar \u00een cazul unui apel simplu e cam acela\u0219i lucru, doar c\u0103 e mult mai u\u0219or de citit \u0219i de verbalizat. Spun c\u0103 maximul este: a dac\u0103 a e mai mare ca b sau b \u00een caz contrar. \u00centr-o singur\u0103 linie de cod. Apoi exist\u0103 situa\u021bii, \u0219i una dintre ele este LINQ din C#. Dac\u0103 nu a\u021bi auzit de LINQ, v\u0103 rog s\u0103 c\u0103uta\u021bi despre el \u00eentr-un motor de c\u0103utare. Este un limbaj ce \u00eemi permite s\u0103 prelucrez ni\u0219te dic\u021bionare \u0219i alte obiecte de tip Generics ca \u0219i cum ar fi DataTable de tip SQL. Adic\u0103 tabel\u0103 de tip SQL. Pot s\u0103 fac WHERE pot s\u0103 fac ANY, pot s\u0103 fac JOIN-uri dac\u0103 vreau. M\u0103 rog, ideea e c\u0103 \u00een acest LINQ nu am voie s\u0103 folosesc if, dar operator ternar pot folosi. Deci \u00een acest caz, if oricum e exclus.<\/h3>\n<h3>Alt\u0103 regul\u0103 pentru structuri condi\u021bionale e s\u0103 nu compar\u0103m direct cu string-uri. Folosim enum dac\u0103 am mai multe cazuri. S\u0103 spun c\u0103 am un statutFisier care \u00eemi spune deschis, inchis, inFolosinta, s\u0103 spunem. Ei, nu e foarte ok s\u0103 scriu statutFisier == \u201ddeschis\u201d, s\u0103 pun \u00een alt loc statutFisier=\u201ddeschis\u201d. De ce? P\u0103i, unu, pot s\u0103 scriu la un moment dat, adic\u0103 nu merge intellisense-ul pe acest (intellisens vorbesc la mod general, nu \u0219tiu cum s-o numi \u00een alte IDE-uri, adic\u0103 autocompletarea). M\u0103 pot trezi c\u0103 scriu \u00een loc de deschis scriu \u201edechis\u201d c\u0103 m\u0103n\u00e2nc s-ul \u0219i n-o s\u0103-mi func\u021bioneze codul \u0219i nu m\u0103 prind \u00een veci de ce naiba nu func\u021bioneaz\u0103 codul. A\u0219a, folosind de exemplu un enum, care e cea mai elegant\u0103 variant\u0103, scriu gre\u0219it denumirea din enum, n-o s\u0103-mi compileze codul. Am eroare de compilare, v\u0103d exact unde am scris gre\u0219it. Asta \u00een primul r\u00e2nd. \u00cen al doilea r\u00e2nd, dac\u0103 vine un alt programator \u0219i se uit\u0103 pe codul meu \u0219i o s\u0103 vad\u0103 la un moment dat o compara\u021bie cu stareFisier==\u201ddeschis\u201d sau .equals dac\u0103 vorbim de Java, == sau string.equals \u00een C# \u0219i o s\u0103 vad\u0103 deschis, o s\u0103 se \u00eentrebe, ok, deschis \u0219i care mai sunt cealalt\u0103 st\u0103ri, care or mai fi? \u0218i nu are de unde s\u0103 \u0219tie, trebuie s\u0103 caute prin cod \u0219i s\u0103 \u00ee\u0219i dea seama care mai sunt celelalte st\u0103ri. Pe c\u00e2nd \u00een cazul unui enum, d\u0103 \u201ego to definition\u201d pe enum, se duce la definirea lui, vede c\u0103 celelalte st\u0103ri sunt, cum am spus \u0219i noi, inchis \u0219i inFolosinta \u0219i e l\u0103murit cu totul cu privire la tipul st\u0103rilor unui fi\u0219ier.<\/h3>\n<h3>Apoi, o alt\u0103 regul\u0103 e ca \u00eentotdeauna c\u00e2nd folosim constante s\u0103 le identific\u0103m \u0219i s\u0103 le punem la \u00eenceputul clasei. De ce? \u00cen primul r\u00e2nd de ce s\u0103 le identific\u0103m, hai s\u0103 vorbim a\u0219a. P\u0103i hai s\u0103 zicem c\u0103 avem o aplica\u021bie care verific\u0103 dac\u0103 utilizatorul este major. \u0218i aplica\u021bia asta o facem, scoatem o versiune pentru Europa \u0219i o versiune pentru Statele Unite. \u00cen varianta pentru Europa v\u00e2rsta de majorat este 18 ani, \u00een varianta pentru Statele Unite v\u00e2rsta de majorat este de 16 ani. \u0218i s\u0103 spunem c\u0103 punem o echip\u0103 din Europa s\u0103 fac\u0103 mentenan\u021b\u0103 pentru aplica\u021bia din Statele Unite. \u0218i atunci o s\u0103 v\u0103d la un moment dat \u00een cod if (varsta &gt; 16). \u0218i o s\u0103 m\u0103 g\u00e2ndesc, p\u0103i \u0219i ce naiba e cu 16 \u0103sta. Cine e 16? De ce 16, de ce nu altceva? Nu ar fi mai ok s\u0103 am o constant\u0103 denumit\u0103 varstaMajorat c\u0103reia s\u0103 \u00eei atribui valoarea 16 sau 18 func\u021bie de \u021bara sau regiunea pentru care fac versiunea, \u0219i \u00een cod s\u0103 compar cu varstaMajorat. Ar fi mai ok \u0219i mai lizibil\u0103 pentru oricare programator chestia asta. Dac\u0103 folosesc \u0219i o conven\u021bie de nume pentru constant\u0103, deja \u0219tie toat\u0103 lumea c\u0103 e constant\u0103, ori de c\u00e2te ori o folosesc \u00een cod, o folosesc pe cea definit\u0103 mai sus, nu am nevoie s\u0103 definesc alta.<\/h3>\n<h3>Legat tot de structurile condi\u021bionale. Ce se \u00eent\u00e2mpl\u0103 c\u00e2nd condi\u021biile din structurile condi\u021bionare devin prea mari. P\u0103i o variant\u0103 e s\u0103 formatez condi\u021biile \u00een a\u0219a fel \u00eenc\u00e2t s\u0103 dau enter dup\u0103 operatorii logici \u0219i sau sau. Adic\u0103 &amp;&amp; \u0219i II, s\u0103 trec a\u0219a pe mai multe linii. Asta e o variant\u0103. O varianta mai elegant\u0103 e s\u0103 declar variabile intermediare. S\u0103 spunem c\u0103 pentru un fi\u0219ier verific dac\u0103: e deschis e, nu e \u00een curs de utilizare, utilizatorul curent are drepturi asupra lui \u0219i exist\u0103 pe server. Am patru condi\u021bii de pus \u00eentr-un singur if. N-ar fi mai ok s\u0103 declar dou\u0103 variabile separate, una care \u00eemi spune dac\u0103 e deschis \u0219i nu-i \u00een curs de utilizare \u0219i alta dac\u0103 utilizatorul are drepturi \u0219i e pe server \u0219i la sf\u00e2r\u0219it \u00een if s\u0103 compar aceste dou\u0103 variabile? Cred c\u0103 ar fi mai ok a\u0219a. Spuneam mai devreme s\u0103 folosi\u021bi enum. Ei bine, acest enum e indicat doar dac\u0103 clasele exist\u0103 deja \u0219i vin cu o chestie \u00een plus cu o utilitate \u00een plus, cu o stare \u00een plus. Pe de alt\u0103 parte dac\u0103 g\u00e2ndesc clasa de la \u00eenceput, ceea ce s\u0103 fim sinceri, c\u0103 nu prea se \u00eent\u00e2mpl\u0103 practic. Adic\u0103 atunci c\u00e2nd o s\u0103 v\u0103 angaja\u021bi pe un proiect sau dac\u0103 deja lucra\u021bi, \u0219ti\u021bi chestia asta. Nu o s\u0103 lua\u021bi proiectul de la zero. Foarte rar se \u00eent\u00e2mpl\u0103 s\u0103 lucra\u021bi pe un proiect de la zero. De obicei vre\u021bi lucra pe un proiect cu cod existent. \u0218i de asta e \u0219i acel procent uria\u0219, 90% citit cod, 10% scris cod. Ei, \u0219i ideea e c\u0103 dac\u0103 aleg, dac\u0103 lucrez, am norocul \u0103sta ca \u0219i programator s\u0103 \u00eencep un proiect de la zero, \u0219i \u0219tiu de la \u00eenceput c\u0103 am un statut al documentului, poate e mai ok ca acest statut s\u0103 \u00eel salvez ca \u0219i o clas\u0103 separat\u0103. De ce? P\u0103i poate, peste nu \u0219tiu c\u00e2t timp, se schimb\u0103 specifica\u021biile \u0219i spun c\u0103 vor s\u0103 \u0219tie \u0219i istoricul staturilor sau data la care s-a schimbat ultimul statut. Adic\u0103 ultima actualizare. Ei bine, dac\u0103 am enum, \u00eentr-un enum nu pot pune a\u0219a ceva. Dac\u0103 am o clas\u0103 StatutulFisierului sau StatusulFisierului, atunci da, acolo pot pune un atribut \u00een plus.<\/h3>\n<h3>Dac\u0103 am multe constante \u00een cod, acest lucru indic\u0103 o nevoie de \u00eenglobare a lor \u00eentr-o tabel\u0103 din baza de date. \u0218i aici v\u0103 dau un exemplu clasic din Rom\u00e2nia, de acum 4-5 ani, nu \u0219tiu c\u00e2\u021bi sunt, c\u00e2nd s-a schimbat cota TVA. Ei, mul\u021bi programatori care au scris cod \u201emurdar\u201d, ca s\u0103 facem o analogie la clean cod, \u0219i-au hardcodat valoarea de 19% \u00een aplica\u021bii. Maxim au definit mai multe constante, c\u0103 erau mai multe valori de TVA. Era una pentru turism de vreo 9%, asta pentru toat\u0103 lumea de 19% \u0219i, nu mai \u0219tiu, era scutit cu drept de deducere care era 0. Spun \u0219i eu a\u0219a din amintiri. Ei \u0219i s-a dat ceva de genul, legea s\u0103 zicem vineri, c\u0103 de luni toat\u0103 lumea trece la TVA 24%. Ei \u0219i weekendul \u0103la a fost un weekend alb pentru mul\u021bi programatori lene\u0219i. Cum spuneam la \u00eenceput, c\u0103 dac\u0103 nu \u00ee\u021bi faci timp s\u0103 scrii cod corect, vei pierde foarte mult timp apoi ca s\u0103-l modifici. Cei care au hardcodat valoarea asta s-au trezit c\u0103 trebuie s\u0103 lucreze, s\u0103 fac\u0103 un weekend alb, ca s\u0103 modifice peste tot. \u0218i dac\u0103 au fost \u0219i b\u0103ie\u021bi de\u0219tep\u021bi \u0219i-au dat seama c\u0103 locul constantelor nu e \u00een cod, ci \u00eentr-o tabel\u0103 din baza de date \u0219i au pus cotele astea \u00een baza de date. Dac\u0103 nu \u0219tiu care premier se g\u00e2ndea c\u0103 modific\u0103 TVA-ul \u0219i d\u0103dea o lege de pe o zi pe alta, cum se \u00eent\u00e2mpl\u0103 de obicei la noi, foarte simplu, programatorul se ducea \u00een baza de date a clientului, schimba 24 \u00een 25 sau 20 sau 21, c\u00e2t \u00eel mai fac (pe TVA). \u0218i gata, programul func\u021biona mai departe f\u0103r\u0103 s\u0103 fie nevoie de o nou\u0103 versiune, f\u0103r\u0103 s\u0103 fie nevoie de modificare de cod.<\/h3>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<\/div>","protected":false},"excerpt":{"rendered":"<p>Transcriere Legat de variabile: \u00een primul r\u00e2nd nu e indicat ca variabilele de tip string sau \u0219ir de caractere s\u0103 con\u021bin\u0103 cod din alt limbaj de programare. Gen, \u00eentr-un string din C# s\u0103 salvez cod SQL, \u00eentr-un string din Java s\u0103 salvez cod CSS sau JavaScript sau HTML. De ce? [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":3084,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_publicize_message":"","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":false,"jetpack_social_options":{"image_generator_settings":{"template":"highway","default_image_id":0,"font":"","enabled":false},"version":2}},"categories":[158,172],"tags":[159,162,24,165],"class_list":["post-995","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-clean-code","category-tutoriale-video","tag-clean-code","tag-cod-bine-scris","tag-java","tag-structuri-conditionale"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.4 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Clean Code - Episodul 4 - Facem Soft<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/facemsoft.ro\/en\/tutoriale-video\/clean-code\/clean-code-episodul-4\/\" \/>\n<meta property=\"og:locale\" content=\"en_GB\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Clean Code - Episodul 4 - Facem Soft\" \/>\n<meta property=\"og:description\" content=\"Transcriere Legat de variabile: \u00een primul r\u00e2nd nu e indicat ca variabilele de tip string sau \u0219ir de caractere s\u0103 con\u021bin\u0103 cod din alt limbaj de programare. Gen, \u00eentr-un string din C# s\u0103 salvez cod SQL, \u00eentr-un string din Java s\u0103 salvez cod CSS sau JavaScript sau HTML. De ce? [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/facemsoft.ro\/en\/tutoriale-video\/clean-code\/clean-code-episodul-4\/\" \/>\n<meta property=\"og:site_name\" content=\"Facem Soft\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/facemsoft\" \/>\n<meta property=\"article:published_time\" content=\"2015-04-13T18:17:05+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2020-08-17T15:19:55+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/i0.wp.com\/facemsoft.ro\/wp-content\/uploads\/2017\/09\/clean_code.png?fit=1200%2C589&ssl=1\" \/>\n\t<meta property=\"og:image:width\" content=\"1200\" \/>\n\t<meta property=\"og:image:height\" content=\"589\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Bogdan Iancu\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Bogdan Iancu\" \/>\n\t<meta name=\"twitter:label2\" content=\"Estimated reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"10 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/facemsoft.ro\\\/en\\\/tutoriale-video\\\/clean-code\\\/clean-code-episodul-4\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/facemsoft.ro\\\/en\\\/tutoriale-video\\\/clean-code\\\/clean-code-episodul-4\\\/\"},\"author\":{\"name\":\"Bogdan Iancu\",\"@id\":\"https:\\\/\\\/facemsoft.ro\\\/#\\\/schema\\\/person\\\/f2cca604e1acf812e3f40c8cc8a82190\"},\"headline\":\"Clean Code &#8211; Episodul 4\",\"datePublished\":\"2015-04-13T18:17:05+00:00\",\"dateModified\":\"2020-08-17T15:19:55+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/facemsoft.ro\\\/en\\\/tutoriale-video\\\/clean-code\\\/clean-code-episodul-4\\\/\"},\"wordCount\":2077,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/facemsoft.ro\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/facemsoft.ro\\\/en\\\/tutoriale-video\\\/clean-code\\\/clean-code-episodul-4\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/i0.wp.com\\\/facemsoft.ro\\\/wp-content\\\/uploads\\\/2017\\\/09\\\/clean_code.png?fit=1200%2C589&ssl=1\",\"keywords\":[\"clean code\",\"cod bine scris\",\"Java\",\"structuri conditionale\"],\"articleSection\":[\"Clean Code\",\"Tutoriale video\"],\"inLanguage\":\"en-GB\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/facemsoft.ro\\\/en\\\/tutoriale-video\\\/clean-code\\\/clean-code-episodul-4\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/facemsoft.ro\\\/en\\\/tutoriale-video\\\/clean-code\\\/clean-code-episodul-4\\\/\",\"url\":\"https:\\\/\\\/facemsoft.ro\\\/en\\\/tutoriale-video\\\/clean-code\\\/clean-code-episodul-4\\\/\",\"name\":\"Clean Code - Episodul 4 - Facem Soft\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/facemsoft.ro\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/facemsoft.ro\\\/en\\\/tutoriale-video\\\/clean-code\\\/clean-code-episodul-4\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/facemsoft.ro\\\/en\\\/tutoriale-video\\\/clean-code\\\/clean-code-episodul-4\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/i0.wp.com\\\/facemsoft.ro\\\/wp-content\\\/uploads\\\/2017\\\/09\\\/clean_code.png?fit=1200%2C589&ssl=1\",\"datePublished\":\"2015-04-13T18:17:05+00:00\",\"dateModified\":\"2020-08-17T15:19:55+00:00\",\"inLanguage\":\"en-GB\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/facemsoft.ro\\\/en\\\/tutoriale-video\\\/clean-code\\\/clean-code-episodul-4\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-GB\",\"@id\":\"https:\\\/\\\/facemsoft.ro\\\/en\\\/tutoriale-video\\\/clean-code\\\/clean-code-episodul-4\\\/#primaryimage\",\"url\":\"https:\\\/\\\/i0.wp.com\\\/facemsoft.ro\\\/wp-content\\\/uploads\\\/2017\\\/09\\\/clean_code.png?fit=1200%2C589&ssl=1\",\"contentUrl\":\"https:\\\/\\\/i0.wp.com\\\/facemsoft.ro\\\/wp-content\\\/uploads\\\/2017\\\/09\\\/clean_code.png?fit=1200%2C589&ssl=1\",\"width\":\"1200\",\"height\":\"589\",\"caption\":\"Clean Code\"},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/facemsoft.ro\\\/#website\",\"url\":\"https:\\\/\\\/facemsoft.ro\\\/\",\"name\":\"Facem Soft\",\"description\":\"Cursuri IT livrate din pasiune pentru programare\",\"publisher\":{\"@id\":\"https:\\\/\\\/facemsoft.ro\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/facemsoft.ro\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-GB\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/facemsoft.ro\\\/#organization\",\"name\":\"S.C. Facem Soft - Training & Consulting S.R.L.\",\"url\":\"https:\\\/\\\/facemsoft.ro\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-GB\",\"@id\":\"https:\\\/\\\/facemsoft.ro\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/i0.wp.com\\\/facemsoft.ro\\\/wp-content\\\/uploads\\\/2017\\\/09\\\/logo_site_v3.png?fit=3333%2C2500&ssl=1\",\"contentUrl\":\"https:\\\/\\\/i0.wp.com\\\/facemsoft.ro\\\/wp-content\\\/uploads\\\/2017\\\/09\\\/logo_site_v3.png?fit=3333%2C2500&ssl=1\",\"width\":3333,\"height\":2500,\"caption\":\"S.C. Facem Soft - Training & Consulting S.R.L.\"},\"image\":{\"@id\":\"https:\\\/\\\/facemsoft.ro\\\/#\\\/schema\\\/logo\\\/image\\\/\"},\"sameAs\":[\"https:\\\/\\\/www.facebook.com\\\/facemsoft\",\"https:\\\/\\\/www.instagram.com\\\/bogdaniancu88\\\/\",\"https:\\\/\\\/www.linkedin.com\\\/in\\\/bogdaniancu88\\\/\",\"https:\\\/\\\/www.youtube.com\\\/FacemSoft\"]},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/facemsoft.ro\\\/#\\\/schema\\\/person\\\/f2cca604e1acf812e3f40c8cc8a82190\",\"name\":\"Bogdan Iancu\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-GB\",\"@id\":\"https:\\\/\\\/facemsoft.ro\\\/wp-content\\\/wphb-cache\\\/gravatar\\\/d91\\\/d916ae63d2921531d15dbaa2880e93bfx96.jpg\",\"url\":\"https:\\\/\\\/facemsoft.ro\\\/wp-content\\\/wphb-cache\\\/gravatar\\\/d91\\\/d916ae63d2921531d15dbaa2880e93bfx96.jpg\",\"contentUrl\":\"https:\\\/\\\/facemsoft.ro\\\/wp-content\\\/wphb-cache\\\/gravatar\\\/d91\\\/d916ae63d2921531d15dbaa2880e93bfx96.jpg\",\"caption\":\"Bogdan Iancu\"}}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Clean Code - Episodul 4 - Facem Soft","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/facemsoft.ro\/en\/tutoriale-video\/clean-code\/clean-code-episodul-4\/","og_locale":"en_GB","og_type":"article","og_title":"Clean Code - Episodul 4 - Facem Soft","og_description":"Transcriere Legat de variabile: \u00een primul r\u00e2nd nu e indicat ca variabilele de tip string sau \u0219ir de caractere s\u0103 con\u021bin\u0103 cod din alt limbaj de programare. Gen, \u00eentr-un string din C# s\u0103 salvez cod SQL, \u00eentr-un string din Java s\u0103 salvez cod CSS sau JavaScript sau HTML. De ce? [&hellip;]","og_url":"https:\/\/facemsoft.ro\/en\/tutoriale-video\/clean-code\/clean-code-episodul-4\/","og_site_name":"Facem Soft","article_publisher":"https:\/\/www.facebook.com\/facemsoft","article_published_time":"2015-04-13T18:17:05+00:00","article_modified_time":"2020-08-17T15:19:55+00:00","og_image":[{"width":1200,"height":589,"url":"https:\/\/i0.wp.com\/facemsoft.ro\/wp-content\/uploads\/2017\/09\/clean_code.png?fit=1200%2C589&ssl=1","type":"image\/png"}],"author":"Bogdan Iancu","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Bogdan Iancu","Estimated reading time":"10 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/facemsoft.ro\/en\/tutoriale-video\/clean-code\/clean-code-episodul-4\/#article","isPartOf":{"@id":"https:\/\/facemsoft.ro\/en\/tutoriale-video\/clean-code\/clean-code-episodul-4\/"},"author":{"name":"Bogdan Iancu","@id":"https:\/\/facemsoft.ro\/#\/schema\/person\/f2cca604e1acf812e3f40c8cc8a82190"},"headline":"Clean Code &#8211; Episodul 4","datePublished":"2015-04-13T18:17:05+00:00","dateModified":"2020-08-17T15:19:55+00:00","mainEntityOfPage":{"@id":"https:\/\/facemsoft.ro\/en\/tutoriale-video\/clean-code\/clean-code-episodul-4\/"},"wordCount":2077,"commentCount":0,"publisher":{"@id":"https:\/\/facemsoft.ro\/#organization"},"image":{"@id":"https:\/\/facemsoft.ro\/en\/tutoriale-video\/clean-code\/clean-code-episodul-4\/#primaryimage"},"thumbnailUrl":"https:\/\/i0.wp.com\/facemsoft.ro\/wp-content\/uploads\/2017\/09\/clean_code.png?fit=1200%2C589&ssl=1","keywords":["clean code","cod bine scris","Java","structuri conditionale"],"articleSection":["Clean Code","Tutoriale video"],"inLanguage":"en-GB","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/facemsoft.ro\/en\/tutoriale-video\/clean-code\/clean-code-episodul-4\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/facemsoft.ro\/en\/tutoriale-video\/clean-code\/clean-code-episodul-4\/","url":"https:\/\/facemsoft.ro\/en\/tutoriale-video\/clean-code\/clean-code-episodul-4\/","name":"Clean Code - Episodul 4 - Facem Soft","isPartOf":{"@id":"https:\/\/facemsoft.ro\/#website"},"primaryImageOfPage":{"@id":"https:\/\/facemsoft.ro\/en\/tutoriale-video\/clean-code\/clean-code-episodul-4\/#primaryimage"},"image":{"@id":"https:\/\/facemsoft.ro\/en\/tutoriale-video\/clean-code\/clean-code-episodul-4\/#primaryimage"},"thumbnailUrl":"https:\/\/i0.wp.com\/facemsoft.ro\/wp-content\/uploads\/2017\/09\/clean_code.png?fit=1200%2C589&ssl=1","datePublished":"2015-04-13T18:17:05+00:00","dateModified":"2020-08-17T15:19:55+00:00","inLanguage":"en-GB","potentialAction":[{"@type":"ReadAction","target":["https:\/\/facemsoft.ro\/en\/tutoriale-video\/clean-code\/clean-code-episodul-4\/"]}]},{"@type":"ImageObject","inLanguage":"en-GB","@id":"https:\/\/facemsoft.ro\/en\/tutoriale-video\/clean-code\/clean-code-episodul-4\/#primaryimage","url":"https:\/\/i0.wp.com\/facemsoft.ro\/wp-content\/uploads\/2017\/09\/clean_code.png?fit=1200%2C589&ssl=1","contentUrl":"https:\/\/i0.wp.com\/facemsoft.ro\/wp-content\/uploads\/2017\/09\/clean_code.png?fit=1200%2C589&ssl=1","width":"1200","height":"589","caption":"Clean Code"},{"@type":"WebSite","@id":"https:\/\/facemsoft.ro\/#website","url":"https:\/\/facemsoft.ro\/","name":"Facem Soft","description":"Cursuri IT livrate din pasiune pentru programare","publisher":{"@id":"https:\/\/facemsoft.ro\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/facemsoft.ro\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-GB"},{"@type":"Organization","@id":"https:\/\/facemsoft.ro\/#organization","name":"S.C. Facem Soft - Training & Consulting S.R.L.","url":"https:\/\/facemsoft.ro\/","logo":{"@type":"ImageObject","inLanguage":"en-GB","@id":"https:\/\/facemsoft.ro\/#\/schema\/logo\/image\/","url":"https:\/\/i0.wp.com\/facemsoft.ro\/wp-content\/uploads\/2017\/09\/logo_site_v3.png?fit=3333%2C2500&ssl=1","contentUrl":"https:\/\/i0.wp.com\/facemsoft.ro\/wp-content\/uploads\/2017\/09\/logo_site_v3.png?fit=3333%2C2500&ssl=1","width":3333,"height":2500,"caption":"S.C. Facem Soft - Training & Consulting S.R.L."},"image":{"@id":"https:\/\/facemsoft.ro\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/facemsoft","https:\/\/www.instagram.com\/bogdaniancu88\/","https:\/\/www.linkedin.com\/in\/bogdaniancu88\/","https:\/\/www.youtube.com\/FacemSoft"]},{"@type":"Person","@id":"https:\/\/facemsoft.ro\/#\/schema\/person\/f2cca604e1acf812e3f40c8cc8a82190","name":"Bogdan Iancu","image":{"@type":"ImageObject","inLanguage":"en-GB","@id":"https:\/\/facemsoft.ro\/wp-content\/wphb-cache\/gravatar\/d91\/d916ae63d2921531d15dbaa2880e93bfx96.jpg","url":"https:\/\/facemsoft.ro\/wp-content\/wphb-cache\/gravatar\/d91\/d916ae63d2921531d15dbaa2880e93bfx96.jpg","contentUrl":"https:\/\/facemsoft.ro\/wp-content\/wphb-cache\/gravatar\/d91\/d916ae63d2921531d15dbaa2880e93bfx96.jpg","caption":"Bogdan Iancu"}}]}},"jetpack_publicize_connections":[],"jetpack_featured_media_url":"https:\/\/i0.wp.com\/facemsoft.ro\/wp-content\/uploads\/2017\/09\/clean_code.png?fit=1200%2C589&ssl=1","jetpack_sharing_enabled":true,"jetpack_shortlink":"https:\/\/wp.me\/p81Qbo-g3","_links":{"self":[{"href":"https:\/\/facemsoft.ro\/en\/wp-json\/wp\/v2\/posts\/995","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/facemsoft.ro\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/facemsoft.ro\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/facemsoft.ro\/en\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/facemsoft.ro\/en\/wp-json\/wp\/v2\/comments?post=995"}],"version-history":[{"count":0,"href":"https:\/\/facemsoft.ro\/en\/wp-json\/wp\/v2\/posts\/995\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/facemsoft.ro\/en\/wp-json\/wp\/v2\/media\/3084"}],"wp:attachment":[{"href":"https:\/\/facemsoft.ro\/en\/wp-json\/wp\/v2\/media?parent=995"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/facemsoft.ro\/en\/wp-json\/wp\/v2\/categories?post=995"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/facemsoft.ro\/en\/wp-json\/wp\/v2\/tags?post=995"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}