{"id":222,"date":"2023-06-16T23:52:25","date_gmt":"2023-06-16T23:52:25","guid":{"rendered":"https:\/\/canessaalvamiguel.dev\/?p=222"},"modified":"2023-06-16T23:52:25","modified_gmt":"2023-06-16T23:52:25","slug":"implicit-in-scala","status":"publish","type":"post","link":"https:\/\/canessaalvamiguel.dev\/index.php\/2023\/06\/16\/implicit-in-scala\/","title":{"rendered":"Implicit in Scala"},"content":{"rendered":"\n<p>En Scala, los implicits son una caracter\u00edstica poderosa que nos permite agregar comportamiento adicional a las clases existentes, proporcionar conversiones autom\u00e1ticas y lograr una mayor flexibilidad y composici\u00f3n en nuestro c\u00f3digo. <\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u00bfQu\u00e9 son los implicits en Scala?<\/h2>\n\n\n\n<p>Los implicits en Scala son una forma de proveer valores o comportamiento adicional de forma autom\u00e1tica. Pueden ser utilizados para agregar m\u00e9todos a clases existentes, implementar conversiones impl\u00edcitas, establecer par\u00e1metros por defecto, entre otras funcionalidades. Los implicits nos permiten ampliar la funcionalidad de las clases existentes sin necesidad de modificarlas directamente.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Ejemplos de uso de implicits:<\/h2>\n\n\n\n<p><strong>Agregar m\u00e9todos a clases existentes<\/strong>.<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: scala; title: ; notranslate\" title=\"\">\nimplicit class StringOps(s: String) {\n  def customMethod: String = s + &quot; (customized)&quot;\n}\nval myString = &quot;Hello&quot;\nprintln(myString.customMethod) \/\/ Output: Hello (customized)\n<\/pre><\/div>\n\n\n<p>En este ejemplo, utilizamos un implicit class para agregar un m\u00e9todo <code>customMethod<\/code> a la clase <code>String<\/code>. Esto nos permite llamar a este m\u00e9todo directamente en una instancia de <code>String<\/code>, incluso si la clase <code>String<\/code> no lo tiene definido.<\/p>\n\n\n\n<p><strong>Conversiones impl\u00edcitas.<\/strong><\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: scala; title: ; notranslate\" title=\"\">\nimplicit def intToString(value: Int): String = value.toString\nval myInt: Int = 42\nval myString: String = myInt \/\/ Conversi\u00f3n impl\u00edcita\nprintln(myString) \/\/ Output: 42\n<\/pre><\/div>\n\n\n<p>En este caso, definimos una conversi\u00f3n impl\u00edcita de <code>Int<\/code> a <code>String<\/code> mediante una funci\u00f3n implicit. Esto nos permite asignar un valor de tipo <code>Int<\/code> a una variable de tipo <code>String<\/code> directamente, y la conversi\u00f3n se realiza autom\u00e1ticamente.<\/p>\n\n\n\n<p><strong>Establecer par\u00e1metros por defecto.<\/strong><\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: scala; title: ; notranslate\" title=\"\">\ndef greet(name: String)(implicit greeting: String = &quot;Hello&quot;): Unit = {\n  println(s&quot;$greeting, $name!&quot;)\n}\nimplicit val spanishGreeting: String = &quot;Hola&quot;\ngreet(&quot;Carlos&quot;) \/\/ Output: Hola, Carlos!\n<\/pre><\/div>\n\n\n<p>En este ejemplo, utilizamos un par\u00e1metro implicit <code>greeting<\/code> en la funci\u00f3n <code>greet<\/code> para establecer un saludo por defecto. Luego, definimos un valor implicit <code>spanishGreeting<\/code> que ser\u00e1 utilizado como valor por defecto. Esto nos permite invocar la funci\u00f3n sin especificar expl\u00edcitamente el par\u00e1metro <code>greeting<\/code>, ya que se tomar\u00e1 el valor implicit.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>En Scala, los implicits son una caracter\u00edstica poderosa que nos permite agregar comportamiento adicional a las clases existentes,<\/p>\n","protected":false},"author":1,"featured_media":62,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[3],"tags":[46,8],"class_list":["post-222","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-scala","tag-implicit","tag-scala"],"_links":{"self":[{"href":"https:\/\/canessaalvamiguel.dev\/index.php\/wp-json\/wp\/v2\/posts\/222","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/canessaalvamiguel.dev\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/canessaalvamiguel.dev\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/canessaalvamiguel.dev\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/canessaalvamiguel.dev\/index.php\/wp-json\/wp\/v2\/comments?post=222"}],"version-history":[{"count":1,"href":"https:\/\/canessaalvamiguel.dev\/index.php\/wp-json\/wp\/v2\/posts\/222\/revisions"}],"predecessor-version":[{"id":223,"href":"https:\/\/canessaalvamiguel.dev\/index.php\/wp-json\/wp\/v2\/posts\/222\/revisions\/223"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/canessaalvamiguel.dev\/index.php\/wp-json\/wp\/v2\/media\/62"}],"wp:attachment":[{"href":"https:\/\/canessaalvamiguel.dev\/index.php\/wp-json\/wp\/v2\/media?parent=222"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/canessaalvamiguel.dev\/index.php\/wp-json\/wp\/v2\/categories?post=222"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/canessaalvamiguel.dev\/index.php\/wp-json\/wp\/v2\/tags?post=222"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}