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

def suma(a: Int, b: Int): Int = {
  a + b
}

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

def saluda(nom: String): Unit = {
  println(s"Hola, $nom!")
}

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

def quadrat(x: Int): Int = {
  x * x
}

println(quadrat(5)) // Imprimeix 25

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.

def maxim(a: Int, b: Int): Int = {
  // Implementa la funció aquí
}

Solució

def maxim(a: Int, b: Int): Int = {
  if (a > b) a else b
}

println(maxim(3, 7)) // Imprimeix 7

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.

class Cadena {
  def inverteix(cadena: String): String = {
    // Implementa el mètode aquí
  }
}

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.

© Copyright 2024. Tots els drets reservats