"Si un ouvrier veut bien faire son travail, il doit d'abord affûter ses outils." - Confucius, "Les Entretiens de Confucius. Lu Linggong"
Page de garde > La programmation > Relation ou capacité, ces deux critères sont utilisés

Relation ou capacité, ces deux critères sont utilisés

Publié le 2024-11-08
Parcourir:834

Relationship or ability, both of these criteria are used

Dans la société, lors de l'évaluation des capacités et de la valeur d'une personne, il existe souvent deux critères différents : l'un est « basé sur les relations » et l'autre est « basé sur la capacité ». Les deux normes sont incarnées dans différentes cultures, secteurs et valeurs personnelles, chacune ayant ses propres partisans et détracteurs.

Dans les langages de programmation, il existe deux types de normes qui organisent le code de différentes manières, reliant les structures de données aux fonctions. Cet article abordera brièvement l'application et le principe d'action de ces deux normes communes.

modèle de classe

Dans le langage Javascript, le mot-clé class est fourni, que nous pouvons utiliser pour définir des classes. Il est important de noter que les classes sont extensibles et que lorsque des méthodes sont appelées sur une instance, elles recherchent les définitions de méthodes dans l'ordre de la chaîne de prototypes. Par exemple:


class Animal {
    move() { return 'move' }
}
class Monkey extends Animal {
    jump() { return 'jump' }
}
class Human extends Monkey {
    write() { return 'write' }
}


extends Les mots-clés peuvent nous aider à définir une nouvelle classe qui s'étend à partir d'autres classes. Nous pouvons obtenir la chaîne de prototypes comme ceci :


let me = new Human()
let proto = me.__proto__
let r = []

while (proto !== null) {
    r.push(proto.constructor.name)
    proto = proto.__proto__
}


Nous obtiendrons r comme ceci : ['Humain', 'Monkey', 'Animal', 'Object']. Lorsque nous appelons une méthode, le succès de l'appel de méthode dépend de l'existence ou non d'une définition correspondante sur la chaîne de prototypes. Par exemple, si vous appelez me.move(), il a une définition dans la classe Animal et l'appel réussit.

Il s'agit du modèle de classe, que j'aime appeler un modèle "relationnel", qui peut être appelé tant qu'il est défini dans la classe de l'instance elle-même, ou dans la classe parent, la classe grand-parent, etc. sur.

Modèle basé sur les compétences

Par rapport au modèle basé sur les relations, le modèle basé sur les compétences est beaucoup plus simple. Tant qu'une instance satisfait un certain trait, la méthode correspondante peut agir sur l'instance quelle que soit la relation de l'instance.


let me = {
    moveable: true,
    freezable: false
}

function move(x) { return x.moveable ? 'move' : undefined }
function freeze(x) { return x.freezable ? 'freeze' : undefined }


Dans ce modèle, les données et les méthodes sont indépendantes les unes des autres. L'avantage est qu'il est concis et simple, mais l'inconvénient est évident : en raison de l'indépendance de la méthode et des données, il est difficile de remplacer la définition de la méthode.

résumé

Après avoir présenté les deux manières de connecter les structures de données et les méthodes, on peut penser que lorsqu'il est nécessaire d'implémenter des méthodes avec des fonctions différentes du même nom selon la classe des données, il est recommandé d'utiliser le modèle de classe relationnelle . Lorsque la méthode est généralement relativement fixe et que les données sont variables et que la même méthode fonctionne sur des données différentes, le modèle basé sur les compétences peut être utilisé.

Déclaration de sortie Cet article est reproduit sur : https://dev.to/linjiezhang/relationship-or-ability-both-of-these-criteria-are-used-1dbd?1 En cas de violation, veuillez contacter [email protected] pour le supprimer
Dernier tutoriel Plus>

Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.

Copyright© 2022 湘ICP备2022001581号-3