Classes and Structs - Swift (parte 2)
Open Source Your Knowledge, Become a Contributor
Technology knowledge has to be shared and made accessible for free. Join the movement.
Classes e Structs 02 - Métodos
Métodos são funções associadas a classes, structs ou enums. Desse modo, os métodos definem um conjuto de operações que podem modificar os valores dos atributos. Também podem ser vistos como mensagens enviadas pelo programador de modo que um objeto possa modificar seu estado.
==> Veja que na classe abaixo existem 3 métodos (func é a palavra chave que os define). Veja que o código não executa por falta de implementação de um método. Você pode escrever esse método.
Labels e Parâmetros
No swift é comum estabelecer labels (rótulos) e nome de parâmetros nas funções e métodos. Isso deixa mais descritivo o código que modo que o programador saiba o que colocar em cada um dos parâmetros só na leitura da função e não apenas qual a sequencia de parâmetros a ser passada considerando os tipos.
Veja que nesse exmplo o método incremento tem um label "by" e um parâmetro "amount". Veja também como fica a chamada.
Por default o nome do parâmetro será também definido como nome do label caso o programador omita o nome do label, mas na chamada sempre deve ser usado o nome do label.
==> Você poderia criar um método chamado decrement e exemplificar uma chamada? Não esqueça de usar labels nos argumentos deste método
Vamos ver um exemplo de métodos com struct. Atenção para os labels x e y e os nomes de parâmetros deltaX e deltaY.
==> você poderia criar no método moveBy usar a referência do
Modificando Value Types com Métodos Instaciados
Você reparou no modificador "mutating" antes da palavra reservada func?
Estruturas e enumerações são tipos de valor. Por padrão, as propriedades de um tipo de valor não podem ser modificadas a partir de seus métodos de instância.
No entanto, se você precisar modificar as propriedades de sua estrutura ou enumeração em um método específico, poderá optar por alterar o comportamento desse método. O método pode então sofrer mutação (ou seja, alterar) suas propriedades de dentro do método, e quaisquer alterações feitas são gravadas de volta na estrutura original quando o método termina. O método também pode atribuir uma instância completamente nova à sua propriedade self implícita, e essa nova instância substituirá a existente quando o método terminar.
Então, por isso você deve usar o modificador "mutating" em métodos de structs e enums que precisam modificar um atributo. Isso não é necessário para classe porque classes são do tipo referência.
==> Você poder criar um método em que o programador pode alterar os valores de x e de y se o ponto (x,y) estiver na origem? Ou seja se os parâmetros x>0 e y>0 o método altera o self.x e o self.y senão nada é modificado. Lebra-se que o self é o objeto corrente, não lembra? Veja a aula anterior para revisar.
Vamos ver agora um exemplo com enums. ==>Você pode criar um método para fazer o ant(), ou seja, leva a lâmpada não para o próximo estado, mas para o anterior. Em seguida tente fazer mais instâncias do enum e então comente o código de modo a exeplicar o self.
Inicialização de Objetos e Tipo de Retorno de Métodos
Para criar um método de inicialização (construtor) basta usar a palavra reservada init. e para estabelecer método com tipo de retorno use o operador "->" mais o tipo após a declaração de parâmetros e usar o "return" para retorar o valor desejado. Veja o exemplo abaixo.
==> Você poder cirar um método que devlva a distância a origem (Double) de um determinado ponto? Use um dos tipos ponto que você já fez. Não esqueça que a distância da origem é uma aplicação do teorema de pitágoras. Recupere ai seus conhecimentos matemáticos e procure como calcular a raíz quadrada em Swift.