{"id":196,"date":"2023-05-31T21:30:23","date_gmt":"2023-05-31T21:30:23","guid":{"rendered":"https:\/\/canessaalvamiguel.dev\/?p=196"},"modified":"2023-05-31T21:30:23","modified_gmt":"2023-05-31T21:30:23","slug":"currying-in-scala","status":"publish","type":"post","link":"https:\/\/canessaalvamiguel.dev\/index.php\/2023\/05\/31\/currying-in-scala\/","title":{"rendered":"Currying in Scala"},"content":{"rendered":"\n<p>En el mundo de la programaci\u00f3n funcional, Scala nos brinda una poderosa t\u00e9cnica llamada &#8220;currying&#8221; que nos permite transformar funciones de m\u00faltiples argumentos en una serie de funciones de un solo argumento. Esta t\u00e9cnica nos ayuda a simplificar el dise\u00f1o y la composici\u00f3n de funciones al permitirnos crear funciones m\u00e1s especializadas y reutilizables. En este art\u00edculo, exploraremos el currying en Scala y c\u00f3mo aplicarlo para mejorar la legibilidad y modularidad de nuestro c\u00f3digo.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u00bfQu\u00e9 es el currying?<\/h2>\n\n\n\n<p>El currying es una t\u00e9cnica que nos permite convertir una funci\u00f3n de m\u00faltiples argumentos en una secuencia de funciones de un solo argumento. En lugar de proporcionar todos los argumentos a la vez, podemos aplicar los argumentos de forma parcial y obtener una nueva funci\u00f3n que espera los argumentos restantes. Esta t\u00e9cnica toma su nombre del l\u00f3gico y matem\u00e1tico Haskell Curry, quien la populariz\u00f3.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Sintaxis b\u00e1sica<\/h2>\n\n\n\n<p>En Scala, podemos aplicar el currying a trav\u00e9s de la definici\u00f3n de funciones utilizando m\u00faltiples listas de argumentos. Veamos un ejemplo de c\u00f3mo se ver\u00eda la sintaxis:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: scala; title: ; notranslate\" title=\"\">\ndef suma(a: Int)(b: Int): Int = a + b\n<\/pre><\/div>\n\n\n<p>En este ejemplo, hemos definido una funci\u00f3n llamada <code>suma<\/code> que toma dos argumentos enteros y devuelve su suma. Sin embargo, la funci\u00f3n se ha definido de manera que se puede aplicar el currying para obtener una nueva funci\u00f3n que espera solo un argumento.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Uso de currying:<\/h2>\n\n\n\n<p>El currying nos permite crear funciones parcialmente aplicadas y reutilizables. Veamos algunos ejemplos de c\u00f3mo podemos utilizar el currying en Scala:<\/p>\n\n\n\n<p><strong>Aplicaci\u00f3n parcial de argumentos:<\/strong> Supongamos que tenemos una funci\u00f3n <code>multiplicar<\/code> que toma dos n\u00fameros y los multiplica entre s\u00ed. Podemos aplicar el currying a esta funci\u00f3n para crear una funci\u00f3n m\u00e1s especializada que multiplique un n\u00famero dado por cualquier otro n\u00famero:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: scala; title: ; notranslate\" title=\"\">\ndef multiplicar(a: Int)(b: Int): Int = a * b\n\nval multiplicarPorDos = multiplicar(2)_\n\nval resultado = multiplicarPorDos(5) \/\/ resultado: 10\n<\/pre><\/div>\n\n\n<p>En este ejemplo, hemos aplicado parcialmente la funci\u00f3n <code>multiplicar<\/code> con el valor <code>2<\/code> como primer argumento para crear una nueva funci\u00f3n <code>multiplicarPorDos<\/code> que espera solo un argumento. Luego, hemos utilizado esta nueva funci\u00f3n para multiplicar <code>5<\/code> por <code>2<\/code> y obtener el resultado <code>10<\/code>.<\/p>\n\n\n\n<p><strong>Composici\u00f3n de funciones:<\/strong><\/p>\n\n\n\n<p>El currying tambi\u00e9n nos permite componer funciones de manera m\u00e1s flexible. Veamos un ejemplo de c\u00f3mo podemos componer dos funciones utilizando el currying:<\/p>\n\n\n\n<p><\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: scala; title: ; notranslate\" title=\"\">\ndef suma(a: Int)(b: Int): Int = a + b\ndef multiplicarPorDos(a: Int): Int = a * 2\n\nval sumaYMultiplica = suma _ andThen multiplicarPorDos\n\nval resultado = sumaYMultiplica(2)(3) \/\/ resultado: 10\n<\/pre><\/div>\n\n\n<p>En este ejemplo, hemos definido dos funciones: <code>suma<\/code> y <code>multiplicarPorDos<\/code>. Luego, hemos utilizado el operador <code>_<\/code> para convertir la funci\u00f3n <code>suma<\/code> en una funci\u00f3n parcialmente aplicada. A continuaci\u00f3n, hemos utilizado el m\u00e9todo <code>andThen<\/code> para componer la funci\u00f3n <code>suma<\/code> con la funci\u00f3n <code>multiplicarPorDos<\/code>. Finalmente, hemos utilizado la funci\u00f3n compuesta <code>sumaYMultiplica<\/code> para sumar <code>2<\/code> y <code>3<\/code>, y luego multiplicar el resultado por <code>2<\/code>, obteniendo el resultado <code>10<\/code>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Conclusi\u00f3n:<\/h2>\n\n\n\n<p>El currying es una t\u00e9cnica poderosa que nos permite crear funciones m\u00e1s especializadas, reutilizables y flexibles. Al aplicar el currying, podemos crear funciones parcialmente aplicadas, lo que nos brinda m\u00e1s opciones para modularizar y componer nuestro c\u00f3digo. En Scala, el currying se logra mediante la definici\u00f3n de funciones utilizando m\u00faltiples listas de argumentos. Al dominar esta t\u00e9cnica, podemos mejorar la legibilidad, modularidad y expresividad de nuestro c\u00f3digo funcional en Scala.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>En el mundo de la programaci\u00f3n funcional, Scala nos brinda una poderosa t\u00e9cnica llamada &#8220;currying&#8221; que nos permite<\/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":[37,8],"class_list":["post-196","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-scala","tag-currying","tag-scala"],"_links":{"self":[{"href":"https:\/\/canessaalvamiguel.dev\/index.php\/wp-json\/wp\/v2\/posts\/196","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=196"}],"version-history":[{"count":1,"href":"https:\/\/canessaalvamiguel.dev\/index.php\/wp-json\/wp\/v2\/posts\/196\/revisions"}],"predecessor-version":[{"id":197,"href":"https:\/\/canessaalvamiguel.dev\/index.php\/wp-json\/wp\/v2\/posts\/196\/revisions\/197"}],"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=196"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/canessaalvamiguel.dev\/index.php\/wp-json\/wp\/v2\/categories?post=196"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/canessaalvamiguel.dev\/index.php\/wp-json\/wp\/v2\/tags?post=196"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}