{"id":346,"date":"2009-03-25T18:08:41","date_gmt":"2009-03-25T21:08:41","guid":{"rendered":"https:\/\/devkico.itexto.com.br\/?p=346"},"modified":"2009-03-29T11:55:57","modified_gmt":"2009-03-29T14:55:57","slug":"why-at-least-for-me-groovy-sounds-like-a-java","status":"publish","type":"post","link":"https:\/\/devkico.itexto.com.br\/?p=346","title":{"rendered":"Why (at least for me) Groovy sounds like a Java++"},"content":{"rendered":"<p><a href=\"https:\/\/devkico.itexto.com.br\/wp-content\/uploads\/2008\/12\/groovylogo.png\"><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-235 alignleft\" style=\"margin: 10px;\" title=\"groovylogo\" src=\"https:\/\/devkico.itexto.com.br\/wp-content\/uploads\/2008\/12\/groovylogo.png\" alt=\"\" width=\"203\" height=\"100\" \/><\/a>I&#8217;m a Java guy, and as may sound obsolete to some, but I really like this language. As time goes by, and I start to know better another languages like Groovy or Ruby, I can&#8217;t avoid to feel a little envy of those. Java 5 revamped the language, that&#8217;s sure, but it still could be a little better.<\/p>\n<p>This is why I really falled in love with Groovy: it really looks like Java, but solved many of it&#8217;s boring spots in a really elegant way. So, it&#8217;s no surprise that for me Groovy is like a Java++. Here comes a list of the problems solved by Groovy:<\/p>\n<h2>Strings<\/h2>\n<h3>Interpolation:<\/h3>\n<p><strong>In Java<\/strong><\/p>\n<pre class=\"brush: java; title: ; notranslate\" title=\"\">\r\nint value = 3;\r\nString str = &quot;O valor inteiro vale &quot; + value\r\n<\/pre>\n<p><strong>In Groovy<\/strong><\/p>\n<pre class=\"brush: java; title: ; notranslate\" title=\"\">\r\nint value = 3\r\nString str = &quot;O valor inteiro vale ${value}&quot;\r\n<\/pre>\n<h3>Multiline strings<\/h3>\n<p><strong>In Java<\/strong><\/p>\n<pre class=\"brush: java; title: ; notranslate\" title=\"\">\r\nString multiline = &quot;This is my string \\n&quot; +\r\n&quot;which will have more than one \\n&quot; +\r\n&quot;line!&quot;\r\n<\/pre>\n<p><strong>In Groovy<\/strong><\/p>\n<pre class=\"brush: java; title: ; notranslate\" title=\"\">\r\nString multiline = &quot;&quot;&quot;This is my groovier string with\r\nas many lines I want!\r\nAnd I don&#039;t even need those ugly + operators\r\nanymore!&quot;&quot;&quot;\r\n<\/pre>\n<h2>Avoiding a NullPointerException<\/h2>\n<p><strong>In Java<\/strong><\/p>\n<pre class=\"brush: java; title: ; notranslate\" title=\"\">\r\nObject value = buildObject();\r\nif (value != null) { \/\/ bla bla bla }\r\n<\/pre>\n<p><strong>In Groovy<\/strong><\/p>\n<pre class=\"brush: java; title: ; notranslate\" title=\"\">\r\ndef value = buildObject()\r\nif (valor) {\/\/bla bla bla}\r\n<\/pre>\n<p>In Groovy, the truth isn&#8217;t always a boolean value. If something is null, so it&#8217;s false! Way simpler!<\/p>\n<p>Checking if something is null:<br \/>\n<strong>In Java<\/strong><\/p>\n<pre class=\"brush: java; title: ; notranslate\" title=\"\">\r\nObject obj = anything();\r\nString str = &quot;The value of this object is  &quot; + obj == null ? &quot;null&quot; : obj.toString(); \/\/ Horrible!\r\n<\/pre>\n<p><strong>In Groovy<\/strong><\/p>\n<pre class=\"brush: java; title: ; notranslate\" title=\"\">\r\nObject obj = anything()\r\nString str = &quot;The value will be ${?obj.toString()}&quot; \/\/ Clean!\r\n<\/pre>\n<h2>Getters and setters<\/h2>\n<p>Let&#8217;s face it: it&#8217;s really boring to keep writing getters and setters for all our Java Beans, isn&#8217;t it? Sure, we have our IDE&#8217;s <span class=\"__mozilla-findbar-search\" style=\"padding: 0pt; background-color: yellow; color: black; display: inline; font-size: inherit;\">which<\/span> allow us to do it automatically, but the code in the end is quite ugly don&#8217;t you think?<\/p>\n<p>Well, here comes another comparison:<\/p>\n<p><strong>Java<\/strong><\/p>\n<pre class=\"brush: java; title: ; notranslate\" title=\"\">\r\nclass HotClass {\r\nprivate int value;\r\npublic int getValue() {return this.value;}\r\npublic void setValue(int v) {this.value = v;}&lt;\/em&gt;\r\n\r\n&lt;em&gt;private String text;\r\npublic String getText() {return this.text;}\r\npublic void setText(String v) {this.text = v;}\r\n}\r\n<\/pre>\n<p>In Groovy&#8230;<br \/>\n<strong>Groovy<\/strong><\/p>\n<pre class=\"brush: java; title: ; notranslate\" title=\"\">\r\nclass WayHotterClass {\r\nint value\r\nString text\r\n}\r\n<\/pre>\n<p>I don&#8217;t need to type all those getters and setters. Groovy will generate them for me automatically! Neat, don&#8217;t you think?<\/p>\n<h3>Optional <strong>return<\/strong><\/h3>\n<p>This is a kind of a controversial point, but I really whould like to have something like this in Java. In Groovy, the last command on a code block is interpreted as a return value.<\/p>\n<p>This is a completely personal opinion, but I think it generates a clearer code:<\/p>\n<pre class=\"brush: java; title: ; notranslate\" title=\"\">\r\nint sum(int a, int b) {\r\na + b\r\n}\r\n<\/pre>\n<h3>Closures<\/h3>\n<p>Closures almost were inserted on Java 7. Well, for a Java developer <span class=\"__mozilla-findbar-search\" style=\"padding: 0pt; background-color: yellow; color: black; display: inline; font-size: inherit;\">which<\/span> never saw them, the big question is: what the hell are those?<\/p>\n<p>Basically closures are another data type <span class=\"__mozilla-findbar-search\" style=\"padding: 0pt; background-color: yellow; color: black; display: inline; font-size: inherit;\">which<\/span> doesn&#8217;t store a value, but a set of instructions. This is the most basic description I could find about it. With closures, you can have variables <span class=\"__mozilla-findbar-search\" style=\"padding: 0pt; background-color: yellow; color: black; display: inline; font-size: inherit;\">which<\/span> are in fact executable code, like the following example:<\/p>\n<pre class=\"brush: java; title: ; notranslate\" title=\"\">\r\ndef hotClosure = {\r\nprint &quot;\\nI&#039;m a closure.&quot;\r\n}\r\n<\/pre>\n<p>And a closure may have parameters too:<\/p>\n<pre class=\"brush: java; title: ; notranslate\" title=\"\">\r\ndef hotClosureWithParameters = {a, b -&gt;\r\na + b}\r\n<\/pre>\n<p>And these closures are actually attribures of classes. So you can write something like this:<\/p>\n<pre class=\"brush: java; title: ; notranslate\" title=\"\">\r\nclass Class1 {\r\ndef closure = {\r\n&quot;I&#039;m the closure of class 1&quot;\r\n}\r\n}&lt;\/em&gt;\r\n\r\n&lt;em&gt; class Class2 {\r\ndef closure = {\r\n&quot;I&#039;m the closure of class 2!&quot;\r\n}\r\n}&lt;\/em&gt;\r\n\r\n&lt;em&gt; Class1 class1 = new Class1()\r\nClass2 class2 = new Class2()\r\nclass1.closure = class2.closure \/\/ See? I changed the behavior of class1 at runtime!&lt;\/em&gt;\r\n\r\n&lt;em&gt;<\/pre>\n<h3>Numbers on a numeric way!<\/h3>\n<p>When you have to deal with a BigDecimal value in Java is always a pain in the ass. Look at this example:<\/p>\n<pre class=\"brush: java; title: ; notranslate\" title=\"\">\r\npublic BigDecimal delta(BigDecimal a, BigDecimal b, BigDecimal c) {\r\nreturn b.multiply(b).subtract(new BigDecimal(4).multiply(a).multiply(c));\r\n}\r\n<\/pre>\n<p>Is it easy to read? How could I do it in Groovy?<\/p>\n<pre class=\"brush: java; title: ; notranslate\" title=\"\">\r\npublic BigDecimal delta(BigDecimal a, BigDecimal b, BigDecimal c) {\r\n(b * b) - (4 * a * c)\r\n}\r\n<\/pre>\n<p>Wow! Now someone can understand my code!<\/p>\n<h3>Dynamic constructors<\/h3>\n<p><em>Let&#8217;s suppose that in Java you&#8217;ll have a class like this:<\/p>\n<pre class=\"brush: java; title: ; notranslate\" title=\"\">\r\nclass Person {\r\nprivate String name;\r\nprivate String address;&lt;\/em&gt;&lt;\/em&gt;\r\n\r\n&lt;em&gt;&lt;em&gt; \/\/ getters and setters\r\n}\r\n<\/pre>\n<p><\/em><\/p>\n<p>In this class, I&#8217;ll have only one constructor, <span class=\"__mozilla-findbar-search\" style=\"padding: 0pt; background-color: yellow; color: black; display: inline; font-size: inherit;\">which<\/span> is the default one. If I want, I can add new ones as I need those, but usually when I try to populate a new instance, I&#8217;ll do something like this:<\/p>\n<pre class=\"brush: java; title: ; notranslate\" title=\"\">\r\nPerson person = new Person();\r\nperson.setName(&quot;Kico&quot;);\r\nperson.setAddress(&quot;Somewhere in Brazil&quot;);\r\n<\/pre>\n<p>How can I do the same thing in Groovy?<\/p>\n<pre class=\"brush: java; title: ; notranslate\" title=\"\">\r\nPerson person = new Person(name:&quot;Kico&quot;, address:&quot;Somewhere in Brazil&quot;);\r\n<\/pre>\n<p>&lt;<\/p>\n<p>Way simpler! Three lines of code in a single one! And the best thing here is: I can do exactly the same thing with default Java classes too in Groovy code!<\/p>\n<h2>Conclusions<\/h2>\n<p>As its shown, these are only a few spots that I really appreciate in Groovy. And what is way cooler is the fact that many of these characteristics were going to be added on Java 7. If they were, it whouldn&#8217;t be exaggerated to say that Java whould became Groovy. :)<\/p>\n","protected":false},"excerpt":{"rendered":"<p>I&#8217;m a Java guy, and as may sound obsolete to some, but I really like this language. As time goes by, and I start to know better another languages like Groovy or Ruby, I can&#8217;t avoid to feel a little envy of those. Java 5 revamped the language, that&#8217;s sure, but it still could be [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_coblocks_attr":"","_coblocks_dimensions":"","_coblocks_responsive_height":"","_coblocks_accordion_ie_support":"","site-sidebar-layout":"default","site-content-layout":"","ast-site-content-layout":"","site-content-style":"default","site-sidebar-style":"default","ast-global-header-display":"","ast-banner-title-visibility":"","ast-main-header-display":"","ast-hfb-above-header-display":"","ast-hfb-below-header-display":"","ast-hfb-mobile-header-display":"","site-post-title":"","ast-breadcrumbs-content":"","ast-featured-img":"","footer-sml-layout":"","theme-transparent-header-meta":"","adv-header-id-meta":"","stick-header-meta":"","header-above-stick-meta":"","header-main-stick-meta":"","header-below-stick-meta":"","astra-migrate-meta-layouts":"default","ast-page-background-enabled":"default","ast-page-background-meta":{"desktop":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-gradient":""},"tablet":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-gradient":""},"mobile":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-gradient":""}},"ast-content-background-meta":{"desktop":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-gradient":""},"tablet":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-gradient":""},"mobile":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-gradient":""}},"jetpack_post_was_ever_published":false,"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[5,6],"tags":[],"class_list":["post-346","post","type-post","status-publish","format-standard","hentry","category-groovy","category-java"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v22.8 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Why (at least for me) Groovy sounds like a Java++ - \/dev\/Kico<\/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:\/\/devkico.itexto.com.br\/?p=346\" \/>\n<meta property=\"og:locale\" content=\"pt_BR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Why (at least for me) Groovy sounds like a Java++ - \/dev\/Kico\" \/>\n<meta property=\"og:description\" content=\"I&#8217;m a Java guy, and as may sound obsolete to some, but I really like this language. As time goes by, and I start to know better another languages like Groovy or Ruby, I can&#8217;t avoid to feel a little envy of those. Java 5 revamped the language, that&#8217;s sure, but it still could be [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/devkico.itexto.com.br\/?p=346\" \/>\n<meta property=\"og:site_name\" content=\"\/dev\/Kico\" \/>\n<meta property=\"article:published_time\" content=\"2009-03-25T21:08:41+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2009-03-29T14:55:57+00:00\" \/>\n<meta property=\"og:image\" content=\"http:\/\/www.itexto.net\/devkico\/wp-content\/uploads\/2008\/12\/groovylogo.png\" \/>\n<meta name=\"author\" content=\"Kico (Henrique Lobo Weissmann)\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@loboweissmann\" \/>\n<meta name=\"twitter:label1\" content=\"Escrito por\" \/>\n\t<meta name=\"twitter:data1\" content=\"Kico (Henrique Lobo Weissmann)\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. tempo de leitura\" \/>\n\t<meta name=\"twitter:data2\" content=\"5 minutos\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/devkico.itexto.com.br\/?p=346\",\"url\":\"https:\/\/devkico.itexto.com.br\/?p=346\",\"name\":\"Why (at least for me) Groovy sounds like a Java++ - \/dev\/Kico\",\"isPartOf\":{\"@id\":\"https:\/\/devkico.itexto.com.br\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/devkico.itexto.com.br\/?p=346#primaryimage\"},\"image\":{\"@id\":\"https:\/\/devkico.itexto.com.br\/?p=346#primaryimage\"},\"thumbnailUrl\":\"https:\/\/devkico.itexto.com.br\/wp-content\/uploads\/2008\/12\/groovylogo.png\",\"datePublished\":\"2009-03-25T21:08:41+00:00\",\"dateModified\":\"2009-03-29T14:55:57+00:00\",\"author\":{\"@id\":\"https:\/\/devkico.itexto.com.br\/#\/schema\/person\/502ab8892631bb005d6da2269fe5a3a7\"},\"breadcrumb\":{\"@id\":\"https:\/\/devkico.itexto.com.br\/?p=346#breadcrumb\"},\"inLanguage\":\"pt-BR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/devkico.itexto.com.br\/?p=346\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-BR\",\"@id\":\"https:\/\/devkico.itexto.com.br\/?p=346#primaryimage\",\"url\":\"https:\/\/devkico.itexto.com.br\/wp-content\/uploads\/2008\/12\/groovylogo.png\",\"contentUrl\":\"https:\/\/devkico.itexto.com.br\/wp-content\/uploads\/2008\/12\/groovylogo.png\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/devkico.itexto.com.br\/?p=346#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/devkico.itexto.com.br\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Why (at least for me) Groovy sounds like a Java++\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/devkico.itexto.com.br\/#website\",\"url\":\"https:\/\/devkico.itexto.com.br\/\",\"name\":\"\/dev\/Kico\",\"description\":\"Desenvolvendo software\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/devkico.itexto.com.br\/?s={search_term_string}\"},\"query-input\":\"required name=search_term_string\"}],\"inLanguage\":\"pt-BR\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/devkico.itexto.com.br\/#\/schema\/person\/502ab8892631bb005d6da2269fe5a3a7\",\"name\":\"Kico (Henrique Lobo Weissmann)\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-BR\",\"@id\":\"https:\/\/devkico.itexto.com.br\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/dd6973d86a689bc63122b2e603f25be3?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/dd6973d86a689bc63122b2e603f25be3?s=96&d=mm&r=g\",\"caption\":\"Kico (Henrique Lobo Weissmann)\"},\"sameAs\":[\"https:\/\/x.com\/loboweissmann\"],\"url\":\"https:\/\/devkico.itexto.com.br\/?author=1\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Why (at least for me) Groovy sounds like a Java++ - \/dev\/Kico","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:\/\/devkico.itexto.com.br\/?p=346","og_locale":"pt_BR","og_type":"article","og_title":"Why (at least for me) Groovy sounds like a Java++ - \/dev\/Kico","og_description":"I&#8217;m a Java guy, and as may sound obsolete to some, but I really like this language. As time goes by, and I start to know better another languages like Groovy or Ruby, I can&#8217;t avoid to feel a little envy of those. Java 5 revamped the language, that&#8217;s sure, but it still could be [&hellip;]","og_url":"https:\/\/devkico.itexto.com.br\/?p=346","og_site_name":"\/dev\/Kico","article_published_time":"2009-03-25T21:08:41+00:00","article_modified_time":"2009-03-29T14:55:57+00:00","og_image":[{"url":"http:\/\/www.itexto.net\/devkico\/wp-content\/uploads\/2008\/12\/groovylogo.png"}],"author":"Kico (Henrique Lobo Weissmann)","twitter_card":"summary_large_image","twitter_creator":"@loboweissmann","twitter_misc":{"Escrito por":"Kico (Henrique Lobo Weissmann)","Est. tempo de leitura":"5 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/devkico.itexto.com.br\/?p=346","url":"https:\/\/devkico.itexto.com.br\/?p=346","name":"Why (at least for me) Groovy sounds like a Java++ - \/dev\/Kico","isPartOf":{"@id":"https:\/\/devkico.itexto.com.br\/#website"},"primaryImageOfPage":{"@id":"https:\/\/devkico.itexto.com.br\/?p=346#primaryimage"},"image":{"@id":"https:\/\/devkico.itexto.com.br\/?p=346#primaryimage"},"thumbnailUrl":"https:\/\/devkico.itexto.com.br\/wp-content\/uploads\/2008\/12\/groovylogo.png","datePublished":"2009-03-25T21:08:41+00:00","dateModified":"2009-03-29T14:55:57+00:00","author":{"@id":"https:\/\/devkico.itexto.com.br\/#\/schema\/person\/502ab8892631bb005d6da2269fe5a3a7"},"breadcrumb":{"@id":"https:\/\/devkico.itexto.com.br\/?p=346#breadcrumb"},"inLanguage":"pt-BR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/devkico.itexto.com.br\/?p=346"]}]},{"@type":"ImageObject","inLanguage":"pt-BR","@id":"https:\/\/devkico.itexto.com.br\/?p=346#primaryimage","url":"https:\/\/devkico.itexto.com.br\/wp-content\/uploads\/2008\/12\/groovylogo.png","contentUrl":"https:\/\/devkico.itexto.com.br\/wp-content\/uploads\/2008\/12\/groovylogo.png"},{"@type":"BreadcrumbList","@id":"https:\/\/devkico.itexto.com.br\/?p=346#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/devkico.itexto.com.br\/"},{"@type":"ListItem","position":2,"name":"Why (at least for me) Groovy sounds like a Java++"}]},{"@type":"WebSite","@id":"https:\/\/devkico.itexto.com.br\/#website","url":"https:\/\/devkico.itexto.com.br\/","name":"\/dev\/Kico","description":"Desenvolvendo software","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/devkico.itexto.com.br\/?s={search_term_string}"},"query-input":"required name=search_term_string"}],"inLanguage":"pt-BR"},{"@type":"Person","@id":"https:\/\/devkico.itexto.com.br\/#\/schema\/person\/502ab8892631bb005d6da2269fe5a3a7","name":"Kico (Henrique Lobo Weissmann)","image":{"@type":"ImageObject","inLanguage":"pt-BR","@id":"https:\/\/devkico.itexto.com.br\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/dd6973d86a689bc63122b2e603f25be3?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/dd6973d86a689bc63122b2e603f25be3?s=96&d=mm&r=g","caption":"Kico (Henrique Lobo Weissmann)"},"sameAs":["https:\/\/x.com\/loboweissmann"],"url":"https:\/\/devkico.itexto.com.br\/?author=1"}]}},"jetpack_featured_media_url":"","jetpack-related-posts":[],"jetpack_sharing_enabled":true,"jetpack_likes_enabled":true,"_links":{"self":[{"href":"https:\/\/devkico.itexto.com.br\/index.php?rest_route=\/wp\/v2\/posts\/346"}],"collection":[{"href":"https:\/\/devkico.itexto.com.br\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/devkico.itexto.com.br\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/devkico.itexto.com.br\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/devkico.itexto.com.br\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=346"}],"version-history":[{"count":9,"href":"https:\/\/devkico.itexto.com.br\/index.php?rest_route=\/wp\/v2\/posts\/346\/revisions"}],"predecessor-version":[{"id":350,"href":"https:\/\/devkico.itexto.com.br\/index.php?rest_route=\/wp\/v2\/posts\/346\/revisions\/350"}],"wp:attachment":[{"href":"https:\/\/devkico.itexto.com.br\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=346"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/devkico.itexto.com.br\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=346"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/devkico.itexto.com.br\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=346"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}