porque no exercicio 1 não utiliza o self e nos outros dois utiliza?
porque no exercicio 1 não utiliza o self e nos outros dois utiliza?
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:
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())")
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.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()
self
é usado no método recebePedido
para indicar que estamos modificando a propriedade numeroPedidos
do próprio objeto.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.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()
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
).calcularArea
e calcularPerimetro
, self
não é necessário porque não há ambiguidade, mas pode ser utilizado para clareza.self
: Quando não há ambiguidade e o código é claro sem ele.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.