Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Dúvida em exercicio - swift

1 resposta
solução!

Oii Jéssica, tudo bem?

A razão para a utilização ou não da palavra-chave self em diferentes contextos pode ser entendida com base nas características e necessidades específicas do código em questão. Vamos analisar cada caso separadamente:

Exercício 1: Calculadora

struct Calculadora {
  let numero1: Double
  let numero2: Double

  func soma() -> Double {
    return numero1 + numero2
  }

  func subtracao() -> Double {
    return numero1 - numero2
  }

  func divisao() -> Double {
    return numero1 / numero2
  }

  func multiplicacao() -> Double {
    return numero1 * numero2
  }
}

let calculadora = Calculadora(numero1: 6, numero2: 4)
print("Soma = \(calculadora.soma())")
print("Subtração = \(calculadora.subtracao())")
print("Divisão = \(calculadora.divisao())")
print("Multiplicação = \(calculadora.multiplicacao())")

Explicação:

  • Aqui, self não é necessário porque não há ambiguidade entre os nomes das propriedades e os parâmetros do método.
  • self é implícito e o código funciona corretamente sem ele.

Exercício 2: Restaurante

struct Restaurante {
  var nome: String
  var tipoComida: String
  var numeroPedidos: Int = 0

  mutating func recebePedido() {
    self.numeroPedidos += 1
  }

  func calculaTotalPedidos() -> Double {
    return 35.0 * Double(self.numeroPedidos)
  }
}

var restaurante = Restaurante(nome: "Restaurante da Gi", tipoComida: "Brasileira")
restaurante.recebePedido()
restaurante.recebePedido()
restaurante.calculaTotalPedidos()

Explicação:

  • self é usado no método recebePedido para indicar que estamos modificando a propriedade numeroPedidos do próprio objeto.
  • Em Swift, dentro de um método de instância, self é opcional quando não há ambiguidade, mas é necessário quando queremos enfatizar que estamos acessando ou modificando uma propriedade ou método da instância.

Exercício 3: Retângulo

class Retangulo {
  var base: Double
  var altura: Double

  init(base: Double, altura: Double) {
    self.base = base
    self.altura = altura
  }

  func calcularArea() -> Double {
    return base * altura
  }

  func calcularPerimetro() -> Double {
    return base * 2 + altura * 2
  }
}

let retangulo = Retangulo(base: 10, altura: 20)
retangulo.calcularArea()
retangulo.calcularPerimetro()

Explicação:

  • self é utilizado no inicializador init para diferenciar entre os parâmetros do método (base e altura) e as propriedades da classe (self.base e self.altura).
  • Dentro dos métodos calcularArea e calcularPerimetro, self não é necessário porque não há ambiguidade, mas pode ser utilizado para clareza.

Resumo:

  • Quando não usar self: Quando não há ambiguidade e o código é claro sem ele.
  • Quando usar self: Quando é necessário para diferenciar entre parâmetros e propriedades, ou quando é importante destacar que uma propriedade ou método específico está sendo acessado ou modificado.

O uso de self ajuda a evitar confusões, especialmente em inicializadores e quando se trabalha com propriedades mutáveis dentro de métodos que podem modificar o estado do objeto.

Um abraço e bons estudos.