{"id":1026,"date":"2017-09-18T18:06:56","date_gmt":"2017-09-18T15:06:56","guid":{"rendered":"http:\/\/facemsoft.ro\/?p=1026"},"modified":"2020-08-17T21:17:21","modified_gmt":"2020-08-17T18:17:21","slug":"clean-code-episodul-5","status":"publish","type":"post","link":"https:\/\/facemsoft.ro\/en\/tutoriale-video\/clean-code\/clean-code-episodul-5\/","title":{"rendered":"Clean Code &#8211; Episodul 5"},"content":{"rendered":"<div data-elementor-type=\"wp-post\" data-elementor-id=\"1026\" class=\"elementor elementor-1026\">\n\t\t\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-y1gomx9 elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"y1gomx9\" 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-h43z2nn\" data-id=\"h43z2nn\" 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-31zo9lw elementor-widget elementor-widget-video\" data-id=\"31zo9lw\" 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\\\/2017\\\/09\\\/CleanCode5.png&quot;,&quot;id&quot;:1027,&quot;size&quot;:&quot;&quot;},&quot;lightbox&quot;:&quot;yes&quot;,&quot;youtube_url&quot;:&quot;https:\\\/\\\/www.youtube.com\\\/watch?v=jLZ8FH4Fv20&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\\\/jLZ8FH4Fv20?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-31zo9lw&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%3DeyJ0eXBlIjoidmlkZW8iLCJ2aWRlb1R5cGUiOiJ5b3V0dWJlIiwidXJsIjoiaHR0cHM6XC9cL3d3dy55b3V0dWJlLmNvbVwvZW1iZWRcL2pMWjhGSDRGdjIwP2ZlYXR1cmU9b2VtYmVkJnN0YXJ0JmVuZCZ3bW9kZT1vcGFxdWUmbG9vcD0wJmNvbnRyb2xzPTEmbXV0ZT0wJnJlbD0wJmNjX2xvYWRfcG9saWN5PTAiLCJhdXRvcGxheSI6IiIsIm1vZGFsT3B0aW9ucyI6eyJpZCI6ImVsZW1lbnRvci1saWdodGJveC0zMXpvOWx3IiwiZW50cmFuY2VBbmltYXRpb24iOiIiLCJlbnRyYW5jZUFuaW1hdGlvbl90YWJsZXQiOiIiLCJlbnRyYW5jZUFuaW1hdGlvbl9tb2JpbGUiOiIiLCJ2aWRlb0FzcGVjdFJhdGlvIjoiMTY5In19\">\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\/2017\/09\/CleanCode5.png?fit=755%2C510&amp;ssl=1\" class=\"attachment-full size-full wp-image-1027\" alt=\"Clean Code curs 5\" srcset=\"https:\/\/i0.wp.com\/facemsoft.ro\/wp-content\/uploads\/2017\/09\/CleanCode5.png?w=755&amp;ssl=1 755w, https:\/\/i0.wp.com\/facemsoft.ro\/wp-content\/uploads\/2017\/09\/CleanCode5.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-2190354 elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"2190354\" 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-5f0f7ea\" data-id=\"5f0f7ea\" 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-48b8b26 elementor-widget elementor-widget-spacer\" data-id=\"48b8b26\" 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-e71041e elementor-widget elementor-widget-heading\" data-id=\"e71041e\" 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-8f79744 elementor-widget elementor-widget-text-editor\" data-id=\"8f79744\" 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<p><span style=\"font-weight: 400;\">Hai s\u0103 vedem ce reguli de Clean Code putem aplica \u00een metode. Se spune c\u0103 orice metod\u0103 e indicat s\u0103 aib\u0103 cel mult trei niveluri de imbricare, adic\u0103 un for \u00een if \u00een while \u0219i pe aici m\u0103 opresc, nu am voie s\u0103 am mai mult de trei niveluri de imbricare. \u0218i asta poart\u0103 numele de arrow code pentru c\u0103 pe m\u0103sur\u0103 ce merg cu acoladele \u0219i apoi m\u0103 \u00eentorc cu ele s\u0103 le \u00eenchid se formeaz\u0103 o s\u0103geat\u0103. Acea s\u0103geat\u0103 nu e o ok s\u0103 fie foarte ad\u00e2nc\u0103, foarte ascu\u021bit\u0103 pentru c\u0103 asta \u00eenseamn\u0103 c\u0103 \u00eencalc principiul de care sper c\u0103 v\u0103 aminti\u021bi \u0219i anume c\u0103 pot re\u021bine doar 7 niveluri. Trei niveluri imbricate \u00eenseamn\u0103 c\u0103 m\u0103 duc trei niveluri, m\u0103 duc spre v\u00e2rful s\u0103ge\u021bii 3 niveluri \u0219i m\u0103 \u00eentorc spre baza s\u0103ge\u021bii \u00eenc\u0103 trei, adic\u0103 am deja 6 lucruri de re\u021binut. Dac\u0103 merg mai mult de aceste 6 chestii deja ajung la 7 chestii de re\u021binut \u0219i trec de capacitate umana de a re\u021bine, trebuie s\u0103 dau scroll s\u0103 v\u0103d ce naiba se \u00eent\u00e2mpla \u00een primul for sau \u00een primul if.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">O alt\u0103 regul\u0103 de clean code pe care \u0219i eu am \u00eenv\u0103\u021bat-o de cur\u00e2nd \u0219i e foarte util\u0103 (mai degrab\u0103 m-a for\u021bat ReSharper-ul s\u0103 o folosesc), ie\u0219irea c\u00e2t mai rapid\u0103 din func\u021bie. Adic\u0103, de ce s\u0103 validez, s\u0103 fac if(userValid), scriu cod pe acolo \u0219i apoi else throw exception? De ce s\u0103 nu fac if(!userValid) throw exception, adic\u0103 primele linii dintr-o func\u021bie \u00eentotdeauna trebuie s\u0103 fie return-uri de la valid\u0103ri sau arunc\u0103ri de excep\u021bii. Adic\u0103 primele linii \u00een func\u021bii fac valid\u0103rile (sau \u00een metod\u0103). Validez, nu e chestia asta valabil\u0103, arunc excep\u021bie, nu e chestia asta valabil\u0103, returnez null, returnez 0, returnez ce trebuie s\u0103 returneze func\u021bia respectiv\u0103. \u0218i ca s\u0103 dau un exemplu pe func\u021bia mea, respectiv, metoda aia static\u0103 calculeaz\u0103 care de fapt era suma elementelor unui ArrayList \u0219i trebuia s\u0103 verific, e ArrayList-ul null? Da. Atunci arunc excep\u021bie de null. Am elemente in el, arunc excep\u021bie c\u0103 e gol. Nu \u0219tiu, m\u0103 trezesc c\u0103 elementele din el nu sunt \u00eentregi arunc excep\u021bie c\u0103 nu am element \u00eentreg. Nu fac la \u00eenceput if toate-s ok, fac prelucr\u0103ri \u0219i apoi \u00een else v\u0103d ce-a ie\u0219it.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Apoi, \u00eencerca\u021bi pe c\u00e2t posibil s\u0103 declara\u021bi variabile, \u00een mediile \u00een care variabilele se declar\u0103 \u00eentr-adev\u0103r, c\u00e2t mai aproape de utilizarea lor, mai ales variabilele locale. Adic\u0103 am un metod\u0103 \u00een care folosesc o variabil\u0103, ar fi ok s\u0103 o declar exact deasupra ultimei folosiri, adic\u0103 s\u0103 nu o declar ca \u0219i constantele, deasupra pe toate pentru c\u0103: 1. programatorul uit\u0103, spuneam c\u0103 re\u021binem \u0219apte lucruri simultan, 2. \u00eemi e destul de greu s\u0103 fac scroll p\u00e2n\u0103 sus s\u0103 v\u0103d cu ce naiba ini\u021bializam variabila aia, dau scroll uit unde am r\u0103mas, dau scroll, caut iar ce c\u0103utam, g\u0103sesc \u00een sf\u00e2r\u0219it, uit ce era \u00een variabil\u0103. Mie chiar mi s-a \u00eent\u00e2mplat chestia asta \u0219i e destul de enervant.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Ok, apoi ca \u0219i regul\u0103 pentru programele puternic orientate obiect, bine e \u0219i cazul C++.<\/span> <span style=\"font-weight: 400;\">\u00cencerca\u021bi pe c\u00e2t posibil folosirea this \u0219i stabilirea unei conven\u021bii de nume pentru parametrii constructorului. \u0218i aici vorbesc despre studen\u021bii mei de la Programare Orientat\u0103 Obiect care, tot timpul, nu i\u0219i dau seama c\u0103 dac\u0103 dau constructorului cu parametri, dac\u0103 dau parametrilor acelea\u0219i nume ca \u0219i atributele din clas\u0103 vor face ini\u021bializare tot pe parametri. De exemplu am clasa Student care are un \u00eentreg matricol, un float medie \u0219i un string nume. \u00cen constructorul cu parametri primesc trei parametri numi\u021bi exact a\u0219a, adic\u0103 int matricol, float medie, string nume \u0219i dac\u0103 fac apoi nume=nume, matricol=matricol \u0219i medie=medie o s\u0103 m\u0103 trezesc c\u0103 \u00een atributele din clasa am exact nimic. De ce? Pentru c\u0103 am spus \u00eentotdeauna \u00een C#, \u00een Java, \u00een C++ local scope bate global scope, adic\u0103 variabile locale au \u00eentotdeauna prioritate \u00een fa\u021ba variabilelor globale. Variabila local\u0103 e parametrul, va avea prioritate \u00een fa\u021ba variabilei globale care e atributul \u0219i o s\u0103 fac numele din parametru egal cu el \u00eensu\u0219i. Ca s\u0103 evit chestia asta scriu this s\u0103geat\u0103 sau punct, \u00een func\u021bie de limbaj, egal cu nume \u0219i am evitat chestia asta. ReSharper-ul folose\u0219te o alt\u0103 abordare \u0219i anume parametrilor constructorului le pune un underscore \u00een fa\u021b\u0103. Adic\u0103 folose\u0219te _matricol, _medie, _nume ca s\u0103 evite problemele.&nbsp;<\/span><\/p>\n<p><span style=\"font-weight: 400;\">O alt\u0103 regul\u0103 de clean code \u00een metode: s\u0103 evit\u0103m metodele cu mai mult de doi parametri. De ce? Sunt dificil de re\u021binut \u0219i nu prea avem nevoie. De obicei trebuie s\u0103 folosesc tipuri \u00eencapsulate ca \u0219i parametri \u00een metode, vedem pu\u021bin mai t\u00e2rziu detalii. Apoi trebuie s\u0103 evit metodele foarte lungi care au mai mult de 20 de linii de cod. De ce? Pentru c\u0103 sunt dificil de re\u021binut \u0219i ies din ecran. Adic\u0103 pentru mai mult de 20 de linii de cod de obicei trebui s\u0103 dau scroll. C\u00e2nd dau scroll \u00eenseamn\u0103 c\u0103 am uitat ceea ce scria mai sus. Adic\u0103 dac\u0103 stau suficient timp \u00een partea de jos a scroll-ului o s\u0103 uit se scria \u00een partea de sus. Mai exist\u0103 \u0219i un principiu care spune c\u0103 ar trebui ca complexitatea unei metode s\u0103 fie invers propor\u021bional\u0103 cu num\u0103rul de linii de cod. Adic\u0103 e metoda foarte complicat\u0103, foarte complex\u0103, trebuie s\u0103 aib\u0103 un num\u0103r sc\u0103zut de linii de cod. \u00centr-adev\u0103r \u00een acest num\u0103r sc\u0103zut pot s\u0103 am \u0219i apel de alte metode, dar un num\u0103r mic de linii de cod. E metoda destul simpl\u0103, am voie s\u0103 am 20 de linii de cod sau aproape 20 de linii de cod.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Mare aten\u021bie \u00een C# \u0219i Java la ordinea \u00een care trata\u021bi excep\u021biile. Adic\u0103 dac\u0103 pun o excep\u021bie mai general\u0103 deasupra unei excep\u021bii mai particulare, \u00een excep\u021bia particular\u0103 nu o s\u0103 intre niciodat\u0103. De exemplu dac\u0103 pun catch(Exception e) deasupra lui catch(NullException e), chiar dac\u0103 am NullException, chiar dac\u0103 am orice alt\u0103 excep\u021bie, va fi prins\u0103 de primul catch. \u00cen al doilea catch nu o s\u0103 ajung niciodat\u0103. De ce? Pentru c\u0103 Exception e clas\u0103 superioar\u0103 \u00een ierarhie lui NullException. Adic\u0103 NullException e derivat\u0103 din Exception. A\u0219a c\u0103 Exception va prinde toate erorile \u0219i le va ignora pe restul. Deci catch-ul general \u00eel punem la sf\u00e2r\u0219it.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Legat de regulile de clean code \u00een clase: toate metodele dintr-o clas\u0103 trebuie s\u0103 aib\u0103 leg\u0103tur\u0103 cu acea clas\u0103. \u0218i aici oarecum revenim la Single Responsibility Principle \u0219i anume o clas\u0103 trebuie s\u0103 fac\u0103 prelucr\u0103ri doar pentru un anumite lucru \u0219i toate metodele ei \u0219i toate atributele trebuie s\u0103 aib\u0103 leg\u0103tur\u0103 cu acel lucru. Trebuie s\u0103 evit\u0103m folosirea claselor generale \u0219i s\u0103 mut\u0103m prelucr\u0103rile respective ca metode statice \u00een clasele aferente. De ce? A\u0219a cum spuneam, clasele generale sunt un magnet pentru programatorii lene\u0219i. O s\u0103 ne trezim acolo cu tot felul de chestii de la al\u021bi programator care nu au nicio treab\u0103 cu ce am g\u00e2ndit noi. De exemplu am o clas\u0103 genic\u0103 \u00een care fac sortari, poate ar fi mai bine ca acele sort\u0103ri s\u0103 le pun ca \u0219i metode statice \u00een clasele respective. De exemplu am o func\u021bie care sorteaz\u0103 clien\u021bi, ar fi ok s\u0103 fie func\u021bie static\u0103 \u00een clasa Client.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Apoi sunt de evitat primitivele ca parametri \u0219i sunt preferate oric\u00e2nd obiectele ca tipuri \u00eencapsulate. De exemplu, vreau s\u0103 adaug \u00eentr-o list\u0103 un nou client, nu am de ce ca la metod\u0103 adaugaClient s\u0103 \u00eei dau ca parametru id-ul clientului, numele, adresa, mai \u0219tiu eu ce alte prostii. O s\u0103 dau o instan\u021b\u0103 de Client, un client ca \u0219i parametru, un obiect \u00eencapsulat. Asta e \u0219i ideea Program\u0103rii Orientate Obiect s\u0103 nu lucrez cu primitive. \u0218i mare aten\u021bie la primitive pentru c\u0103, cel pu\u021bin \u00een C# \u0219i Java, ele nu sunt thread safe. Adic\u0103 nu sunt sigure pentru lucrul cu mai multe fire de execu\u021bie, de asta se recomand\u0103 clasele wrapper. Clasele Wrapper sunt clase, nu primitive, ce au aceea\u0219i func\u021bionalitate ca \u0219i primitivele. \u0218i de exemplu pentru int \u00een Java avem Integer, pentru boolean avem Boolean, \u0219i a\u0219a mai departe. \u00cen C# e o abordare pu\u021bin diferit\u0103 \u0219i anume tipurile de baz\u0103 sunt structuri, sunt tipuri valorice, iar clasele sunt timpuri referen\u021biale, clasele \u0219i interfe\u021bele (mai precis). \u0218i aici e de discutat legat de tipurile valorice \u0219i anume de obicei trebuie s\u0103 le \u00eenlocuim \u0219i pe ele cu clasele Wrapper corespunz\u0103toare.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Apoi, e recomandat s\u0103 folosim fi\u0219iere de resurse pentru stringurile sau \u0219irurile de caractere din interfa\u021ba utilizator. De ce? 1. Pentru c\u0103 nu voi risca s\u0103 scriu gre\u0219it, s\u0103 m\u0103n\u00e2nc litere c\u00e2nd scriu. 2. Am Intellisense, am autocompletarea, ele fiind salvate \u00eentr-un singur fi\u0219ier de resurse. 3. Pot face aplica\u021bia foarte u\u0219or disponibil\u0103 \u00een mai multe limbi, schimb doar fi\u0219ierul de resurse \u0219i at\u00e2t. 4. Nu dau copy-paste. Conform principiului DRY nu trebuie s\u0103 ne repet\u0103m, nu trebuie s\u0103 d\u0103m copy-paste, e o practic\u0103 ur\u00e2t\u0103.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Urm\u0103toarea regul\u0103 e destul de greu de implementat \u00een C# \u0219i \u00een Java, dar e de preferat ca acele clase ce conlucreaz\u0103 s\u0103 fie a\u0219ezate una l\u00e2ng\u0103 alta. Spun c\u0103 e destul de greu pentru c\u0103 de obicei \u00een C# \u0219i \u00een Java se prefer\u0103 ca o clas\u0103 s\u0103 fie \u00eentr-un singur fi\u0219ier.&nbsp;<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Atunci c\u00e2nd identifica\u021bi o situa\u021bie de tipul de design patterns, folosi\u021bi design patterns. Ce sunt Design Patterns? Sunt ni\u0219te specifica\u021bii despre cum ar trebui scris\u0103 o clas\u0103 ca s\u0103 implementeze un anumit comportament. Uite, un design pattern este Singleton. Singleton \u00eenseamn\u0103 c\u0103 acea clas\u0103 va da o singur\u0103 instan\u021b\u0103 de obiect. De exemplu, conexiunea la o baz\u0103 de date. Nu am nevoie s\u0103 deschid conexiunea \u00een cadrul unei sesiuni de lucru de mai multe ori. De fiecare dat\u0103 c\u00e2nd un obiect vrea conexiunea la baza de date, \u00eei dau aceea\u0219i instan\u021b\u0103 deschis\u0103 odat\u0103. Deci clasa asta Singleton va face astfel: dac\u0103 nu exist\u0103 \u00eenc\u0103 o instan\u021b\u0103, o creeaz\u0103, dac\u0103 exist\u0103 o d\u0103 pe cea deja creat\u0103. Deci tot timpul lucreaz\u0103 cu o singur\u0103 instan\u021b\u0103. Mai exist\u0103 totodat\u0103 Factory. Factory e o clas\u0103 ce are \u00eenglobat\u0103 o metod\u0103 ce produce obiecte de tipul respectiv. Deci e o fabric\u0103 de obiecte, de aici \u0219i denumirea. Mai exist\u0103 Iterator ca Design Pattern pe care poate l-a\u021bi \u00eent\u00e2lnit \u00een C++ la STL, care re\u021bine un pointer la un obiect \u0219i are metode de tipul next, previous \u0219i a\u0219a mai departe. Ok, deci folosim Design Patterns atunci c\u00e2nd identific\u0103m o situa\u021bie corespunz\u0103toare lor.<\/span><\/p>\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 Hai s\u0103 vedem ce reguli de Clean Code putem aplica \u00een metode. Se spune c\u0103 orice metod\u0103 e indicat s\u0103 aib\u0103 cel mult trei niveluri de imbricare, adic\u0103 un for \u00een if \u00een while \u0219i pe aici m\u0103 opresc, nu am voie s\u0103 am mai mult de trei niveluri [&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":[89,159,162],"class_list":["post-1026","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-clean-code","category-tutoriale-video","tag-clase","tag-clean-code","tag-cod-bine-scris"],"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 5 - 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-5\/\" \/>\n<meta property=\"og:locale\" content=\"en_GB\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Clean Code - Episodul 5 - Facem Soft\" \/>\n<meta property=\"og:description\" content=\"Transcriere Hai s\u0103 vedem ce reguli de Clean Code putem aplica \u00een metode. Se spune c\u0103 orice metod\u0103 e indicat s\u0103 aib\u0103 cel mult trei niveluri de imbricare, adic\u0103 un for \u00een if \u00een while \u0219i pe aici m\u0103 opresc, nu am voie s\u0103 am mai mult de trei niveluri [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/facemsoft.ro\/en\/tutoriale-video\/clean-code\/clean-code-episodul-5\/\" \/>\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=\"2017-09-18T15:06:56+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2020-08-17T18:17:21+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=\"9 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-5\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/facemsoft.ro\\\/en\\\/tutoriale-video\\\/clean-code\\\/clean-code-episodul-5\\\/\"},\"author\":{\"name\":\"Bogdan Iancu\",\"@id\":\"https:\\\/\\\/facemsoft.ro\\\/#\\\/schema\\\/person\\\/f2cca604e1acf812e3f40c8cc8a82190\"},\"headline\":\"Clean Code &#8211; Episodul 5\",\"datePublished\":\"2017-09-18T15:06:56+00:00\",\"dateModified\":\"2020-08-17T18:17:21+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/facemsoft.ro\\\/en\\\/tutoriale-video\\\/clean-code\\\/clean-code-episodul-5\\\/\"},\"wordCount\":1861,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/facemsoft.ro\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/facemsoft.ro\\\/en\\\/tutoriale-video\\\/clean-code\\\/clean-code-episodul-5\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/i0.wp.com\\\/facemsoft.ro\\\/wp-content\\\/uploads\\\/2017\\\/09\\\/clean_code.png?fit=1200%2C589&ssl=1\",\"keywords\":[\"clase\",\"clean code\",\"cod bine scris\"],\"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-5\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/facemsoft.ro\\\/en\\\/tutoriale-video\\\/clean-code\\\/clean-code-episodul-5\\\/\",\"url\":\"https:\\\/\\\/facemsoft.ro\\\/en\\\/tutoriale-video\\\/clean-code\\\/clean-code-episodul-5\\\/\",\"name\":\"Clean Code - Episodul 5 - Facem Soft\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/facemsoft.ro\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/facemsoft.ro\\\/en\\\/tutoriale-video\\\/clean-code\\\/clean-code-episodul-5\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/facemsoft.ro\\\/en\\\/tutoriale-video\\\/clean-code\\\/clean-code-episodul-5\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/i0.wp.com\\\/facemsoft.ro\\\/wp-content\\\/uploads\\\/2017\\\/09\\\/clean_code.png?fit=1200%2C589&ssl=1\",\"datePublished\":\"2017-09-18T15:06:56+00:00\",\"dateModified\":\"2020-08-17T18:17:21+00:00\",\"inLanguage\":\"en-GB\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/facemsoft.ro\\\/en\\\/tutoriale-video\\\/clean-code\\\/clean-code-episodul-5\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-GB\",\"@id\":\"https:\\\/\\\/facemsoft.ro\\\/en\\\/tutoriale-video\\\/clean-code\\\/clean-code-episodul-5\\\/#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 5 - 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-5\/","og_locale":"en_GB","og_type":"article","og_title":"Clean Code - Episodul 5 - Facem Soft","og_description":"Transcriere Hai s\u0103 vedem ce reguli de Clean Code putem aplica \u00een metode. Se spune c\u0103 orice metod\u0103 e indicat s\u0103 aib\u0103 cel mult trei niveluri de imbricare, adic\u0103 un for \u00een if \u00een while \u0219i pe aici m\u0103 opresc, nu am voie s\u0103 am mai mult de trei niveluri [&hellip;]","og_url":"https:\/\/facemsoft.ro\/en\/tutoriale-video\/clean-code\/clean-code-episodul-5\/","og_site_name":"Facem Soft","article_publisher":"https:\/\/www.facebook.com\/facemsoft","article_published_time":"2017-09-18T15:06:56+00:00","article_modified_time":"2020-08-17T18:17:21+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":"9 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/facemsoft.ro\/en\/tutoriale-video\/clean-code\/clean-code-episodul-5\/#article","isPartOf":{"@id":"https:\/\/facemsoft.ro\/en\/tutoriale-video\/clean-code\/clean-code-episodul-5\/"},"author":{"name":"Bogdan Iancu","@id":"https:\/\/facemsoft.ro\/#\/schema\/person\/f2cca604e1acf812e3f40c8cc8a82190"},"headline":"Clean Code &#8211; Episodul 5","datePublished":"2017-09-18T15:06:56+00:00","dateModified":"2020-08-17T18:17:21+00:00","mainEntityOfPage":{"@id":"https:\/\/facemsoft.ro\/en\/tutoriale-video\/clean-code\/clean-code-episodul-5\/"},"wordCount":1861,"commentCount":0,"publisher":{"@id":"https:\/\/facemsoft.ro\/#organization"},"image":{"@id":"https:\/\/facemsoft.ro\/en\/tutoriale-video\/clean-code\/clean-code-episodul-5\/#primaryimage"},"thumbnailUrl":"https:\/\/i0.wp.com\/facemsoft.ro\/wp-content\/uploads\/2017\/09\/clean_code.png?fit=1200%2C589&ssl=1","keywords":["clase","clean code","cod bine scris"],"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-5\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/facemsoft.ro\/en\/tutoriale-video\/clean-code\/clean-code-episodul-5\/","url":"https:\/\/facemsoft.ro\/en\/tutoriale-video\/clean-code\/clean-code-episodul-5\/","name":"Clean Code - Episodul 5 - Facem Soft","isPartOf":{"@id":"https:\/\/facemsoft.ro\/#website"},"primaryImageOfPage":{"@id":"https:\/\/facemsoft.ro\/en\/tutoriale-video\/clean-code\/clean-code-episodul-5\/#primaryimage"},"image":{"@id":"https:\/\/facemsoft.ro\/en\/tutoriale-video\/clean-code\/clean-code-episodul-5\/#primaryimage"},"thumbnailUrl":"https:\/\/i0.wp.com\/facemsoft.ro\/wp-content\/uploads\/2017\/09\/clean_code.png?fit=1200%2C589&ssl=1","datePublished":"2017-09-18T15:06:56+00:00","dateModified":"2020-08-17T18:17:21+00:00","inLanguage":"en-GB","potentialAction":[{"@type":"ReadAction","target":["https:\/\/facemsoft.ro\/en\/tutoriale-video\/clean-code\/clean-code-episodul-5\/"]}]},{"@type":"ImageObject","inLanguage":"en-GB","@id":"https:\/\/facemsoft.ro\/en\/tutoriale-video\/clean-code\/clean-code-episodul-5\/#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-gy","_links":{"self":[{"href":"https:\/\/facemsoft.ro\/en\/wp-json\/wp\/v2\/posts\/1026","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=1026"}],"version-history":[{"count":0,"href":"https:\/\/facemsoft.ro\/en\/wp-json\/wp\/v2\/posts\/1026\/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=1026"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/facemsoft.ro\/en\/wp-json\/wp\/v2\/categories?post=1026"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/facemsoft.ro\/en\/wp-json\/wp\/v2\/tags?post=1026"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}