{"id":1029,"date":"2017-09-18T18:11:50","date_gmt":"2017-09-18T15:11:50","guid":{"rendered":"http:\/\/facemsoft.ro\/?p=1029"},"modified":"2020-08-18T16:03:00","modified_gmt":"2020-08-18T13:03:00","slug":"clean-code-episodul-6","status":"publish","type":"post","link":"https:\/\/facemsoft.ro\/en\/tutoriale-video\/clean-code\/clean-code-episodul-6\/","title":{"rendered":"Clean Code &#8211; Episodul 6"},"content":{"rendered":"<div data-elementor-type=\"wp-post\" data-elementor-id=\"1029\" class=\"elementor elementor-1029\">\n\t\t\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-9pzyec8 elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"9pzyec8\" 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-940j120\" data-id=\"940j120\" 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-9eu4xf0 elementor-widget elementor-widget-video\" data-id=\"9eu4xf0\" 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\\\/CleanCode6.png&quot;,&quot;id&quot;:1030,&quot;size&quot;:&quot;&quot;},&quot;lightbox&quot;:&quot;yes&quot;,&quot;youtube_url&quot;:&quot;https:\\\/\\\/www.youtube.com\\\/watch?v=PRG0du1vPIs&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\\\/PRG0du1vPIs?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-9eu4xf0&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%3DeyJ0eXBlIjoidmlkZW8iLCJ2aWRlb1R5cGUiOiJ5b3V0dWJlIiwidXJsIjoiaHR0cHM6XC9cL3d3dy55b3V0dWJlLmNvbVwvZW1iZWRcL1BSRzBkdTF2UElzP2ZlYXR1cmU9b2VtYmVkJnN0YXJ0JmVuZCZ3bW9kZT1vcGFxdWUmbG9vcD0wJmNvbnRyb2xzPTEmbXV0ZT0wJnJlbD0wJmNjX2xvYWRfcG9saWN5PTAiLCJhdXRvcGxheSI6IiIsIm1vZGFsT3B0aW9ucyI6eyJpZCI6ImVsZW1lbnRvci1saWdodGJveC05ZXU0eGYwIiwiZW50cmFuY2VBbmltYXRpb24iOiIiLCJlbnRyYW5jZUFuaW1hdGlvbl90YWJsZXQiOiIiLCJlbnRyYW5jZUFuaW1hdGlvbl9tb2JpbGUiOiIiLCJ2aWRlb0FzcGVjdFJhdGlvIjoiMTY5In19\">\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\/CleanCode6.png?fit=755%2C510&amp;ssl=1\" class=\"attachment-full size-full wp-image-1030\" alt=\"Clean Code curs 6\" srcset=\"https:\/\/i0.wp.com\/facemsoft.ro\/wp-content\/uploads\/2017\/09\/CleanCode6.png?w=755&amp;ssl=1 755w, https:\/\/i0.wp.com\/facemsoft.ro\/wp-content\/uploads\/2017\/09\/CleanCode6.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=\"Ruleaz\u0103 videoul\" tabindex=\"0\">\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-fbd8fb1 elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"fbd8fb1\" 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-cb04332\" data-id=\"cb04332\" 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-39c1261 elementor-widget elementor-widget-spacer\" data-id=\"39c1261\" 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-5d23795 elementor-widget elementor-widget-heading\" data-id=\"5d23795\" 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-abb92b9 elementor-widget elementor-widget-text-editor\" data-id=\"abb92b9\" 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;\">Legat de comentarii \u0219i de reguli de Clean Code \u00een comentarii: ce cele mai multe ori comentariile nu \u00ee\u0219i au locul deloc. <\/span><span style=\"font-weight: 400;\">Dac\u0103 codul nostru e destul de bine scris \u0219i conform principiilor pe care le-am enun\u021bat p\u00e2n\u0103 acum, el este auto-explicativ. Nu am nevoie s\u0103 mai scriu \u00eenc\u0103 o dat\u0103 ce face linia respectiv\u0103 de cod. Scriu int numarZile = 7, n-am nevoie s\u0103 pun comentariu deasupra &#8211; num\u0103rul de zile a fost ini\u021bializat cu 7. Se prinde toat\u0103 lumea de asta.<\/span><\/p><p><span style=\"font-weight: 400;\">Apoi, nu e indicat s\u0103 folosim comentarii pentru a ne cere scuze. Cred c\u0103 nu e nevoie s\u0103 v\u0103 spun eu chestia asta. To\u021bi am \u00eent\u00e2lnit poate comentarii de genul \u0103sta &#8211; \u201ec\u00e2nd am scris asta doar Dumnezeu \u0219i eu \u0219tiam ce am scris aici, acum doar Dumnezeu \u0219tie\u201d. E specific\u0103 pentru unii programatori. Sau comentarii de genul \u201ep-aici crap\u0103 ceva, investigheaz\u0103 \u0219i tu\u201d. Nu e datoria altcuiva s\u0103 fac\u0103 depanare pe codul nostru pentru c\u0103 nici nou\u0103 la r\u00e2ndul nostru nu ne place s\u0103 facem depanare pe codul altuia.<\/span><\/p><p><span style=\"font-weight: 400;\">Sunt permise comentarii doar \u00een dou\u0103 situa\u021bii \u0219i vi le amintesc imediat. P\u00e2n\u0103 atunci, e o practic\u0103 proast\u0103 s\u0103 coment\u0103m cod surs\u0103 c\u0103 poate va fi folosit dup-aia. Nu o s\u0103 avem nevoie de el &#8211; You Ain&#8217;t Gonna Need It. <\/span><span style=\"font-weight: 400;\">De ce? Pentru c\u0103 exist\u0103 solu\u021bii de versionare \u0219i aici dau c\u00e2teva exemple: Turtoise SVN, Git, TFS \u0219i dac\u0103 mai \u0219ti\u021bi voi altele pute\u021bi s\u0103 le scrie\u021bi \u00een comentarii. Solu\u021bia de versionare e de fapt un program instalat pe un server pe care st\u0103 tot codul \u0219i apoi pe fiecare client, pe fiecare ma\u0219in\u0103 pe care codeaz\u0103 programatorii, \u0219i care \u00eemi permite s\u0103 fac dou\u0103 chestii: 1. S\u0103 pun modific\u0103rile mele pe server \u0219i 2. S\u0103 iau toate noile modific\u0103ri de pe server. \u00cen acest fel poate s\u0103 lucreze o echip\u0103 pe acela\u0219i cod. Eu modific \u00eentr-un fi\u0219ier, pun modificarea pe server, c\u00e2nd fac Get Latest Version \u00eemi aduce toate modific\u0103rile de pe server, ale celorlal\u021bi. Pot s\u0103 lucrez pe cod \u00een continuare \u0219i a\u0219a mai departe. Eu c\u00e2nd trimit pe server modific\u0103rile mele, trimit toate detaliile legate cine sunt eu, la or\u0103 am dat commit, etc. Adic\u0103 nu e nevoie s\u0103 pun detalii \u0219i \u00een al doilea r\u00e2nd pot s\u0103 fac oric\u00e2nd restore la codul vechi. S\u0103 restaurez un cod pe care l-am scris deja. Deci dac\u0103 m\u0103 trezesc c\u0103 am \u0219ters o metod\u0103, pot oric\u00e2nd s\u0103 m\u0103 \u00eentorc la versiunea veche \u00een care scrisesem codul. Adic\u0103 oric\u00e2nd am acces asupra istoricului modific\u0103rilor.<\/span><\/p><p><span style=\"font-weight: 400;\">Dac\u0103 folosi\u021bi sau sim\u021bi\u021bi nevoia de a folosi comentarii pentru a face o metod\u0103 mai lizibil\u0103 pentru c\u0103 poate nu se \u00een\u021belege, atunci cred c\u0103 e cazul ca acea metod\u0103 s\u0103 devin\u0103 mai multe metode. \u0218i anume acolo unde sim\u021bi\u021bi nevoia s\u0103 introduce\u021bi un comentariu ca s\u0103 separa\u021bi cumva partea de sus de partea de jos, poate ar fi mai ok s\u0103 face\u021bi de fapt un apel al unei alte metode <\/span><span style=\"font-weight: 400;\">Asta se \u00eent\u00e2mpl\u0103 de obicei pentru metode ce au mai mult de 20 de linii de cod, care deja \u00eencalc\u0103 cealalt\u0103 regul\u0103 pe care am enumerat-o \u0219i anume num\u0103rul maxim de linii de cod.<\/span><\/p><p><span style=\"font-weight: 400;\">Trebuie s\u0103 evit\u0103m blocurile de comentarii introductive. Le-a\u021bi mai v\u0103zut \u00een unele limbaje. Alea cu autor nu \u0219tiu care, modificat ultima dat\u0103 la. Toate acestea sunt \u00een solu\u021bia de versionare. \u0218i mai aminteam \u0219i slide-ul trecut c\u0103 exist\u0103 dou\u0103 excep\u021bii de la a nu scrie comentarii \u0219i anume: am voie s\u0103 scriu comentariu de tip doc comment (\u00een Java \u0219i \u00een C# atunci c\u00e2nd creezi biblioteci). Adic\u0103 trebuie s\u0103 informez oarecum pe cei ce vor folosi biblioteca pu\u021bin mai mult dec\u00e2t \u00een cazul unei func\u021bii scrise pentru oricine. Adic\u0103 vreau s\u0103 spun exact ce face func\u021bia respectiv\u0103 \u0219i atunci pot s\u0103 scriu un paragraf ca \u0219i doc comment despre utilitatea exact\u0103 a func\u021biei respective.<\/span><\/p><p><span style=\"font-weight: 400;\">O alt\u0103 aplicabilitate a comentariilor \u0219i un alt caz \u00een care sunt permise sunt TO DO comments. Adic\u0103. scriu comentarii de tip TODO cu ce mai e de implementat \u00een func\u021bia respectiv\u0103. S\u0103 zicem c\u0103 trebuie s\u0103 ar\u0103t clientului exact ce am f\u0103cut eu. Am acum demo, o demonstra\u021bie a ce face aplica\u021bia. Trebuie s\u0103 fac neap\u0103rat \u00eentr-o or\u0103, nu am timp s\u0103 valideze toate chestiile. Validez 3 dintre ele \u0219i \u00eemi trec acolo TODO &#8211; de validat celelalte dou\u0103 sau c\u00e2te au mai r\u0103mas. Dup\u0103 ce fac prezentare revin \u0219i le validez. Sau e vineri \u0219i fac un comentariu TODO despre ce o s\u0103 fac luni. Acestea nu trebuie s\u0103 persiste \u00een solu\u021bia de versionare \u0219i \u00een niciun caz nu trebuie ajung\u0103 \u00een varianta final\u0103, aceea care va fi scoas\u0103 pe pia\u021b\u0103 (released).<\/span><\/p><p><span style=\"font-weight: 400;\">Mai avem un scurt dic\u021bionar \u0219i cu asta cam \u00eencheiem. \u0218i anume legat de anumi\u021bi termeni pe care poate i-a\u021bi auzit la serviciu \u0219i nu i-a\u021bi \u00een\u021beles sau poate i-a\u021bi citit prin diverse tutoriale \u0219i nu i-a\u021bi \u00een\u021beles sau pe care poate \u00eei auzi\u021bi prima dat\u0103.<\/span><\/p><p><span style=\"font-weight: 400;\">\u00cen primul r\u00e2nd vorbim de Test Driven Development sau TDD. E exact schema asta din dreapta \u0219i anume fac dezvoltare baz\u00e2ndu-m\u0103 pe cazuri de utilizare. Clientul vine la mine cu specifica\u021bia de program \u0219i eu scriu cazuri \u00een care programul respectiv nu va merge. Scriu un caz, apoi scriu cod care trece acel caz, adic\u0103 cod care clarific\u0103 \u0219i pune toate condi\u021biile astfel \u00eenc\u00e2t acele failing tests sau teste de fail a programului vor fi satisf\u0103cute. Fac refactor. Asta \u00eenseamn\u0103 rescrierea codului surs\u0103 \u00eentr-o manier\u0103 ce se preteaz\u0103 mai bine noilor specifica\u021bii. Adic\u0103 rescriu codul astfel \u00eenc\u00e2t s\u0103 trec testul respectiv. Dac\u0103 trece testul, atunci trec la un nou test, conform schemei de aici. Scriu un nou failing test, scriu cod care s\u0103 \u00eel treac\u0103, dac\u0103 nu rescriu codul, dac\u0103 da scriu \u00eenc\u0103 un failing test \u0219i tot a\u0219a p\u00e2n\u0103 c\u00e2nd nu mai exist\u0103 teste de trecut. C\u00e2nd codul meu trece toate testele atunci vorbim de un cod ce poate fi scos pe pia\u021b\u0103 sau trecut \u00een varianta de release. \u0218i nu v\u0103 g\u00e2ndi\u021bi c\u0103 testele astea se fac neap\u0103rat manual. C\u00e2nd vorbim aici de \u201ewrite a failing test\u201d nu vorbim de o descriere neap\u0103rat scris\u0103 a cazului \u00een care codul respectiv crap\u0103 ci de automatic testing sau Unit Testing, \u0219i anume un cod ce permite testarea automat\u0103 a altui cod. Deci e un cod scris ca s\u0103 testeze alt cod.<\/span><\/p><p><span style=\"font-weight: 400;\">\u0218i e foarte util \u0219i \u00een refactoring. S\u0103 spunem c\u0103 nu neap\u0103rat am scris un nou caz de utilizare \u0219i vreau s\u0103 fac acel cod al meu mai bun. Nu, vine clientul \u0219i vrea o nou\u0103 specifica\u021bie. Vrea s\u0103 introduc\u0103 altceva \u00een programul lui. Eu ca s\u0103 introduc altceva dac\u0103 am respectat regulile de Clean Code, pot s\u0103 adaug chestii \u00een plus \u00een clas\u0103. Spuneam c\u0103 nu e ok s\u0103 modific, dar s\u0103 zicem c\u0103 n-am fost inspirat \u00een acea zi \u0219i trebuie s\u0103 fac \u0219i modific\u0103ri. <\/span><span style=\"font-weight: 400;\">M\u0103 pot trezi c\u0103 la refactoring introduc regression, adic\u0103 regresie. Codul meu convine noilor standarde, noilor specifica\u021bii, noilor cazuri de utilizare, dar nu le mai respect\u0103 pe cele vechi. \u0218i atunci a\u0219 vrea s\u0103 \u0219tiu chestia asta \u0219i pentru asta rulez din nou testele scrise pentru codul vechi \u0219i v\u0103d dac\u0103 le satisface pe acelea \u0219i le satisface \u0219i pe cele noi atunci totul e ok.<\/span><\/p><p><span style=\"font-weight: 400;\">Mai avem ca \u0219i element \u00een scurtul nostru dic\u021bionar Code Review. Ce \u00eenseamn\u0103 Code Review sau validarea codului s\u0103 \u00eei spunem \u00een rom\u00e2n\u0103? E o tehnic\u0103 \u00eent\u00e2nit\u0103 \u00een special \u00een programarea AGILE. AGILE e o tehnic\u0103 de programare. M\u0103 rog, e de fapt un manifesto, un manifest prin care sunt definite ni\u0219te reguli, \u0219i pornind de la aceste reguli sunt definite ni\u0219te reguli mai specifice ce dau denumirea unor tehnici de programare. \u0218i avem aici Extreme Programming dat ca exemplu \u0219i Scrum.<\/span><\/p><p><span style=\"font-weight: 400;\">Extreme Programming\u00a0 (XP) con\u021bine \u0219i Pair Programming la fel \u0219i Scrumul, care spre deosebire de XP este o tehnic\u0103 incremental\u0103. Se lucreaz\u0103 \u00een perioade de timp numite sprinturi \u0219i de fiecare dat\u0103 adaug func\u021bionalit\u0103\u021bi \u00een plus codului meu pe baza cerin\u021belor clientului. Adic\u0103 mai \u00eent\u00e2i voi \u00eencepe cu func\u021bionalit\u0103\u021bile elementare \u0219i cele mai importante \u0219i apoi scriu func\u021bionalit\u0103\u021bi din ce \u00een ce mai pu\u021bin importante. Pentru mai multe detalii legate de Scrum \u0219i Agile v\u0103 rog s\u0103 c\u0103uta\u021bi resurse suplimentare, nefiind scopul acestui tutorial.<\/span><\/p><p><span style=\"font-weight: 400;\">Code Review \u00eenseamn\u0103 ca orice bucat\u0103 de cod scris\u0103 de mine s\u0103 fie revizuit\u0103 \u0219i de un alt coleg programator. S\u0103 fie revizuit\u0103 nu neap\u0103rat ca \u0219i testat\u0103, ci acel coleg s\u0103 citeasc\u0103 totul \u0219i s\u0103 spun\u0103 c\u0103 acel cod e lizibil, e curat \u0219i corespunde principiilor echipei sau principiilor Scrum.<\/span><\/p><p><span style=\"font-weight: 400;\">Tot \u00een Agile este \u00eent\u0103rit\u0103 \u0219i tehnica numit\u0103 Pair Programming sau programarea pe perechi. Asta \u00eenseamn\u0103 c\u0103 programatorii lucreaz\u0103 \u00een perechi de c\u00e2te 2. De ce? Am un task complex, foarte dificil. Nu e niciun programator din echip\u0103 capabil s\u0103 \u00eel fac\u0103 singur atunci poate e mai ok ca doi programatori din echip\u0103 s\u0103 se uite pe task-ul respectiv \u0219i s\u0103 \u00eencerce s\u0103 \u00eel fac\u0103 \u00eempreun\u0103. Unde nu \u0219tie unul, poate \u0219tie cel\u0103lalt, unde \u0219tie cel\u0103lalt poate nu \u0219tie primul. <\/span><span style=\"font-weight: 400;\">Atunci c\u00e2nd vorbim de task-uri complexe sau de pair programming de dragul de a evita code review, de obicei e vorba de doi programatori seniori sau cel pu\u021bin middle level \u0219i de obicei fac cu r\u00e2ndul. Adic\u0103 \u00eent\u00e2i scrie primul cod \u0219i cel\u0103lalt observ\u0103, apoi schimb\u0103.<\/span><\/p><p><span style=\"font-weight: 400;\">Mai exist\u0103 tehnic\u0103 de Pair Programming folosit\u0103 \u0219i pentru a educa sau \u00eenv\u0103\u021ba, a deprinde tehnici pentru programatorii juniori sau nou integra\u021bi \u00een echip\u0103. Aici \u00eentr-adev\u0103r problema e cu codul scris de ei pentru c\u0103 ei nu vor fi \u00eenc\u0103 preg\u0103ti\u021bi s\u0103 scrie cod singuri, a\u0219a c\u0103 de obicei \u00eel vor asista doar pe programatorul senior \u00een timp ce scrie cod, iar timpii vor fi oarecum dispropor\u021biona\u021bi, nu neap\u0103rat egali.<\/span><\/p><p><span style=\"font-weight: 400;\">Spuneam c\u0103 v\u0103 dau \u0219i ni\u0219te exemple de instrumente pe care le putem folosi pentru a ne asigura c\u0103 acel cod surs\u0103 scris de noi e curat. Vreau s\u0103 v\u0103 amintesc de IntelliJIDEA. IDE-ul sau mediul de dezvoltare de la cei care au produs \u0219i ReSharper-ul. Este pentru Java \u0219i con\u021bine foarte multe chestii de Clean Code \u0219i de validare automat\u0103 a modului \u00een care denumesc variabile, a modului \u00een care scriu codul \u0219.a.m.d. La fel face \u0219i ReSharper-ul, care e un plugin pentru Visual Studio,\u00a0 scris de aceea\u0219i oameni. Din p\u0103cate e paid la fel ca \u0219i IntelliJ. Cred c\u0103 exist\u0103 o variant\u0103 Community Edition care e free pentru ambele, dar varianta Premium e paid. Mai am apoi PMD, plugin pentru Eclipse, CheckStyle \u0219i FindBugs, la fel plugin pentru IDE-uri.<\/span><\/p><p><span style=\"font-weight: 400;\">Spuneam c\u0103 avem un bonus la sf\u00e2r\u0219it. \u0218i anume, vreau s\u0103 v\u0103 spun despre dou\u0103 reguli preluate din alte p\u0103r\u021bi \u0219i aplicabile \u00een programare. Una se nume\u0219te \u201eThe Broken Window Principle\u201d adic\u0103 principiul ferestrei sparte. S-a dovedit practic c\u0103 ma\u0219inile sau cl\u0103dirile care au o fereastr\u0103 spart\u0103 sunt mai vulnerabile la vandalism. \u0218i o fereastr\u0103 spart\u0103 duce de obicei la mai multe ferestre sparte care pe m\u0103sur\u0103 ce timpul trece duc la o ruin\u0103. Acela\u0219i lucru este valabil \u0219i pentru codul nostru surs\u0103. Azi fac abstrac\u021bie de la o regul\u0103 de clean code, m\u00e2ine fac abstrac\u021bie de la alta \u0219i m\u0103 trezesc cu un cod scris cu picioarele c\u0103ruia nu am ce s\u0103-i fac dec\u00e2t s\u0103 \u00eel scriu cap-coad\u0103 din nou.<\/span><\/p><p><span style=\"font-weight: 400;\">Apoi mai este o regul\u0103 de bun sim\u021b numit\u0103 Boy Scout Rule sau regula cerceta\u0219ilor. S\u0103 l\u0103s\u0103m codul pu\u021bin mai curat dec\u00e2t l-am g\u0103sit. Adic\u0103, dac\u0103 v\u0103d c\u0103 ceva nu e \u00een regul\u0103, poate e ok s\u0103 mai corectez \u0219i din codul altuia, nu neap\u0103rat s\u0103 scriu cod 100% corect.\u00a0<\/span><\/p><p><span style=\"font-weight: 400;\">Dac\u0103 dori\u021bi resurse suplimentare, v\u0103 recomand cartea \u201eClean Code: A Handbook of Agile Software Craftsmanship\u201d a lui Robert C. Martin, cunoscut \u00een comunitate drept Uncle Bob. O s\u0103 g\u0103si\u021bi \u0219i o serie de tutoriale de Clean Code \u00een care el joac\u0103 rolul de Uncle Bob \u0219i \u00eei explic\u0103 nepoatei sale cum s\u0103 scrie cod curat. \u0218i tutorialul de pe Pluralsight, \u00een care o s\u0103 g\u0103si\u021bi o parte dintre ideile prezentate ast\u0103zi, numit \u201eClean Code: Writing Code for Humans\u201d.<\/span><\/p><p><span style=\"font-weight: 400;\">O s\u0103 \u00eenchei cu singura metod\u0103 prin care poate fi m\u0103surat\u0103 calitatea codului \u0219i anume num\u0103rul de \u201eWhat The Hell\u201d \/ minute auzit la code review \u0219i cu citatul lui Martin Golding \u201dS\u0103 scrie\u021bi cod \u00eentotdeauna ca \u0219i cum colegul care se va ocupa de mentenan\u021ba lui e un psihopat violent care \u0219tie unde locui\u021bi\u201d \ud83d\ude42<\/span><\/p><p><span style=\"font-weight: 400;\">Cam asta am avut de spus. Dac\u0103 ave\u021bi \u00eentreb\u0103ri sau comentarii v\u0103 rog s\u0103 folosi\u021bi formularul de contact de pe site sau s\u0103 comenta\u021bi aici. V\u0103 mul\u021bumesc c\u0103 a\u021bi avut r\u0103bdare s\u0103 m\u0103 asculta\u021bi p\u00e2n\u0103 la final \u0219i v\u0103 salut!<\/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 Legat de comentarii \u0219i de reguli de Clean Code \u00een comentarii: ce cele mai multe ori comentariile nu \u00ee\u0219i au locul deloc. Dac\u0103 codul nostru e destul de bine scris \u0219i conform principiilor pe care le-am enun\u021bat p\u00e2n\u0103 acum, el este auto-explicativ. Nu am nevoie s\u0103 mai scriu \u00eenc\u0103 [&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,169],"class_list":["post-1029","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-tdd"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.2 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Clean Code - Episodul 6 - 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-6\/\" \/>\n<meta property=\"og:locale\" content=\"en_GB\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Clean Code - Episodul 6 - Facem Soft\" \/>\n<meta property=\"og:description\" content=\"Transcriere Legat de comentarii \u0219i de reguli de Clean Code \u00een comentarii: ce cele mai multe ori comentariile nu \u00ee\u0219i au locul deloc. Dac\u0103 codul nostru e destul de bine scris \u0219i conform principiilor pe care le-am enun\u021bat p\u00e2n\u0103 acum, el este auto-explicativ. Nu am nevoie s\u0103 mai scriu \u00eenc\u0103 [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/facemsoft.ro\/en\/tutoriale-video\/clean-code\/clean-code-episodul-6\/\" \/>\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:11:50+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2020-08-18T13:03:00+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=\"11 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-6\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/facemsoft.ro\/en\/tutoriale-video\/clean-code\/clean-code-episodul-6\/\"},\"author\":{\"name\":\"Bogdan Iancu\",\"@id\":\"https:\/\/facemsoft.ro\/#\/schema\/person\/f2cca604e1acf812e3f40c8cc8a82190\"},\"headline\":\"Clean Code &#8211; Episodul 6\",\"datePublished\":\"2017-09-18T15:11:50+00:00\",\"dateModified\":\"2020-08-18T13:03:00+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/facemsoft.ro\/en\/tutoriale-video\/clean-code\/clean-code-episodul-6\/\"},\"wordCount\":2274,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/facemsoft.ro\/#organization\"},\"image\":{\"@id\":\"https:\/\/facemsoft.ro\/en\/tutoriale-video\/clean-code\/clean-code-episodul-6\/#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\",\"tdd\"],\"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-6\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/facemsoft.ro\/en\/tutoriale-video\/clean-code\/clean-code-episodul-6\/\",\"url\":\"https:\/\/facemsoft.ro\/en\/tutoriale-video\/clean-code\/clean-code-episodul-6\/\",\"name\":\"Clean Code - Episodul 6 - Facem Soft\",\"isPartOf\":{\"@id\":\"https:\/\/facemsoft.ro\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/facemsoft.ro\/en\/tutoriale-video\/clean-code\/clean-code-episodul-6\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/facemsoft.ro\/en\/tutoriale-video\/clean-code\/clean-code-episodul-6\/#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:11:50+00:00\",\"dateModified\":\"2020-08-18T13:03:00+00:00\",\"inLanguage\":\"en-GB\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/facemsoft.ro\/en\/tutoriale-video\/clean-code\/clean-code-episodul-6\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-GB\",\"@id\":\"https:\/\/facemsoft.ro\/en\/tutoriale-video\/clean-code\/clean-code-episodul-6\/#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 6 - 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-6\/","og_locale":"en_GB","og_type":"article","og_title":"Clean Code - Episodul 6 - Facem Soft","og_description":"Transcriere Legat de comentarii \u0219i de reguli de Clean Code \u00een comentarii: ce cele mai multe ori comentariile nu \u00ee\u0219i au locul deloc. Dac\u0103 codul nostru e destul de bine scris \u0219i conform principiilor pe care le-am enun\u021bat p\u00e2n\u0103 acum, el este auto-explicativ. Nu am nevoie s\u0103 mai scriu \u00eenc\u0103 [&hellip;]","og_url":"https:\/\/facemsoft.ro\/en\/tutoriale-video\/clean-code\/clean-code-episodul-6\/","og_site_name":"Facem Soft","article_publisher":"https:\/\/www.facebook.com\/facemsoft","article_published_time":"2017-09-18T15:11:50+00:00","article_modified_time":"2020-08-18T13:03:00+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":"11 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/facemsoft.ro\/en\/tutoriale-video\/clean-code\/clean-code-episodul-6\/#article","isPartOf":{"@id":"https:\/\/facemsoft.ro\/en\/tutoriale-video\/clean-code\/clean-code-episodul-6\/"},"author":{"name":"Bogdan Iancu","@id":"https:\/\/facemsoft.ro\/#\/schema\/person\/f2cca604e1acf812e3f40c8cc8a82190"},"headline":"Clean Code &#8211; Episodul 6","datePublished":"2017-09-18T15:11:50+00:00","dateModified":"2020-08-18T13:03:00+00:00","mainEntityOfPage":{"@id":"https:\/\/facemsoft.ro\/en\/tutoriale-video\/clean-code\/clean-code-episodul-6\/"},"wordCount":2274,"commentCount":0,"publisher":{"@id":"https:\/\/facemsoft.ro\/#organization"},"image":{"@id":"https:\/\/facemsoft.ro\/en\/tutoriale-video\/clean-code\/clean-code-episodul-6\/#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","tdd"],"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-6\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/facemsoft.ro\/en\/tutoriale-video\/clean-code\/clean-code-episodul-6\/","url":"https:\/\/facemsoft.ro\/en\/tutoriale-video\/clean-code\/clean-code-episodul-6\/","name":"Clean Code - Episodul 6 - Facem Soft","isPartOf":{"@id":"https:\/\/facemsoft.ro\/#website"},"primaryImageOfPage":{"@id":"https:\/\/facemsoft.ro\/en\/tutoriale-video\/clean-code\/clean-code-episodul-6\/#primaryimage"},"image":{"@id":"https:\/\/facemsoft.ro\/en\/tutoriale-video\/clean-code\/clean-code-episodul-6\/#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:11:50+00:00","dateModified":"2020-08-18T13:03:00+00:00","inLanguage":"en-GB","potentialAction":[{"@type":"ReadAction","target":["https:\/\/facemsoft.ro\/en\/tutoriale-video\/clean-code\/clean-code-episodul-6\/"]}]},{"@type":"ImageObject","inLanguage":"en-GB","@id":"https:\/\/facemsoft.ro\/en\/tutoriale-video\/clean-code\/clean-code-episodul-6\/#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-gB","_links":{"self":[{"href":"https:\/\/facemsoft.ro\/en\/wp-json\/wp\/v2\/posts\/1029","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=1029"}],"version-history":[{"count":0,"href":"https:\/\/facemsoft.ro\/en\/wp-json\/wp\/v2\/posts\/1029\/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=1029"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/facemsoft.ro\/en\/wp-json\/wp\/v2\/categories?post=1029"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/facemsoft.ro\/en\/wp-json\/wp\/v2\/tags?post=1029"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}