En aquest tema, explorarem les funcions i els mètodes en Scala. Les funcions són blocs de codi reutilitzables que poden ser cridats amb diferents arguments per realitzar una tasca específica. Els mètodes són similars a les funcions, però estan associats a objectes o classes.
Continguts
Definició de Funcions
En Scala, les funcions es defineixen amb la paraula clau def
, seguida del nom de la funció, els paràmetres entre parèntesis i el tipus de retorn després d'una fletxa (=>
). El cos de la funció es troba entre claus {}
.
def nomFuncio(paràmetre1: Tipus1, paràmetre2: Tipus2): TipusRetorn = { // Cos de la funció valorRetorn }
Exemple
En aquest exemple, suma
és una funció que pren dos enters com a paràmetres i retorna la seva suma.
Paràmetres i Tipus de Retorn
Les funcions poden tenir zero o més paràmetres, i el tipus de retorn pot ser qualsevol tipus de dades de Scala. Si una funció no retorna cap valor, el tipus de retorn és Unit
.
Exemple
En aquest exemple, saluda
és una funció que pren un paràmetre de tipus String
i no retorna cap valor (Unit
).
Funcions Recursives
Les funcions recursives són funcions que es criden a si mateixes. Per definir una funció recursiva en Scala, cal afegir la paraula clau @tailrec
per indicar que la funció és recursiva.
Exemple
@tailrec def factorial(n: Int, acumulador: Int = 1): Int = { if (n <= 1) acumulador else factorial(n - 1, n * acumulador) }
En aquest exemple, factorial
és una funció recursiva que calcula el factorial d'un nombre.
Mètodes
Els mètodes són similars a les funcions, però estan associats a objectes o classes. Es defineixen de la mateixa manera que les funcions, però dins d'una classe o objecte.
Exemple
class Calculadora { def suma(a: Int, b: Int): Int = { a + b } } val calc = new Calculadora() println(calc.suma(3, 4)) // Imprimeix 7
En aquest exemple, suma
és un mètode de la classe Calculadora
.
Exemples Pràctics
Exemple 1: Funció per calcular el quadrat d'un nombre
Exemple 2: Mètode per calcular la longitud d'una cadena
class Cadena { def longitud(cadena: String): Int = { cadena.length } } val c = new Cadena() println(c.longitud("Scala")) // Imprimeix 5
Exercicis
Exercici 1: Funció per calcular el màxim de dos nombres
Defineix una funció maxim
que prengui dos enters com a paràmetres i retorni el màxim dels dos.
Solució
Exercici 2: Mètode per invertir una cadena
Defineix un mètode inverteix
dins d'una classe Cadena
que prengui una cadena com a paràmetre i retorni la cadena invertida.
Solució
class Cadena { def inverteix(cadena: String): String = { cadena.reverse } } val c = new Cadena() println(c.inverteix("Scala")) // Imprimeix "alacS"
Conclusió
En aquesta secció, hem après a definir funcions i mètodes en Scala, a treballar amb paràmetres i tipus de retorn, i a implementar funcions recursives. També hem vist exemples pràctics i hem resolt exercicis per reforçar els conceptes apresos. En el proper tema, explorarem les funcions d'ordre superior, que ens permetran treballar amb funcions com a valors.
Curs de Programació en Scala
Mòdul 1: Introducció a Scala
- Introducció a Scala
- Configuració de l'Entorn de Desenvolupament
- Conceptes Bàsics de Scala: Sintaxi i Estructura
- Variables i Tipus de Dades
- Operacions Bàsiques i Expressions
Mòdul 2: Estructures de Control i Funcions
- Declaracions Condicionals
- Bucles i Iteracions
- Funcions i Mètodes
- Funcions d'Ordre Superior
- Funcions Anònimes
Mòdul 3: Col·leccions i Estructures de Dades
- Introducció a les Col·leccions
- Llistes i Arrays
- Conjunts i Mapes
- Tuples i Options
- Coincidència de Patrons
Mòdul 4: Programació Orientada a Objectes en Scala
- Classes i Objectes
- Herència i Traits
- Classes Abstractes i Classes Case
- Objectes Companys
- Objectes Singleton
Mòdul 5: Programació Funcional en Scala
- Immutabilitat i Funcions Pures
- Estructures de Dades Funcionals
- Monads i Functors
- For-Comprehensions
- Gestió d'Errors en la Programació Funcional
Mòdul 6: Conceptes Avançats de Scala
- Conversions i Paràmetres Implícits
- Classes de Tipus i Polimorfisme
- Macros i Reflexió
- Concurrència en Scala
- Introducció a Akka