{"id":154,"date":"2023-04-22T00:06:19","date_gmt":"2023-04-22T00:06:19","guid":{"rendered":"https:\/\/canessaalvamiguel.dev\/?p=154"},"modified":"2023-04-22T00:06:19","modified_gmt":"2023-04-22T00:06:19","slug":"pattern-matching-in-scala","status":"publish","type":"post","link":"https:\/\/canessaalvamiguel.dev\/index.php\/2023\/04\/22\/pattern-matching-in-scala\/","title":{"rendered":"Pattern matching in Scala"},"content":{"rendered":"\n<p>Pattern matching es una caracter\u00edstica poderosa de Scala que permite hacer coincidir valores y expresiones con patrones espec\u00edficos. Se puede usar para desestructurar valores complejos, como tuplas y listas, y para manejar diferentes casos de entrada en una funci\u00f3n. En este art\u00edculo, exploraremos algunos ejemplos de c\u00f3mo utilizar el pattern matching en Scala.<\/p>\n\n\n\n<p>El pattern matching en Scala se realiza con la sintaxis <code>match<\/code>, que se parece a una declaraci\u00f3n <code>switch<\/code> en otros lenguajes de programaci\u00f3n. La sintaxis b\u00e1sica es la siguiente:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: scala; title: ; notranslate\" title=\"\">\nval x = 1\n\nx match {\n  case 1 =&gt; println(&quot;x es uno&quot;)\n  case 2 =&gt; println(&quot;x es dos&quot;)\n  case _ =&gt; println(&quot;x es otro n\u00famero&quot;)\n}\n<\/pre><\/div>\n\n\n<p>En este ejemplo, el valor de la variable <code>x<\/code> se compara con cada uno de los patrones <code>case<\/code> definidos en la estructura <code>match<\/code>. Si <code>x<\/code> coincide con el patr\u00f3n <code>1<\/code>, se imprimir\u00e1 <code>\"x es uno\"<\/code>. Si <code>x<\/code> coincide con el patr\u00f3n <code>2<\/code>, se imprimir\u00e1 <code>\"x es dos\"<\/code>. Y si <code>x<\/code> no coincide con ning\u00fan patr\u00f3n, se imprimir\u00e1 <code>\"x es otro n\u00famero\"<\/code>.<\/p>\n\n\n\n<p>Adem\u00e1s de los valores literales, tambi\u00e9n podemos utilizar patrones m\u00e1s complejos para desestructurar valores complejos, como tuplas y listas. Por ejemplo:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: scala; title: ; notranslate\" title=\"\">\nval t = (1, &quot;hola&quot;)\n\nt match {\n  case (1, s) =&gt; println(s&quot;El segundo valor de la tupla es $s&quot;)\n  case (_, s) =&gt; println(s&quot;El segundo valor de la tupla es $s, pero el primer valor no es 1&quot;)\n}\n<\/pre><\/div>\n\n\n<p>En este ejemplo, el valor de la tupla <code>t<\/code> se compara con cada uno de los patrones <code>case<\/code>. Si el primer valor de la tupla es <code>1<\/code>, se imprimir\u00e1 el segundo valor de la tupla. De lo contrario, se imprimir\u00e1 el segundo valor de la tupla y un mensaje de advertencia.<\/p>\n\n\n\n<p>Otro uso com\u00fan del pattern matching en Scala es en la definici\u00f3n de funciones que manejan diferentes casos de entrada de manera diferente. Por ejemplo, podemos definir una funci\u00f3n que calcule el \u00e1rea de diferentes formas geom\u00e9tricas:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: scala; title: ; notranslate\" title=\"\">\nsealed trait Forma\ncase class Circulo(radio: Double) extends Forma\ncase class Rectangulo(ancho: Double, altura: Double) extends Forma\ncase class Cuadrado(lado: Double) extends Forma\n\ndef area(forma: Forma): Double = forma match {\n  case Circulo(r) =&gt; math.Pi * r * r\n  case Rectangulo(a, h) =&gt; a * h\n  case Cuadrado(l) =&gt; l * l\n}\n<\/pre><\/div>\n\n\n<p>En este ejemplo, definimos tres clases de caso (<code>Circulo<\/code>, <code>Rectangulo<\/code> y <code>Cuadrado<\/code>) que extienden una clase sellada (<code>Forma<\/code>). Luego, definimos una funci\u00f3n <code>area<\/code> que toma una forma como entrada y devuelve su \u00e1rea correspondiente utilizando el pattern matching.<\/p>\n\n\n\n<p>En resumen, el pattern matching es una caracter\u00edstica poderosa de Scala que permite hacer coincidir valores y expresiones con patrones espec\u00edficos. Puede ser utilizado para desestructurar valores complejos y manejar diferentes casos de entrada en una funci\u00f3n. Con una sintaxis clara y concisa, el pattern matching es una herramienta fundamental en el arsenal de cualquier desarrollador de Scala.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Pattern matching es una caracter\u00edstica poderosa de Scala que permite hacer coincidir valores y expresiones con patrones espec\u00edficos.<\/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":[34,8],"class_list":["post-154","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-scala","tag-patter-matching","tag-scala"],"_links":{"self":[{"href":"https:\/\/canessaalvamiguel.dev\/index.php\/wp-json\/wp\/v2\/posts\/154","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=154"}],"version-history":[{"count":3,"href":"https:\/\/canessaalvamiguel.dev\/index.php\/wp-json\/wp\/v2\/posts\/154\/revisions"}],"predecessor-version":[{"id":157,"href":"https:\/\/canessaalvamiguel.dev\/index.php\/wp-json\/wp\/v2\/posts\/154\/revisions\/157"}],"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=154"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/canessaalvamiguel.dev\/index.php\/wp-json\/wp\/v2\/categories?post=154"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/canessaalvamiguel.dev\/index.php\/wp-json\/wp\/v2\/tags?post=154"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}