{"id":888,"date":"2020-09-13T19:37:11","date_gmt":"2020-09-13T19:37:11","guid":{"rendered":"https:\/\/www.juniorjavadeveloper.pl\/?p=888"},"modified":"2023-11-19T16:12:04","modified_gmt":"2023-11-19T16:12:04","slug":"czytanie-cudzego-kodu-jak-samemu-pisac-czytelny-kod","status":"publish","type":"post","link":"https:\/\/www.juniorjavadeveloper.pl\/en\/2020\/09\/13\/czytanie-cudzego-kodu-jak-samemu-pisac-czytelny-kod\/","title":{"rendered":"Reading other people's code - how to write readable code yourself"},"content":{"rendered":"<p class=\"has-large-font-size wp-block-paragraph\">W tym artykule opisz&#281; bardzo wa&#380;n&#261; kwesti&#281;, kt&oacute;r&#261; jest czytanie cudzego kodu, ale r&oacute;wnocze&#347;nie b&#281;d&#261;, to r&oacute;wnie&#380; wskaz&oacute;wki jak pisa&#263; w&#322;asny kod tak, aby kto&#347; inny m&oacute;g&#322; go zrozumie&#263;. Pracuj&#261;c z narz&#281;dziem git, ka&#380;dy fragment kodu posiada informacj&#281; o autorze, zmianach w kodzie i czasie dokonania zmian. Tym samym &ldquo;uchylanie si&#281;&rdquo; od w&#322;asnego kodu jest niemo&#380;liwe, m&oacute;wienie, to nie m&oacute;j kod nie zadzia&#322;a.<\/p>\n\n\n    <style>\r\n        .wpj-jtoc.--jtoc-theme-basic-light.--jtoc-has-custom-styles {\r\n            --jtoc-numeration-suffix: \". \";\n--jtoc-numeration-color: #adadad;\n        }\r\n\r\n            <\/style>\r\n\r\n\r\n\r\n<div id=\"wpj-jtoc\" class=\"wpj-jtoc wpj-jtoc--main --jtoc-the-content --jtoc-theme-basic-light --jtoc-title-align-left --jtoc-toggle-icon --jtoc-toggle-position-right --jtoc-toggle-1 --jtoc-has-numeration --jtoc-has-custom-styles --jtoc-is-unfolded\" >\r\n\r\n    \r\n    <!-- TOC -->\r\n    <div class=\"wpj-jtoc--toc\">\r\n                                <div class=\"wpj-jtoc--header\">\r\n                <div class=\"wpj-jtoc--header-main\">\r\n                                        <div class=\"wpj-jtoc--title\">\r\n                        <span class=\"wpj-jtoc--title-label\">Table of Contents<\/span>\r\n                    <\/div>\r\n                                                                <div class=\"wpj-jtoc--toggle-wrap\">\r\n                                                                                                                    <div class=\"wpj-jtoc--toggle-box\">\r\n                                    <div class=\"wpj-jtoc--toggle\"><\/div>\r\n                                <\/div>\r\n                                                    <\/div>\r\n                                    <\/div>\r\n            <\/div>\r\n                            <div class=\"wpj-jtoc--body\">\r\n                        <nav class=\"wpj-jtoc--nav\">\r\n                <ol class=\"wpj-jtoc--items\"><li class=\"wpj-jtoc--item --jtoc-h2\">\r\n        <div class=\"wpj-jtoc--item-content\" data-depth=\"2\">\r\n                <a href=\"#wstep\" title=\"Preface\" data-numeration=\"1\">Preface<\/a>\r\n                    <\/div> <\/li><li class=\"wpj-jtoc--item --jtoc-h2\">\r\n        <div class=\"wpj-jtoc--item-content\" data-depth=\"2\">\r\n                <a href=\"#kod-zrodlowy-czytamy-jak-dobrze-napisana-ksiazke\" title=\"We read the source code like a well-written book\" data-numeration=\"2\">We read the source code like a well-written book<\/a>\r\n                    <\/div> <\/li><li class=\"wpj-jtoc--item --jtoc-h2\">\r\n        <div class=\"wpj-jtoc--item-content\" data-depth=\"2\">\r\n                <a href=\"#definition-of-done-kiedy-moj-kod-jest-ukonczony\" title=\"Definition of Done \u2013 when is my code complete?\" data-numeration=\"3\">Definition of Done \u2013 when is my code complete?<\/a>\r\n                    <\/div> <\/li><li class=\"wpj-jtoc--item --jtoc-h2\">\r\n        <div class=\"wpj-jtoc--item-content\" data-depth=\"2\">\r\n                <a href=\"#czytelny-kod-zrodlowy\" title=\"Easy to read source code\" data-numeration=\"4\">Easy to read source code<\/a>\r\n                    <\/div> <ol class=\"wpj-jtoc--items\"><li class=\"wpj-jtoc--item --jtoc-h3\">\r\n        <div class=\"wpj-jtoc--item-content\" data-depth=\"3\">\r\n                <a href=\"#konwencja-nazewnicza\" title=\"Naming convention\" data-numeration=\"4.1\">Naming convention<\/a>\r\n                    <\/div> <\/li><li class=\"wpj-jtoc--item --jtoc-h3\">\r\n        <div class=\"wpj-jtoc--item-content\" data-depth=\"3\">\r\n                <a href=\"#kolejnosc-elementow-w-klasie\" title=\"The order of elements in a class\" data-numeration=\"4.2\">The order of elements in a class<\/a>\r\n                    <\/div> <\/li><li class=\"wpj-jtoc--item --jtoc-h3\">\r\n        <div class=\"wpj-jtoc--item-content\" data-depth=\"3\">\r\n                <a href=\"#samoopisujacy-sie-kod\" title=\"Self-describing code\" data-numeration=\"4.3\">Self-describing code<\/a>\r\n                    <\/div> <\/li><\/ol><\/li><li class=\"wpj-jtoc--item --jtoc-h2\">\r\n        <div class=\"wpj-jtoc--item-content\" data-depth=\"2\">\r\n                <a href=\"#wzorce-projektowe\" title=\"Design Patterns\" data-numeration=\"5\">Design Patterns<\/a>\r\n                    <\/div> <\/li><li class=\"wpj-jtoc--item --jtoc-h2\">\r\n        <div class=\"wpj-jtoc--item-content\" data-depth=\"2\">\r\n                <a href=\"#dobre-praktyki-solid-i-dry\" title=\"Good practices SOLID and DRY\" data-numeration=\"6\">Good practices SOLID and DRY<\/a>\r\n                    <\/div> <\/li><\/ol>            <\/nav>\r\n                    <\/div>\r\n    <\/div>\r\n<\/div>\r\n\n\n\n<h2 class=\"wp-block-heading joli-heading jtoc-heading\" id=\"wstep\">Preface<\/h2>\n\n\n\n<p class=\"has-large-font-size wp-block-paragraph\">I will only focus on the readability of the code, which is immediately noticeable during the first code review. Additionally, I will describe such an important issue as Definition of Done, i.e. the issue of determining when the code that has been written is considered finished.<\/p>\n\n\n\n<p class=\"has-large-font-size wp-block-paragraph translation-block\">In this article, I will not delve into such code elements as:<br>\u2013 application architecture,<br>\u2013 providing functionality via API,<br>\u2013 application modules\/layers.<\/p>\n\n\n\n<p class=\"has-large-font-size wp-block-paragraph translation-block\">I will deal with such code elements as:<br>\u2013 naming convention,<br>\u2013 order of elements in a class,<br>\u2013 self-describing code,<br>\u2013 design patterns,<br>\u2013 SOLID and DRY good practices.<\/p>\n\n\n\n<h2 class=\"wp-block-heading joli-heading jtoc-heading\" id=\"kod-zrodlowy-czytamy-jak-dobrze-napisana-ksiazke\">We read the source code like a well-written book<\/h2>\n\n\n\n<p class=\"has-large-font-size wp-block-paragraph\">&ldquo;Kod napisany w dowolnym j&#281;zyku programowania powinien czyta&#263; si&#281; jak dobra ksi&#261;&#380;ka. Osoba czytaj&#261;ca ksi&#261;&#380;k&#281; nie chcia&#322;by przecie&#380; by&#263; zanudzana dok&#322;adn&#261; kopi&#261; fragment&oacute;w ksi&#261;&#380;ki umieszczan&#261; w wielu miejscach tej samej ksi&#261;&#380;ki (DRY &ndash; Don&rsquo;t Repeat Yourself). Ci&#281;&#380;ko by&#322;oby czyta&#263; ksi&#261;&#380;k&#281;, kt&oacute;ra ma pomieszane rozdzia&#322;y, akcja nie jest sp&oacute;jna i ma si&#281; wra&#380;enie, &#380;e autor chyba nie wiedzia&#322; co pisze (SOLID).&rdquo; &ndash; artyku&#322; &ldquo;<a rel=\"noreferrer noopener\" href=\"https:\/\/www.juniorjavadeveloper.pl\/en\/2020\/02\/29\/dlaczego-kod-w-jezyku-java-powinien-byc-solidny-oraz-suchy-dry\/\" target=\"_blank\">Dlaczego kod w j&#281;zyku Java powinien by&#263; SOLID&rsquo;ny oraz suchy, DRY?<\/a>&ldquo;.<\/p>\n\n\n\n<p class=\"has-large-font-size wp-block-paragraph\">It is true that just knowing the basics of Java does not mean that we will write readable, correct and nice code. Just like knowing Polish, not everyone can write books, we also have various literary genres, e.g. novel, drama.<\/p>\n\n\n\n<h2 class=\"wp-block-heading joli-heading jtoc-heading\" id=\"definition-of-done-kiedy-moj-kod-jest-ukonczony\">Definition of Done \u2013 when is my code complete?<\/h2>\n\n\n\n<p class=\"has-large-font-size wp-block-paragraph translation-block\">Let's start with the Definition of Done - when is my code complete? A book has a beginning and an end, consists of chapters, and at some point it is published so that readers can become familiar with the work of a given author. In the case of books, the process of creating and publishing is systematized. It's the same with the source code, but not everyone realizes that knowledge of Java is just the beginning (more in the article <a rel=\"noreferrer noopener\" href=\"https:\/\/www.juniorjavadeveloper.pl\/2020 \/01\/04\/czy-sam-jezyk-java-wystaczy\/\" target=\"_blank\">Is Java alone enough?<\/a>), and the software development process is a team effort.<\/p>\n\n\n\n<p class=\"has-large-font-size wp-block-paragraph\">Wracaj&#261;c do Definition of Done, pisz&#261;c kod &#378;r&oacute;d&#322;owy nale&#380;y ustali&#263;, co rozumiemy przez &ldquo;sko&#324;czy&#322;em pisa&#263; m&oacute;j kod, teraz kto&#347; mo&#380;e z niego korzysta&#263;&rdquo;. Dlaczego w og&oacute;le Definition of Done w artykule o tym jak pisa&#263; czytelny kod? Nie ka&#380;dy tak samo rozumie kiedy kod jest sko&#324;czony. Wyja&#347;ni&#281; na przyk&#322;adzie wymagania biznesowego wykonuj&#261;cego przelewy zagraniczne &ndash; wi&#281;cej o wymaganiach biznesowych w artykule <a rel=\"noreferrer noopener\" href=\"https:\/\/www.juniorjavadeveloper.pl\/en\/2020\/05\/24\/ja-chce-pisac-tylko-kod-nie-interesuja-mnie-wymagania-biznesowe\/\" target=\"_blank\">Ja chc&#281; pisa&#263; tylko kod, nie interesuj&#261; mnie wymagania biznesowe!<\/a>.<\/p>\n\n\n\n<p class=\"has-large-font-size wp-block-paragraph translation-block\">According to the junior programmer, the code responsible for foreign transfers is finished when he manages to transfer funds from one test account to another test account - of course we do not do <a rel=\"noreferrer noopener\" href=\"https:\/\/niebezpiecznik.pl\/ post\/mbank-testowal-na-produkcji-i-wylozyl-sobie-cala-infrastrukture\/\" target=\"_blank\">tests on production like mBank<\/a>. According to an experienced programmer, it is finished when it has unit tests and is SOLID and DRY. However, for a person submitting a business requirement, finished code is one that has been placed on a test server, tested by manual testers and is consistent with the business requirement.<\/p>\n\n\n\n<h2 class=\"wp-block-heading joli-heading jtoc-heading\" id=\"czytelny-kod-zrodlowy\">Self-describing code<\/h2>\n\n\n\n<p class=\"has-large-font-size wp-block-paragraph\">Wracaj&#261;c do czytelnego kodu, kt&oacute;ry sami piszemy lub w momencie, kiedy czytamy kod kogo&#347; innego. Jak zawsze kij ma dwa ko&#324;ce. Wiele razy widzia&#322;em jak moi koledzy &ldquo;rwali sobie w&#322;osy z g&#322;owy&rdquo; czytaj&#261;c kod kogo&#347; innego, cz&#281;sto zadawali na g&#322;os pytania &ldquo;jak, to mo&#380;liwe&rdquo;, &ldquo;kto, to w og&oacute;le pisa&#322;&rdquo;, &ldquo;przecie&#380;, to nie ma szansy dzia&#322;a&#263;&rdquo;, &ldquo;gdzie jest Heniek, id&#281; do niego!&rdquo;. Bardzo &#322;atwo jest sprawdzi&#263; kto jest autorem danego fragmentu kodu wystarczy polecenie <a rel=\"noreferrer noopener\" href=\"https:\/\/www.git-scm.com\/docs\/git-blame\" target=\"_blank\">git-blame<\/a>. Maj&#261;c na uwadze to, co napisa&#322;em, nale&#380;y pisa&#263; w&#322;asny kod tak, aby po przeczytaniu naszego kodu nie by&#322;a wysy&#322;ana po nas ekipa Terminator&oacute;w.<\/p>\n\n\n\n<h3 class=\"wp-block-heading joli-heading jtoc-heading\" id=\"konwencja-nazewnicza\"><strong>Naming convention<\/strong><\/h3>\n\n\n\n<p class=\"has-large-font-size wp-block-paragraph translation-block\">The naming convention is a very important element, I recommend reading the official Oracle documentation <a rel=\"noreferrer noopener\" href=\"https:\/\/www.oracle.com\/java\/technologies\/javase\/codeconventions-contents.html\" target=\" _blank\">Code Conventions for the Java TM Programming Language<\/a> describing the naming conventions for the Java language - the documentation can also be downloaded as <a rel=\"noreferrer noopener\" href=\"https:\/\/www.oracle.com\/ technetwork\/java\/codeconventions-150003.pdf\" target=\"_blank\">PDF<\/a>.<\/p>\n\n\n\n<h3 class=\"wp-block-heading joli-heading jtoc-heading\" id=\"kolejnosc-elementow-w-klasie\"><strong>The order of elements in a class<\/strong><\/h3>\n\n\n\n<p class=\"has-large-font-size wp-block-paragraph\">Na pewnym etapie, maj&#261;c ju&#380; spore do&#347;wiadczenie w kodowaniu w j&#281;zyku Java przegl&#261;danie klas nie wygl&#261;da tak, &#380;e patrzymy od pierwszej linijki i przechodzimy do kolejnej i kolejnej. Przegl&#261;daj&#261;c klas&#281; sprawdzamy w jakich zmiennych klasa przechowuje sw&oacute;j stan, jak jest konstruowana, a nast&#281;pnie jakie udost&#281;pnia metody i wtedy zastanawiamy si&#281; do czego mo&#380;emy j&#261; wykorzysta&#263;. Zak&#322;adamy przy tym, &#380;e zmienne s&#261; na samym pocz&#261;tku cia&#322;a klasy, pod nimi konstruktory, metody z logik&#261; biznesow&#261;, a na samym ko&#324;cu &ldquo;metody pomocnicze&rdquo; getter\/setter i toString.<\/p>\n\n\n\n<p class=\"has-large-font-size wp-block-paragraph\">Now imagine a situation in which a programmer looks through the fiftieth class of a given day and each time he encounters a different order of elements in the class. He loses his rhythm, cannot concentrate, and thus his efficiency decreases. It's like the chapters of a book mentioned at the beginning, which has mixed chapters.<\/p>\n\n\n\n<h3 class=\"wp-block-heading joli-heading jtoc-heading\" id=\"samoopisujacy-sie-kod\">Self-describing code<\/h3>\n\n\n\n<p class=\"has-large-font-size wp-block-paragraph translation-block\">The code we write should be<strong>self-describing<\/strong>, i.e. when we see the name of a method and\/or variable we immediately know what it is for and we do not have to wonder what the author had in mind. If we use comments for a method and\/or a variable, it means that we do not know what a given piece of code represents. The only allowable comment for code is <a rel=\"noreferrer noopener\" href=\"https:\/\/www.oracle.com\/java\/technologies\/javase\/javadoc.html\" target=\"_blank\">Javadoc<\/a>, which is used to later generate documentation for our code. Every Framework has a Javadoc, e.g. <a rel=\"noreferrer noopener\" href=\"https:\/\/docs.spring.io\/spring-framework\/docs\/current\/javadoc-api\/\" target=\"_blank\">Springframework API Doc <\/a>.<\/p>\n\n\n\n<p class=\"has-large-font-size wp-block-paragraph\">What does self-describing code look like? Here's an example of a good and bad naming convention.<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"java\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ nazwa klasy nie opisuje jej przeznaczenia i funkcji\npublic class Main {\n    \/\/ metoda 'calculate' nie wiemy, co dok&#322;adnie robi\n    \/\/ musimy zag&#322;&#281;bia&#263; si&#281; w jej kod\n    public double calculate(int a, int b) {\n        return a \/ b;\n    }\n}<\/pre>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"java\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ nazwa klasy opisuje jej przeznaczenia i funkcji\npublic class Calculator {\n    \/\/ metoda 'division' od razu informuje o tym, co b&#281;dzie robi&#263;\n    public double division(int a, int b) {\n        return a \/ b;\n    }\n}<\/pre>\n\n\n\n<h2 class=\"wp-block-heading joli-heading jtoc-heading\" id=\"wzorce-projektowe\"><strong>Design Patterns<\/strong><\/h2>\n\n\n\n<p class=\"has-large-font-size wp-block-paragraph\">At the beginning, I would like to point out that in the everyday work of a Junior Java Developer, he rarely has the opportunity to introduce a design pattern into an existing system. Why am I writing about this at the beginning? I would like to emphasize that a junior Java programmer should focus more on SOLID and DRY good practices, and then expand their skills to include design patterns. I will also add that there is no tool that detects design patterns in code.<\/p>\n\n\n\n<p class=\"has-large-font-size wp-block-paragraph translation-block\">Additionally, the design patterns that are presented in many tutorials are detached from reality. What do I mean by that? In a real system, design patterns are not highlighted in any particular way in the code as they are in tutorials. In the existing system, we will not find classes such as: <strong>MenuComposite<\/strong> (Composite Pattern), <strong>InProgressState<\/strong> (State Pattern). We will rather encounter the<strong>Menu<\/strong> class, which is a composite (Composite Pattern), the<strong>Job<\/strong> class in combination with the<strong>Step<\/strong> class will represent a state pattern (State Pattern). .<\/p>\n\n\n\n<h2 class=\"wp-block-heading joli-heading jtoc-heading\" id=\"dobre-praktyki-solid-i-dry\"><strong>Good practices SOLID and DRY<\/strong><\/h2>\n\n\n\n<p class=\"has-large-font-size wp-block-paragraph translation-block\">As I wrote above, a junior developer should focus on good practices when writing code, rather than forcefully using design patterns. I wrote more about SOLID and DRY in the article <a rel=\"noreferrer noopener\" href=\"https:\/\/www.juniorjavadeveloper.pl\/2020\/02\/29\/dlaczej-kod-w-jezyku-java-powinien- be-solid-and-dry-dry\/\" target=\"_blank\">Why should Java code be SOLID and DRY?<\/a><\/p>\n\n\n\n<figure class=\"wp-block-embed aligncenter is-type-wp-embed is-provider-poradnik-dla-przysz-ych-junior-java-developer-039-w wp-block-embed-poradnik-dla-przysz-ych-junior-java-developer-039-w\"><div class=\"wp-block-embed__wrapper\">\n<blockquote class=\"wp-embedded-content\" data-secret=\"hUDxJ4vYpR\"><a href=\"https:\/\/www.juniorjavadeveloper.pl\/en\/kontakt\/\">Contact<\/a><\/blockquote><iframe loading=\"lazy\" class=\"wp-embedded-content\" sandbox=\"allow-scripts\" security=\"restricted\" style=\"position: absolute; visibility: hidden;\" title=\"&bdquo;Kontakt&rdquo; &mdash; Poradnik dla przysz&#322;ych Junior Java Developer&amp;apos;&oacute;w\" src=\"https:\/\/www.juniorjavadeveloper.pl\/kontakt\/embed\/#?secret=gQT6e0RULF#?secret=hUDxJ4vYpR\" data-secret=\"hUDxJ4vYpR\" width=\"600\" height=\"338\" frameborder=\"0\" marginwidth=\"0\" marginheight=\"0\" scrolling=\"no\"><\/iframe>\n<\/div><\/figure>\n\n\n\n<figure class=\"wp-block-embed aligncenter is-type-wp-embed is-provider-poradnik-dla-przysz-ych-junior-java-developer-039-w wp-block-embed-poradnik-dla-przysz-ych-junior-java-developer-039-w\"><div class=\"wp-block-embed__wrapper\">\n<blockquote class=\"wp-embedded-content\" data-secret=\"OyHPafO4z2\"><a href=\"https:\/\/www.juniorjavadeveloper.pl\/en\/mentoring-rezerwuj-termin\/\">Mentoring - book an appointment<\/a><\/blockquote><iframe loading=\"lazy\" class=\"wp-embedded-content\" sandbox=\"allow-scripts\" security=\"restricted\" style=\"position: absolute; visibility: hidden;\" title=\"&bdquo;Mentoring &ndash; rezerwuj termin&rdquo; &mdash; Poradnik dla przysz&#322;ych Junior Java Developer&amp;apos;&oacute;w\" src=\"https:\/\/www.juniorjavadeveloper.pl\/mentoring-rezerwuj-termin\/embed\/#?secret=Rzh7bidLR1#?secret=OyHPafO4z2\" data-secret=\"OyHPafO4z2\" width=\"600\" height=\"338\" frameborder=\"0\" marginwidth=\"0\" marginheight=\"0\" scrolling=\"no\"><\/iframe>\n<\/div><\/figure>","protected":false},"excerpt":{"rendered":"<p>W tym artykule opisz\u0119 bardzo wa\u017cn\u0105 kwesti\u0119, kt\u00f3r\u0105 jest czytanie cudzego kodu, ale r\u00f3wnocze\u015bnie b\u0119d\u0105, to r\u00f3wnie\u017c wskaz\u00f3wki jak pisa\u0107 w\u0142asny kod tak, aby kto\u015b inny m\u00f3g\u0142 go zrozumie\u0107. Pracuj\u0105c z narz\u0119dziem git, ka\u017cdy fragment kodu posiada informacj\u0119 o autorze, zmianach w kodzie i czasie dokonania zmian. Tym samym &#8220;uchylanie si\u0119&#8221; od w\u0142asnego kodu jest [&hellip;]<\/p>","protected":false},"author":1,"featured_media":971,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_ppp_document_settings_meta":"","footnotes":"","jetpack_publicize_message":"","jetpack_is_tweetstorm":false,"jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":false,"jetpack_social_options":{"image_generator_settings":{"template":"highway","enabled":false}}},"categories":[7],"tags":[],"class_list":["post-888","post","type-post","status-publish","format-standard","has-post-thumbnail","category-poradnik"],"jetpack_publicize_connections":[],"jetpack_featured_media_url":"https:\/\/www.juniorjavadeveloper.pl\/wp-content\/uploads\/2020\/09\/czytanie-cudzego-kodu_jak-samemu-pisac-czytelny-kod_naglowek_.jpg","jetpack_sharing_enabled":true,"jetpack_likes_enabled":true,"_links":{"self":[{"href":"https:\/\/www.juniorjavadeveloper.pl\/en\/wp-json\/wp\/v2\/posts\/888","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.juniorjavadeveloper.pl\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.juniorjavadeveloper.pl\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.juniorjavadeveloper.pl\/en\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.juniorjavadeveloper.pl\/en\/wp-json\/wp\/v2\/comments?post=888"}],"version-history":[{"count":28,"href":"https:\/\/www.juniorjavadeveloper.pl\/en\/wp-json\/wp\/v2\/posts\/888\/revisions"}],"predecessor-version":[{"id":3727,"href":"https:\/\/www.juniorjavadeveloper.pl\/en\/wp-json\/wp\/v2\/posts\/888\/revisions\/3727"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.juniorjavadeveloper.pl\/en\/wp-json\/wp\/v2\/media\/971"}],"wp:attachment":[{"href":"https:\/\/www.juniorjavadeveloper.pl\/en\/wp-json\/wp\/v2\/media?parent=888"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.juniorjavadeveloper.pl\/en\/wp-json\/wp\/v2\/categories?post=888"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.juniorjavadeveloper.pl\/en\/wp-json\/wp\/v2\/tags?post=888"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}