Go Aller des interfaces d'un aspect mathématique


Exemple

En mathématiques, en particulier la théorie des ensembles , nous avons une collection de choses appelée ensemble et nous les appelons éléments . Nous montrons un ensemble avec son nom comme A, B, C, ... ou explicitement en mettant son membre sur la notation entre accolades: {a, b, c, d, e}. Supposons que nous ayons un élément arbitraire x et un ensemble Z. La question clé est: "Comment pouvons-nous comprendre que x est membre de Z ou non?". Mathématicien répond à cette question avec un concept: Propriété caractéristique d'un ensemble. Caractéristique La propriété d'un ensemble est une expression qui décrit l'ensemble. Par exemple, nous avons un ensemble de nombres naturels qui est {0, 1, 2, 3, 4, 5, ...}. Nous pouvons décrire cet ensemble avec cette expression: {a n | a 0 = 0, a n = a n-1 +1}. Dans la dernière expression a 0 = 0, a n = a n-1 +1 est la propriété caractéristique de l'ensemble des nombres naturels. Si nous avons cette expression, nous pouvons construire cet ensemble complètement . Soit décrire l'ensemble des nombres pairs de cette manière. Nous savons que cet ensemble est composé des nombres suivants: {0, 2, 4, 6, 8, 10, ...}. En un coup d'œil, nous comprenons que tous ces nombres sont aussi un nombre naturel , en d'autres termes, si nous ajoutons des conditions supplémentaires à la propriété caractéristique des nombres naturels, nous pouvons construire une nouvelle expression décrivant cet ensemble . On peut donc décrire avec cette expression: {n | n est un membre de nombres naturels et le rappel de n sur 2 est zéro}. Maintenant, nous pouvons créer un filtre qui obtient la propriété caractéristique d'un ensemble et filtrer certains éléments souhaités pour renvoyer des éléments de notre ensemble. Par exemple, si nous avons un filtre de nombres naturels, à la fois les nombres naturels et les nombres pairs peuvent passer ce filtre, mais si nous avons un filtre de nombres pairs, certains éléments comme 3 et 137871 ne peuvent pas passer le filtre.

La définition de l'interface dans Go est comme définir la propriété caractéristique et le mécanisme d'utilisation de l'interface car un argument d'une fonction est comme un filtre qui détecte que l'élément est un membre de notre ensemble souhaité ou non. Décrivons cet aspect avec le code:

type Number interface {
    IsNumber() bool // the implementation filter "meysam" from 3.14, 2 and 3
}

type NaturalNumber interface {
    Number
    IsNaturalNumber() bool // the implementation filter 3.14 from 2 and 3
}

type EvenNumber interface {
    NaturalNumber
    IsEvenNumber() bool // the implementation filter 3 from 2
}

La propriété caractéristique de Number est constituée de toutes les structures qui ont la méthode IsNumber . Pour NaturalNumber toutes les méthodes IsNaturalNumber méthodes IsNumber et IsNaturalNumber et enfin, pour EvenNumber toutes les méthodes IsEvenNumber méthodes IsNumber , IsNaturalNumber et IsEvenNumber . Grâce à cette interprétation de l'interface, nous pouvons facilement comprendre que l' interface{} ne possédant aucune propriété caractéristique, acceptez tous les types (car elle ne possède pas de filtre pour distinguer les valeurs).