{"id":297,"date":"2020-05-13T11:30:42","date_gmt":"2020-05-13T14:30:42","guid":{"rendered":"http:\/\/desarrollo-agil.ml\/blog\/?p=297"},"modified":"2020-05-13T11:27:19","modified_gmt":"2020-05-13T14:27:19","slug":"data-class-en-kotlin","status":"publish","type":"post","link":"http:\/\/52.201.184.187\/blog\/kotlin\/data-class-en-kotlin\/","title":{"rendered":"Data Class en Kotlin"},"content":{"rendered":"\n<p>Si est\u00e1s empezando con Kotlin, una de las caracter\u00edsticas que m\u00e1s van a ayudarte a escribir mejor c\u00f3digo son las data class.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u00bfQu\u00e9 es una data class?<\/h2>\n\n\n\n<p>La data class es un tipo especial de clase que se suele usar en programaci\u00f3n orientada a objetos para almacenar y\/o traspasar datos entre m\u00e9todos o capas de la aplicaci\u00f3n. Se caracteriza por solamente tener atributos y m\u00e9todos de acceso (setters y getters)<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u00bfQu\u00e9 beneficio me da usar una data class?<\/h2>\n\n\n\n<p>En programaci\u00f3n \u00faltimamente se habla mucho del concepto de <strong>inmutabilidad<\/strong>. En t\u00e9rminos simples, aplicar inmutabilidad en nuestro c\u00f3digo significa concentrarnos en no modificar par\u00e1metros de entrada, sino retornar siempre copias nuevas con las modificaciones. En espa\u00f1ol, no usar <strong>setters<\/strong>, sino solamente los <strong>getters<\/strong> y hacer siempre <strong>new<\/strong>. Cuando queremos modificar algo, tenemos que hacer una copia de nuestro objeto, y retornar esa copia. Para esto, es vital implementar el m\u00e9todo <strong>copy<\/strong>. Las data class en Kotlin ya traen implementado ese m\u00e9todo, no hay que hacerlo manualmente.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u00bfC\u00f3mo declaro una data class en Kotlin?<\/h2>\n\n\n\n<p>Agregando el prefijo \u00abdata\u00bb a la definici\u00f3n de la clase. Vamos a verlo en contexto con un ejemplo:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">data class Persona(val nombre: String, val apellido: String)<\/pre>\n\n\n\n<p>Se debe crear el constructor de la clase, con los atributos que va a tener, indicando el tipo de cada uno. Luego, podr\u00edamos tener algo como lo siguiente:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">val jose = Persona(\"jose\", \"Perez\")\nval pedro = Persona(\"Pedro\", \"Gonzalez\")\n\njose == jose\njose == pedro<\/pre>\n\n\n\n<p>Si quisi\u00e9ramos, podr\u00edamos declarar una funci\u00f3n que aplique inmutabilidad:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">fun doMagic(persona: Persona): Persona {\n  return persona.copy(nombre = \"${persona.nombre}lito\")\n}\n\nval magia = doMagic(jose)\njose == magia<\/pre>\n\n\n\n<p>Notemos que escribiendo el c\u00f3digo de esta manera, nos aseguramos que \u00abjose\u00bb est\u00e1 exactamente igual antes de entrar al m\u00e9todo que luego de salir del mismo<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">En resumen<\/h2>\n\n\n\n<p>Usando las data class en kotlin podemos ejercitar el \u00ab==\u00bb y aplicar el copy, y de esta manera facilitarnos la creaci\u00f3n de c\u00f3digo inmutable. Eso es un gran beneficio a la hora de leer nuestro c\u00f3digo, y nos asegura que no vamos a pasar por alto mutaciones que pueda sufrir nuestro objeto dentro de m\u00e9todos.<\/p>\n\n\n\n<p>Si quieren leer m\u00e1s acerca de las data class en kotlin, pueden ver la <a href=\"https:\/\/kotlinlang.org\/docs\/reference\/data-classes.html\">documentaci\u00f3n oficial<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Si est\u00e1s empezando con Kotlin, una de las caracter\u00edsticas que m\u00e1s van a ayudarte a escribir mejor c\u00f3digo son las data class. \u00bfQu\u00e9 es una data class? La data class es un tipo especial de clase que se suele usar en programaci\u00f3n orientada a objetos para almacenar y\/o traspasar datos entre m\u00e9todos o capas de\u2026 <span class=\"read-more\"><a href=\"http:\/\/52.201.184.187\/blog\/kotlin\/data-class-en-kotlin\/\">Leer m\u00e1s &raquo;<\/a><\/span><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[13,38],"tags":[93,95,36],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v17.5 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Data Class en Kotlin - Desarrollo \u00c1gil<\/title>\n<meta name=\"description\" content=\"Breve introducci\u00f3n y ejemplo de uso de las data class en Kotlin. \u00bfQu\u00e9 es una data class en Kotlin? \u00bfC\u00f3mo se usa? \u00bfPara qu\u00e9 nos sirve?\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"http:\/\/52.201.184.187\/blog\/kotlin\/data-class-en-kotlin\/\" \/>\n<meta property=\"og:locale\" content=\"es_ES\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Data Class en Kotlin - Desarrollo \u00c1gil\" \/>\n<meta property=\"og:description\" content=\"Breve introducci\u00f3n y ejemplo de uso de las data class en Kotlin. \u00bfQu\u00e9 es una data class en Kotlin? \u00bfC\u00f3mo se usa? \u00bfPara qu\u00e9 nos sirve?\" \/>\n<meta property=\"og:url\" content=\"http:\/\/52.201.184.187\/blog\/kotlin\/data-class-en-kotlin\/\" \/>\n<meta property=\"og:site_name\" content=\"Desarrollo \u00c1gil\" \/>\n<meta property=\"article:published_time\" content=\"2020-05-13T14:30:42+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2020-05-13T14:27:19+00:00\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@emilianotebes\" \/>\n<meta name=\"twitter:site\" content=\"@emilianotebes\" \/>\n<meta name=\"twitter:label1\" content=\"Escrito por\" \/>\n\t<meta name=\"twitter:data1\" content=\"Emiliano\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tiempo de lectura\" \/>\n\t<meta name=\"twitter:data2\" content=\"2 minutos\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebSite\",\"@id\":\"http:\/\/52.201.184.187\/blog\/#website\",\"url\":\"http:\/\/52.201.184.187\/blog\/\",\"name\":\"Desarrollo \\u00c1gil\",\"description\":\"Sofware por y para humanos\",\"publisher\":{\"@id\":\"http:\/\/52.201.184.187\/blog\/#\/schema\/person\/d3f309d88ee70165de93b55560c9f851\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"http:\/\/52.201.184.187\/blog\/?s={search_term_string}\"},\"query-input\":\"required name=search_term_string\"}],\"inLanguage\":\"es\"},{\"@type\":\"WebPage\",\"@id\":\"http:\/\/52.201.184.187\/blog\/kotlin\/data-class-en-kotlin\/#webpage\",\"url\":\"http:\/\/52.201.184.187\/blog\/kotlin\/data-class-en-kotlin\/\",\"name\":\"Data Class en Kotlin - Desarrollo \\u00c1gil\",\"isPartOf\":{\"@id\":\"http:\/\/52.201.184.187\/blog\/#website\"},\"datePublished\":\"2020-05-13T14:30:42+00:00\",\"dateModified\":\"2020-05-13T14:27:19+00:00\",\"description\":\"Breve introducci\\u00f3n y ejemplo de uso de las data class en Kotlin. \\u00bfQu\\u00e9 es una data class en Kotlin? \\u00bfC\\u00f3mo se usa? \\u00bfPara qu\\u00e9 nos sirve?\",\"breadcrumb\":{\"@id\":\"http:\/\/52.201.184.187\/blog\/kotlin\/data-class-en-kotlin\/#breadcrumb\"},\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"http:\/\/52.201.184.187\/blog\/kotlin\/data-class-en-kotlin\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"http:\/\/52.201.184.187\/blog\/kotlin\/data-class-en-kotlin\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Portada\",\"item\":\"http:\/\/desarrollo-agil.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Data Class en Kotlin\"}]},{\"@type\":\"Article\",\"@id\":\"http:\/\/52.201.184.187\/blog\/kotlin\/data-class-en-kotlin\/#article\",\"isPartOf\":{\"@id\":\"http:\/\/52.201.184.187\/blog\/kotlin\/data-class-en-kotlin\/#webpage\"},\"author\":{\"@id\":\"http:\/\/52.201.184.187\/blog\/#\/schema\/person\/d3f309d88ee70165de93b55560c9f851\"},\"headline\":\"Data Class en Kotlin\",\"datePublished\":\"2020-05-13T14:30:42+00:00\",\"dateModified\":\"2020-05-13T14:27:19+00:00\",\"mainEntityOfPage\":{\"@id\":\"http:\/\/52.201.184.187\/blog\/kotlin\/data-class-en-kotlin\/#webpage\"},\"wordCount\":358,\"commentCount\":0,\"publisher\":{\"@id\":\"http:\/\/52.201.184.187\/blog\/#\/schema\/person\/d3f309d88ee70165de93b55560c9f851\"},\"keywords\":[\"data class\",\"inmutabilidad\",\"kotlin\"],\"articleSection\":[\"Buenas practicas\",\"Kotlin\"],\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"http:\/\/52.201.184.187\/blog\/kotlin\/data-class-en-kotlin\/#respond\"]}]},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"http:\/\/52.201.184.187\/blog\/#\/schema\/person\/d3f309d88ee70165de93b55560c9f851\",\"name\":\"Emiliano\",\"image\":{\"@type\":\"ImageObject\",\"@id\":\"http:\/\/52.201.184.187\/blog\/#personlogo\",\"inLanguage\":\"es\",\"url\":\"http:\/\/2.gravatar.com\/avatar\/e2997f02fe4216c2cce9e5a88e3e3726?s=96&d=mm&r=g\",\"contentUrl\":\"http:\/\/2.gravatar.com\/avatar\/e2997f02fe4216c2cce9e5a88e3e3726?s=96&d=mm&r=g\",\"caption\":\"Emiliano\"},\"logo\":{\"@id\":\"http:\/\/52.201.184.187\/blog\/#personlogo\"},\"sameAs\":[\"https:\/\/www.linkedin.com\/in\/emilianotebes\/\",\"https:\/\/twitter.com\/emilianotebes\"]}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Data Class en Kotlin - Desarrollo \u00c1gil","description":"Breve introducci\u00f3n y ejemplo de uso de las data class en Kotlin. \u00bfQu\u00e9 es una data class en Kotlin? \u00bfC\u00f3mo se usa? \u00bfPara qu\u00e9 nos sirve?","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":"http:\/\/52.201.184.187\/blog\/kotlin\/data-class-en-kotlin\/","og_locale":"es_ES","og_type":"article","og_title":"Data Class en Kotlin - Desarrollo \u00c1gil","og_description":"Breve introducci\u00f3n y ejemplo de uso de las data class en Kotlin. \u00bfQu\u00e9 es una data class en Kotlin? \u00bfC\u00f3mo se usa? \u00bfPara qu\u00e9 nos sirve?","og_url":"http:\/\/52.201.184.187\/blog\/kotlin\/data-class-en-kotlin\/","og_site_name":"Desarrollo \u00c1gil","article_published_time":"2020-05-13T14:30:42+00:00","article_modified_time":"2020-05-13T14:27:19+00:00","twitter_card":"summary_large_image","twitter_creator":"@emilianotebes","twitter_site":"@emilianotebes","twitter_misc":{"Escrito por":"Emiliano","Tiempo de lectura":"2 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebSite","@id":"http:\/\/52.201.184.187\/blog\/#website","url":"http:\/\/52.201.184.187\/blog\/","name":"Desarrollo \u00c1gil","description":"Sofware por y para humanos","publisher":{"@id":"http:\/\/52.201.184.187\/blog\/#\/schema\/person\/d3f309d88ee70165de93b55560c9f851"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"http:\/\/52.201.184.187\/blog\/?s={search_term_string}"},"query-input":"required name=search_term_string"}],"inLanguage":"es"},{"@type":"WebPage","@id":"http:\/\/52.201.184.187\/blog\/kotlin\/data-class-en-kotlin\/#webpage","url":"http:\/\/52.201.184.187\/blog\/kotlin\/data-class-en-kotlin\/","name":"Data Class en Kotlin - Desarrollo \u00c1gil","isPartOf":{"@id":"http:\/\/52.201.184.187\/blog\/#website"},"datePublished":"2020-05-13T14:30:42+00:00","dateModified":"2020-05-13T14:27:19+00:00","description":"Breve introducci\u00f3n y ejemplo de uso de las data class en Kotlin. \u00bfQu\u00e9 es una data class en Kotlin? \u00bfC\u00f3mo se usa? \u00bfPara qu\u00e9 nos sirve?","breadcrumb":{"@id":"http:\/\/52.201.184.187\/blog\/kotlin\/data-class-en-kotlin\/#breadcrumb"},"inLanguage":"es","potentialAction":[{"@type":"ReadAction","target":["http:\/\/52.201.184.187\/blog\/kotlin\/data-class-en-kotlin\/"]}]},{"@type":"BreadcrumbList","@id":"http:\/\/52.201.184.187\/blog\/kotlin\/data-class-en-kotlin\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Portada","item":"http:\/\/desarrollo-agil.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Data Class en Kotlin"}]},{"@type":"Article","@id":"http:\/\/52.201.184.187\/blog\/kotlin\/data-class-en-kotlin\/#article","isPartOf":{"@id":"http:\/\/52.201.184.187\/blog\/kotlin\/data-class-en-kotlin\/#webpage"},"author":{"@id":"http:\/\/52.201.184.187\/blog\/#\/schema\/person\/d3f309d88ee70165de93b55560c9f851"},"headline":"Data Class en Kotlin","datePublished":"2020-05-13T14:30:42+00:00","dateModified":"2020-05-13T14:27:19+00:00","mainEntityOfPage":{"@id":"http:\/\/52.201.184.187\/blog\/kotlin\/data-class-en-kotlin\/#webpage"},"wordCount":358,"commentCount":0,"publisher":{"@id":"http:\/\/52.201.184.187\/blog\/#\/schema\/person\/d3f309d88ee70165de93b55560c9f851"},"keywords":["data class","inmutabilidad","kotlin"],"articleSection":["Buenas practicas","Kotlin"],"inLanguage":"es","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["http:\/\/52.201.184.187\/blog\/kotlin\/data-class-en-kotlin\/#respond"]}]},{"@type":["Person","Organization"],"@id":"http:\/\/52.201.184.187\/blog\/#\/schema\/person\/d3f309d88ee70165de93b55560c9f851","name":"Emiliano","image":{"@type":"ImageObject","@id":"http:\/\/52.201.184.187\/blog\/#personlogo","inLanguage":"es","url":"http:\/\/2.gravatar.com\/avatar\/e2997f02fe4216c2cce9e5a88e3e3726?s=96&d=mm&r=g","contentUrl":"http:\/\/2.gravatar.com\/avatar\/e2997f02fe4216c2cce9e5a88e3e3726?s=96&d=mm&r=g","caption":"Emiliano"},"logo":{"@id":"http:\/\/52.201.184.187\/blog\/#personlogo"},"sameAs":["https:\/\/www.linkedin.com\/in\/emilianotebes\/","https:\/\/twitter.com\/emilianotebes"]}]}},"_links":{"self":[{"href":"http:\/\/52.201.184.187\/blog\/wp-json\/wp\/v2\/posts\/297"}],"collection":[{"href":"http:\/\/52.201.184.187\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/52.201.184.187\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/52.201.184.187\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/52.201.184.187\/blog\/wp-json\/wp\/v2\/comments?post=297"}],"version-history":[{"count":8,"href":"http:\/\/52.201.184.187\/blog\/wp-json\/wp\/v2\/posts\/297\/revisions"}],"predecessor-version":[{"id":305,"href":"http:\/\/52.201.184.187\/blog\/wp-json\/wp\/v2\/posts\/297\/revisions\/305"}],"wp:attachment":[{"href":"http:\/\/52.201.184.187\/blog\/wp-json\/wp\/v2\/media?parent=297"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/52.201.184.187\/blog\/wp-json\/wp\/v2\/categories?post=297"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/52.201.184.187\/blog\/wp-json\/wp\/v2\/tags?post=297"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}